How to Build an AI Newsletter That Writes Itself (2026 Guide)
RSS feeds go in. AI filters, summarizes, and formats. A newsletter comes out. Set it up once, it runs forever. Here's the exact n8n workflow with code.
A weekly AI newsletter used to require a human curator: scan 50+ sources, pick the 10 best stories, write summaries, format the email, hit send. Four hours every Sunday.
An AI newsletter requires you to build a workflow once. It runs every week while you sleep.
Here is the exact setup: the tools, the automation pipeline, the code, and the cost.
---
The Pipeline
```
RSS sources → deduplicate → AI filter (keep only good stories)
→ AI summarize + categorize → HTML email → send on schedule
```
Six steps. All automated.
---
The Stack
| Role | Tool | Cost |
|---|---|---|
| Automation engine | n8n (self-hosted) | Free (open source) |
| AI processing | OpenAI API or Claude API | ~$5-10/month |
| Email sending | Resend | Free (3,000 emails/month) |
| RSS sources | Free | $0 |
| Total monthly cost | $5-10 |
---
Step 1: Set Up n8n
n8n is like Zapier but open source. Visual drag-and-drop automation. You can self-host it on a $5/month VPS or use n8n.cloud.
Quick start:
```bash
docker run -d --name n8n -p 5678:5678 n8nio/n8n
```
Open `localhost:5678`. Create an account. You're looking at a blank canvas.
---
Step 2: Add RSS Sources
Collect 5-10 RSS feeds in your niche. Quality over quantity. Ten good sources beat 50 mediocre ones.
Example AI news sources:
```
TechCrunch AI: https://techcrunch.com/category/artificial-intelligence/feed/
The Verge AI: https://www.theverge.com/ai-artificial-intelligence/rss/index.xml
VentureBeat AI: https://venturebeat.com/category/ai/feed/
ArXiv AI: https://rss.arxiv.org/rss/cs.AI
HuggingFace Blog: https://huggingface.co/blog/feed.xml
```
In n8n: add an RSS Feed Read node for each source. Connect them all to a Merge node. You now have a unified feed of everything published in your niche today.
---
Step 3: Deduplicate
The same story appears across multiple sources. Fix that.
Add a Code node after Merge. Paste this:
```javascript
const seen = new Set();
const items = $input.all();
const deduped = [];
for (const item of items) {
const url = item.json.url || item.json.link;
if (url && !seen.has(url)) {
seen.add(url);
deduped.push(item);
}
}
return deduped;
```
30 articles in. 15 unique out. The duplicates are gone.
---
Step 4: AI Filter — Keep Only the Good Stories
Not every article belongs in a newsletter. AI decides what to keep.
Add an OpenAI node (or Anthropic Claude). Use this system prompt:
```
You are a professional newsletter editor. Decide whether
each article below deserves inclusion.
Include if: major product launch, funding announcement,
breakthrough research, useful tool release, policy change.
Exclude if: PR fluff, rehashed news, no substance.
Return ONLY JSON (no markdown):
{"include": true/false, "reason": "one sentence", "importance": 1-5}
```
Wrap this in an n8n Loop Over Items node so each article gets its own AI check. The loop processes one article at a time, avoiding API rate limits.
After the loop, add a filter: only pass through items where `include === true` and `importance >= 3`.
---
Step 5: AI Summarize and Categorize
The surviving articles need summaries. Second AI node:
```
Rewrite this article as a newsletter blurb. Return ONLY JSON:
{
"title": "compelling headline (under 12 words)",
"summary": "one paragraph explaining what happened and why it matters (under 80 words)",
"category": "Tool Launch / Funding / Research / Policy / Tutorial"
}
```
Each article now has: a punchy headline, a one-paragraph summary, and a category label.
---
Step 6: Generate the Email
Add a Code node to build the HTML. Here is a clean template:
```javascript
const items = $input.all();
const date = new Date().toLocaleDateString('en-US', {
weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'
});
let html = `
<div style="max-width:600px;margin:0 auto;font-family:Arial,sans-serif">
<h1 style="color:#1a1a2e;border-bottom:3px solid #6366F1;padding-bottom:12px">
AI Weekly Brief — ${date}
</h1>
<p style="color:#666">${items.length} stories worth your time</p>
`;
// Group by category
const cats = {};
for (const item of items) {
const cat = item.json.category || 'Other';
if (!cats[cat]) cats[cat] = [];
cats[cat].push(item);
}
for (const [cat, stories] of Object.entries(cats)) {
html += `<h2 style="color:#6366F1;margin-top:24px">${cat}</h2>`;
for (const s of stories) {
html += `
<div style="margin:12px 0;padding:12px;background:#F5F3FF;border-radius:8px">
<a href="${s.json.url}" style="color:#1a1a2e;font-weight:600;text-decoration:none;font-size:15px">
${s.json.title}
</a>
<p style="color:#555;font-size:13px;margin:6px 0 0">${s.json.summary}</p>
</div>`;
}
}
html += `
<hr style="border:none;border-top:1px solid #eee;margin:24px 0">
<p style="color:#999;font-size:12px;text-align:center">
This newsletter is AI-curated. Reply anytime with feedback.
</p></div>`;
return [{ json: { html, subject: `AI Weekly Brief — ${date}` } }];
```
---
Step 7: Send on Schedule
Add a Resend node (or Gmail, SendGrid). Configure:
- To: your subscriber list (or a Google Sheet for dynamic lists)
- Subject: `{{ $json.subject }}`
- HTML Body: `{{ $json.html }}`
Add a Schedule Trigger at the start of the workflow:
| Frequency | Cron |
|---|---|
| Daily at 8 AM | `0 8 * * *` |
| Every Monday 8 AM | `0 8 * * 1` |
Click Activate. Done. Your newsletter now writes itself.
---
The Monetization
| Subscribers | Revenue Source | Monthly Income |
|---|---|---|
| 0-500 | Free (building audience) | $0 |
| 500-2,000 | Single sponsorship slot | $100-300/issue |
| 2,000-10,000 | Sponsorships + affiliate links | $500-2,000/month |
| 10,000+ | Primary sponsorship + classifieds | $2,000-10,000/month |
Weekly newsletter × 1 sponsor per issue × $200 sponsor rate at 2,000 subscribers = $800/month, from a workflow you built once.
---
FAQ
Q: Do I need coding skills?
A: Basic JavaScript helps for the dedup and HTML nodes, but the templates above are copy-paste ready. The rest is drag-and-drop.
Q: How is this different from just using an AI to write?
A: A prompt in ChatGPT gives you one newsletter. This workflow gives you a newsletter every week, automatically, forever. The upfront build time is higher. The ongoing time is zero.
Q: Does this violate CAN-SPAM or GDPR?
A: Only if you add people without consent. Only send to people who explicitly subscribed. Resend and other email APIs handle unsubscribe links automatically.
---
Read Next
- The AI Affiliate Blueprint: Earn Recurring Commissions
- The $0 AI Content Empire: Build a One-Person Media Business
- How to Build a Faceless AI TikTok Channel
---
*One monetization workflow, every week. No fluff. Subscribe →*