This is the complete build of the agent we recommend every beginner start with — the one from our getting-started guide, upgraded to its production form. It reads your sources overnight, filters out the noise, and greets you with a digest that’s actually worth your attention. Everything here is buildable in n8n or Make in a weekend.
What you’re building
Every morning at 6:30 (cron trigger)
→ gather from curated sources (RSS, APIs, search)
→ filter for relevance to YOUR brief
→ deduplicate against the last 14 days
→ summarize what's left (structured prompt)
→ deliver (email / Slack / doc)
The pipeline shape matters more than any individual piece: this is a deterministic workflow with an AI step in the middle, not a free-roaming agent. The gathering, filtering, and dedup are plain workflow nodes; the model only does the part models are good at (reading and compressing). That division of labor is why this agent is reliable enough to run every day from week one.
Step 1: Curate sources (the step that decides quality)
The agent’s ceiling is set here. A hand-picked list of 15-30 sources — the newsletters you’d pay for, the blogs of the tools you use, two or three high-signal people — outperforms any quantity of scraped feeds. For our automation niche: the official blogs of n8n/Make/Zapier, a handful of practitioner blogs, two curated aggregators, and search alerts on three precise queries.
Implementation in n8n: an RSS Read node per source (or one node iterating a source list from a sheet). Keep the source list in a spreadsheet — sources go stale, and a sheet row you can delete beats a hardcoded node you have to edit.
Step 2: Filter for YOUR brief
This is the “relevance” step, and the prompt is the product. Ours:
You are filtering items for a B2B automation practitioner.
Brief: practical automation patterns, tool pricing/feature changes,
AI agent building for non-programmers, and business cases.
Score each item 1-5 for relevance to this brief.
Discard: press releases, funding news, generic AI hype,
crypto/web3 angles, listicles without original testing.
Return only items scoring 4-5, with your score and a one-line reason.
The discard list matters as much as the brief — it encodes your judgment about what wastes your time. The first week, you’ll tune this prompt based on what sneaks through; that tuning session (15 minutes, once) is the highest-leverage time in this whole build.
Cost note: this step reads only titles + snippets, so it’s cheap even on hundreds of items. Expensive full-page fetching comes only for the items that pass.
Step 3: Deduplicate against history
Nothing kills a digest’s credibility like the same story three days running. Keep a log sheet (date, title, URL) of everything the agent has summarized; before summarizing, search the log for near-matches (exact URL match, or fuzzy title overlap — n8n’s item-comparison or a small code node handles this).
Fuzzy dedupe matters because the same news gets reframed across sources (“Zapier raises prices” / “Zapier’s new pricing tiers explained” / “What Zapier’s price change means for you”). Exact-URL matching alone won’t catch those, and a digest that presents three reframings as three stories has failed at its one job.
Step 4: Summarize with a structure you actually want to read
The summary prompt is where digest quality lives or dies. The structure we’ve converged on after months of iteration:
Write the daily digest with:
- One line per item: [TOOL/TOPIC] — what changed, in one sentence.
- For the 2-3 most significant items: a short paragraph (max 3 sentences)
with specifics (numbers, names, dates) — no vague adjectives.
- A "Worth your time" marker on items that need action or awareness.
Tone: a well-informed colleague, not a marketing newsletter.
If nothing significant happened, say exactly that — a short digest
is a feature, not a failure.
That last instruction does heavy lifting: the failure mode of AI digests is padding, filling quiet days with summaries of nothing so the output “feels” complete. An agent licensed to say “quiet day” is an agent you keep trusting.
The “no vague adjectives” line also pays for itself — without it, every model drifts toward “exciting developments in the rapidly evolving space,” which is how you know nobody tested the prompt.
Step 5: Deliver
Email remains the best delivery for a morning digest (it waits for you; Slack pings get muted). We send ours as plain text with links — formatting flair correlates negatively with reading comprehension at 7am. A parallel Slack message with just the headline list works well for teams.
One delivery rule from experience: send it even when it’s boring. The daily rhythm is what keeps you calibrated on what “normal” looks like, which is how you notice when something genuinely big lands. A digest that only fires on big news trains you to ignore it.
The n8n workflow, node by node
Since “gather → filter → dedupe → summarize → deliver” is five words that expand to about a dozen nodes, here’s the actual wiring we use, so you can check yours against it:
-
Schedule Trigger — every day at 6:30am. Set the timezone explicitly in the node; the workflow-level default has caught us twice.
-
RSS Read (one per source, or one node iterating a source list from a “sources” Google Sheet). We keep sources in a sheet for the quarterly-prune ritual — deleting a row beats editing a node. Output: 50-150 raw items.
-
Merge/Combine — one branch per source converging here. Configure “append” mode; the output is your morning firehose.
-
Code node: normalize + pre-dedupe — 20 lines of JavaScript that strip tracking params from URLs, lowercase titles, and drop obvious duplicates within the batch itself (the same story syndicated across two sources in one morning). Doing this before the LLM step means the model never sees duplicates, which is cheaper and more reliable than asking the model to dedupe.
-
Google Sheets: read the history — the last 14 days of summarized items from the log sheet (URLs + titles).
-
Code node: cross-day dedupe — exact normalized-URL match plus a title-similarity check (we use a simple token-overlap ratio; anything above 0.7 against a recent item is a repeat). This is deterministic dedupe — no model involved, no drift possible.
-
AI node: relevance filter — the prompt from Step 2 above, run over titles + snippets only. Output: items scoring 4-5 with reasons.
-
AI node: summarize — the digest prompt, run over the surviving items’ full text. This is where fetch cost lands, which is why everything before it exists: the expensive node sees only what survived the cheap filters.
-
Gmail/Send Email — plain text, the digest, to you.
-
Google Sheets: append to log — today’s summarized URLs and titles, which become tomorrow’s dedupe history. If this node fails, you get repeats tomorrow — wire its failure to the error workflow like everything else.
The architecture principle in that list: deterministic steps before model steps, and the cheapest model steps before the most expensive ones. The LLM appears exactly twice, at the two points where judgment is genuinely needed, and everything mechanical is code. That’s why this agent costs $5/month instead of $50 and why it fails in debuggable ways instead of mysterious ones.
A worked example: the agency that stopped being surprised
The first production deployment of this pipeline was for a six-person marketing agency whose competitive-positioning research was, in their words, “whenever someone remembers to check.” Their clients were in e-commerce logistics — a space where platform policy changes and carrier rate updates land without warning, and where being the last agency to mention a major change in a client call is embarrassing in a client-visible way.
The before-state: one account manager spent roughly five hours a week scanning trade newsletters, three carrier blogs, and a Reddit community, keeping notes in a doc nobody else read. Coverage was spotty — they missed a major rate-card change that a client asked about first, which was the incident that triggered them calling us.
We built the pipeline above against 22 sources (their newsletters, the carrier blogs, and two industry news feeds), wrote the filter prompt around their actual brief (“changes affecting e-commerce shipping costs, platform policies, and logistics tech — ignore funding rounds and press-release filler”), and turned it on with the digest going to a shared inbox. First week: the digest averaged 7 items a day, and the account manager’s five hours became about forty minutes of reading — some items she’d have caught, some she wouldn’t.
The moment that sold the team, three weeks in: the digest surfaced a regional carrier’s fuel-surcharge change on the morning it was announced. She mentioned it on a client call that afternoon, the client was impressed enough to ask how they’d heard so fast, and the answer — “our research system flagged it at 6am” — became part of their pitch. They’ve since rolled the same skeleton out for two client industries as a paid add-on, which is the “different brief, same pipeline” extension: $5/month of API spend, sold as a line item.
Total build time: one focused day, of which the source curation and the filter-prompt tuning were genuinely half the effort — the wiring is the easy part; the editorial judgment baked into the brief is the product.
The complete cost
| Piece | Monthly cost (typical) |
|---|---|
| Search tool (Tavily free tier / SearXNG) | $0 |
| Filtering (~100 titles × 30 days, snippet-level) | $1-2 |
| Summarizing (~5-10 items × 30 days, full reads) | $3-10 |
| n8n self-hosted / Make Core | $0-9 |
| Total | $5-20/month |
For a digest that replaces 30-60 minutes of daily feed-scrolling, that’s the best ROI in this entire site’s catalog of builds.
The failure modes, and their fixes
- The digest drifts boring. Sources went stale, or the filter prompt got too aggressive. Fix: quarterly source review — delete three, add one.
- The same story sneaks in twice. Fuzzy-match threshold too loose. Fix: lower title-similarity threshold; also dedupe on normalized URLs (strip query params).
- Summaries get vague over time. Model or prompt drift (especially if you’ve changed models). Fix: keep one pinned “golden digest” from a good week and compare new outputs against it monthly; vague-ness shows up fast in that comparison.
- The run fails silently for a week. No error alerting. Fix: this is the day-one guardrail — an error notification that pings you when the digest doesn’t arrive. Your morning routine should include noticing its absence.
Where this goes next
The research agent is the gateway drug of agents because every piece generalizes:
- Different brief, same skeleton — client-specific monitoring (their competitors, their tools) is the same pipeline with a different filter prompt, and it’s a legitimately sellable service.
- Deeper dives on triggers — when the filter scores something 5/5, a second agent fetches and reads everything about that one story and appends a deep-dive section.
- The weekly roll-up — the daily logs feed a weekly “what actually mattered this week” synthesis, which is where the real signal accumulates. Dailies inform; weeklies decide.
Build the daily version first and run it for a month before adding any of that. The discipline of running a small agent reliably beats the excitement of building a bigger one unreliably — a sentence that happens to be the entire philosophy of this site.