AutomationFlowsSlack & Telegram › Ai-powered News Monitoring with Linkup, Airtable, and Slack Notifications

Ai-powered News Monitoring with Linkup, Airtable, and Slack Notifications

ByGuillaume Duvernay @duv on n8n.io

This template provides a fully automated system for monitoring news on any topic you choose. It leverages Linkup's AI-powered web search to find recent, relevant articles, extracts key information like the title, date, and summary, and then neatly organizes everything in an…

Cron / scheduled trigger★★★★☆ complexity16 nodesHTTP RequestAirtableSlack
Slack & Telegram Trigger: Cron / scheduled Nodes: 16 Complexity: ★★★★☆ Added:

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

This workflow follows the Airtable → HTTP Request 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
{
  "nodes": [
    {
      "id": "bf4f2727-7759-455b-a6a1-4b175e0626b2",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -160,
        272
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "7ac9b3b7-d793-4b5b-9918-ccec99f52860",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        528,
        688
      ],
      "parameters": {
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "f4746549-88aa-405e-82e2-027b010ef491",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1072,
        272
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "daysInterval": 7,
              "triggerAtHour": 17,
              "triggerAtMinute": 30
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "1b1443b3-cd20-438a-b6e3-5da5962a03fe",
      "name": "Query Linkup for news",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -608,
        272
      ],
      "parameters": {
        "url": "https://api.linkup.so/v1/search",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "=Find news related to \"{{ $json['News topic(s)'] }}\".\nOnly pick news, no opinion or evergreen articles.\nIdeally between 10 and 15 news."
            },
            {
              "name": "depth",
              "value": "standard"
            },
            {
              "name": "outputType",
              "value": "structured"
            },
            {
              "name": "structuredOutputSchema",
              "value": "={\n    \"type\": \"object\",\n    \"properties\": {\n        \"news\": {\n            \"type\": \"array\",\n            \"description\": \"A list of news articles\",\n            \"items\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"title\": {\n                        \"type\": \"string\",\n                        \"description\": \"Title of the news article\"\n                    },\n                    \"url\": {\n                        \"type\": \"string\",\n                        \"description\": \"URL of the news article\"\n                    },\n                    \"content\": {\n                        \"type\": \"string\",\n                        \"description\": \"A summary of the news in a few sentences\"\n                    },\n                    \"date\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\",\n                        \"description\": \"Publication date of the news article in ISO 8601 format (e.g., 2025-07-18T14:30:00Z) - really extract the publication date of the article, not a specific date mentioned in the news content\"\n                    }\n                },\n                \"required\": [\"title\", \"url\", \"content\", \"date\"]\n            }\n        }\n    },\n    \"required\": [\"news\"]\n}"
            },
            {
              "name": "fromDate",
              "value": "={{ \n  $now\n    .minus($json['News from last x days'], 'days')\n    .startOf('day')\n    .toISO()\n}}"
            },
            {
              "name": "includeImages",
              "value": "false"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6fe2c597-8212-47f4-b208-ff41889b93ae",
      "name": "Set news parameters",
      "type": "n8n-nodes-base.set",
      "position": [
        -832,
        272
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "8a140389-83bd-4b60-9b16-07bf8a7d8511",
              "name": "News topic(s)",
              "type": "string",
              "value": "=decarbonisation, net-zero and corporate sustainability"
            },
            {
              "id": "1dbad32c-de95-4c01-9edf-1c8118c07778",
              "name": "News from last x days",
              "type": "number",
              "value": 7
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "a5e80f86-317a-42c8-b3cd-6272e3e23739",
      "name": "Store one news",
      "type": "n8n-nodes-base.airtable",
      "position": [
        160,
        304
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "app5DnGDQDIE9YZkV",
          "cachedResultUrl": "https://airtable.com/app5DnGDQDIE9YZkV",
          "cachedResultName": "News monitoring (N8N template)"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblzZNOaLwby3lV5S",
          "cachedResultUrl": "https://airtable.com/app5DnGDQDIE9YZkV/tblzZNOaLwby3lV5S",
          "cachedResultName": "News"
        },
        "columns": {
          "value": {
            "URL": "={{ $json.url }}",
            "Date": "={{ $json.date }}",
            "Title": "={{ $json.title }}",
            "Status": "new",
            "Summary": "={{ $json.content }}"
          },
          "schema": [
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "dateTime",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "new",
                  "value": "new"
                },
                {
                  "name": "reviewed",
                  "value": "reviewed"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "typecast": true
        },
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "c951dc15-33db-4416-94ac-937cc701ca00",
      "name": "Notify in Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        448,
        -32
      ],
      "parameters": {
        "text": "=The News of the past {{ $('Set news parameters').item.json['News from last x days'] }} days are ready for review!\n\n{{ $json.data.length }} news were found!",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C025KLW3MQS",
          "cachedResultName": "g\u00e9n\u00e9ral"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "f3756483-bc07-4ed8-b605-b0a29552cd13",
      "name": "Aggregate in 1 item",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        160,
        -32
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "5edfe681-f14b-4498-96c7-50107637e674",
      "name": "Split out news",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -384,
        272
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "news"
      },
      "typeVersion": 1
    },
    {
      "id": "16bda7f5-d7bc-4ac1-886b-9b405a33a627",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1696,
        96
      ],
      "parameters": {
        "width": 512,
        "height": 608,
        "content": "## **Automated News Monitoring System**\n\nThis workflow automatically finds recent news articles about topics you define, saves them to Airtable, and notifies you on Slack.\n\n### **How it works**\n\n1.  Runs on a schedule you set.\n2.  Uses **Linkup's AI** to search the web for news on your topics.\n3.  Extracts the **title, summary, date, and URL** for each article.\n4.  Saves each article as a new record in **Airtable**.\n5.  Sends a **Slack notification** when the process is complete.\n\n### **How to use**\n\n1.  **Set your schedule:** Configure the **Schedule Trigger** to run when you want. Default is every 7 days.\n2.  **Define your topics:** In the **Set news parameters** node, enter the keywords you want to monitor.\n3.  **Connect your accounts:**\n    * Add your **Linkup API key** to the \"Query Linkup for news\" node.\n    * Connect your **Airtable** account in the \"Store one news\" node.\n    * Connect your **Slack** account in the \"Notify in Slack\" node.\n4.  **Activate the workflow.** Your news digest is now automated!"
      },
      "typeVersion": 1
    },
    {
      "id": "eafe476f-8052-4e37-953c-dd1984a5066f",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -880,
        432
      ],
      "parameters": {
        "color": 7,
        "width": 192,
        "height": 288,
        "content": "### Edit this node to set the topic and freshness\n\n* In **News topic(s)**, write the specific keywords you'd like to find news about.\n* In **News from last x days**, set the same number of days as your schedule trigger"
      },
      "typeVersion": 1
    },
    {
      "id": "294dcd45-2719-4429-886b-8623c7084d5f",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -656,
        432
      ],
      "parameters": {
        "color": 7,
        "width": 192,
        "height": 144,
        "content": "### Connect your Linkup credential\n\nGet a free API key at: https://www.linkup.so/"
      },
      "typeVersion": 1
    },
    {
      "id": "f9bab16a-ce44-4a4b-aaa2-1ec8796e73c7",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        112,
        464
      ],
      "parameters": {
        "color": 7,
        "width": 192,
        "height": 272,
        "content": "### Connect your Airtable credential\n\nCreate a table that contains the fields:\n- Title\n- Date\n- Summary\n- URL\n- Status\nWhere the news will be stored\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9aa4a05c-0e7f-4a89-b0d0-fb11365be5f9",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        528,
        544
      ],
      "parameters": {
        "color": 7,
        "width": 192,
        "height": 128,
        "content": "### We pause for a bit to let the Airtable API breathe... and avoid hitting rate limits per second!"
      },
      "typeVersion": 1
    },
    {
      "id": "da0eeb66-2d6d-41e9-a833-339c3d18c5b6",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        128
      ],
      "parameters": {
        "color": 7,
        "width": 192,
        "height": 128,
        "content": "### Connect the Slack channel where you'd like to receive the notification once it's ready!"
      },
      "typeVersion": 1
    },
    {
      "id": "bece4bad-fee2-472a-972d-27d12a690b89",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1120,
        432
      ],
      "parameters": {
        "color": 7,
        "width": 192,
        "height": 144,
        "content": "### Set the schedule frequence that you like!"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split out news": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store one news": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Aggregate in 1 item",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Store one news",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Set news parameters",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate in 1 item": {
      "main": [
        [
          {
            "node": "Notify in Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set news parameters": {
      "main": [
        [
          {
            "node": "Query Linkup for news",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Query Linkup for news": {
      "main": [
        [
          {
            "node": "Split out news",
            "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 template provides a fully automated system for monitoring news on any topic you choose. It leverages Linkup's AI-powered web search to find recent, relevant articles, extracts key information like the title, date, and summary, and then neatly organizes everything in an…

Source: https://n8n.io/workflows/6241/ — 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 n8n workflow monitors WooCommerce refund activity to detect unusual spikes in product returns at the SKU level. It compares return volumes across rolling 24-hour windows, alerts teams in Slack wh

Slack, Airtable, HTTP Request
Slack & Telegram

This workflow automatically monitors the Ethereum blockchain, extracts USDT transfer events, filters large-value transactions, stores them in Airtable and sends a clean daily summary alert to Slack.

HTTP Request, Airtable, Slack
Slack & Telegram

This workflow is an automated employee time tracking and reporting system that monitors weekly work hours via TMetric, then delivers personalized summaries directly to each team member on Slack. It co

HTTP Request, Item Lists, Data Table +1
Slack & Telegram

Import Productboard Notes Companies And Features Into Snowflake. Uses stickyNote, httpRequest, splitOut, snowflake. Scheduled trigger; 35 nodes.

HTTP Request, Snowflake, Slack
Slack & Telegram

Import Productboard Notes, Companies and Features into Snowflake. Uses stickyNote, httpRequest, splitOut, snowflake. Scheduled trigger; 35 nodes.

HTTP Request, Snowflake, Slack