AutomationFlowsAI & RAG › Automated RSS Monitoring with Gemini AI Summaries and Deduplication to…

Automated RSS Monitoring with Gemini AI Summaries and Deduplication to…

Original n8n title: Automated RSS Monitoring with Gemini AI Summaries and Deduplication to Google Sheets

ByRoman Rozenberger @romek on n8n.io

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Event trigger★★★★☆ complexityAI-powered23 nodesGoogle SheetsRSS Feed ReadChain LlmOpenRouter ChatHTTP Request
AI & RAG Trigger: Event Nodes: 23 Complexity: ★★★★☆ AI nodes: yes Added:
Automated RSS Monitoring with Gemini AI Summaries and Deduplication to… — n8n workflow card showing Google Sheets, RSS Feed Read, Chain Llm integration

This workflow corresponds to n8n.io template #5778 — we link there as the canonical source.

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 →

Download .json
{
  "id": "4ugQDSCMUWFpn5qo",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "RSS READER WITHOUT DUPLICATES",
  "tags": [],
  "nodes": [
    {
      "id": "abe6ed52-40ac-4ed5-abea-419d94505509",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -3080,
        360
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "43696041-99ea-4d24-b677-d025bb556544",
      "name": "Get RSS Feed List",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Get feeds Url's  from Google Sheet",
      "position": [
        -2380,
        280
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $json[\"Rss Feeds\"] }}"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $json.Document }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6
    },
    {
      "id": "02fc9382-dd56-4af0-8c1c-9f3c83461b05",
      "name": "Read RSS",
      "type": "n8n-nodes-base.rssFeedRead",
      "notes": "This read RSS channel",
      "position": [
        -1900,
        480
      ],
      "parameters": {
        "url": "={{ $json[\"RSS URL\"] }}",
        "options": {
          "ignoreSSL": true
        }
      },
      "executeOnce": true,
      "notesInFlow": true,
      "typeVersion": 1.2
    },
    {
      "id": "c39a746a-639e-4d21-9dac-6974bb52a030",
      "name": "Loop Over Rss Elements",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1340,
        -200
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "b7f5ad99-0ea3-45b6-ae0b-07458a4255b3",
      "name": "Get Row for URL is in Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Check if the record with the link exists in Google Sheets",
      "position": [
        -1120,
        -180
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.link }}",
              "lookupColumn": "link"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Settings').item.json[\"Articles Sheet\"] }}"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Settings').item.json.Document }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6,
      "alwaysOutputData": true
    },
    {
      "id": "05c8ff40-8232-4683-950a-37fa60d87eb2",
      "name": "Convert HTML to Markdown",
      "type": "n8n-nodes-base.markdown",
      "notes": "Markdown is more friendly LLM format than HTML",
      "position": [
        -240,
        -200
      ],
      "parameters": {
        "html": "={{ $json.data }}",
        "options": {
          "ignore": "img,form",
          "blockElements": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "6708c44c-e1a5-4f2b-9780-c980c7a95053",
      "name": "Append Aummary to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        580,
        -40
      ],
      "parameters": {
        "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": {
          "useAppend": true,
          "cellFormat": "RAW"
        },
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Settings').item.json[\"Articles Sheet\"] }}"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $('Settings').item.json.Document }}"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "366e157b-9ff0-4913-b993-7d37c3252fe2",
      "name": "Combine Rss with source name",
      "type": "n8n-nodes-base.set",
      "position": [
        -1660,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "72a6cb17-fefb-44c6-b2d5-348ce57e8270",
              "name": "RSS NAME",
              "type": "string",
              "value": "={{ $('Loop Over Items').item.json[\"RSS NAME\"] }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "29f5c69a-c6ea-4191-bff5-914044efb76e",
      "name": "Check If Article Exists",
      "type": "n8n-nodes-base.if",
      "notes": "We check if the object is empty",
      "position": [
        -900,
        -180
      ],
      "parameters": {
        "options": {},
        "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": ""
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.2
    },
    {
      "id": "a3e91192-55c8-4384-8d2e-fc6cc7321c98",
      "name": "Summarize Content",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        -20,
        -200
      ],
      "parameters": {
        "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.",
        "batching": {},
        "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>"
            }
          ]
        },
        "promptType": "define"
      },
      "retryOnFail": true,
      "typeVersion": 1.7
    },
    {
      "id": "6edc03ae-3932-4b6d-b8f1-98cb2e51f4cb",
      "name": "Format Output",
      "type": "n8n-nodes-base.set",
      "position": [
        320,
        -200
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "52023808-641d-4f4d-9c8f-b51c9b3bbbd1",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text.replace(/<think>[\\s\\S]*?<\\/think>/g, '') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "02eb922d-ae5c-4029-a01a-3a279989fa1c",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -3080,
        180
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "131b0ae1-bc12-48d8-a20d-bbffbf9b6bee",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -2100,
        280
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "28c1347b-e54e-405e-ab0a-da6a422187da",
      "name": "Filter Last X Days",
      "type": "n8n-nodes-base.filter",
      "notes": "This filter only news from last x days",
      "position": [
        -1740,
        -200
      ],
      "parameters": {
        "options": {},
        "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') }}"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.2
    },
    {
      "id": "852a3623-87a1-4a96-99f4-eb8303ab7c2c",
      "name": "Settings",
      "type": "n8n-nodes-base.set",
      "notes": "Set Here Your Gogle Sheets URLs and Last x Days Filter",
      "position": [
        -2640,
        280
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "93e02cc9-f9c9-4167-ad2c-688433aa9b36",
              "name": "Document",
              "type": "string",
              "value": "https://docs.google.com/spreadsheets/d/1i1p_DPymm8QeZrCLxs-Skz8BMSutKpUW4khzpiNBcYc/edit?gid=0#gid=0"
            },
            {
              "id": "c95234c3-baff-4dd6-a3ec-3a97a10e44c1",
              "name": "Articles Sheet",
              "type": "string",
              "value": "https://docs.google.com/spreadsheets/d/1i1p_DPymm8QeZrCLxs-Skz8BMSutKpUW4khzpiNBcYc/edit?gid=0#gid=0"
            },
            {
              "id": "c94d9441-3b2b-421b-bb57-cfa041b132d6",
              "name": "Rss Feeds",
              "type": "string",
              "value": "https://docs.google.com/spreadsheets/d/1i1p_DPymm8QeZrCLxs-Skz8BMSutKpUW4khzpiNBcYc/edit?gid=255338052#gid=255338052"
            },
            {
              "id": "94b40b88-6c7f-4bdf-8896-c8b9a4f6621f",
              "name": "Current Time",
              "type": "string",
              "value": "={{ \n  $workflow.trigger === 'Schedule Trigger' ? \n  $('Schedule Trigger').item.json.timestamp : \n  $now \n}}"
            },
            {
              "id": "eba798d1-5a87-4446-bdc4-63e8a27bc510",
              "name": "Last X Days",
              "type": "number",
              "value": 31
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 3.4
    },
    {
      "id": "7f3236e0-025d-496e-aacc-c74f15df3ec2",
      "name": "LLM Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "notes": "You can choose other LLM chat model",
      "position": [
        -60,
        -20
      ],
      "parameters": {
        "model": "google/gemini-2.5-flash",
        "options": {
          "temperature": 0.3,
          "responseFormat": "text"
        }
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e4b8e1da-e960-4774-8419-0ffce5df9b3f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2720,
        40
      ],
      "parameters": {
        "width": 300,
        "height": 460,
        "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"
      },
      "typeVersion": 1
    },
    {
      "id": "472a0cbb-2b01-48c1-8472-8b0962269a80",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2220,
        220
      ],
      "parameters": {
        "width": 1060,
        "height": 560,
        "content": "## Loop for adding source name to RSS record"
      },
      "typeVersion": 1
    },
    {
      "id": "94ead111-4efe-459d-9053-3ff7714d5b98",
      "name": "End of worfklow",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1120,
        -460
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5e470cd5-23c9-4866-a18c-694bf1c021a9",
      "name": "Get Webpage HTML Content",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -660,
        -200
      ],
      "parameters": {
        "url": "={{ $('Loop Over Rss Elements').item.json.link }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "text"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8bc1cad5-fbbc-43fa-b41f-e668bf9bd8f8",
      "name": "Extract Body Content in HTML",
      "type": "n8n-nodes-base.html",
      "notes": "We need only body without images",
      "position": [
        -460,
        -200
      ],
      "parameters": {
        "options": {
          "trimValues": true,
          "cleanUpText": true
        },
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "data",
              "cssSelector": "body",
              "returnValue": "html"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "68bb881d-8c0c-4c21-9fab-237bcc42f76e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1080,
        300
      ],
      "parameters": {
        "color": 4,
        "width": 760,
        "height": 280,
        "content": "## Google Sheets Columns\nGoogle Sheet Template: https://docs.google.com/spreadsheets/d/1i1p_DPymm8QeZrCLxs-Skz8BMSutKpUW4khzpiNBcYc/\n### Articles Sheet\n| pubDate    | source | title | link | categories | ai summary |\n### RSS FEEDS\n| RSS NAME | RSS URL | \n"
      },
      "typeVersion": 1
    },
    {
      "id": "396e077e-aba2-4b89-bb0b-7aece91b924b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3840,
        -540
      ],
      "parameters": {
        "width": 700,
        "height": 1680,
        "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"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "e4722701-47f2-4a88-9492-6405cc67cab8",
  "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
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Settings",
            "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": "Get Row for URL is in Sheets",
            "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": "Summarize Content",
            "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": "Convert HTML to Markdown",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Row for URL is in Sheets": {
      "main": [
        [
          {
            "node": "Check If Article Exists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append Aummary to Google Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Rss Elements",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Settings",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Source: https://n8n.io/workflows/5778/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Automatically capture, categorize, and log expenses from receipts, PDFs, voice notes, or text — powered by AI and integrated with Telegram and Google Sheets.

HTTP Request, OpenAI, Chain Llm +6
AI & RAG

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

HTTP Request, Google Sheets, OpenRouter Chat +5
AI & RAG

Automate your lead intake, scoring, and outreach pipeline. This workflow collects leads from forms, enriches and scores them using Relevance AI, routes them by quality, and triggers the right follow-u

Form Trigger, HTTP Request, Chain Llm +6
AI & RAG

This n8n automation is a complete LinkedIn Content Engine that turns simple topic ideas into fully written, visual, and scheduled posts. It features a "Human-in-the-Loop" design, meaning AI handles th

HTTP Request, Google Sheets, Chain Llm +5
AI & RAG

This workflow automates the process of recording financial transactions from photos of receipts or shopping receipts. Users simply send an image of the receipt via Telegram. The image is processed usi

Telegram Trigger, HTTP Request, Chain Llm +7