AutomationFlowsSlack & Telegram › Post New Articles From Feeds to Slack Channel

Post New Articles From Feeds to Slack Channel

ByPaul Taylor @ptylr on n8n.io

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

Cron / scheduled trigger★★★★☆ complexity8 nodesSlackGoogle SheetsRSS Feed Read
Slack & Telegram Trigger: Cron / scheduled Nodes: 8 Complexity: ★★★★☆ Added:

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

This workflow follows the Google Sheets → RSS Feed Read 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": "G452NfcbwAErVDRu",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Post New Articles from Feeds to Slack Channel",
  "tags": [
    {
      "id": "HKMgMooCXhG1RvQ4",
      "name": "RSS",
      "createdAt": "2025-06-25T20:39:25.066Z",
      "updatedAt": "2025-06-25T20:39:25.066Z"
    },
    {
      "id": "LrtcE3ptvaKdYplW",
      "name": "Slack",
      "createdAt": "2025-06-25T20:39:34.824Z",
      "updatedAt": "2025-06-25T20:39:34.824Z"
    },
    {
      "id": "msIodL6e7sVaa5aZ",
      "name": "Google Sheets",
      "createdAt": "2025-06-25T20:39:20.673Z",
      "updatedAt": "2025-06-25T20:39:20.673Z"
    },
    {
      "id": "mv8twTYqHvotykOz",
      "name": "Filter",
      "createdAt": "2025-06-25T20:39:31.349Z",
      "updatedAt": "2025-06-25T20:39:31.349Z"
    }
  ],
  "nodes": [
    {
      "id": "5555a9ce-26d1-45a3-9672-5f54b0cf28a3",
      "name": "Filter Unpublished Articles",
      "type": "n8n-nodes-base.code",
      "notes": "Filter previously published articles from those received from the feeds.",
      "position": [
        -460,
        -340
      ],
      "parameters": {
        "jsCode": "const sheetLinks = $('Get Historically Posted Articles from Google Sheet').all().map(row => row.json.link);\nconst articles = $('Read Latest Articles from Feeds').all();\nreturn articles.filter(item => !sheetLinks.includes(item.json.link));              "
      },
      "notesInFlow": true,
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "235db786-a37c-4f70-9fb8-a23903399056",
      "name": "Trigger Workflow",
      "type": "n8n-nodes-base.cron",
      "notes": "cron-based Workflow trigger. Recommend once per day.",
      "position": [
        -1340,
        -340
      ],
      "parameters": {
        "triggerTimes": {
          "item": [
            {
              "hour": 7
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "195bea58-205a-4d30-bab0-ef137b157ab5",
      "name": "Post New Articles to Slack Channel",
      "type": "n8n-nodes-base.slack",
      "notes": "Post new articles to Slack Channel.",
      "position": [
        -20,
        -340
      ],
      "parameters": {
        "text": "=*{{$json[\"title\"]}}* | {{$json[\"link\"]}} _Published: {{$json[\"pubDate\"]}}_",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09281Y80AH",
          "cachedResultName": "daily-industry-news-automation"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "notesInFlow": true,
      "typeVersion": 2.3
    },
    {
      "id": "e1ea7e51-5f0f-4089-a4c0-9308bc72c85a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2340,
        -420
      ],
      "parameters": {
        "width": 900,
        "height": 1380,
        "content": "# \ud83d\udcc4 Post New Articles from Feeds to Slack Channel\n\n## \ud83e\udde0 What This Workflow Does\n\nThis workflow automates the discovery and sharing of fresh articles from a curated list of RSS feeds. It performs the following steps:\n\n1. **Reads a list of RSS feed URLs** from a Google Sheet (`Feeds` tab).\n2. **Fetches the latest articles** from each feed.\n3. **Checks for duplicates** against previously published links stored in another sheet (`Posted Articles` tab).\n4. **Filters out already shared articles**.\n5. **Posts the new articles** to a designated Slack channel with formatted titles and links.\n6. **Logs the newly shared articles** back into the Google Sheet to prevent duplicates.\n\n---\n\n## \ud83d\udee0\ufe0f Prerequisites\n\nTo use this workflow, you must have:\n\n- \u2705 **Google Sheets** OAuth2 credentials set up in n8n  \n  (Used to access and update the RSS feed and post history sheets)\n\n- \u2705 **Slack** OAuth2 credentials  \n  (Used to post messages to a specific Slack channel)\n\n- \u2705 **A Google Spreadsheet** with:\n  - `Feeds` tab \u2013 Columns: `title`, `link`  \n  - `Posted Articles` tab \u2013 Columns: `title`, `link`, `pubDate`\n\n---\n\n## \ud83d\udd27 Environment Variables or Custom Values\n\nYou will need to set the following n8n variable or replace with direct input:\n\n- `{{$vars.Daily_Industry_News_Automation_Google_Sheet}}`:  \n  Reference to the Google Sheet Document ID (you can use a static ID if preferred)\n\nAlso update:\n- Slack `channelId`: Replace with your actual Slack channel ID if not dynamically referenced\n\n---\n\n## \u23f0 Trigger & Scheduling\n\n- **Trigger type**: `Cron` node  \n- **Default schedule**: Every day at **7:00 AM**\n\nYou can modify this in the **\u201cTrigger Workflow\u201d** node to suit your own schedule.\n\n---\n\n## \ud83c\udfaf Intended Use Case\n\nThis workflow is ideal for:\n\n- Marketing teams curating daily or weekly news digests\n- Founders or industry professionals monitoring sector updates\n- Automating internal Slack news updates\n- Avoiding duplicate content when sourcing from multiple feeds"
      },
      "typeVersion": 1
    },
    {
      "id": "146f4c93-a72c-4356-99ab-bcbc7747e671",
      "name": "Get Article Feeds",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Get a list of RSS feeds to poll from the Feeds Google Sheet (title, link).",
      "position": [
        -1120,
        -340
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1768028583,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1HIldK5vDx2luvmYEstU2PQzSS68xBrpp7lJ-8rQb2No/edit#gid=1768028583",
          "cachedResultName": "Feeds"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{$vars.Daily_Industry_News_Automation_Google_Sheet}}"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.6,
      "alwaysOutputData": true
    },
    {
      "id": "3a2f3d00-333f-477f-8634-1b3c703d4061",
      "name": "Read Latest Articles from Feeds",
      "type": "n8n-nodes-base.rssFeedRead",
      "notes": "Get articles from each feed in Google Sheet.",
      "position": [
        -900,
        -340
      ],
      "parameters": {
        "url": "={{ $json.link }}",
        "options": {}
      },
      "notesInFlow": true,
      "typeVersion": 1.2,
      "alwaysOutputData": true
    },
    {
      "id": "74fec81d-bd50-4cce-87d5-fa6808658581",
      "name": "Get Historically Posted Articles from Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Get a list of articles previously posted from Posted Articles Google Sheet (title, link, pubDate).",
      "position": [
        -680,
        -340
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1HIldK5vDx2luvmYEstU2PQzSS68xBrpp7lJ-8rQb2No/edit#gid=0",
          "cachedResultName": "Posted Articles"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{$vars.Daily_Industry_News_Automation_Google_Sheet}}"
        }
      },
      "executeOnce": true,
      "notesInFlow": true,
      "typeVersion": 4.6,
      "alwaysOutputData": true
    },
    {
      "id": "f0c01201-06f4-4154-8010-f134e5506f27",
      "name": "Append New Articles to Google Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Append the un-published articles to the Published Articles Google Sheet.",
      "position": [
        -240,
        -340
      ],
      "parameters": {
        "columns": {
          "value": {
            "link": "={{ $json.link }}",
            "title": "={{ $json.title }}",
            "pubDate": "={{ $json.pubDate }}"
          },
          "schema": [
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "pubDate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "pubDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "creator",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "creator",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "content:encoded",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "content:encoded",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "content:encodedSnippet",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "content:encodedSnippet",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "dc:creator",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "dc:creator",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "content",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "contentSnippet",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "contentSnippet",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "guid",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "guid",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "categories",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "categories",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "isoDate",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "isoDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "date",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "author",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "author",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "dc:date",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "dc:date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "comments",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "comments",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1HIldK5vDx2luvmYEstU2PQzSS68xBrpp7lJ-8rQb2No/edit#gid=0",
          "cachedResultName": "Posted Articles"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{$vars.Daily_Industry_News_Automation_Google_Sheet}}"
        }
      },
      "executeOnce": false,
      "notesInFlow": true,
      "typeVersion": 4.6,
      "alwaysOutputData": true
    }
  ],
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "2799c1bc-9306-4ff8-b6e9-8341fac3cfdb",
  "connections": {
    "Trigger Workflow": {
      "main": [
        [
          {
            "node": "Get Article Feeds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Article Feeds": {
      "main": [
        [
          {
            "node": "Read Latest Articles from Feeds",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Unpublished Articles": {
      "main": [
        [
          {
            "node": "Append New Articles to Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Latest Articles from Feeds": {
      "main": [
        [
          {
            "node": "Get Historically Posted Articles from Google Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append New Articles to Google Sheet": {
      "main": [
        [
          {
            "node": "Post New Articles to Slack Channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Historically Posted Articles from Google Sheet": {
      "main": [
        [
          {
            "node": "Filter Unpublished Articles",
            "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 contains community nodes that are only compatible with the self-hosted version of n8n.

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

More Slack & Telegram workflows → · Browse all categories →

Related workflows

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

Slack & Telegram

This workflow monitors your Gmail support inbox every minute, automatically sending each unread email to OpenAI for intelligent analysis. The AI evaluates sentiment (Positive/Neutral/Negative/Critical

RSS Feed Read, OpenAI, Slack +3
Slack & Telegram

This workflow continuously monitors the TikTok Ads Library for new creatives from specific advertisers or keyword searches, scrapes them via Apify, logs them into Google Sheets, and sends concise noti

Google Sheets, Slack, Telegram +1
Slack & Telegram

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

N8N Nodes Scrapegraphai, HTTP Request, Google Sheets +2
Slack & Telegram

Simplify financial oversight with this automated n8n workflow. Triggered daily, it fetches cash flow and expense data from a Google Sheet, analyzes inflows and outflows, validates records, and generat

HTTP Request, Google Sheets, Email Send +3
Slack & Telegram

This workflow is essential for e-commerce store owners, product strategists, and marketing teams who need real-time insight into what their competitors are selling.

Google Sheets, Slack, N8N Nodes Browseract Workflows