AutomationFlowsAI & RAG › Send a Daily AI News RSS Digest with Gpt-4o, Gmail, and Microsoft Excel

Send a Daily AI News RSS Digest with Gpt-4o, Gmail, and Microsoft Excel

ByPrakash Software @prakashsoftware on n8n.io

This workflow runs on a daily schedule, pulls articles from one or more RSS feeds, filters out items already stored in Microsoft Excel, uses OpenAI to generate an HTML newsletter from the newest links, and emails the digest (or a “no new articles” notice) to recipients. Runs on…

Cron / scheduled trigger★★★★☆ complexityAI-powered21 nodesGmailRSS Feed ReadMicrosoft ExcelEmail SendOpenAI
AI & RAG Trigger: Cron / scheduled Nodes: 21 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Emailsend → OpenAI 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": "3rvLE81ad6cBo9Vw",
  "name": "AI News RSS Aggregator with Email Digest",
  "tags": [],
  "nodes": [
    {
      "id": "17e0335d-b298-415a-ba89-b1a1b6dba745",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        32
      ],
      "parameters": {
        "width": 480,
        "height": 768,
        "content": "## AI News RSS Aggregator with Email Digest\n\n### How it works\n\n1. The workflow is triggered on a schedule to aggregate RSS news articles.\n2. It extracts and processes the articles to remove duplicates.\n3. The articles are compared against previously saved articles.\n4. Through open AI news filter setup step : configure open AI node with credentials\n5. Custom processing is optionally applied before finalizing the data.\n\n### Setup steps\n\n- [ ] Configure Gmail node with credentials.\n- [ ] Set up Microsoft Excel node to connect to the correct spreadsheet.\n- [ ] Modify RSS feed URL in the RSS Read node.\n- [ ] Adjust the schedule settings in the Schedule Trigger node.\n\n### Customization\n\nUsers can customize the email template and the fields used for sending emails."
      },
      "typeVersion": 1
    },
    {
      "id": "6b783743-d3a9-4f0e-bed2-e2969d838a9a",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        624,
        560
      ],
      "parameters": {
        "color": 7,
        "width": 816,
        "height": 272,
        "content": "## Schedule and fetch RSS\n\nInitiates the workflow and fetches articles from the RSS feed."
      },
      "typeVersion": 1
    },
    {
      "id": "b286e857-0b06-4221-8c53-00682ace739e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1488,
        560
      ],
      "parameters": {
        "color": 7,
        "width": 816,
        "height": 272,
        "content": "## Remove duplicates and compare\n\nHandles duplicate removal and compares fetched articles with stored articles."
      },
      "typeVersion": 1
    },
    {
      "id": "c862939c-729d-42c6-81ef-64a3a5a5afed",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        864
      ],
      "parameters": {
        "color": 7,
        "width": 1120,
        "height": 288,
        "content": "## Process new articles\n\nProcesses new articles to prepare them for email alerts and storage."
      },
      "typeVersion": 1
    },
    {
      "id": "d82946f9-cd2b-4f63-b288-e6b8f17401b1",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2352,
        528
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 304,
        "content": "## Save articles to sheet\n\nLimits results and appends new articles to an Excel sheet for record-keeping."
      },
      "typeVersion": 1
    },
    {
      "id": "6c1bb6dd-2adc-41c0-8745-5c5a084c1264",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2336,
        864
      ],
      "parameters": {
        "color": 7,
        "height": 352,
        "content": "## Send email notifications\n\nSends out email notifications for new articles if found."
      },
      "typeVersion": 1
    },
    {
      "id": "f019b99f-9d4f-4f97-b4cb-c120b6211a14",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1536,
        992
      ],
      "parameters": {
        "sendTo": "User email addresses (comma-separated) for email recipients",
        "message": "={{$json.body}}",
        "options": {},
        "subject": "={{$json.subject}}"
      },
      "typeVersion": 2.2
    },
    {
      "id": "a9d9adbb-fc22-4b43-aeab-1dbf3f2642e7",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        880,
        672
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "{\n  \"urls\": [ News source URLs (comma-separated) ]\n}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "9ecf383d-096e-460e-b387-c1a033569f3b",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1088,
        672
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "urls"
      },
      "typeVersion": 1
    },
    {
      "id": "835171a8-c7be-4964-87be-59c1b713f052",
      "name": "RSS Read",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        1296,
        672
      ],
      "parameters": {
        "url": "={{$json.urls}}",
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "d3297f38-fc59-4776-97bc-9a8e6c2f96fb",
      "name": "Remove Duplicates",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        1536,
        672
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {},
        "fieldsToCompare": "link"
      },
      "typeVersion": 2
    },
    {
      "id": "b4b42241-b700-461e-9f94-dc9cc1dc1c35",
      "name": "Get rows from sheet",
      "type": "n8n-nodes-base.microsoftExcel",
      "onError": "continueRegularOutput",
      "position": [
        1744,
        672
      ],
      "parameters": {
        "options": {},
        "resource": "worksheet",
        "workbook": {
          "__rl": true,
          "mode": "list",
          "value": "01SEK3TU4VIHB2D6HPKJALIL4GVEIMPNL6",
          "cachedResultUrl": "URL of the Excel sheet where the news data should be stored",
          "cachedResultName": "AI News"
        },
        "operation": "readRows",
        "worksheet": {
          "__rl": true,
          "mode": "list",
          "value": "{+1234567890+1234567890}",
          "cachedResultUrl": "URL of the Excel sheet where the news data should be stored",
          "cachedResultName": "AI"
        }
      },
      "executeOnce": true,
      "typeVersion": 2.2,
      "alwaysOutputData": true
    },
    {
      "id": "5b8ca5d8-27da-409d-ad14-30febe068fc9",
      "name": "Compare Links",
      "type": "n8n-nodes-base.code",
      "position": [
        1952,
        672
      ],
      "parameters": {
        "jsCode": "// RSS articles\nconst rssItems = $items(\"Remove Duplicates\");\n\n// Existing sheet rows\nconst sheetRows = items;\n\n// Create set of existing links\nconst existingLinks = new Set(\n  sheetRows.map(row => row.json.link)\n);\n\n// Return only new articles\nreturn rssItems.filter(article =>\n  !existingLinks.has(article.json.link)\n);"
      },
      "typeVersion": 2
    },
    {
      "id": "4fb1c11f-fa49-488d-915d-57ee395a4e08",
      "name": "Send an Email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        2384,
        1056
      ],
      "parameters": {
        "html": "<p>No new articles were found in the RSS feeds.</p>\n",
        "options": {},
        "subject": "AI News Workflow - No New Articles",
        "toEmail": "User email addresses (comma-separated) for email recipients",
        "fromEmail": "Sender email address to be used for sending emails"
      },
      "typeVersion": 2.1
    },
    {
      "id": "93469d86-01db-4f00-8580-a2c715caacd2",
      "name": "Limit",
      "type": "n8n-nodes-base.limit",
      "position": [
        2400,
        656
      ],
      "parameters": {
        "maxItems": 5
      },
      "typeVersion": 1
    },
    {
      "id": "4c08476f-7fca-4ab7-9a93-21477bf68c55",
      "name": "Code Reduce Fields",
      "type": "n8n-nodes-base.code",
      "position": [
        2768,
        656
      ],
      "parameters": {
        "jsCode": "return [\n  {\n    json: {\n      articles: items.map(item => ({\n        title: item.json.title,\n        link: item.json.link\n      }))\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "b40b8503-b44f-45d4-ad7a-e96eb37512cb",
      "name": "Edit Fields1",
      "type": "n8n-nodes-base.set",
      "position": [
        960,
        976
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "6221849c-b97a-405d-8500-f7efb42d3e6a",
              "name": "subject",
              "type": "string",
              "value": "=Daily AI News Digest"
            },
            {
              "id": "c857f2e7-cf8a-4f25-92cc-56a235717329",
              "name": "body",
              "type": "string",
              "value": "={{$json.output[0].content[0].text}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9e6de7c4-b93d-4c3d-8b83-71821c5fe7d7",
      "name": "New Articles",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        608,
        976
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "GPT-4O-MINI"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "role": "system",
              "content": "You are a technology news editor.\n\nGenerate a complete HTML email newsletter.\n\nRequirements:\n- Return ONLY HTML.\n- Start with <html><body>\n- Use <h1> for newsletter title.\n- Use <h2> for article titles.\n- Use <p> for summaries.\n- Use clickable links:\n  <a href=\"ARTICLE_URL\">Read More</a>\n- Do not output markdown.\n- Do not output JSON.\n- Do not output \\n characters.\n- Do not use code blocks.\n\nReturn valid HTML only."
            },
            {
              "content": "=Create a professional HTML email newsletter from these articles:\n\n{{ JSON.stringify($json.articles) }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "typeVersion": 2.3
    },
    {
      "id": "e6ba858d-f916-406c-a714-ef86c8ee4baa",
      "name": "New Articles2",
      "type": "n8n-nodes-base.if",
      "position": [
        2160,
        672
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0b255d5b-b41a-480c-aa8d-0a3b42cc58d8",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $input.all().length }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "af97791a-ffd9-4f0f-9e50-01b8b3d32060",
      "name": "Append data to sheet",
      "type": "n8n-nodes-base.microsoftExcel",
      "position": [
        2592,
        656
      ],
      "parameters": {
        "options": {},
        "dataMode": "autoMap",
        "resource": "worksheet",
        "workbook": {
          "__rl": true,
          "mode": "list",
          "value": "01SEK3TU4VIHB2D6HPKJALIL4GVEIMPNL6",
          "cachedResultUrl": "URL of the Excel sheet where the news data should be stored",
          "cachedResultName": "AI News"
        },
        "operation": "append",
        "worksheet": {
          "__rl": true,
          "mode": "list",
          "value": "{+1234567890+1234567890}",
          "cachedResultUrl": "URL of the Excel sheet where the news data should be stored",
          "cachedResultName": "AI"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "956e20d0-2bae-4e28-813b-1f864c0b0d83",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        672,
        672
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 20
            }
          ]
        }
      },
      "executeOnce": false,
      "typeVersion": 1.3
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "31864793-5eff-42ab-b22a-c3e550d830a2",
  "connections": {
    "Limit": {
      "main": [
        [
          {
            "node": "Append data to sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS Read": {
      "main": [
        [
          {
            "node": "Remove Duplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "RSS Read",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New Articles": {
      "main": [
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Links": {
      "main": [
        [
          {
            "node": "New Articles2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New Articles2": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send an Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicates": {
      "main": [
        [
          {
            "node": "Get rows from sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code Reduce Fields": {
      "main": [
        [
          {
            "node": "New Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get rows from sheet": {
      "main": [
        [
          {
            "node": "Compare Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append data to sheet": {
      "main": [
        [
          {
            "node": "Code Reduce Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

This workflow runs on a daily schedule, pulls articles from one or more RSS feeds, filters out items already stored in Microsoft Excel, uses OpenAI to generate an HTML newsletter from the newest links, and emails the digest (or a “no new articles” notice) to recipients. Runs on…

Source: https://n8n.io/workflows/16369/ — 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

Daily Economic News Brief for Israel (Hebrew, RTL, GPT-4o)

Email Send, HTTP Request, OpenAI +1
AI & RAG

What this workflow does Pulls free security/tech headlines from multiple RSS feeds (e.g., CISA, BleepingComputer, Krebs, SecurityWeek, Ars Technica, TechCrunch, Hacker News). De-duplicates stories, ke

RSS Feed Read, Gmail, OpenAI
AI & RAG

This automation helps small business owners track income and expenses effortlessly, turning scattered emails and WhatsApp messages into structured financial data — all without manual entry.

Gmail, OpenAI, Google Sheets +1
AI & RAG

This automation fetches daily AI-related articles from trusted RSS feeds, summarizes them using OpenAI (GPT), and generates a ready-to-post LinkedIn update in your writing style. It then emails the po

RSS Feed Read, OpenAI, Gmail
AI & RAG

Pulls free business and economic headlines from multiple publicly available RSS feeds (e.g., Reuters, Wall Street Journal, Federal Reserve, St. Louis Fed, BNP Paribas, WTO). De-duplicates stories, kee

Gmail, OpenAI, RSS Feed Read