Schedule a Daily AI News Digest to Slack with n8n
Every morning, your team Slack fills up — standups, PR reviews, random GIFs. Important industry news gets buried or skipped entirely. The fix is a workflow that does the reading for you: fetch a handful of RSS feeds, let an AI model summarize and rank the stories, and post a clean digest to the channel before anyone opens their laptop.
This guide walks through building exactly that in n8n, step by step. The workflow is seven nodes. It takes about 20 minutes to configure. Once it is running, it runs forever.
What You Are Building
A scheduled n8n workflow that:
- Fires every weekday morning at a time you choose
- Pulls items from multiple RSS feeds in parallel
- Deduplicates and filters out weekend noise
- Sends a batch of headlines to an AI node for summarization and ranking
- Posts the finished digest to a Slack channel as a formatted message
The output in Slack looks something like:
AI & Tech Digest — Friday 13 Jun
1. Anthropic releases Claude 4 with extended context — Major capability jump; worth reading if you work with long documents. [link]
2. Google DeepMind paper on agent planning — Dense but the conclusions section is accessible. [link]
3 more stories this week — [full feed]
Node-by-Node Build
1. Schedule Trigger
Add a Schedule Trigger node. Set it to Cron mode.
Cron expression: 0 7 * * 1-5
This fires at 07:00 UTC Monday through Friday. Adjust the hour for your timezone — if your team is in Istanbul (UTC+3), 0 4 * * 1-5 delivers at 07:00 local time. Leave the node's Timezone field blank and handle offset in the expression to avoid DST surprises.
2. RSS Feed Read (×N)
Add one RSS Feed Read node per source. Some reliable, low-noise feeds to start with:
| Source | Feed URL |
|---|---|
| MIT Tech Review | https://www.technologyreview.com/feed/ |
| The Verge AI | https://www.theverge.com/rss/ai-artificial-intelligence/index.xml |
| Hacker News best | https://hnrss.org/best |
| Product Hunt AI | https://www.producthunt.com/feed?category=artificial-intelligence |
Set Limit to 10 on each node. You do not need 200 headlines — the AI will struggle to rank them usefully, and Slack posts get long fast.
Connect all RSS nodes to a Merge node set to Append mode. This concatenates the arrays from every feed into one flat list.
3. IF Node — Filter Stale Items
The Merge output may contain items published days ago (some feeds cache aggressively). Add an IF node:
- Condition:
{{ $json.isoDate }}is after{{ $now.minus(1, 'day').toISO() }}
Items older than 24 hours are routed to the false branch, which you can leave unconnected (they are dropped). Only fresh items continue.
4. Aggregate (Code Node)
Rather than feeding each article to the AI one at a time — which burns more credits and produces disjointed output — aggregate all headlines into a single payload first.
Add a Code node (JavaScript) and run it Once for All Items:
const items = $input.all();
const headlines = items.map((item, i) => {
return `${i + 1}. ${item.json.title} — ${item.json.link}`;
}).join('\n');
return [{ json: { headlines, count: items.length } }];
This produces one item with a headlines string containing every title and URL, numbered.
5. AI / LLM Node — Summarize and Rank
Add an AI node (the Chat Model node in n8n's AI section).
- Model: Choose any model from the dropdown. A fast, lower-cost model works well here; you do not need maximum capability for headline summarization.
- Messages → User: paste this prompt, referencing the aggregated field:
You are a senior editor curating a morning digest for a tech team.
Below is a numbered list of today's news headlines and links.
{{ $json.headlines }}
Tasks:
1. Pick the 5 most significant or interesting stories for a team that builds AI products.
2. For each, write ONE sentence explaining why it matters (max 20 words).
3. Output in this exact format (Markdown):
**1. [Title]** — [one-sentence take] [URL]
**2. [Title]** — [one-sentence take] [URL]
...
Do not invent information. If a title is unclear, say so honestly.
Keep the prompt tight. Loose prompts produce verbose output that renders badly in Slack.
6. Set Node — Build the Slack Message
Add a Set node to assemble the final message string:
- Field name:
slackMessage - Value:
*AI & Tech Digest — {{ $now.toFormat('cccc d LLL') }}*
{{ $('AI Node').item.json.text }}
_Sourced from {{ $('Code').item.json.count }} articles across {{ feeds.length }} feeds — built with n8n on AgentRoost_
Wrap the date in *asterisks* for Slack bold. Use _underscores_ for italics. The text field from the AI node contains the formatted ranking the model returned.
7. Slack Node — Post to Channel
Add a Slack node:
- Resource: Message
- Operation: Post
- Channel:
#team-digest(or whatever channel name you use) - Text:
{{ $json.slackMessage }} - Other Options → Markdown: enable this — without it, Slack ignores the formatting.
Connect the Slack node's credentials to your workspace's Slack app (you will need to create one in the Slack API dashboard and grant chat:write scope). The connection takes about 3 minutes the first time.
Handling Edge Cases
What if a feed is down? Wrap each RSS Read node with n8n's built-in Error Trigger or set On Error to Continue so one dead feed does not abort the whole workflow.
What if the AI returns gibberish? Add an IF node after the AI step that checks {{ $json.text.length > 100 }}. Route short responses to a fallback Slack message: "Digest generation failed today — check the workflow run log." This prevents a blank or malformed message from going out silently.
Deduplication across runs: If the same story appears in two feeds, the AI usually merges them naturally in the ranking. For exact deduplication across workflow runs, store published URLs in a Redis node or n8n's built-in Static Data using $getWorkflowStaticData('global').
Run It on AgentRoost
The workflow above works on any n8n instance. The challenge with self-hosting is keeping it alive: a laptop that sleeps through the trigger, a VPS you forget to renew, or a Docker container that needs restarting after a kernel update.
On AgentRoost you get your own n8n instance — your login, your workflows, your data — running on always-on dedicated hardware. The Schedule Trigger fires at exactly 07:00 every weekday regardless of what else is happening. More importantly, AI/LLM credits are included in the subscription, so the Chat Model node just works. No OpenAI account, no Anthropic console, no API key to paste anywhere. Pick a model from the dropdown and write your prompt.
How to set it up:
- Create an account at agentroost.app
- Pick the n8n framework, name your instance
- Your private n8n editor opens at
https://<your-id>.agentroost.app - Import the workflow above (paste as JSON or build node by node)
- Configure your Slack credential once — done
Plans start at $19.99/mo all-in (compute + AI credits + HTTPS + no setup overhead). There is a 14-day money-back guarantee, so you can build and test the entire workflow before committing.
Get started with n8n on AgentRoost — or compare plans if you want to see the credit tiers side by side.
Tips Before You Ship
- Test with a manual trigger first. Disable the Schedule Trigger, hit Execute Workflow, and verify the Slack message renders before you go live.
- Keep the feed list short. Four to six sources is the sweet spot. More feeds → more noise → the AI starts hallucinating relevance.
- Add a weekend gate. Even though the cron skips Saturday and Sunday, if you deploy on a Friday afternoon you may want an extra IF node:
$now.weekday < 6→ continue, else → stop. - Rotate models occasionally. The included credits cover a wide range of models. If the digest starts feeling repetitive, switch the Chat Model node to a different provider — no credential change needed.
Frequently asked questions
Do I need an OpenAI API key to use the AI node in this workflow?
No. On AgentRoost, AI/LLM credits are included in your subscription. The AI nodes in your n8n instance are already wired to those credits — just drop in the node and write your prompt. No external API key required.
What happens if my server is off when the schedule fires?
On a self-hosted instance you manage yourself, a sleeping machine means a missed run. On AgentRoost your n8n instance runs on always-on hardware, so the Schedule Trigger fires at exactly the time you set, every day, without you doing anything.
Can I point this at more than one RSS feed or Slack channel?
Yes. Use multiple RSS Feed Read nodes (or a SplitInBatches loop over a list of URLs) and connect the output to as many Slack nodes as you need. You can also use an IF node to route AI/ML stories to one channel and business news to another.
Can I cancel if I decide the workflow is not worth it?
AgentRoost plans are monthly with no long-term commitment. Cancel any time from your account dashboard. There is also a 14-day money-back guarantee, so you can build and test the workflow risk-free.
How do I export my workflows if I ever want to move them elsewhere?
n8n has a built-in export feature. Go to your workflow, click the menu (three dots), and choose Download. You get a JSON file you can import into any other n8n instance. Your data stays yours.