New to Kestra?
Use blueprints to kickstart your first workflows.
Automate a daily news briefing with Kestra and OpenAI. Fetch RSS feeds in parallel, filter recent articles, and deliver an AI-curated digest to Slack and email.
Automate a daily news briefing that pulls articles from any set of RSS feeds, filters them to the most recent 48 hours, and uses OpenAI GPT-4o-mini to write a focused, multi-language digest delivered to Slack and email every morning. This blueprint replaces manual news browsing and scattered newsletters with a single, AI-curated summary, solving the problem of information overload for engineering teams, founders, and analysts who need to stay current without reading dozens of sources by hand.
morning_digest trigger (io.kestra.plugin.core.trigger.Schedule) fires daily at 07:00 UTC via the cron expression 0 7 * * *.fetch_feeds task (io.kestra.plugin.core.flow.ForEach) iterates over the rss_feeds input with a concurrencyLimit of 4, fetching each feed in parallel with io.kestra.plugin.core.http.Request over GET.parse_and_summarize task (io.kestra.plugin.scripts.python.Script) installs the feedparser dependency, parses the raw feed bodies, keeps up to max_articles per feed, drops anything older than 48 hours, caps the result at 20 articles, and emits them via Kestra.outputs.generate_digest task (io.kestra.plugin.openai.ChatCompletion) sends the normalized articles to gpt-4o-mini with a system prompt driven by the digest_language and digest_topic_focus inputs, producing a structured digest with key themes, top stories, and trends to watch.send_to_slack task (io.kestra.plugin.slack.notifications.SlackIncomingWebhook) posts the digest to a Slack channel, and send_email_digest (io.kestra.plugin.email.MailSend) delivers a formatted HTML email over SMTP on port 465.OpenAI has no scheduler, no retry logic, and no way to fan out HTTP fetches or chain a Python parse step into a model call and multi-channel delivery. Kestra wraps the whole pipeline in declarative YAML: an event-driven Schedule trigger runs it every morning, ForEach parallelizes feed retrieval, retries and execution history give you reliability and full lineage across every task, and inputs make language, topic, and feed list configurable without editing code. The model call becomes one observable step in an auditable, end-to-end workflow rather than an isolated API request.
gpt-4o-mini.OPENAI_API_KEY: OpenAI API key for the ChatCompletion task.SLACK_WEBHOOK_URL: Slack incoming webhook URL for digest delivery.DIGEST_EMAIL_FROM: sender address for the HTML email.DIGEST_EMAIL_TO: recipient address for the HTML email.SMTP_HOST: SMTP server host.SMTP_USERNAME: SMTP authentication username.SMTP_PASSWORD: SMTP authentication password.rss_feeds, max_articles, digest_language, and digest_topic_focus inputs to taste.gpt-4o-mini for a larger model when you need richer analysis.