AutomationFlowsAI & RAG › Automated News Aggregation & AI Summary

Automated News Aggregation & AI Summary

Original n8n title: News Aggregator

News Aggregator. Uses rssFeedRead, agent, lmChatOllama, emailSend. Scheduled trigger; 11 nodes.

Cron / scheduled trigger★★★★☆ complexityAI-powered11 nodesRSS Feed ReadAgentOllama ChatEmail Send
AI & RAG Trigger: Cron / scheduled Nodes: 11 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Agent → Emailsend 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
{
  "name": "News Aggregator",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 7
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -336,
        -128
      ],
      "id": "6b825ceb-9cc3-4457-a90f-26fea61281f0",
      "name": "Schedule Trigger"
    },
    {
      "parameters": {
        "url": "={{ $json.rss }}",
        "options": {
          "customFields": "User-Agent"
        }
      },
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        304,
        -128
      ],
      "id": "2fdaf31f-e191-47f5-92b8-fdf93856c276",
      "name": "RSS Read"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.original_title }}\n\n{{ $json.original_content }}\n\nWrite ONLY 3 sentences maximum explaining what was announced:",
        "options": {
          "systemMessage": "You write ultra-brief news summaries. MAXIMUM 3 sentences. NO bullet points. NO sections. NO headings. Just a plain 3-sentence paragraph stating what was announced and why it matters. That's it."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2.2,
      "position": [
        864,
        16
      ],
      "id": "13fa4c2e-cff5-4e10-bac0-fcdb2e0b121d",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "458d05dc-202b-4097-a722-cf9fd6daf8a6",
              "name": "original_title",
              "value": "={{ $json.title }}",
              "type": "string"
            },
            {
              "id": "6075300e-127a-428a-a445-c2151ba3cf58",
              "name": "original_link",
              "value": "={{ $json.link }}",
              "type": "string"
            },
            {
              "id": "30557b3d-a583-41cc-b408-15e2382f1593",
              "name": "original_content",
              "value": "={{ $json['content:encodedSnippet'] }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        672,
        -128
      ],
      "id": "d535a8fe-e86a-4142-ac86-aa6f72a87f8d",
      "name": "Edit Fields - Save originals"
    },
    {
      "parameters": {
        "mode": "combine",
        "combineBy": "combineByPosition",
        "options": {}
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        1184,
        -112
      ],
      "id": "e68cd577-0339-4156-9453-8c08f7a41563",
      "name": "Merge"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "2d7aab64-0a07-4425-a601-da5cf1407730",
              "name": "rss",
              "value": "[\"https://aws.amazon.com/blogs/aws-insights/feed/\", \"https://aws.amazon.com/blogs/aws/feed/\", \"https://aws.amazon.com/blogs/machine-learning/feed/\"]",
              "type": "array"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -112,
        -128
      ],
      "id": "aa006f55-25f9-42a1-8bd8-34d5b3fc5de3",
      "name": "Edit Fields - RSS Feeds"
    },
    {
      "parameters": {
        "model": "qwen2.5:7b",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOllama",
      "typeVersion": 1,
      "position": [
        864,
        224
      ],
      "id": "5431f542-cd6f-468d-9089-801fdcc16479",
      "name": "Ollama Chat Model",
      "credentials": {
        "ollamaApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "fieldToSplitOut": "rss",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        96,
        -128
      ],
      "id": "d4d115d7-d0a8-4920-8e53-b62c4281f7ea",
      "name": "Split Out - RSS feeds"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "0fd4da78-08af-4b5b-986b-0fdd494e21b9",
              "leftValue": "={{ DateTime.fromRFC2822($json.pubDate).toFormat('yyyy-MM-dd') }}",
              "rightValue": "={{ DateTime.now().minus({ days: 1 }).toFormat('yyyy-MM-dd') }}",
              "operator": {
                "type": "dateTime",
                "operation": "afterOrEquals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        496,
        -128
      ],
      "id": "d15bae33-7657-47f6-afde-79056f9f21a2",
      "name": "24 Hour Filter"
    },
    {
      "parameters": {
        "jsCode": "// Get all input items\nconst stories = $input.all();\n\n// Format today's date\nconst today = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });\n\n// Start building the HTML email\nlet digest = `<!DOCTYPE html>\n<html>\n<head>\n  <style>\n    body { font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif; line-height: 1.6; color: #333; max-width: 650px; margin: 0 auto; background-color: #f5f5f5; }\n    .container { background-color: white; }\n    .header { background-color: white; padding: 40px 30px 20px 30px; border-bottom: 1px solid #e0e0e0; }\n    .header h1 { margin: 0; font-size: 28px; color: #1a1a1a; font-weight: 600; }\n    .header p { margin: 8px 0 0 0; color: #666; font-size: 14px; }\n    .content { padding: 20px 30px; }\n    .section-title { font-size: 20px; font-weight: 600; color: #1a1a1a; margin: 30px 0 20px 0; padding-bottom: 10px; border-bottom: 2px solid #f0f0f0; }\n    .article { margin: 25px 0; padding-bottom: 25px; border-bottom: 1px solid #f0f0f0; }\n    .article:last-child { border-bottom: none; }\n    .article-title { font-size: 16px; font-weight: 600; margin: 0 0 12px 0; color: #0066cc; line-height: 1.4; }\n    .article-summary { margin: 0 0 12px 0; color: #333; font-size: 15px; line-height: 1.6; }\n    .article-link { color: #0066cc; text-decoration: none; font-size: 14px; font-weight: 500; }\n    .article-link:hover { text-decoration: underline; }\n    .footer { text-align: center; padding: 30px; color: #999; font-size: 12px; background-color: #fafafa; border-top: 1px solid #e0e0e0; }\n  </style>\n</head>\n<body>\n  <div class=\"container\">\n    <div class=\"header\">\n      <h1>\ud83d\udcf0 Daily Tech News Digest</h1>\n      <p>${today}</p>\n    </div>\n    <div class=\"content\">\n      <div class=\"section-title\">\ud83d\ude80 Headlines & Launches</div>`;\n\n// Loop through each story\nfor (const story of stories) {\n  // Get the data from each story\n  const title = story.json.original_title || 'Untitled';\n  const summary = story.json.output || 'No summary available';\n  const link = story.json.original_link || '#';\n  \n  // Skip articles with confused summaries\n  if (summary.includes('Could you please') || \n      summary.includes(\"I don't have access\") || \n      summary.includes('I can help summarize')) {\n    continue;\n  }\n  \n  // Add article HTML\n  digest += `\n      <div class=\"article\">\n        <div class=\"article-title\">${title}</div>\n        <div class=\"article-summary\">${summary}</div>\n        <a href=\"${link}\" class=\"article-link\">Read more \u2192</a>\n      </div>`;\n}\n\n// Close the HTML\ndigest += `\n    </div>\n    <div class=\"footer\">\n      <p>This email was sent automatically with n8n</p>\n    </div>\n  </div>\n</body>\n</html>`;\n\n// Return the result\nreturn [{ json: { message: digest } }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1360,
        -112
      ],
      "id": "44ac0931-be47-4887-8418-da13e57bca3b",
      "name": "Code - Daily Summary"
    },
    {
      "parameters": {
        "fromEmail": "golickmybutt@gmail.com",
        "toEmail": "golickmybutt@gmail.com",
        "subject": "Cloud Tech Digest",
        "html": "={{ $json.message }}",
        "options": {}
      },
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2.1,
      "position": [
        1568,
        0
      ],
      "id": "70375d27-cc11-4464-b995-c0db6777a649",
      "name": "Send email",
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Edit Fields - RSS Feeds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS Read": {
      "main": [
        [
          {
            "node": "24 Hour Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Edit Fields - Save originals": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          },
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Code - Daily Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields - RSS Feeds": {
      "main": [
        [
          {
            "node": "Split Out - RSS feeds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ollama Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Split Out - RSS feeds": {
      "main": [
        [
          {
            "node": "RSS Read",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "24 Hour Filter": {
      "main": [
        [
          {
            "node": "Edit Fields - Save originals",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code - Daily Summary": {
      "main": [
        [
          {
            "node": "Send email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "137608f0-01f5-46f7-a848-fc7bbb68471f",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "I6MhdDxO0REKPRHH",
  "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.

Pro

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

How this works

Stay informed on the latest news without endless scrolling through feeds by receiving personalised daily summaries tailored to your interests. This workflow fetches articles from RSS sources, uses an AI agent powered by Ollama to analyse and condense them into concise insights, and emails you a custom digest. Ideal for busy professionals, researchers, or enthusiasts who value time-efficient updates from preferred outlets like BBC or The Guardian.

Use this when you need automated, AI-enhanced news overviews on a schedule, such as daily briefings, to replace manual feed checking. Avoid it for real-time alerts or non-RSS sources, where dedicated news APIs might suit better. Common variations include swapping Ollama for another LLM or adding filters for specific topics like tech or finance.

About this workflow

News Aggregator. Uses rssFeedRead, agent, lmChatOllama, emailSend. Scheduled trigger; 11 nodes.

Source: https://github.com/budcalabrese/homelab/blob/26db456f55e2b4b8434d3ca182a208aa051a0a48/n8n-workflows/News-Aggregator.json — 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

Rss-Daily. Uses @mendable/n8n-nodes-firecrawl, agent, gmail, lmChatOllama. Scheduled trigger; 38 nodes.

@Mendable/N8N Nodes Firecrawl, Agent, Gmail +4
AI & RAG

This workflow automatically generates a daily Indian marketing & advertising newsletter. It fetches articles from Campaign India and Economic Times BrandEquity feeds, merges them, and evaluates each s

Email Send, Agent, RSS Feed Read +3
AI & RAG

Early Warning Tracker. Uses agent, lmChatGoogleGemini, emailSend, slack. Scheduled trigger; 20 nodes.

Agent, Google Gemini Chat, Email Send +4
AI & RAG

This n8n workflow automatically fetches top technology news from Google News, summarizes it using AI, and sends a daily email with key updates. Users get a concise overview of important tech developme

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

This workflow auto-fetches top financial headlines, cleans the content, and uses AI to summarize it into a short investor-friendly email. The workflow runs daily and relies on stable webpage access; c

HTTP Request, Agent, Email Send +1