1. Real Problem: Staying Updated with Multiple RSS Feeds Manually
Meet Emma, a freelance content marketer who follows news from several industry blogs and tech sites via RSS feeds. Every day, Emma spent over an hour sifting through dozens of RSS feeds manually, missing key posts sometimes, and often feeling overwhelmed. Important updates slipped through because she couldn’t check all feeds regularly, impacting her ability to produce timely content. Emma’s frustration is real: this manual effort not only wasted her time but also caused lost opportunities—something many busy professionals like her experience.
2. What This n8n Automation Does ⚙️
This workflow automates Emma’s RSS feed monitoring and alerts by:
- Triggering hourly to check recent posts.
- Reading multiple RSS feed URLs dynamically.
- Filtering posts published only within the last hour to avoid duplications.
- Sending a personalized Gmail alert for each new post found.
- Processing all feeds in batches for smooth scaling when more feeds are added.
- Guaranteeing minimal downtime via retry attempts on feed reading.
By automating these tasks, Emma saves more than an hour daily, never misses a critical update, and streamlines her content planning.
3. Prerequisites ⚙️
- n8n account to create and run workflows 🔌
- Gmail account with OAuth2 credentials configured in n8n for sending emails 📧🔑
- RSS feed URLs you want to monitor (e.g., news sites, blogs) 📁
4. Step-by-Step Guide to Build This Workflow
Step 1: Create Hourly Trigger
In n8n, click + Create Workflow. Then click + Add Node → search and select Schedule Trigger. Set the interval to trigger every 1 hour at 30 minutes past the hour. This ensures the workflow runs once each hour to check RSS feeds.
What you’ll see: The node shows a clock icon and the schedule configured.
Common mistake: Forgetting to set the trigger interval correctly leads to triggers firing too often or not at all.
Step 2: Add List of RSS Feeds Node
Add a Set node and name it List of RSS feeds. Under “Values to Set”, create an array variable named urls containing your desired RSS feed URLs. For example:
["https://www.anildash.com/feed.xml", "https://sive.rs/en.atom"]
This node holds your feeds dynamically.
Outcome: This passes the list of feed URLs to the next node for dynamic processing.
Step 3: Split the RSS Feed URLs
Add a Split Out node next and connect your RSS feed list node to it. Configure it to split out items of the urls array. This allows processing each RSS feed individually.
Tip: This helps the workflow handle multiple feeds separately, so errors in one feed don’t block others.
Step 4: Process Each Feed in Batches
To avoid flooding and keep control, add a Split In Batches node called Loop Over Items. Connect the output of the Split Out node here. This node processes feed URLs in controlled batches—for this workflow, defaults work well.
Step 5: Read RSS Feed Content
Add an RSS Feed Read node. Set its URL parameter to dynamically use each feed URL from the batch:
={{ $json.urls }}Enable “Retry On Fail” to true and set retry delay to 5000ms to handle temporary feed downtimes.
This node fetches the latest posts for each feed URL.
Step 6: Filter Posts Published in the Last Hour
Use an If node named If published in the last hour. Set conditions to check if each post’s isoDate is after the current time minus 1 hour, but before or equal to now. This filters out older posts to avoid duplicate emails.
The condition expressions are:
= DateTime.fromISO($json.isoDate) >= DateTime.now().minus({hour: 1})
= DateTime.fromISO($json.isoDate) <= DateTime.now()Step 7: Send Email for Each New Post
Add a Gmail node configured with OAuth2 credentials linked to your Gmail account. Configure the recipient email in "Send To", for example, your own address.
For the email body, use the template:
Check out this new post from {{ $json.link.extractDomain() }} at {{ $json.link }}
----
{{ $json.contentSnippet }}Set the subject line to:
New post from {{ $json.link.extractDomain() }}: {{ $json.title }}What to expect: You'll receive an email alert for each new relevant post detected across all feeds.
Step 8: Add No Operation Node (Optional)
This workflow has a "No Operation" node placed after the batch processor, which acts as a placeholder to ensure smooth workflow design or future expansion. It does nothing but can be useful to hold the workflow flow.
5. Customizations ✏️
- Add More RSS Feeds: Update the List of RSS feeds node’s
urlsarray to include any new feed URLs you want to monitor. - Change Email Recipient: In the Send email with each post Gmail node, update the
sendTofield to your preferred email address or distribution list. - Adjust Time Filter: Modify the If published in the last hour node conditions to check for posts in a different timeframe, e.g., last 30 minutes or last 2 hours.
- Batch Size Adjustment: Configure the batch size in the Loop Over Items Split In Batches node to process more or fewer feeds per run depending on your load.
- Add Post Formatting: Customize the email message template to include richer HTML formatting or add additional post metadata like author or categories by editing the Gmail node's message field.
6. Troubleshooting 🔧
Problem: "No new emails sent despite new RSS posts appearing."
Cause: The time filter in the "If published in the last hour" node is too strict or the post date format mismatches.
Solution: Double check the date filter expressions and adjust the time window or debug the isoDate format from your feeds.
Problem: "RSS Feed Read node failing or timing out."
Cause: Temporary feed server downtime or incorrect URL.
Solution: Use the "Retry On Fail" option enabled with a sensible retry delay. Verify feed URLs are correct and accessible otherwise.
Problem: "Emails flagged as spam or not delivered."
Cause: Gmail sending limits or email content triggers spam filters.
Solution: Review your Gmail sending limits and consider adding SPF/DKIM records on your sender domain if applicable. Customize email content to avoid suspicious language.
7. Pre-Production Checklist ✅
- Verify all RSS feed URLs in the List of RSS feeds node are correct and accessible.
- Test the RSS Feed Read node independently to confirm it fetches posts successfully.
- Validate the date filter in the If published in the last hour node with sample data.
- Confirm Gmail OAuth2 credentials are set up and tested by sending a test email.
- Run the workflow manually first to observe output before setting it to auto-run.
- Keep a backup of the workflow exported .json file before major changes.
8. Deployment Guide 🔌
Activate your workflow by switching it on at the top right corner. Ensure your n8n instance is running continuously (either via n8n cloud or self-hosted). Monitor execution logs for errors after initial runs via the n8n dashboard executions tab.
Because this workflow runs hourly, it is lightweight and does not require complex scaling. Adjust trigger times as needed according to your monitoring requirements.
9. FAQs
Q: Can I replace Gmail with another email service like Outlook?
A: Yes, n8n supports many email nodes including Outlook, SMTP, etc. Just replace the Gmail node and configure accordingly.
Q: Does this workflow consume a lot of API credits?
A: No, RSS feeds are typically open and don't require API key usage. Gmail's sending limits should be considered based on volume.
Q: Is my RSS feed data secure?
A: The workflow runs within your n8n instance. Emails are sent securely through Gmail's OAuth2, so your credentials stay private.
10. Conclusion
By completing this workflow, you’ve automated monitoring multiple RSS feeds and receive timely Gmail alerts for new posts published in the last hour. This setup saves you over an hour daily and helps ensure you never miss critical updates, improving your productivity and information intake.
Next, consider expanding this automation by adding Slack notifications, saving posts to Google Sheets, or creating digest emails summarizing new posts daily.
Keep exploring n8n automation possibilities and customize workflows to best fit your unique needs!