This workflow corresponds to n8n.io template #9599 — we link there as the canonical source.
This workflow follows the HTTP Request → RSS Feed Read recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "17eee609-c020-476a-84f7-e1630857ffc3",
"name": "Split RSS Feeds",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1488,
832
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "b9fd679f-23b6-4c6b-8b01-75939ec31cf0",
"name": "Extract the full blog",
"type": "n8n-nodes-base.httpRequest",
"position": [
3504,
512
],
"parameters": {
"url": "=https://r.jina.ai/http://{{ $json.url.replace('https://','').replace('http://','') }}",
"options": {
"response": {
"response": {
"responseFormat": "text"
}
}
}
},
"retryOnFail": true,
"typeVersion": 4.2,
"waitBetweenTries": 5000
},
{
"id": "0bc02fac-e7a7-4d0c-b23a-fc27ab2cb99d",
"name": "RSS \u2192 Items",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"maxTries": 2,
"position": [
1968,
944
],
"parameters": {
"url": "={{ $json.source_identifier }}",
"options": {
"ignoreSSL": false,
"customFields": ""
}
},
"retryOnFail": true,
"typeVersion": 1.1
},
{
"id": "a3420738-619a-405e-ae64-57d4129a27b1",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
3008,
672
],
"parameters": {
"options": {}
},
"retryOnFail": true,
"typeVersion": 3,
"waitBetweenTries": 3000
},
{
"id": "22e81a5e-24cd-4b0a-a44d-56b57592eff9",
"name": "Chill for a sec",
"type": "n8n-nodes-base.wait",
"position": [
4592,
800
],
"parameters": {
"amount": 120
},
"typeVersion": 1.1
},
{
"id": "f5a87191-24db-4fd9-baae-420950df4dc4",
"name": "Merge3",
"type": "n8n-nodes-base.merge",
"position": [
2416,
576
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "edc45dcd-17f2-4c83-8170-a5b34e566558",
"name": "Client ID + Max Content Age + Blogs",
"type": "n8n-nodes-base.merge",
"position": [
1856,
592
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"typeVersion": 3.2
},
{
"id": "1da9329d-d9d6-417c-b1eb-c3d7021fbf0c",
"name": "All Data",
"type": "n8n-nodes-base.set",
"position": [
2064,
592
],
"parameters": {
"options": {},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "b9c79d85-8a0f-4c6b-92f9-b728a0ca74fe",
"name": "Find Date & Time of Blogs",
"type": "n8n-nodes-base.dateTime",
"position": [
2240,
400
],
"parameters": {
"date": "={{ $json.pubDate || $json.isoDate }}\n",
"format": "yyyy-MM-dd",
"options": {},
"operation": "formatDate",
"outputFieldName": "standardizedPubDate"
},
"typeVersion": 2
},
{
"id": "c52eec07-e599-4266-b985-f519415f7d62",
"name": "Some data",
"type": "n8n-nodes-base.set",
"position": [
3232,
688
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "f8b53a8d-e3ae-4216-9743-fc6d9d2683e5",
"name": "url",
"type": "string",
"value": "={{ $json.link }}"
},
{
"id": "734ced73-df4d-47b1-a13e-62f15fb2e10c",
"name": "max_content_age_days",
"type": "number",
"value": "={{ $json.max_content_age_days }}"
},
{
"id": "639d26c7-6775-4842-881a-e49a20c8597c",
"name": "pubDate",
"type": "string",
"value": "={{ $json.pubDate }}"
},
{
"id": "ce2015ff-0aa2-40ce-9f4c-739e24bbe7f4",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "88f130fb-0411-466f-8e13-b91420a19c70",
"name": "creator",
"type": "string",
"value": "={{ $json.creator }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "178ffc01-c0ad-4371-8e69-e3cc08f9f55b",
"name": "Some data + Full Blog",
"type": "n8n-nodes-base.merge",
"position": [
3760,
672
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "41020247-0f19-4fab-b392-4fb275ea0bc7",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-128,
576
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 12
}
]
}
},
"retryOnFail": true,
"typeVersion": 1.2
},
{
"id": "c3454919-cfe0-4d6e-a798-b37a0f86a7a8",
"name": "max_content_age_days",
"type": "n8n-nodes-base.set",
"position": [
352,
576
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "41cbc93c-c60a-4fa2-a46c-23a0b887a270",
"name": "max_content_age_days",
"type": "number",
"value": "=60"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "5b2048be-929e-4ae1-a721-d535bf334bb0",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
1088,
832
],
"parameters": {
"options": {},
"fieldToSplitOut": "source_identifier"
},
"typeVersion": 1
},
{
"id": "b6885a88-e771-4d1d-a559-63ca33e04c2f",
"name": "blogs to track",
"type": "n8n-nodes-base.set",
"position": [
768,
832
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "4465ec7e-d770-4b59-a007-51c5b2731d8e",
"name": "source_identifier",
"type": "array",
"value": "={{ ['https://blog.n8n.io/rss', 'https://zapier.com/blog/feeds/latest/'] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6bb217f8-aa4e-4448-854c-a6f93e3facef",
"name": "Rss feed link",
"type": "n8n-nodes-base.set",
"position": [
1696,
1120
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "1c04a980-ba49-4eda-8c32-eb09dbaa448c",
"name": "source_identifier",
"type": "string",
"value": "={{ $json.source_identifier }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a86fa81a-7c9f-4eec-b036-89775f29d484",
"name": "rss feed links + blogs",
"type": "n8n-nodes-base.merge",
"position": [
2224,
1104
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"retryOnFail": true,
"typeVersion": 3.2
},
{
"id": "c6b7ffc2-3e87-4cb6-b46e-12ce0ccc341c",
"name": "Filter Out Old Blogs",
"type": "n8n-nodes-base.if",
"position": [
2688,
688
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "bccea370-70ab-478d-a77a-385af6826ae0",
"operator": {
"type": "dateTime",
"operation": "afterOrEquals"
},
"leftValue": "={{ $json.pubDate }}",
"rightValue": "={{ DateTime.now().minus({ days: $json.max_content_age_days }).toFormat('yyyy-MM-dd') }}"
}
]
}
},
"retryOnFail": false,
"typeVersion": 2.2
},
{
"id": "543e7b13-0a9d-43ae-a790-fb18e909c8bb",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-640,
144
],
"parameters": {
"width": 432,
"height": 944,
"content": "## Find blogs from your chosen websites, filter out old ones, then extract the full blog page\n\n## Necessary setup:\n\n1. The node called 'max_content_age_days' is for you to set how recent you want your blogs to be. The default is 60. That means it will save blogs that were published within the last 60 days.\n\n2. The 'blogs to track' node is a list of the blogs you are interested in tracking. The trick is that you must search for the websites' rss feed url. I have started you off with the rss feed url of n8n and zapier. If this workflow gives you a 403 error that means one of your links is wrong. It's best to find the most up to date rss feed url using something like perplexity (most up to date information).\n\n3. The 'filter out old blogs' node is set up to send OLD blogs down the false path, and NEW blogs down the true path.\n\n\n## RECOMMENDED, BUT OPTIONAL SETUP\n\n1. Replace 'blogs to track' node with a database or google sheet that stores the blogs that you are tracking. Available in my [Advanced] version of this workflow.\n\n2. Replace the 'Save Blog Data to Database' node with your preference of storage, such as: Google Sheets, Airtable, or n8n's very own Data Table node.\n\n\nCheck my page for more templates, I'm posting more variations of this workflow. Send me questions if you need help!\n\nI got you!"
},
"typeVersion": 1
},
{
"id": "7c2264d3-53d4-4e3c-a531-44e283eac324",
"name": "final data",
"type": "n8n-nodes-base.set",
"position": [
3984,
672
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "f8b53a8d-e3ae-4216-9743-fc6d9d2683e5",
"name": "url",
"type": "string",
"value": "={{ $json.url }}"
},
{
"id": "734ced73-df4d-47b1-a13e-62f15fb2e10c",
"name": "max_content_age_days",
"type": "number",
"value": "={{ $json.max_content_age_days }}"
},
{
"id": "639d26c7-6775-4842-881a-e49a20c8597c",
"name": "pubDate",
"type": "string",
"value": "={{ $json.pubDate }}"
},
{
"id": "ce2015ff-0aa2-40ce-9f4c-739e24bbe7f4",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "88f130fb-0411-466f-8e13-b91420a19c70",
"name": "creator",
"type": "string",
"value": "={{ $json.creator }}"
},
{
"id": "331145fd-4e55-4958-bb74-54c45ff8f678",
"name": "content_snippet",
"type": "string",
"value": "={{ $json.data }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "4a1eae70-85b0-4347-8fda-ff278d2f0b2a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
272,
336
],
"parameters": {
"color": 4,
"height": 464,
"content": "## Choose # of Days \n\nFilter out blogs older than **your number of days** old\n\nThe default is 60, so it won't save blogs posted over 60 days ago.\n"
},
"typeVersion": 1
},
{
"id": "5bdadc42-a5a7-41e1-b4f0-7c957a5c2b7c",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
688,
528
],
"parameters": {
"color": 4,
"width": 256,
"height": 512,
"content": "## Find RSS FEED URLS\n\nAdd the rss feed urls of the blogs that you want to track. I highly recommend using an LLM like perplexity to help you find the most up to date rss feeds.\n\nSearch for something like: What is the rss feed url for the n8n blog in [today's date]\n"
},
"typeVersion": 1
},
{
"id": "e4d2c25b-3b6b-4a5e-b801-0ae7ac37e806",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1008,
640
],
"parameters": {
"width": 256,
"height": 368,
"content": "## Splits all of the websites into their own items so that they go into the loop one at a time\n"
},
"typeVersion": 1
},
{
"id": "1c03e50f-5fc2-44e7-9f68-3678e1f9236b",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1296,
768
],
"parameters": {
"color": 6,
"width": 1136,
"height": 544,
"content": "## This loops over the websites one at a time to find all blogs."
},
"typeVersion": 1
},
{
"id": "6f313a1a-14cd-44d6-86f5-4258f18d4976",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
2160,
256
],
"parameters": {
"width": 256,
"height": 320,
"content": "## Adds a 'published date' in an easy to read format\n\n"
},
"typeVersion": 1
},
{
"id": "8e880374-0876-40ed-8883-ee5ad59b8c4b",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2608,
544
],
"parameters": {
"width": 256,
"height": 288,
"content": "## Filters out blogs that are older than the date you specified\n"
},
"typeVersion": 1
},
{
"id": "1cc1da4c-a422-4df2-9b45-341b0c54cdfe",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
3168,
528
],
"parameters": {
"width": 224,
"height": 304,
"content": "## Gathers the necessary data to extract the FULL blog"
},
"typeVersion": 1
},
{
"id": "6ebf2bd4-a8c3-4ea0-b2ee-c9261bcea246",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
3440,
224
],
"parameters": {
"color": 4,
"height": 416,
"content": "## Extract Full Blog\n\nSometimes the rss feed only captures a snippet of the blogs. This is a completely free - zero set up required - method to extract ALL of the contents on a blog page. It captures everything from the title all the way down to the sources and privacy policy at the bottom of a website's page\n"
},
"typeVersion": 1
},
{
"id": "615527c9-bc1d-4b88-8fb2-bc9de33c7926",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
3936,
512
],
"parameters": {
"width": 224,
"height": 304,
"content": "## Format the final data to be uploaded to your storage location"
},
"typeVersion": 1
},
{
"id": "09a6a6ac-3231-4d59-a5cd-04ad8c87a124",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
4224,
352
],
"parameters": {
"color": 4,
"width": 256,
"height": 496,
"content": "## Save your blog!!!\n\nSwitch this node out for one that your prefer, if you don't like Supabase.\n\nAlternatives:\n- Google Sheet\n- Airtable\n- Or even the NEW n8n Data Table node (Select 'Insert Row')"
},
"typeVersion": 1
},
{
"id": "89eee038-b387-415d-b28a-e580010c5afa",
"name": "Save Blog Data to Database",
"type": "n8n-nodes-base.supabase",
"onError": "continueRegularOutput",
"position": [
4304,
672
],
"parameters": {
"tableId": "content_queue_1",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "content_type",
"fieldValue": "blog"
},
{
"fieldId": "source_url",
"fieldValue": "={{ $json.url }}"
},
{
"fieldId": "content_snippet",
"fieldValue": "={{ $json.content_snippet }}"
},
{
"fieldId": "status",
"fieldValue": "new"
},
{
"fieldId": "published_date",
"fieldValue": "={{ $json.pubDate }}"
},
{
"fieldId": "creator",
"fieldValue": "={{ $json.creator }}"
},
{
"fieldId": "title",
"fieldValue": "={{ $json.title }}"
}
]
}
},
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"retryOnFail": true,
"typeVersion": 1,
"alwaysOutputData": false
}
],
"connections": {
"Merge3": {
"main": [
[
{
"node": "Filter Out Old Blogs",
"type": "main",
"index": 0
}
]
]
},
"All Data": {
"main": [
[
{
"node": "Find Date & Time of Blogs",
"type": "main",
"index": 0
},
{
"node": "Merge3",
"type": "main",
"index": 1
}
]
]
},
"Some data": {
"main": [
[
{
"node": "Extract the full blog",
"type": "main",
"index": 0
},
{
"node": "Some data + Full Blog",
"type": "main",
"index": 1
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Split RSS Feeds",
"type": "main",
"index": 0
}
]
]
},
"final data": {
"main": [
[
{
"node": "Save Blog Data to Database",
"type": "main",
"index": 0
}
]
]
},
"RSS \u2192 Items": {
"main": [
[
{
"node": "rss feed links + blogs",
"type": "main",
"index": 0
}
],
[]
]
},
"Rss feed link": {
"main": [
[
{
"node": "RSS \u2192 Items",
"type": "main",
"index": 0
},
{
"node": "rss feed links + blogs",
"type": "main",
"index": 1
}
]
]
},
"blogs to track": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Chill for a sec": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Some data",
"type": "main",
"index": 0
}
]
]
},
"Split RSS Feeds": {
"main": [
[
{
"node": "Client ID + Max Content Age + Blogs",
"type": "main",
"index": 1
}
],
[
{
"node": "Rss feed link",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "max_content_age_days",
"type": "main",
"index": 0
}
]
]
},
"Filter Out Old Blogs": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"max_content_age_days": {
"main": [
[
{
"node": "Client ID + Max Content Age + Blogs",
"type": "main",
"index": 0
},
{
"node": "blogs to track",
"type": "main",
"index": 0
}
]
]
},
"Extract the full blog": {
"main": [
[
{
"node": "Some data + Full Blog",
"type": "main",
"index": 0
}
]
]
},
"Some data + Full Blog": {
"main": [
[
{
"node": "final data",
"type": "main",
"index": 0
}
]
]
},
"rss feed links + blogs": {
"main": [
[
{
"node": "Split RSS Feeds",
"type": "main",
"index": 0
}
]
]
},
"Find Date & Time of Blogs": {
"main": [
[
{
"node": "Merge3",
"type": "main",
"index": 0
}
]
]
},
"Save Blog Data to Database": {
"main": [
[
{
"node": "Chill for a sec",
"type": "main",
"index": 0
}
]
]
},
"Client ID + Max Content Age + Blogs": {
"main": [
[
{
"node": "All Data",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
supabaseApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow solves a common problem with RSS feeds: they often only provide a short summary or snippet of the full article. This template automatically monitors a list of your favorite blog RSS feeds, filters for new content, visits the article page to extract the entire blog…
Source: https://n8n.io/workflows/9599/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow is a multi-system document synchronization pipeline built in n8n, designed to automatically sync and back up files between Microsoft SharePoint, Supabase/Postgres, and Google Drive.
03 - Recordatorio 4h (CON VERIFICACIÓN) ✅. Uses supabase, httpRequest, twilio. Scheduled trigger; 17 nodes.
02 - Recordatorio 24h antes (CON VERIFICACIÓN) ✅. Uses supabase, httpRequest, twilio. Scheduled trigger; 17 nodes.
• Fetches IT-related tenders from the French BOAMP API (filter: informatique) • Scores each tender with OpenAI (pertinence, budget, stack, GO/NO-GO) • Routes to Supabase as hot (≥75) or archived • Run
How it works: