AutomationFlowsAI & RAG › Monitor Website and RSS Changes with Apify, Gpt-4o Mini and Slack Alerts

Monitor Website and RSS Changes with Apify, Gpt-4o Mini and Slack Alerts

ByAbu @abu-rebooting on n8n.io

This workflow runs every morning to monitor RSS feeds and webpages for changes using Apify, summarizes each detected change with OpenAI, and posts a Slack alert with a one-line, Slack-ready update. Runs every morning at 08:00 on a schedule. Sends a configured list of RSS feeds…

Cron / scheduled trigger★★★★☆ complexityAI-powered12 nodes@Apify/N8N Nodes ApifyOpenAI ChatChain LlmSlack
AI & RAG Trigger: Cron / scheduled Nodes: 12 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Chainllm → OpenAI Chat 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
{
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "name": "Monitor websites & RSS feeds for changes \u2192 GPT summary \u2192 Slack alert",
  "nodes": [
    {
      "id": "e0a393ed-8d9f-457b-9767-988526113a69",
      "name": "Run every morning",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        260,
        300
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "1783e79f-28b4-46a7-b468-67393aeab366",
      "name": "Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        480,
        300
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "034cbe6f-8939-4942-afc8-bb734a464bd5",
              "name": "openai_model",
              "type": "string",
              "value": "gpt-4o-mini"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7b83a629-4453-43de-bcce-569e466aa6b6",
      "name": "Monitor RSS & pages (Apify)",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        700,
        300
      ],
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "glueworks~rss-change-monitor",
          "cachedResultUrl": "https://console.apify.com/actors/glueworks~rss-change-monitor/input",
          "cachedResultName": "glueworks/rss-change-monitor"
        },
        "timeout": {},
        "customBody": "={\n  \"sources\": [\n    { \"url\": \"https://news.ycombinator.com/rss\", \"type\": \"rss\", \"keywordFilters\": [\"ai\", \"startup\"] },\n    { \"url\": \"https://example.com/pricing\", \"type\": \"webpage\", \"cssSelector\": \".price\" }\n  ],\n  \"deduplicationWindow\": 30\n}",
        "actorSource": "store",
        "waitForFinish": true
      },
      "credentials": {
        "apifyApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "11a2bb7d-999e-4699-bb32-8f34c82706a7",
      "name": "Get change events",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        920,
        300
      ],
      "parameters": {
        "limit": {},
        "offset": {},
        "resource": "Datasets",
        "datasetId": "={{ $json.defaultDatasetId }}",
        "operation": "Get items"
      },
      "credentials": {
        "apifyApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9ade8f9e-bd51-43a1-85d2-b7cb8cd3c445",
      "name": "Only real change events",
      "type": "n8n-nodes-base.filter",
      "position": [
        1140,
        300
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "4773d949-9a99-4e61-9c06-41548a7e6a78",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.eventType }}",
              "rightValue": "run_summary"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "50b4f349-bb73-4196-aa97-73f75c5f361d",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1360,
        480
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Configuration').first().json.openai_model }}"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "cc098d4a-f714-47b4-9b6a-d125ef3e816d",
      "name": "Summarize change with GPT",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1360,
        300
      ],
      "parameters": {
        "text": "=Change event (JSON):\n{{ JSON.stringify($json) }}\n\nWrite the one-line summary now.",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "You are a monitoring assistant. You receive ONE change event detected on a website or RSS feed (fields: eventType, sourceUrl, sourceType, and either an 'item' object with title/link/summary for new_item, or contentPreview for page_changed). Write a single concise Slack-ready line (max 240 chars): what changed, where, and why it may matter. No markdown headers."
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.9
    },
    {
      "id": "8bd845d7-b671-485b-95ae-9c373f94ddd8",
      "name": "Post to Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        1580,
        300
      ],
      "parameters": {
        "text": "=:rotating_light: *Change detected* \u2014 {{ $('Only real change events').item.json.sourceUrl }}\n{{ $json.text }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultName": "#alerts"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        },
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "017e3b69-c998-4b54-8bbf-bda490abbab5",
      "name": "note-title",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        260,
        -40
      ],
      "parameters": {
        "color": 4,
        "width": 900,
        "height": 300,
        "content": "# Monitor competitor websites & RSS feeds for changes \u2192 GPT summary \u2192 Slack alert\n\nRuns daily, detects new RSS items and page-content changes with the **glueworks/rss-change-monitor** Apify Actor, summarizes each change with GPT, and posts a Slack alert.\n\n**Setup:** add Apify, OpenAI and Slack credentials, edit the `sources` list in the Apify node, pick a Slack channel. That's it."
      },
      "typeVersion": 1
    },
    {
      "id": "66040932-515a-4bcd-8899-9f7691e5d860",
      "name": "note-1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        700,
        560
      ],
      "parameters": {
        "color": 7,
        "width": 440,
        "height": 220,
        "content": "## 1. Schedule & scrape\nRuns every morning. The Apify Actor checks each source in `customBody.sources` and returns only NEW items / changed pages (it keeps its own dedupe state for `deduplicationWindow` days)."
      },
      "typeVersion": 1
    },
    {
      "id": "8bf81221-6e0d-48bf-ae24-69dffd3f7412",
      "name": "note-2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1140,
        560
      ],
      "parameters": {
        "color": 7,
        "width": 300,
        "height": 200,
        "content": "## 2. Filter\nThe Actor also emits a `run_summary` record \u2014 the Filter drops it so only real change events flow on."
      },
      "typeVersion": 1
    },
    {
      "id": "665a37c5-8471-4093-a315-08d0636b8d08",
      "name": "note-3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1440,
        560
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 200,
        "content": "## 3. Summarize & alert\nGPT turns each raw event into a one-line human summary, then Slack posts it to your channel. Swap Slack for Gmail/Telegram if you prefer."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "Configuration": {
      "main": [
        [
          {
            "node": "Monitor RSS & pages (Apify)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get change events": {
      "main": [
        [
          {
            "node": "Only real change events",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Summarize change with GPT",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Run every morning": {
      "main": [
        [
          {
            "node": "Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Only real change events": {
      "main": [
        [
          {
            "node": "Summarize change with GPT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Summarize change with GPT": {
      "main": [
        [
          {
            "node": "Post to Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Monitor RSS & pages (Apify)": {
      "main": [
        [
          {
            "node": "Get change events",
            "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 runs every morning to monitor RSS feeds and webpages for changes using Apify, summarizes each detected change with OpenAI, and posts a Slack alert with a one-line, Slack-ready update. Runs every morning at 08:00 on a schedule. Sends a configured list of RSS feeds…

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

This n8n-powered workflow automates the entire lifecycle of real estate lead intake, qualification, routing, assignment, and reporting across multiple channels. It brings WhatsApp inquiries and websit

Gmail, Typeform Trigger, WhatsApp Trigger +8
AI & RAG

This template is designed for B2B sales teams, recruiters, and business development professionals who want to identify sales opportunities by monitoring hiring signals from target companies. It's part

@Apify/N8N Nodes Apify, Google Sheets, Agent +4
AI & RAG

This workflow is designed for Japanese-speaking professionals, and learners who want to efficiently stay up to date with practical productivity, lifehack, and efficiency-related insights from Japanese

RSS Feed Read, Chain Llm, Google Gemini Chat +7
AI & RAG

Automate Customer Support Issue Resolution Using Ai Text Classifier. Uses lmChatOpenAi, scheduleTrigger, jira, outputParserStructured. Scheduled trigger; 36 nodes.

OpenAI Chat, Jira, Output Parser Structured +8
AI & RAG

Jiratool Schedule. Uses lmChatOpenAi, scheduleTrigger, jira, outputParserStructured. Scheduled trigger; 36 nodes.

OpenAI Chat, Jira, Output Parser Structured +8