Request icon
BlueskyExecution icon
SlackIncomingWebhook icon
Schedule icon

Announce Open Data Releases on Bluesky with a Verified Link

Announce open data releases on Bluesky automatically with Kestra. The flow verifies the dataset URL, posts the announcement, and confirms it in Slack.

Categories
Business

Open data programs live or die by whether anyone knows a new drop exists. This blueprint makes the announcement part of the release itself: once the dataset is published, the flow first verifies that the public URL actually responds, then io.kestra.plugin.bluesky.BlueskyExecution posts an execution-notification skeet carrying the dataset name, period, and link, and Slack confirms internally that the release is now public on both channels. Bluesky's research, civic tech, and data communities follow open data accounts directly, which makes it a natural home for these announcements.

The verification step earns its place because the skeet is public and permanent enough to matter. Announcing a link that 404s wastes the audience's trust, so the flow refuses to post until the URL returns successfully, and any wording a human should approve belongs in the flow definition, not in last-minute edits. The post itself is transparently automated. It opens with the execution state and flow id and closes with a link to the execution, which fits an open data program that values showing the pipeline behind each release.

How it works

  1. verify_dataset (io.kestra.plugin.core.http.Request) requests the public dataset URL. It stands in for your real publication task and doubles as a guard, because a failed request stops the flow before anything is posted.
  2. post_announcement (io.kestra.plugin.bluesky.BlueskyExecution) authenticates with the handle and app password from secrets and posts the announcement, carrying the dataset name and period in customMessage and the verified link as a customFields entry.
  3. The plugin always renders its built-in execution template: the post opens with the execution state and flow id, for example RUNNING: company.team/bluesky-data-drop-announcement, then the custom message, a dataset: <url> line from the custom fields, and a closing link to the execution in the Kestra UI. Bluesky's 300-grapheme limit applies to that whole rendered post, so dataset names should stay short and descriptive.
  4. confirm_internally posts the dataset, period, and execution id to Slack, so the data team sees every public announcement.
  5. The errors block raises a distinct Slack alert whether the URL check or the Bluesky post failed, because a published but unannounced dataset is easy to miss.
  6. The disabled monthly_release Schedule trigger shows how to announce recurring drops automatically once the inputs are fed from your pipeline.

What you get

  • Data drop announcements that go out with the release, not days later when someone remembers.
  • A link check before every post, so the community never receives a dead URL.
  • One consistent announcement format across every dataset and period.
  • An internal Slack confirmation and a failure alert, so the public state of each release is always known.

Who it's for

  • Open data teams at public agencies, research groups, and companies publishing datasets on a cadence.
  • Data engineers who want the announcement to be the final task of the publication pipeline.
  • Developer relations teams announcing datasets, benchmarks, or model artifacts to a Bluesky audience.

Why orchestrate this with Kestra

A publish script that ends with a curl to a social API checks nothing, retries nothing, and tells nobody when it fails. In Kestra the announcement is a pipeline step with the same guarantees as the publication itself: the URL is verified first, the app password stays in the secret store, every post is an auditable execution, a transient Bluesky error is retryable, and a failure alerts Slack instead of disappearing. Swapping the stand-in verification task for your real publication task turns this blueprint into the tail end of the actual data pipeline.

Prerequisites

  • A Bluesky account for the data program and an app password created under Settings, never the account password.
  • A publicly reachable URL where each dataset is published.
  • A Slack incoming webhook for the internal data channel.

Secrets

  • BLUESKY_IDENTIFIER: the Bluesky handle, for example yourdata.bsky.social.
  • BLUESKY_APP_PASSWORD: an app password generated in Bluesky settings.
  • SLACK_WEBHOOK_URL: Slack incoming webhook URL.

Quick start

  1. Add the three secrets to your Kestra namespace.
  2. Execute the flow manually with a real dataset name, period, and URL, and check the skeet on your Bluesky profile and the Slack confirmation.
  3. Replace verify_dataset with your actual publication task, or chain this flow after your data pipeline.
  4. Enable the Schedule trigger, or call the flow as a subflow from the pipeline, once the inputs come from real outputs.

How to extend

  • Announce releases and articles through webhook-driven variants of this pattern, as shown in the release notes and blog announcer blueprints.
  • Roll several drops into a periodic summary, as shown in the changelog digest blueprint.
  • Add row counts or file sizes to the announcement by passing them as extra inputs from the pipeline and surfacing them as additional customFields entries.
  • Gate sensitive datasets behind a human approval before posting, as shown in the incident status blueprint.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.