Add your news topics to a Google Sheet once — with keywords, article limits, and an Active toggle — and every morning at 7AM a personalized news digest lands in your inbox automatically. The workflow fetches fresh articles from Google News for each active topic, parses the RSS feed to extract titles, sources, and timestamps, and uses GPT-4o-mini to write a clear 3-sentence summary per article. All summaries are grouped by topic, assembled into a styled HTML email with dark section headers and article cards, sent to your inbox via Gmail, and logged to a Digest Log sheet with topic count, article count, and sent time. Built for anyone who wants a personalized daily news briefing without manually visiting news sites or curating articles each morning.
⚠️ Two separate Google Sheet IDs are used — replace
YOUR_GOOGLE_SHEET_IDin 2. Google Sheets — Read Topics andYOUR_LOG_SHEET_IDin 12. Google Sheets — Log Digest. These can be the same spreadsheet or different ones — just make sure each uses the correct Sheet ID.
⚠️ Your email address — replace
YOUR_EMAIL_ADDRESSin 11. Gmail — Send Digest Email with the inbox where you want to receive your daily digest.
Estimated Setup Time: 20–25 minutes
Import the workflow — Open n8n → Workflows → Import from JSON → paste the workflow JSON → click Import
Create your Topics tab — Open your Google Sheet → add a tab named Topics → add these 4 column headers in row 1: Topic, Search Keywords, Max Articles, Active → add your first topics with Active set to TRUE
Example rows:
| Topic | Search Keywords | Max Articles | Active |
|---|---|---|---|
| AI News | artificial intelligence 2025 | 3 | TRUE |
| Cricket | india cricket latest | 2 | TRUE |
Create your Digest Log tab — In the same spreadsheet or a new one → add a tab named Digest Log → add these 5 column headers: Date, Topics Count, Articles Found, Email Sent, Sent At
Get your Google Sheet ID for Topics — Open the spreadsheet containing the Topics tab in a browser → copy the string between /d/ and /edit in the URL
Connect Google Sheets for reading topics — Open node 2. Google Sheets — Read Topics → replace YOUR_GOOGLE_SHEET_ID with your actual Sheet ID → click the credential dropdown → add Google Sheets OAuth2 → authorize access
Get your Digest Log Sheet ID — If the Digest Log tab is in the same spreadsheet, use the same Sheet ID; if it is a different spreadsheet, open it and copy that Sheet ID
Connect Google Sheets for logging — Open node 12. Google Sheets — Log Digest → replace YOUR_LOG_SHEET_ID with the correct Sheet ID → confirm Google Sheets OAuth2 is selected
Connect OpenAI — Open node 9. OpenAI — GPT-4o-mini Model → click the credential dropdown → add your OpenAI API key → test the connection
Set your email address — Open node 11. Gmail — Send Digest Email → replace YOUR_EMAIL_ADDRESS in the Send To field with your actual email address
Connect Gmail — Open the same node 11. Gmail — Send Digest Email → click the credential dropdown → add Gmail OAuth2 → complete the Google authorization flow
Activate the workflow — Toggle the workflow to Active — it will run automatically every day at 7AM. To test immediately, click on node 1. Schedule — Every Day 7AM and use the manual Execute option.
Step 1 — Schedule: Every Day 7AM
The workflow fires automatically every day at 7AM using the cron expression 0 7 * * *. It can also be triggered manually using the Execute option in n8n.
Step 2 — Google Sheets: Read Topics
All rows from your Topics tab are read. Each row contains a topic name, search keywords, max articles limit, and Active status.
Step 3 — IF: Active Topics Only
This filter checks the Active column for each row. If it equals TRUE (YES path), the topic is included and passes forward to the RSS fetch. If it is FALSE or blank (NO path), the topic is silently skipped — no error is thrown. This lets you pause any topic without deleting it from the sheet.
Step 4 — HTTP: Fetch Google News RSS
For each active topic, the Search Keywords value is used to build a Google News RSS URL — for example https://news.google.com/rss/search?q=artificial+intelligence+2025&hl=en-US. The RSS feed is fetched as plain text.
Step 5 — Code: Parse RSS + Extract Articles
The RSS XML text is parsed using regex to extract individual article items. For each item, the title, link, description, source name, and publication date are extracted. HTML tags are stripped from the description. A time-ago label is calculated (e.g. "3 hours ago") from the publication date. Only up to the Max Articles limit for that topic are kept. The output is one object containing the topic name and the articles array.
Step 6 — IF: Has Articles?
This check confirms whether any articles were found for this topic today. If the articles array has results (YES path), the topic proceeds to splitting and summarizing. If no articles were returned (NO path), the topic is silently skipped — the rest of the workflow continues normally with other topics.
Step 7 — Code: Split Into Individual Articles
The articles array is split into individual rows — one per article — each carrying the topic name, article title, link, description, source, time-ago, and publication date. Every article then flows through GPT separately.
Step 8 — AI Agent: Summarize Article
GPT-4o-mini receives the article title, description, and source for each article. The system prompt instructs GPT to write exactly 3 sentences in plain English — factual and specific, no bullet points, no formatting, maximum 60 words total. The 3 sentences are returned as plain text separated by line breaks.
Step 9 — OpenAI: GPT-4o-mini Model
This is the language model powering the article summaries.
Step 10 — Code: Build HTML Email
All summarized articles from all topics are collected together. They are grouped by topic name. For each topic, an emoji is assigned from a built-in map (🤖 for AI News, 🏏 for Cricket, ₿ for Bitcoin, ⚙️ for n8n, 🚀 for Startup India, 📰 for everything else). The HTML email is assembled with a dark header showing today's date, a blue stats bar with topic and article counts, topic sections with dark header blocks, and article cards with the article title as a link, source and time-ago, the 3-sentence summary, and a "Read full article →" link. The email is truncated to 4000 characters if needed. Total topic and article counts are also returned for the log step.
Step 11 — Gmail: Send Digest Email
The formatted HTML email is sent to your address via Gmail. The subject line is automatically set to ☀️ Your Daily News Digest — [Date]. The sender name is set to "Daily News Digest".
Step 12 — Google Sheets: Log Digest
One row is appended to your Digest Log tab with today's date, the number of topics that had articles, the total article count, Email Sent set to Yes, and the time the email was sent.
✅ Active toggle per topic — Set Active to FALSE in the sheet to pause any topic without deleting it — it is excluded from that day's digest and re-included when you set it back to TRUE
✅ Per-topic article limits — Each topic has its own Max Articles setting so you can get more coverage on high-priority topics and less on lower-priority ones
✅ Topics with no results are silently skipped — If Google News has nothing for a topic on a given day, it is skipped without breaking the workflow or generating an empty section in the email
✅ Emoji auto-assigned per topic — Topics like AI News, Cricket, and Bitcoin get recognizable emojis in the email header — making sections instantly scannable
✅ Time-ago labels on every article — Each article card shows how recently it was published (e.g. "2 hours ago") so you can tell at a glance which news is freshest
✅ Styled HTML email — no setup required — The email uses inline CSS with dark headers, article cards, and a footer — readable in Gmail, Outlook, and Apple Mail without any template configuration
✅ Daily run logged to Google Sheets — Every digest run is recorded with topic and article counts so you can track coverage trends over time
Add a new topic — In your Topics tab, add a new row with the topic name, search keywords (any words or phrase you would search on Google News), your preferred article limit, and Active set to TRUE — it will appear in the next morning's digest.
Change the digest delivery time — In node 1. Schedule — Every Day 7AM, edit the cron expression from 0 7 * * * to a different time — for example 0 6 * * * for 6AM or 0 8 * * 1-5 for weekdays only at 8AM.
Add more topic emojis — In node 10. Code — Build HTML Email, add entries to the topicEmojis object — for example 'Finance': '💰' or 'Sports': '⚽' — so your new topics get a matching icon.
Add a Slack notification alongside the email — After node 11. Gmail — Send Digest Email, add a Slack step that posts the topic count, article count, and a note that the digest has been sent to a #news-digest channel.
Target a specific country in RSS results — In node 4. HTTP — Fetch Google News RSS, edit the URL to change &hl=en-US&gl=US&ceid=US:en to a different locale — for example &hl=en-IN&gl=IN&ceid=IN:en for India-specific news results.
Workflow not triggering at 7AM:
No topics appearing in the email (digest sent with no articles):
TRUE (not true or True) — the filter check is case-insensitive but the value must be presentYOUR_GOOGLE_SHEET_ID in node 2. Google Sheets — Read Topics is replaced with your actual Sheet IDArticles not loading for a specific topic:
Gmail failing to send:
YOUR_EMAIL_ADDRESS in the Send To field is replaced with a valid email addressGoogle Sheets log not saving rows:
YOUR_LOG_SHEET_ID in node 12. Google Sheets — Log Digest is replaced with your actual Sheet ID — note this may differ from the Topics Sheet IDNeed help setting this up or want a custom version built for your team or agency?
📧 Email: [email protected]
🌐 Website: https://www.incrementors.com/