This workflow follows the Chainllm → Google Sheets 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 →
{
"name": "RSS feeds",
"nodes": [
{
"parameters": {},
"id": "b1bba354-c5ab-4148-a282-973beee5011f",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
0,
864
],
"typeVersion": 1
},
{
"parameters": {
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $json.Document }}"
},
"sheetName": {
"__rl": true,
"mode": "url",
"value": "={{ $json[\"Rss Feeds\"] }}"
},
"options": {}
},
"id": "8e698897-a116-4eea-b603-02107c3a4370",
"name": "Get RSS Feed List",
"type": "n8n-nodes-base.googleSheets",
"position": [
448,
784
],
"notesInFlow": true,
"typeVersion": 4.6,
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"notes": "Get feeds Url's from Google Sheet"
},
{
"parameters": {
"url": "={{ $json[\"RSS URL\"] }}",
"options": {
"ignoreSSL": true
}
},
"id": "9d543793-afff-4a78-a04d-5438f7b3b685",
"name": "Read RSS",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
896,
784
],
"executeOnce": true,
"notesInFlow": true,
"typeVersion": 1.2,
"notes": "This read RSS channel"
},
{
"parameters": {
"options": {}
},
"id": "1a4887e4-b23f-480e-898f-55cabc8da594",
"name": "Loop Over Rss Elements",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1120,
592
],
"typeVersion": 3
},
{
"parameters": {
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $('Settings').item.json.Document }}"
},
"sheetName": {
"__rl": true,
"mode": "url",
"value": "={{ $('Settings').item.json[\"Articles Sheet\"] }}"
},
"filtersUI": {
"values": [
{
"lookupColumn": "link",
"lookupValue": "={{ $json.link }}"
}
]
},
"options": {}
},
"id": "9fa80517-d582-404b-b95e-da19348ccd5b",
"name": "Get Row for URL is in Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1792,
528
],
"notesInFlow": true,
"typeVersion": 4.6,
"alwaysOutputData": true,
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"notes": "Check if the record with the link exists in Google Sheets"
},
{
"parameters": {
"html": "={{ $json.data }}",
"options": {
"ignore": "img,form ",
"blockElements": ""
}
},
"id": "a4754dae-10cf-4468-b66f-f821970af750",
"name": "Convert HTML to Markdown",
"type": "n8n-nodes-base.markdown",
"position": [
3360,
528
],
"notesInFlow": true,
"typeVersion": 1,
"notes": "Markdown is more friendly LLM format than HTML"
},
{
"parameters": {
"operation": "appendOrUpdate",
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $('Settings').item.json.Document }}"
},
"sheetName": {
"__rl": true,
"mode": "url",
"value": "={{ $('Settings').item.json[\"Articles Sheet\"] }}"
},
"columns": {
"value": {
"link": "={{ $('Loop Over Rss Elements').item.json.link }}",
"title": "={{ $('Loop Over Rss Elements').item.json.title }}",
"source": "={{ $('Loop Over Rss Elements').item.json[\"RSS NAME\"] }}",
"pubDate": "={{ $('Loop Over Rss Elements').item.json.pubDate.toDateTime().format('yyyy-MM-dd HH:mm').toDateTime() }}",
"ai summary": "={{ $json.text }}",
"categories": "={{ $('Loop Over Rss Elements').item.json.categories.toJsonString() }}"
},
"schema": [
{
"id": "pubDate",
"type": "string",
"display": true,
"required": false,
"displayName": "pubDate",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "source",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "source",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "link",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "categories",
"type": "string",
"display": true,
"required": false,
"displayName": "categories",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "ai summary",
"type": "string",
"display": true,
"required": false,
"displayName": "ai summary",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"link"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {
"cellFormat": "RAW",
"useAppend": true
}
},
"id": "bc3396d0-5bc5-4576-ac83-77c3f7f69d46",
"name": "Append Aummary to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
576,
0
],
"typeVersion": 4.6,
"disabled": true
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "72a6cb17-fefb-44c6-b2d5-348ce57e8270",
"name": "RSS NAME",
"type": "string",
"value": "={{ $('Loop Over Items').item.json[\"RSS NAME\"] }}"
}
]
},
"includeOtherFields": true,
"options": {}
},
"id": "8bf9a2b8-1741-46b2-b008-0d361b08e301",
"name": "Combine Rss with source name",
"type": "n8n-nodes-base.set",
"position": [
1120,
864
],
"typeVersion": 3.4
},
{
"parameters": {
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f2fe5727-5ae3-40fe-86c5-e2ad6288303b",
"operator": {
"type": "object",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $item(\"0\").$node[\"Get Row for URL is in Sheets\"].json }}",
"rightValue": ""
}
]
},
"options": {}
},
"id": "d45d1ead-e888-483f-bfa7-077322538b1e",
"name": "Check If Article Exists",
"type": "n8n-nodes-base.if",
"position": [
2000,
528
],
"notesInFlow": true,
"typeVersion": 2.2,
"notes": "We check if the object is empty"
},
{
"parameters": {
"promptType": "define",
"text": "=Hi Gemma Summarize This:\n\n<basic_information>\n- Date: {{ $('Loop Over Rss Elements').item.json.isoDate }}\n- Title: {{ $('Loop Over Rss Elements').item.json.title }}\n- Author/Source: {{ $('Loop Over Rss Elements').item.json.creator }} / {{ $('Loop Over Rss Elements').item.json.link }}\n- Category: {{ $('Loop Over Rss Elements').item.json.categories.toJsonString() }}\n</basic_information>\n\n<content>\n{{ $json.data }}\n</content>\n\nResponse immediately without any introductory text, explanations, or commentary.",
"messages": {
"messageValues": [
{
"message": "=You Are Gemma.\n<role>\nGemma is an expert at creating concise, valuable article summaries. She can process content from various domains and specializes in extracting key information and practical insights from any type of article.\n</role>\n\n<task>\nGemma create a structured summary format of the provided article, preserving key information and practical insights.\n</task>\n\n<steps>\n- Identify main content of sended by user.\n- Prepare summary, when writing use <writing_guidelines>.\n- Make quality control based on <quality_control>.\n- Output summary driectly in Markdown frmat following <structured_summary_format>. Check <output_formatting> for guidelines.\n</steps>\n\n<writing_guidelines>\nSHOULD DO:\n- Use simple, understandable language.\n- Maintain objectivity and accuracy.\n- Extract practical insights.\n- Emphasize specific data and numbers.\n- Prioritize actionable information.\n- Adjust detail level to article length.\n- Use bullet points for better readability.\n\nSHOULD AVOID:\n- Adding her own opinions beyond the article.\n- Repeating information in different sections.\n- Using jargon without explanation.\n- Omitting important caveats/limitations.\n- Exceeding 300 words in total summary.\n- Copying entire fragments verbatim.\n</writing_guidelines>\n\n<special_cases>\n- FOR TECHNICAL ARTICLES: Gemma should explain complex terms, highlight technical requirements, and note implementation difficulty level.\n- FOR BUSINESS ARTICLES: Gemma should focus on ROI and metrics, highlight potential costs/benefits, and note target audience.\n- FOR CASE STUDIES: Gemma should describe context and challenge, present applied solution, and highlight results and success metrics.\n- TONE AND STYLE: Gemma should maintain a professional but accessible tone that is concise and concrete, focused on reader value, and action-oriented.\n</special_cases>\n\n<quality_control>\nBefore finalizing, Gemma should check:\n- Does the summary capture the essence of the article?\n- Are all sections filled?\n- Is the information accurate and verified?\n- Is the length appropriate?\n- Does the summary have practical value?\n</quality_control>\n\n<structured_summary_format>\n[1-5 sentences describing the main message of the article]\n\n## QUICK TAKEAWAYS\n\n- [3-5 most important conclusions in bullet format]\n\n## KEY POINTS\n\n- [Most important point 1]\n- [Most important point 2]\n- [Most important point 3]\n- [Most important point 4-5 if relevant]\n\n## PRACTICAL INSIGHTS\n\n- [Specific actions/recommendations]\n- [Tools/methods mentioned in the article]\n- [Metrics/numerical data if relevant]\n\n## PRACTICAL APPLICATION\n\n[How this information can be applied in business/life/relevant field]\n</structured_summary_format>\n\n<output_formatting>\nResponse immediately without any introductory text, explanations, or commentary.\nOutput formatting is Markdown.\nDo not start with block indicators (``` ```)\nYOU CAN NOT USE :\n- \"Here's a breakdown\", \n- \"Here's the summary\",\n- \"Okay, here's a breakdown of the provided text, categorized and summarized for clarity\",\n- or any other preamble. Go directly to the structured summary format.\n</output_formatting>"
}
]
},
"batching": {}
},
"id": "9a2b3b32-3528-4c9d-921f-1e2d07ffcc0c",
"name": "Summarize Content",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
0,
0
],
"retryOnFail": true,
"typeVersion": 1.7,
"disabled": true
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "52023808-641d-4f4d-9c8f-b51c9b3bbbd1",
"name": "text",
"type": "string",
"value": "={{ $json.text.replace(/<think>[\\s\\S]*?<\\/think>/g, '') }}"
}
]
},
"options": {}
},
"id": "38e63ee3-21e0-458f-88a3-7709d2dcc3d0",
"name": "Format Output",
"type": "n8n-nodes-base.set",
"position": [
352,
0
],
"typeVersion": 3.4,
"disabled": true
},
{
"parameters": {
"options": {}
},
"id": "3c3a47c4-c9f1-4447-a69f-7353a90f4437",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
672,
784
],
"typeVersion": 3
},
{
"parameters": {
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "516c4ec9-fc16-4687-a376-86a79115afc8",
"operator": {
"type": "dateTime",
"operation": "after"
},
"leftValue": "={{ $json.pubDate }}",
"rightValue": "={{ $('Settings').item.json['Current Time'].toDateTime().minus($('Settings').item.json['Last X Days'],'days').startOf('day') }}"
}
]
},
"options": {}
},
"id": "56fb891c-688b-4e42-9fec-d445f1d52e98",
"name": "Filter Last X Days",
"type": "n8n-nodes-base.filter",
"position": [
896,
592
],
"notesInFlow": true,
"typeVersion": 2.2,
"notes": "This filter only news from last x days"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "93e02cc9-f9c9-4167-ad2c-688433aa9b36",
"name": "Document",
"type": "string",
"value": "https://docs.google.com/spreadsheets/d/1a9xgLN23cIM76gm5zGwdMnx6y52bEg_4bbTXQ7WoJS8/edit?gid=0#gid=0"
},
{
"id": "c95234c3-baff-4dd6-a3ec-3a97a10e44c1",
"name": "Articles Sheet",
"type": "string",
"value": "https://docs.google.com/spreadsheets/d/1a9xgLN23cIM76gm5zGwdMnx6y52bEg_4bbTXQ7WoJS8/edit?gid=0#gid=0"
},
{
"id": "c94d9441-3b2b-421b-bb57-cfa041b132d6",
"name": "Rss Feeds",
"type": "string",
"value": "https://docs.google.com/spreadsheets/d/1a9xgLN23cIM76gm5zGwdMnx6y52bEg_4bbTXQ7WoJS8/edit?gid=255338052#gid=255338052"
},
{
"id": "94b40b88-6c7f-4bdf-8896-c8b9a4f6621f",
"name": "Current Time",
"type": "string",
"value": "={{ \n $workflow.trigger === 'Schedule Trigger' ? \n $('Schedule Trigger1').item.json.timestamp : \n $now \n}}"
},
{
"id": "eba798d1-5a87-4446-bdc4-63e8a27bc510",
"name": "Last X Days",
"type": "number",
"value": 100
}
]
},
"options": {}
},
"id": "9f4bcdce-4f10-47f0-b161-314093a55083",
"name": "Settings",
"type": "n8n-nodes-base.set",
"position": [
224,
784
],
"notesInFlow": true,
"typeVersion": 3.4,
"notes": "Set Here Your Gogle Sheets URLs and Last x Days Filter"
},
{
"parameters": {
"model": "google/gemini-2.5-flash",
"options": {
"responseFormat": "text",
"temperature": 0.3
}
},
"id": "2281787a-e955-4257-ba45-aaa112f9ea8f",
"name": "LLM Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
80,
224
],
"typeVersion": 1,
"disabled": true,
"notes": "You can choose other LLM chat model"
},
{
"parameters": {
"content": "## Settings\n\n- Copy this Google Sheet : https://docs.google.com/spreadsheets/d/1i1p_DPymm8QeZrCLxs-Skz8BMSutKpUW4khzpiNBcYc/copy\n- Enter copied URL's in settings\n- Set up time gap for news from RSS",
"height": 460,
"width": 300
},
"id": "cebee7aa-a73b-4476-a49d-0a885ebf8da9",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
496
],
"typeVersion": 1
},
{
"parameters": {
"content": "## Loop for adding source name to RSS record",
"height": 560,
"width": 1060
},
"id": "03933a6f-a19d-4b88-8184-b25499ff34c5",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
416,
464
],
"typeVersion": 1
},
{
"parameters": {},
"id": "40fb1259-85b0-43ee-befa-8654b532aa8c",
"name": "End of worfklow",
"type": "n8n-nodes-base.noOp",
"position": [
1344,
336
],
"typeVersion": 1
},
{
"parameters": {
"url": "={{ $('Loop Over Rss Elements').item.json.link }}",
"options": {
"response": {
"response": {
"responseFormat": "text"
}
}
}
},
"id": "eaf55dba-739a-4c2a-a396-7c819421d546",
"name": "Get Webpage HTML Content",
"type": "n8n-nodes-base.httpRequest",
"position": [
2240,
528
],
"typeVersion": 4.2
},
{
"parameters": {
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "data",
"cssSelector": "main",
"returnArray": true
}
]
},
"options": {
"trimValues": true,
"cleanUpText": true
}
},
"id": "ab1fb5f2-504d-4f21-8181-217099d52520",
"name": "Extract Body Content in HTML",
"type": "n8n-nodes-base.html",
"position": [
2464,
528
],
"typeVersion": 1.2,
"notes": "We need only body without images"
},
{
"parameters": {
"content": "# Monitor RSS feeds with AI summaries to Google Sheets\n\n## What this workflow does\n\nThis automation monitors multiple RSS feeds, filters new articles from the last X days, checks for duplicates, and generates AI-powered summaries. It fetches full article content, converts HTML to markdown, and uses Gemini AI to create structured summaries with quick takeaways, key points, and practical insights. All data is automatically saved to Google Sheets.\n\n## How it works\n\n1. **Read RSS feeds** from Google Sheets configuration\n2. **Filter articles** from the last X days (configurable)\n3. **Check for duplicates** by comparing URLs with existing Google Sheets data\n4. **Fetch full content** from article URLs\n5. **Convert HTML to Markdown** for better AI processing\n6. **Generate AI summaries** using Gemini AI with structured format\n7. **Save to Google Sheets** with article details and AI summary\n\n## Quick Setup\n\n1. **Copy the Google Sheet template**: https://docs.google.com/spreadsheets/d/1i1p_DPymm8QeZrCLxs-Skz8BMSutKpUW4khzpiNBcYc/copy\n\n2. **Update Settings node** with your copied Google Sheets URLs:\n - Document URL (main sheet)\n - Articles Sheet URL \n - RSS Feeds Sheet URL\n\n3. **Add your RSS feeds** to the \"RSS FEEDS\" tab in your Google Sheet:\n - RSS NAME (source name)\n - RSS URL (feed URL)\n\n4. **Configure credentials**:\n - Google Sheets OAuth2 API\n - OpenRouter API key for Gemini AI\n\n5. **Adjust time filter** in Settings node (default: last 31 days)\n\n## Google Sheets Structure\n\n### Articles Sheet Columns\n| pubDate | source | title | link | categories | ai summary |\n\n### RSS FEEDS Sheet Columns \n| RSS NAME | RSS URL |\n\n## Customization Options\n\n- **Change AI model**: Replace LLM Chat Model node with different provider\n- **Modify summary format**: Edit the AI prompt in \"Summarize Content\" node\n- **Adjust time filter**: Change \"Last X Days\" value in Settings node\n- **Add more data fields**: Extend Google Sheets columns and mapping\n\n## Scheduling\n\n- **Manual trigger**: Click \"Execute workflow\" button\n- **Automatic**: Runs every hour using Schedule Trigger (configurable)\n",
"height": 1680,
"width": 700
},
"id": "a96d1b09-c380-4d3d-97e4-fcdd526efa0d",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-768,
48
],
"typeVersion": 1
},
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 3
}
]
}
},
"id": "85616326-6723-4961-aada-2c05caa71a51",
"name": "Schedule Trigger1",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
0,
672
],
"typeVersion": 1.2
},
{
"parameters": {
"operation": "appendOrUpdate",
"documentId": {
"__rl": true,
"mode": "url",
"value": "={{ $('Settings').item.json.Document }}"
},
"sheetName": {
"__rl": true,
"mode": "url",
"value": "={{ $('Settings').item.json[\"Articles Sheet\"] }}"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"link": "={{ $('Loop Over Rss Elements').item.json.link }}",
"title": "={{ $('Loop Over Rss Elements').item.json.title }}",
"source": "={{ $('Loop Over Rss Elements').item.json[\"RSS NAME\"] }}",
"pubDate": "={{ $('Loop Over Rss Elements').item.json.pubDate.toDateTime().format('yyyy-MM-dd HH:mm').toDateTime() }}",
"categories": "={{ $('Code in JavaScript1').item.json.wordsCommaSeparated }}",
"content": "={{ $json.data['0'] }}",
"content snippet": "={{ $('Loop Over Rss Elements').item.json.contentSnippet }}"
},
"matchingColumns": [
"link"
],
"schema": [
{
"id": "pubDate",
"displayName": "pubDate",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "source",
"displayName": "source",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "title",
"displayName": "title",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "link",
"displayName": "link",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "categories",
"displayName": "categories",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true
},
{
"id": "content snippet",
"displayName": "content snippet",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
},
{
"id": "content",
"displayName": "content",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
}
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {
"cellFormat": "RAW",
"useAppend": true
}
},
"id": "d94c133f-94bc-4549-8c97-3920d842ab7a",
"name": "Append Aummary to Google Sheets2",
"type": "n8n-nodes-base.googleSheets",
"position": [
3584,
592
],
"typeVersion": 4.6,
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
},
{
"parameters": {},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
1568,
528
],
"id": "2856324c-6b20-48d1-ad22-55b2a632485b",
"name": "Wait"
},
{
"parameters": {
"jsCode": "// Get all input items from previous node\nconst inputItems = $input.all();\n\n// Map each item to add a new field with joined categories string\nreturn inputItems.map(item => {\n const categoriesArray = item.json.categories || [];\n const wordsCommaSeparated = categoriesArray.join(', ');\n return {\n json: {\n ...item.json,\n wordsCommaSeparated\n }\n };\n});\n\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1344,
528
],
"id": "dbeaf716-b571-46f9-a430-45422bd982cb",
"name": "Code in JavaScript1"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "75565575-45d2-48b9-88fd-5905eccc520c",
"leftValue": "={{ $json.data }}",
"rightValue": "",
"operator": {
"type": "array",
"operation": "empty",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
2688,
528
],
"id": "544f4447-24e4-4033-aa5b-a353ee40d354",
"name": "If"
},
{
"parameters": {
"url": "={{ $('Loop Over Rss Elements').item.json.link }}",
"options": {
"response": {
"response": {
"responseFormat": "text"
}
}
}
},
"id": "e17c1564-af32-4b6e-baaf-f2cab03c82f5",
"name": "Get Webpage HTML Content1",
"type": "n8n-nodes-base.httpRequest",
"position": [
2912,
448
],
"typeVersion": 4.2
},
{
"parameters": {
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "data",
"cssSelector": "body",
"returnArray": true
}
]
},
"options": {
"trimValues": true,
"cleanUpText": true
}
},
"id": "cb852638-3336-416e-8ede-924a740e6af8",
"name": "Extract Body Content in HTML1",
"type": "n8n-nodes-base.html",
"position": [
3136,
448
],
"typeVersion": 1.2,
"notes": "We need only body without images"
}
],
"connections": {
"Read RSS": {
"main": [
[
{
"node": "Combine Rss with source name",
"type": "main",
"index": 0
}
]
]
},
"Settings": {
"main": [
[
{
"node": "Get RSS Feed List",
"type": "main",
"index": 0
}
]
]
},
"Format Output": {
"main": [
[
{
"node": "Append Aummary to Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"LLM Chat Model": {
"ai_languageModel": [
[
{
"node": "Summarize Content",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Filter Last X Days",
"type": "main",
"index": 0
}
],
[
{
"node": "Read RSS",
"type": "main",
"index": 0
}
]
]
},
"Get RSS Feed List": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Summarize Content": {
"main": [
[
{
"node": "Format Output",
"type": "main",
"index": 0
}
]
]
},
"Filter Last X Days": {
"main": [
[
{
"node": "Loop Over Rss Elements",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Rss Elements": {
"main": [
[
{
"node": "End of worfklow",
"type": "main",
"index": 0
}
],
[
{
"node": "Code in JavaScript1",
"type": "main",
"index": 0
}
]
]
},
"Check If Article Exists": {
"main": [
[
{
"node": "Get Webpage HTML Content",
"type": "main",
"index": 0
}
],
[
{
"node": "Loop Over Rss Elements",
"type": "main",
"index": 0
}
]
]
},
"Convert HTML to Markdown": {
"main": [
[
{
"node": "Append Aummary to Google Sheets2",
"type": "main",
"index": 0
}
]
]
},
"Get Webpage HTML Content": {
"main": [
[
{
"node": "Extract Body Content in HTML",
"type": "main",
"index": 0
}
]
]
},
"Combine Rss with source name": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Extract Body Content in HTML": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Get Row for URL is in Sheets": {
"main": [
[
{
"node": "Check If Article Exists",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Settings",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger1": {
"main": [
[
{
"node": "Settings",
"type": "main",
"index": 0
}
]
]
},
"Append Aummary to Google Sheets2": {
"main": [
[
{
"node": "Loop Over Rss Elements",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Get Row for URL is in Sheets",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript1": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"If": {
"main": [
[
{
"node": "Get Webpage HTML Content1",
"type": "main",
"index": 0
}
],
[
{
"node": "Convert HTML to Markdown",
"type": "main",
"index": 0
}
]
]
},
"Get Webpage HTML Content1": {
"main": [
[
{
"node": "Extract Body Content in HTML1",
"type": "main",
"index": 0
}
]
]
},
"Extract Body Content in HTML1": {
"main": [
[
{
"node": "Convert HTML to Markdown",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1",
"callerPolicy": "workflowsFromSameOwner",
"executionTimeout": -1,
"errorWorkflow": "uH0UGoWKLVoX48ko"
},
"versionId": "b0a1f0e6-390d-4c5a-bb89-ebfb486ad0ee",
"id": "UAQYhrUx3d4JxjcE",
"tags": []
}
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.
googleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
RSS feeds. Uses googleSheets, rssFeedRead, chainLlm, lmChatOpenRouter. Event-driven trigger; 28 nodes.
Source: https://github.com/sharifahshaista/GenAI-tool-for-TI/blob/4f8799b09c512106fd6298655c0f8ae27bc5b96c/n8n-workflows/RSS-feeds.json — 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 demonstrates a simple way to run evals on a set of test cases stored in a Google Sheet.
Splitout Code. Uses lmChatOpenRouter, outputParserStructured, httpRequest, stickyNote. Event-driven trigger; 11 nodes.
This workflow automates web scraping of Amazon search result pages by retrieving raw HTML, cleaning it to retain only the relevant product elements, and then using an LLM to extract structured product
This n8n workflow automates posting Amazon affiliate products to Mastodon — complete with image upload, description, and a shortened tracking URL using Shlink.
This template is ideal for B2B founders, solopreneurs, growth marketers, SDRs, or anyone looking to scale their lead generation and enrichment with no-code tools to low-code tools.