RSS to Google Sheets, Gemini summaries you can scan
Your “read later” list isn’t a list anymore. It’s a graveyard of half-open tabs, duplicated links, and articles you swear you’ll get back to when things slow down (they won’t).
This is where RSS summary automation pays off fast. Marketing managers trying to stay sharp, founders keeping an eye on competitors, and consultants who need to send “quick insights” to clients all run into the same wall: too much to read, not enough time.
This workflow turns multiple RSS feeds into clean Google Gemini summaries inside Google Sheets, so you can scan, sort, and share in minutes. Below, you’ll see exactly what it does, what you need, and how to put it to work.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: RSS to Google Sheets, Gemini summaries you can scan
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1@{ icon: "mdi:database", form: "rounded", label: "Get RSS Feed List", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Read RSS", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Rss Elements", pos: "b", h: 48 }
n4@{ icon: "mdi:database", form: "rounded", label: "Get Row for URL is in Sheets", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/markdown.dark.svg' width='40' height='40' /></div><br/>Convert HTML to Markdown"]
n6@{ icon: "mdi:database", form: "rounded", label: "Append Aummary to Google She..", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Combine Rss with source name", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check If Article Exists", pos: "b", h: 48 }
n9@{ icon: "mdi:robot", form: "rounded", label: "Summarize Content", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Output", pos: "b", h: 48 }
n11@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Last X Days", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-vertical", form: "rounded", label: "Settings", pos: "b", h: 48 }
n14@{ icon: "mdi:cog", form: "rounded", label: "End of worfklow", pos: "b", h: 48 }
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Webpage HTML Content"]
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/html.dark.svg' width='40' height='40' /></div><br/>Extract Body Content in HTML"]
n17@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model1", pos: "b", h: 48 }
n18@{ icon: "mdi:database", form: "rounded", label: "Append Aummary to Google She..", pos: "b", h: 48 }
n19@{ icon: "mdi:database", form: "rounded", label: "Clear sheet", pos: "b", h: 48 }
n20@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over RSS Feed", pos: "b", h: 48 }
n2 --> n7
n13 --> n19
n19 --> n1
n10 --> n6
n10 --> n18
n11 --> n13
n1 --> n20
n9 --> n10
n12 --> n3
n20 --> n12
n20 --> n2
n3 --> n14
n3 --> n4
n8 --> n15
n8 --> n3
n5 --> n9
n15 --> n16
n17 -.-> n9
n7 --> n20
n16 --> n5
n4 --> n8
n6 --> n3
n0 --> n13
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0,n11 trigger
class n9 ai
class n17 aiModel
class n8,n12 decision
class n1,n4,n6,n18,n19 database
class n15 api
classDef customIcon fill:none,stroke:none
class n5,n15,n16 customIcon
The Problem: RSS Turns Into Noise Fast
RSS is great in theory. In practice, you end up scanning headlines in five places, clicking into the same story twice, and losing the best reads because they’re buried under “meh” posts. Then there’s the real time sink: opening an article, realizing it’s mostly fluff, closing it, and repeating that loop 20 times. Even when you find something good, you still have to summarize it for your team, drop it into a doc, or paste it into Slack. That mental load is the part nobody budgets for.
The friction compounds. Here’s where it usually breaks down.
- You end up reading the same link from different feeds because nothing checks duplicates for you.
- Most RSS readers show snippets, not the useful body text, so you click through and lose your flow.
- Important takeaways don’t get stored anywhere searchable, which means you “re-discover” the same ideas every month.
- Sharing takes longer than it should, because you’re rewriting summaries manually and still missing key points.
The Solution: RSS → Full-Text → Gemini Summary → Google Sheets
This workflow pulls articles from multiple RSS feeds (managed inside a Google Sheet), checks that each item is recent, and then confirms you haven’t already processed the same link before. When it finds a new article, it fetches the full webpage HTML, extracts the real body content (skipping the usual clutter like ads and image junk), and converts it into clean Markdown. Then Google Gemini generates a concise, structured summary you can actually scan: key takeaways, insights, and a readable format that’s consistent across sources. Finally, n8n writes the result into two places: a permanent “Articles” sheet for long-term storage, and a “Today” sheet so you can see the daily highlights at a glance.
The workflow starts on a schedule or with a manual launch inside n8n. It loops through each feed in your “Feed List” sheet, processes only items from the last X days, and skips anything already logged. After summarization, you get tidy rows in Google Sheets that are easy to filter, search, and forward.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you track 10 RSS feeds and each feed publishes about 5 posts a day. Manually, even “quick scanning” is maybe 3 minutes per post once you click in, skim, and decide if it matters, which is roughly 2.5 hours a day. With this workflow, you spend about 10 minutes setting feeds and the date window, then you just open the “Today” sheet and scan summaries in about 15 minutes. You’re getting back around 2 hours most days, and the best links are already logged for later.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for feed list plus summary storage.
- Google Gemini API to generate structured summaries.
- Gemini API key (get it from Google AI Studio / Google Cloud).
Skill level: Intermediate. You’ll connect accounts, set up sheets, and adjust a few workflow settings like date windows and summary format.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
It starts on a schedule (or manually). You can run it daily at a set time with the Scheduled Run Trigger, or fire it on demand with the Manual Launch Trigger when you want a fresh batch.
Your configuration and daily reset run first. n8n sets the “last X days” window and clears the “Today” sheet so you’re not mixing yesterday’s highlights with today’s.
Feeds are pulled from Google Sheets and processed in batches. The workflow reads your feed list, loops through each source, then reads RSS items and keeps only the entries that match your date filter.
New links get expanded and summarized. For every RSS entry, it checks Google Sheets to see if the link already exists. If it’s new, n8n fetches the page HTML, extracts the body, converts it to Markdown, and sends it to Gemini to generate the summary.
Results land in two sheets. The cleaned summary text is written to a permanent “Articles” tab and also to “Today” for quick scanning, which means you get both a daily briefing and a growing knowledge base.
You can easily modify the “last X days” filter to match your publishing cadence, or change the summary structure to fit your team’s format. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual and Scheduled Triggers
Set up both entry points so you can run the workflow on demand or on a daily schedule.
- Open Manual Launch Trigger and leave it as-is for manual testing.
- Open Scheduled Run Trigger and confirm the rule runs at
triggerAtHour: 6. - Ensure both Manual Launch Trigger and Scheduled Run Trigger connect into Configuration Setup.
Step 2: Connect Google Sheets and Set Global Configuration
Define the spreadsheet locations and prepare the daily sheet reset before pulling RSS sources.
- Open Configuration Setup and set the following fields to your sheet URLs: Document, Articles Sheet, Today Sheet, and Rss Feeds.
- In Configuration Setup, set Current Time to
{{ $workflow.trigger === 'Scheduled Run Trigger' ? $('Scheduled Run Trigger').item.json.timestamp : $now }}. - In Configuration Setup, set Last X Days to
1(or your desired recency window). - Open Clear Daily Sheet and select the sheet to clear while keeping headers. Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Open Retrieve Feed List and set sheetName to
{{ $('Configuration Setup').item.json["Rss Feeds"] }}and documentId to{{ $('Configuration Setup').item.json.Document }}. Credential Required: Connect your googleSheetsOAuth2Api credentials.
RSS URL and RSS NAME so downstream nodes can read them without mapping errors.Step 3: Configure RSS Intake and Filtering
Loop through feed sources, label each item, and filter for recent articles.
- In Iterate Feed Sources, keep defaults to batch through the feed list.
- Open Read Feed Items and set url to
{{ $json["RSS URL"] }}. - Open Attach Source Label, enable includeOtherFields, and map RSS NAME to
{{ $('Iterate Feed Sources').item.json["RSS NAME"] }}. - Open Filter Recent Articles and confirm the date condition uses
{{ $json.pubDate }}after{{ $('Configuration Setup').item.json['Current Time'].toDateTime().minus($('Configuration Setup').item.json['Last X Days'],'days').startOf('day') }}. - Keep Iterate Feed Entries as the batch processor for filtered feed items.
pubDate format.Step 4: Check for Duplicates and Fetch Article Content
Prevent duplicates by checking the Articles sheet, then fetch and parse article HTML into Markdown.
- Open Lookup Link Row and set the lookup to use
{{ $json.link }}in columnlink. Credential Required: Connect your googleSheetsOAuth2Api credentials. - In Verify Article New, confirm the empty-object check references
{{ $item("0").$node["Lookup Link Row"].json }}to allow only new articles. - Open Fetch Page HTML and set url to
{{ $('Iterate Feed Entries').item.json.link }}. - Open Extract Body HTML and keep cssSelector set to
bodywith returnValue ashtml. - Open Convert HTML to MD and set html to
{{ $json.data }}.
Step 5: Set Up AI Summarization and Clean Output
Generate structured summaries with Gemini and remove unwanted tokens before saving.
- Open Gemini Chat Model. Credential Required: Connect your googlePalmApi credentials.
- Open Generate Summary and confirm text uses the full prompt starting with
Summarize This:and includes the dynamic fields such as{{ $('Iterate Feed Entries').item.json.title }}and{{ $json.data }}. - Note that Gemini Chat Model is connected as the language model for Generate Summary — ensure credentials are added to Gemini Chat Model, not Generate Summary.
- Open Clean Summary Text and set the text field to
{{ $json.text.replace(/.[\s\S]*?<\/think>/g, '') }}
Step 6: Configure Output Updates to Google Sheets
Save the summarized articles to both master and daily sheets with parallel execution.
- Open Update Articles Sheet and confirm operation is
appendOrUpdatewith columns mapped to{{ $('Iterate Feed Entries').item.json.link }},{{ $('Iterate Feed Entries').item.json.title }},{{ $json.text }}, and categories. - Open Update Today Sheet and confirm the same mapping, with sheetName set to
{{ $('Configuration Setup').item.json["Today Sheet"] }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials to all Google Sheets nodes (5 total for clearing, retrieving, lookup, and updates).
- Clean Summary Text outputs to both Update Articles Sheet and Update Today Sheet in parallel.
Step 7: Test and Activate Your Workflow
Validate the end-to-end run, then activate the schedule for production use.
- Click Execute Workflow starting from Manual Launch Trigger to run a manual test.
- Watch for successful processing through Workflow End Marker and verify new rows in both the Articles and Today sheets.
- Confirm summaries in the sheets are clean and do not contain
<think>tags. - Enable the workflow to activate Scheduled Run Trigger for daily execution.
Common Gotchas
- Google Sheets access can fail if your OAuth permissions change. If rows stop writing, check the Google connection in n8n’s Credentials and re-auth first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Gemini summaries depend heavily on prompt quality. The default is serviceable, but honestly, you should add your preferred tone and required fields early or you’ll be cleaning text forever.
Frequently Asked Questions
About 45 minutes if your Google Sheets and Gemini key are ready.
No. You will mostly connect accounts and copy in a few sheet IDs. The only “technical” part is making sure your columns match what the workflow expects.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Gemini API usage costs, which depend on how many articles you summarize.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but you’ll change the output. Keep the RSS, duplicate check, and Gemini summarization as-is, then swap the “Update Today Sheet” step for a Slack message node that posts a compact version of the summary. Common tweaks include summarizing only specific sources, adding a “relevance score” field, and changing the prompt to match your brand voice.
Usually it’s an expired Google authorization in n8n. Reconnect the Google Sheets credential and rerun one test item to confirm rows can be created. If it still fails, check that the spreadsheet is shared with the same Google account you authenticated, and that the sheet names (“Articles” and “Today”) match exactly.
A lot, but your limits come from your n8n plan, your server, and your Gemini quota.
Often, yes, because this workflow isn’t just “RSS in, row out.” You’re fetching full HTML, extracting the readable body, converting it to Markdown, checking duplicates, and then running an LLM chain before writing to two sheets. That kind of multi-step logic is where n8n feels more flexible, and self-hosting can keep costs predictable when volume grows. Zapier or Make can still work if you only need a simple RSS-to-Sheets logger with no full-text parsing. If you’re torn, Talk to an automation expert and you’ll get a straight recommendation based on your volume and goals.
Once this is running, your news intake stops being a daily chore and turns into a simple scan. The workflow handles the repetitive stuff, and you keep the useful insights.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.