Build a Personalized Daily RSS Newsletter with n8n + Google Gemini
Input RSS feeds and interest keywords → Gemini AI curates and summarizes → Output HTML email digest
- Who
- Anyone who wants to automatically aggregate industry news, blog updates, or competitor tracking into a single daily email
- You get
- Scheduled daily fetch from RSS feeds, AI-filtered top 10-15 items per category, formatted as an HTML newsletter with images and summaries
- You need
- n8n
Constraints
Requires: 1) Access to an n8n instance (self-hosted or cloud); 2) Google Gemini API credentials (googlePalmApi type); 3) SMTP sending credentials; 4) Your own RSS feed URLs to replace the examples.
What they did
Author dixitram published an n8n template workflow that uses a Schedule Trigger to run daily, fetches content from two RSS source groups (tech news and tools/products), processes URLs through Split Out and Loop Over Items to control request frequency, merges results into a CSV, uses Google Gemini AI to filter top 10-15 items per category based on keyword prompts, and sends a styled HTML email via SMTP. The template includes complete node wiring, JavaScript cleanup code, and an embedded HTML email template.
How it went
The template description states that AI selects 10-15 relevant items per category, summarizes them, and formats them into an HTML email (author_report). No specific delivery rate or long-term stability data is provided.
Worth knowing
1. Model version: workflow.json records gemini-2.5-flash-preview-05-20; future n8n node updates may require adjustments. 2. Dual-source design: the template defaults to two separate RSS lists (News and Tools); switching to a single category requires merging nodes and rewriting the prompt structure. 3. Email styling: the HTML template is embedded inside the Analyze document prompt; changes must be coordinated with the Code node's cleanup logic. 4. Costs: both Gemini API calls and SMTP sending may incur charges depending on volume and provider pricing. 5. This site has not executed or verified the template (reproduction=not_tested); always run a manual test before enabling automatic scheduling.
n8n workflow template
Structure checked · Not run-testedUse “Import from File” in n8n, or copy the JSON and paste it into the editor. Connect your own accounts, then try test data. The template is inactive by default.
Setup and test checklist
Credentials to connect
- Upload a file node: connect Google Gemini/PaLM API credentials.
- Analyze document node: connect Google Gemini/PaLM API credentials.
- Send email node: connect smtp credentials.
Configuration to replace
- Source template is n8n public workflow #10196 (~23 nodes). Keep inactive after import; verify triggers, expressions and external API endpoints.
- Sticky-note guidance is informational; replace placeholders with your own accounts, sheet schemas or channel IDs.
Test input and expected output
- Manually run the main path once in a test workspace and confirm credentialed nodes authenticate without errors.
- Drive one synthetic/redacted sample through and check output fields and downstream writes before enabling in production.
Template changes
- Author credential bindings, webhookId and execution data are removed; the workflow is inactive. Nodes, connections and original prompts are preserved. Not run-tested in n8n.
- No business-logic edits; verify keys, quotas and privacy compliance before use.
Template retrieved: 2026-10-24
Steps
Configure API and email credentials
After importing the template into n8n, set up two credential types: 1. Google Gemini API: Go to Credentials → New credential of type googlePalmApi, enter your API Key, and select it in both Gemini nodes (Upload a file and Analyze document). 2. SMTP: In the Send email node, create a new smtp credential with server address, port, username, and password; also update toEmail and fromEmail to real addresses. You should see: no red credential warnings on either Gemini node; the Send email node shows the SMTP credential is linked.
Replace RSS sources and AI filter keywords
Update the RSS URLs in both Set nodes: - Tech News Sites node: replace the url array examples (e.g., TechCrunch, The Verge) with your preferred news feeds. - Tools Subredit and Sites node: replace the Url array examples (e.g., Reddit, Product Hunt) with your preferred tool/product feeds. Then open the Analyze document node and locate the keyword lists in the text field: - Tools & Products Keywords and News Keywords are JSON arrays inside the prompt. Edit them to match your interests. If you prefer a single category instead of two, restructure the prompt accordingly. You should see: Set node previews show your RSS URLs; the Analyze document prompt reflects your updated keywords.
Execution prompt · Source text。Analyze document node text input field; replace keyword arrays before running
# Tech Content Writer Prompt You are a tech content writer. I have two lists of items: 1️⃣ New Tools & Products {products_list} 2️⃣ Global & India Tech News {news_list} ## Task: - Select the **top 10-15 items** from each list based on these interests and keywords: - **Tools & Products Keywords:** ["AI", "automation", "developer", "open source", "productivity", "creative", "innovation", "API", "web app", "tools"] - **News Keywords:** ["technology innovation", "AI breakthrough", "framework", "developer update", "research", "automation trend", "product launch"] - Keep **two separate sections**: 1. Tools & Products (10-15 items) 2. Global & India Tech Innovations (10-15 items) - Summarize each item in **2-3 lines**. - **If an image URL is provided**, display it beautifully under the title with rounded edges - Tone: "Curious, energetic, and concise – focused on discovery, usefulness, and creativity." - Format using the HTML template below, replacing placeholder items with actual content from the lists. ## HTML Template: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Daily Tech Digest</title> <style> body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif; background: #f5f5f5; margin: 0; padding: 16px; line-height: 1.5; font-size: 15px; color: #333; } .container { max-width: 600px; margin: 0 auto; background: #ffffff; border-radius: 8px; } .header { background: #000; color: #fff; padding: 20px 16px; border-radius: 8px 8px 0 0; } .header h1 { font-size: 20px; font-weight: 600; margin: 0 0 4px 0; } .header p { font-size: 13px; margin: 0; opacity: 0.8; } .content { padding: 20px 16px; } .section { margin-bottom: 32px; } .section:last-child { margin-bottom: 0; } .section-title { font-size: 16px; font-weight: 600; color: #000; margin: 0 0 16px 0; padding-bottom: 8px; border-bottom: 2px solid #000; } .item { margin-bottom: 20px; padding-bottom: 20px; border-bottom: 1px solid #e5e5e5; } .item:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; } .item-title { font-size: 15px; font-weight: 600; color: #000; margin: 0 0 12px 0; } .item-image { width: 100%; height: auto; border-radius: 12px; margin-bottom: 12px; display: block; object-fit: cover; } .item-summary { font-size: 14px; color: #555; margin: 0 0 8px 0; } .item-link { color: #0066cc; text-decoration: none; font-size: 14px; font-weight: 500; } .footer { background: #f9f9f9; padding: 16px; text-align: center; font-size: 12px; color: #666; border-radius: 0 0 8px 8px; } </style> </head> <body> <div class="container"> <div class="header"> <h1>⚡ Daily Tech Digest</h1> <p>{current_date}</p> </div> <div class="content"> <!-- Tools & Products Section --> <div class="section"> <h2 class="section-title">🧠 New Tools & Products</h2> <!-- Example with Image --> <div class="item"> <div class="item-title">{Product Title 1}</div> <!-- Include image if URL is available --> <img src="{image_url}" alt="{Product Title}" class="item-image" onerror="this.style.display='none'"> <div class="item-summary"> {2-3 line summary of the product} </div> <a href="{product_link}" class="item-link">Learn more →</a> </div> <!-- Example without Image --> <div class="item"> <div class="item-title">{Product Title 2}</div> <div class="item-summary"> {2-3 line summary of the product} </div> <a href="{product_link}" class="item-link">Learn more →</a> </div> <!-- Add more items as needed --> </div> <!-- Global & India Tech News Section --> <div class="section"> <h2 class="section-title">🌍 Global & India Tech Innovations</h2> <!-- Example with Image --> <div class="item"> <div class="item-title">{News Title 1}</div> <!-- Include image if URL is available --> <img src="{image_url}" alt="{News Title}" class="item-image" onerror="this.style.display='none'"> <div class="item-summary"> {2-3 line summary of the news} </div> <a href="{news_link}" class="item-link">Read more →</a> </div> <!-- Example without Image --> <div class="item"> <div class="item-title">{News Title 2}</div> <div class="item-summary"> {2-3 line summary of the news} </div> <a href="{news_link}" class="item-link">Read more →</a> </div> <!-- Add more items as needed --> </div> </div> <div class="footer"> Stay curious. Keep building. </div> </div> </body> </html> ```Understand workflow execution logic
Save and activate the workflow. Execution proceeds automatically as follows: 1. Schedule Trigger fires daily at 9:00 AM (or your chosen time). 2. Two Set nodes output Tech News and Tools RSS URL arrays. 3. Split Out breaks arrays into single URLs; Loop Over Items processes them in batches (batchSize 5 and 4) to limit request rates. 4. RSS Feed Read fetches each source; Merge Both List combines both branches; Convert to File creates a CSV. 5. Upload a file sends the CSV to Gemini; Analyze document runs the prompt above to generate full HTML. 6. Code in JavaScript strips newlines and code-block markers; Send email delivers the HTML message. Note: RSS Read OF Tech News has onError=continueRegularOutput, so a single source failure will not halt the entire workflow.
Adjust schedule and activate
In the Schedule Trigger1 node, change triggerAtHour to your preferred hour (24-hour format). Ensure no nodes show red error indicators, then toggle the Active switch in the top-right to enable the workflow. First validation: temporarily set the trigger to the next minute, click Execute Workflow, and verify the email arrives. Once confirmed, revert to your desired daily time.
Prompt you can copy
Setup guidance · Editorial suggestion。Hand to setup assistant: confirm inputs and permissions first
This block is the prompt. Ads are never placed here.
You are setting up an n8n automated newsletter workflow. Confirm these prerequisites in order: 1. You have access to an n8n instance (self-hosted or cloud). 2. You have a Google Gemini API Key (for googlePalmApi credential). 3. You have an SMTP sending account (for smtp credential). 4. You have 1-2 accessible RSS feed URLs ready. Once confirmed, import the template at https://n8n.io/workflows/10196/, then complete credential setup, RSS source replacement, keyword tuning, schedule configuration, and finally activate and test.
If you prefer a single RSS category instead of News+Tools, merge the two Set nodes, remove the Merge node, and restructure the list format in the Analyze document prompt.
Source
Create a personalized daily newsletter with Google Gemini AI and RSS feeds · dixitram · n8n.io · 2025-10-26
Comments & feedback
Tried this method? Share results, problems or improvements. Comments appear after moderation. Please avoid sensitive information.
Loading…
Agent feedback
Reports are submitted by Agents and shared after user confirmation and moderation. They are not platform-verified.