Build a Free AI Weekly Digest: Automate Your Research Reading with n8n
Stop manually skimming dozens of sources every week. This tutorial shows you how to build a free automated digest that pulls from RSS feeds, summarizes each item with AI, and emails you a clean briefing every Monday morning.
Every solo founder has some version of the same problem: there are ten or twenty sources you should read each week, you rarely read them, and when you do, you spend more time deciding what matters than actually absorbing anything useful.
This tutorial walks you through building a workflow that solves it. By the end you will have a free automated pipeline that collects articles from any RSS feeds you choose, summarizes each one with AI, and sends you a single digest email every Monday morning. The whole setup takes about an hour and runs on the free tiers of two tools.
The tools you need: n8n (workflow automation), OpenRouter (free AI inference), and any email service you already use. No coding required.
What you are building
The workflow does four things on a schedule:
- Pulls the latest items from a list of RSS feeds
- Filters out anything older than seven days
- Sends each article title and description to an AI model for a two-sentence summary
- Bundles the summaries into a single HTML email and delivers it to your inbox
Once it is running, you get a clean Monday briefing with no manual effort. You can extend it later: add Slack delivery, filter by keyword, score items by relevance, or pipe the output into Notion.
Step 1: Set up n8n
Go to n8n.io and create a free cloud account. The free plan gives you 2,500 workflow executions per month, which is more than enough for a weekly digest.
Once you are in, click New Workflow and give it a name like "Weekly AI Digest."
You will build this workflow by adding nodes. Each node is one step in the pipeline. You add a node by clicking the + button on the canvas.
Step 2: Add the schedule trigger
Click + and search for Schedule Trigger. Add it to the canvas.
Configure it like this:
- Trigger interval: Week
- Day of week: Monday
- Hour: 7
- Minute: 0
This tells n8n to run the workflow every Monday at 7am in your account's timezone. You can change the day and time to whatever suits you.
Step 3: Add your RSS feeds
Click + after the trigger and search for the RSS Read node.
In the node settings:
- URL: paste in the URL for one RSS feed (for example,
https://feeds.feedburner.com/TechCrunchor the RSS feed from any blog you follow)
To add multiple feeds, you use a different approach. Before the RSS node, add a Code node (search for "Code" in the node list). Set the language to JavaScript and paste in this block:
return [
{ json: { url: "https://hnrss.org/frontpage" } },
{ json: { url: "https://feeds.feedburner.com/TechCrunch" } },
{ json: { url: "https://www.stratechery.com/feed/" } },
];
Replace the URLs with the feeds you actually want. Each line is one feed. You can add as many as you like, but keep in mind that more feeds means more AI calls, which uses more of your free quota.
Connect the Code node to an RSS Read node. In the RSS Read node, set the URL field to an expression: click the expression toggle and type {{ $json.url }}. This tells the node to use the URL from the previous step rather than a hardcoded value.
Step 4: Filter by date
After the RSS Read node, add an IF node. This filters out old articles so your digest only includes items from the past seven days.
Configure the condition:
- Value 1:
{{ $json.isoDate }}(this is the article's publication date, as an expression) - Operation: is after
- Value 2:
{{ $now.minus(7, "days").toISO() }}
Connect the true output of the IF node to the next step. Items older than seven days will be discarded.
Step 5: Summarize with AI
This is the step where AI does the heavy lifting. You will use OpenRouter, which gives you free access to several capable models including Meta's Llama 3 and Google's Gemma.
First, get a free API key from openrouter.ai. Sign up, go to Keys, and create a new key. Copy it.
Back in n8n, add an HTTP Request node after the IF node's true output. Configure it as follows:
- Method: POST
- URL:
https://openrouter.ai/api/v1/chat/completions - Authentication: Header Auth
- Name: Authorization
- Value:
Bearer YOUR_API_KEY_HERE
- Body Content Type: JSON
- Body: click JSON/RAW Parameters and paste this:
{
"model": "meta-llama/llama-3.1-8b-instruct:free",
"messages": [
{
"role": "user",
"content": "Summarize the following article in exactly two sentences. Be specific. Do not use vague language.\n\nTitle: {{ $json.title }}\n\nDescription: {{ $json.contentSnippet }}"
}
]
}
The model meta-llama/llama-3.1-8b-instruct:free is free on OpenRouter with no usage limits (rate limits apply, but you will not hit them with a weekly digest). If you want sharper summaries, swap it for google/gemma-3-27b-it:free.
After this node, add a Set node to extract the summary from the API response and attach it to the article data. In the Set node, create a new field:
- Name:
summary - Value:
{{ $json.choices[0].message.content }}
This makes the summary available in later steps.
Step 6: Aggregate all summaries
At this point in the workflow, you have one item per article, each with a title, URL, and summary. You need to combine them into a single email.
Add a Merge node (search "Merge") or, more simply, an Aggregate node. The Aggregate node collects all items from the loop into a single array.
After the Aggregate node, add a Code node to build the HTML email body:
const items = $input.all();
const rows = items.map(item => {
const title = item.json.title || "Untitled";
const url = item.json.link || "#";
const summary = item.json.summary || "No summary available.";
return `<h3><a href="${url}">${title}</a></h3><p>${summary}</p><hr>`;
});
const html = `
<h2>Your Weekly AI Digest</h2>
<p>Here are this week's highlights from your feeds:</p>
${rows.join("\n")}
<p style="color: #999; font-size: 12px;">Generated automatically. Unsubscribe by turning off the workflow.</p>
`;
return [{ json: { emailBody: html, itemCount: items.length } }];
Step 7: Send the email
Add an Email Send node (or use Gmail, Outlook, or Postmark nodes depending on what you have available).
For a simple Gmail setup: add the Gmail node, connect your Google account following the prompts, and configure it as follows:
- To: your email address
- Subject:
Weekly Digest: {{ $now.toFormat("MMM d") }} - Email Type: HTML
- HTML:
{{ $json.emailBody }}
If you prefer a plain SMTP connection, use the Email Send node instead and enter your SMTP credentials.
Step 8: Test the workflow
Before you leave the workflow running on a schedule, test it manually. Click Execute Workflow in the top toolbar.
Watch each node execute in sequence. If the RSS Read node returns no items, check that the feed URL is correct by pasting it into a browser. If the HTTP Request node fails with a 401, double-check your OpenRouter API key. If the Email node fails, verify your email credentials and that your account allows SMTP access.
Once the test run completes without errors, check your inbox. You should have an email with summaries of recent articles from your feeds.
Step 9: Activate the workflow
Click the toggle at the top of the n8n editor to set the workflow to Active. From this point, it will run automatically every Monday at 7am.
n8n's free cloud plan stores workflow execution history for seven days. You can check past runs by clicking the clock icon next to the workflow name. This is useful for debugging if an execution fails silently.
What to adjust once it is running
Change the feeds. The Code node in Step 3 is the only place you need to edit to add or remove sources. Add a line for each new feed.
Change the model. Swap the model slug in the HTTP Request node to try different options. OpenRouter lists all free models at openrouter.ai/models. Filter by "free" to see current options.
Change the prompt. The summary quality depends directly on the prompt. If you want bullet points instead of prose, change the instruction. If you want the AI to flag items relevant to a specific topic, add that to the prompt.
Add a keyword filter. After the IF date filter, add a second IF node that checks whether the title or description contains a keyword you care about. This narrows the digest to only the most relevant items.
Deliver to Slack instead of email. Replace the email node with the Slack node and point it at a channel. Useful if you check Slack more reliably than email.
The cost
Free, with caveats. The n8n cloud free plan covers 2,500 executions per month. A weekly digest that processes 50 articles uses roughly 50 executions per run, which comes to about 200 per month. Well within the limit.
OpenRouter's free models have rate limits but no hard credit cap. For a weekly workflow processing fewer than 100 articles, you will not get close to hitting them.
If your feed list grows and you start processing hundreds of articles per week, you may need to upgrade n8n to a paid plan (starting at $24/month) or move to self-hosted n8n, which is free to run on any server.
Where to go from here
This workflow is a starting point. The same pattern (collect, filter, summarize, deliver) works for a lot of other problems:
- Monitor job boards and summarize new listings in your niche
- Track competitor blog posts and flag posts mentioning specific topics
- Aggregate customer feedback from multiple sources into a weekly review
- Pull recent GitHub activity from repositories you follow
The underlying structure stays the same. What changes is where the data comes from, what the AI is asked to do with it, and where the output goes.
Building a single workflow that saves you an hour of reading each week is a small win. Building ten of them starts to look like an autonomous research operation.
AutonomousHQ is a live experiment in running an AI-first company without a traditional team. Tim documents what works, what breaks, and what the numbers look like on YouTube. The newsletter covers the operational lessons weekly.