New to Kestra?
Use blueprints to kickstart your first workflows.
Announce open data releases on Bluesky automatically with Kestra. The flow verifies the dataset URL, posts the announcement, and confirms it in Slack.
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.
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.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.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.confirm_internally posts the dataset, period, and execution id to Slack, so the data team sees every public announcement.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.monthly_release Schedule trigger shows how to announce recurring drops automatically once the inputs are fed from your pipeline.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.
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.verify_dataset with your actual publication task, or chain this flow after your data pipeline.customFields entries.