{ "id": "SeVBt21rdprhS1x4", "name": "Monitor RSS feed changes in Apify and filter new items", "nodes": [ { "parameters": { "content": "## Monitor RSS, Atom, and JSON Feed changes\n\nUse this template to turn one public feed or feed-enabled website into an hourly stream of only new or changed items. It is useful for research alerts, release tracking, competitor monitoring, and downstream AI or messaging workflows.\n\n### How it works\n1. The schedule starts the workflow hourly.\n2. **Set feed variables** groups the URL, state namespace, first-run behavior, and output limit.\n3. **Monitor feed changes** runs the Apify Feed Contract Monitor Actor, which persists a baseline and emits feed-health plus changed-item records.\n4. **Keep new or changed items** removes health records so downstream nodes receive only feed items.\n\n### Setup\n1. This community node currently requires **self-hosted n8n**.\n2. Install `n8n-nodes-feed-contract-monitor`.\n3. Create an Apify API credential and select it on **Monitor feed changes**.\n4. Replace the example URL and namespace in **Set feed variables**.\n5. Run once with `baseline_only`, then keep the workflow scheduled; later runs emit changes against that baseline.\n\n### Customization\nConnect the last node to Slack, email, a database, or an AI Agent. Use `deliveryId` to deduplicate downstream retries.", "height": 760, "width": 1700 }, "id": "overview-sticky", "name": "Workflow overview", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -700, -1160 ] }, { "parameters": { "rule": { "interval": [ { "field": "hours", "hoursInterval": 1 } ] } }, "id": "schedule-feed-check", "name": "Every hour", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.2, "position": [ -200, 0 ] }, { "parameters": { "assignments": { "assignments": [ { "id": "feed-url", "name": "feedUrl", "value": "https://www.nasa.gov/feed/", "type": "string" }, { "id": "state-namespace", "name": "stateNamespace", "value": "rss-feed-monitor-template", "type": "string" }, { "id": "first-run-mode", "name": "firstRunMode", "value": "baseline_only", "type": "string" }, { "id": "maximum-items", "name": "maxItemsPerRun", "value": 100, "type": "number" } ] }, "options": {} }, "id": "set-feed-variables", "name": "Set feed variables", "type": "n8n-nodes-base.set", "typeVersion": 3.4, "position": [ 40, 0 ] }, { "parameters": { "feedUrls": { "values": [ { "value": "={{ $json.feedUrl }}" } ] }, "discoverFromWebsites": true, "firstRunMode": "={{ $json.firstRunMode }}", "contentMode": "excerpts", "maxInitialItems": 20, "maxItemsPerRun": "={{ $json.maxItemsPerRun }}", "maxStateItemsPerFeed": 5000, "maxExcerptChars": 2000, "maxContentChars": 20000, "staleAfterDays": 30, "stateStoreName": "feed-contract-monitor-state", "stateNamespace": "={{ $json.stateNamespace }}", "requestTimeoutSecs": 20, "maxResponseBytes": 5000000, "maxRetries": 2, "maxConcurrency": 5, "authentication": "apifyApi" }, "id": "monitor-feeds", "name": "Monitor feed changes", "type": "n8n-nodes-feed-contract-monitor.apifyFeedContractMonitor", "typeVersion": 1, "position": [ 300, 0 ] }, { "parameters": { "jsCode": "return items.filter((item) => item.json.recordType === 'feed_item');" }, "id": "keep-changes", "name": "Keep new or changed items", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 560, 0 ] }, { "parameters": { "content": "### 1. Schedule and configure\nRun hourly, then edit the four values in **Set feed variables** before activating the workflow.", "height": 240, "width": 460, "color": 7 }, "id": "configure-sticky", "name": "Schedule and configure note", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ -240, -320 ] }, { "parameters": { "content": "### 2. Monitor\nAdd an Apify credential. The Actor stores feed state and returns health evidence plus new or changed items.", "height": 240, "width": 300, "color": 7 }, "id": "monitor-sticky", "name": "Monitor note", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 280, -320 ] }, { "parameters": { "content": "### 3. Route changes\nThe Code node keeps feed items only. Connect its output to the destination your alerting workflow needs.", "height": 240, "width": 360, "color": 7 }, "id": "route-sticky", "name": "Route changes note", "type": "n8n-nodes-base.stickyNote", "typeVersion": 1, "position": [ 640, -320 ] } ], "connections": { "Every hour": { "main": [ [ { "node": "Set feed variables", "type": "main", "index": 0 } ] ] }, "Set feed variables": { "main": [ [ { "node": "Monitor feed changes", "type": "main", "index": 0 } ] ] }, "Monitor feed changes": { "main": [ [ { "node": "Keep new or changed items", "type": "main", "index": 0 } ] ] } }, "active": false, "settings": { "executionOrder": "v1" }, "versionId": "00000000-0000-4000-8000-000000000001", "meta": { "templateCredsSetupCompleted": false }, "tags": [] }