{
  "id": "4g8HglPLSdpDmBwc",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "001_AI-Powered News Insights Workflow for Slack",
  "tags": [],
  "nodes": [
    {
      "id": "4ed04f56-1cd8-47d5-b4c1-34cfdb496583",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        128,
        192
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e658f392-e1b6-4f14-ad02-414eb3b03f99",
      "name": "Post to Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        2896,
        176
      ],
      "parameters": {
        "text": "={{ $json.choices[0].message.content }}",
        "user": {
          "__rl": true,
          "mode": "list",
          "value": "U096VCG525P",
          "cachedResultName": "james"
        },
        "select": "user",
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "06b21744-df60-4a78-b804-21223b628fcc",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        -288
      ],
      "parameters": {
        "width": 448,
        "height": 1008,
        "content": "## \ud83d\udcf0 Summarize trending news into Slack with business insights\n\nThis workflow fetches the latest news based on your selected **country, category, and keyword query**, runs it through GPT for **summarization, prioritization, and sentiment analysis**, and posts the output to Slack.\n\n- GPT **prioritizes the 10 most impactful articles**, ensuring you don't get random headlines.\n- Each story is tagged: \ud83d\udfe2 Opportunity, \ud83d\udd34 Risk, \u26aa Neutral.\n- Ideal for teams who want market or trend updates directly in Slack.\n\n### Who it's for\n- Business leaders, marketers, investors, or analysts who want curated, actionable news summaries.\n- Anyone needing a lightweight **market pulse** delivered via Slack.\n\n### How to Set Up\n1. **Set News Config node:** Define your country, category, and keyword query (e.g., `us`, `technology`, `OpenAI`).\n2. Add your **NewsAPI** and **OpenAI GPT** credentials.\n3. Configure your Slack webhook.\n4. Activate the **Schedule Trigger** to auto-run daily.\n\n### Requirements\n- NewsAPI Key\n- OpenAI API Key\n- Slack Webhook URL\n\n### How to Customize\n- Adjust the **category, country, or query** in the Set News Config node.\n- Remove the **Limit to Top 10 Trends node** to fetch all articles and let GPT filter.\n- Customize the GPT prompt to control tone or depth of insights.\n\nNeed Help?\n\nJoin the [Discord](https://discord.com/invite/XPKeKXeB7d) or ask in the [Forum](https://community.n8n.io/)."
      },
      "typeVersion": 1
    },
    {
      "id": "ac6308fa-d25c-4b24-bcec-aa4208870571",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16,
        -384
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 304,
        "content": "## \u2699\ufe0f Workflow Breakdown\n1. **Schedule Trigger:** Set frequency (daily, weekly, etc.)\n2. **Set News Config:** Configure country, category, and query.\n3. **Fetch News Articles:** Pulls from NewsAPI.\n4. **[Optional] Limit to Top 10 Trends:** Cap articles to 10, or remove to let GPT decide.\n5. **Inject Config Data:** Makes config accessible to GPT.\n6. **Merge:** Combines news + config.\n7. **GPT Summary:** Summarizes, prioritizes top 10, tags sentiment, links back to query.\n8. **Slack Post:** Auto-delivers insights to Slack."
      },
      "typeVersion": 1
    },
    {
      "id": "8b926d52-75a4-4dce-9f80-5ff22f256bb7",
      "name": "Set User Config (Country, Category, Query)",
      "type": "n8n-nodes-base.set",
      "position": [
        624,
        192
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "{\n  \"country\": \"us\",\n  \"category\": \"technology\",\n  \"query\": \"openai\"\n}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "444c5afa-9052-4e07-8881-7a0a86ac8a78",
      "name": "Fetch News Articles",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1104,
        192
      ],
      "parameters": {
        "url": "=https://newsapi.org/v2/top-headlines?country={{ $json.country }}&category={{ $json.category }}&q={{ $json.query }}",
        "options": {},
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-Api-Key"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0ed04c61-e4dd-4e3f-8735-3cff4aedc9cb",
      "name": "Merge Config with Articles",
      "type": "n8n-nodes-base.merge",
      "position": [
        2032,
        176
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.2
    },
    {
      "id": "85ce6b97-0549-4ff8-9334-e9daf7fceed2",
      "name": "Generate Business Insights (GPT)",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        2352,
        176
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are a business analyst. The user is researching \"{{ $json.query }}\" in the \"{{ $json.category }}\" sector within \"{{ $json.country }}\".\n\nHere are {{ $json.articles.length }} articles. Select the 10 most important based on:\n1. Impact and relevance to \"{{ $json.query }}\"\n2. Business risks, opportunities, or strategic insights\n\nFor each of the 10, summarize in 2-3 lines and also add if it's a:\n- \ud83d\udd34 Risk\n- \ud83d\udfe2 Opportunity\n- \u26aa Neutral\n\nFinish with a 1-paragraph summary of the overall trend.\n\nHere is the data:\n {{ JSON.stringify($json, null, 2) }}"
            },
            {
              "role": "system",
              "content": "You are a professional trend analyst summarizing news with actionable business insights."
            }
          ]
        },
        "simplify": false
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "67a3fc4b-4c91-4856-810f-0f39b121a729",
      "name": "Inject Config Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1824,
        64
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "{\n  \"country\": \"us\",\n  \"category\": \"technology\",\n  \"query\": \"AI\"\n}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "c9730e23-e365-4964-8ed3-7184dfe13d69",
      "name": "Limit to Top 10 Trends",
      "type": "n8n-nodes-base.code",
      "disabled": true,
      "position": [
        1584,
        64
      ],
      "parameters": {
        "jsCode": "const topTen = items.slice(0, 10);\nreturn topTen;"
      },
      "typeVersion": 2
    },
    {
      "id": "a96f8610-32c6-4410-8b87-a7bb43ece32d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Inject Config Settings\n\nSet your **country, category, and query** (keyword) here.\n\n\u2705 This controls the NewsAPI request and instructs GPT on which industry focus to prioritize in its analysis.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "900b9b6a-cff5-4438-bf49-3919c9b179d0",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Fetch Latest News Headlines\n[Read more about HTTP Request node](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/)\n\nThis step pulls up to 100 top headlines from NewsAPI for your selected country, category, and keyword.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n**Important:\n\u2705 Add your NewsAPI Key in the Value field of the X-Api-Key header parameter inside this node.**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d0747cf1-d1db-4728-869b-b39d86320958",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1472,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 720,
        "height": 496,
        "content": "## Prepare Articles & Merge with Config\n\nFormats the articles into plain text and merges them with your country, category, and query setting - providing GPT with clean data and context for accurate analysis.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5942c7d8-4853-47cd-b529-c91e7427a7e2",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2272,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 496,
        "content": "## GPT Business Summary\n[Read more about OpenAI Chat Model node](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/)\n\nGPT analyzes the news, summarizes the 10 most relevant articles, and tags each as an \ud83d\udfe2 Opportunity, \ud83d\udd34 Risk, or \u26aa Neutral. \n\nIt also provides an overall trend summary.\nYou can customize the prompt to change the tone, number of articles, add recommendations, or focus on specific business areas.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e2bc105f-82e8-414b-a2ef-1556ab99934c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2752,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 496,
        "content": "## Post to Slack\n[Read more about Slack node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/)\n\nSends the GPT insights directly to your Slack channel.\nYou can customize the message format or destination channel.\n\nMake sure your Slack credentials are connected in this node.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "bc891826-edfd-4f45-b986-c9bfb86baa44",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 416,
        "content": "## Schedule Trigger\n\nThis controls how often the workflow runs \u2014 set it to daily, weekly, or any custom interval you need.\n\nAdjust the schedule settings to match how frequently you want news updates sent to Slack.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "13e633f5-02ac-46d0-b878-f8736746beb3",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        -320
      ],
      "parameters": {
        "color": 4,
        "width": 480,
        "height": 192,
        "content": "## \ud83c\udfa5 Demo Video  \n\ud83d\udc49 **[Click here to watch the setup guide](https://www.loom.com/share/970a3fba1ed44352a2194f1ef6a8dc45?sid=6750eb3e-9eb9-4400-a6ec-83d2c9de55e4)**  "
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "60471506-ee09-4599-b9eb-f38a675a162b",
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Set User Config (Country, Category, Query)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Inject Config Data": {
      "main": [
        [
          {
            "node": "Merge Config with Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch News Articles": {
      "main": [
        [
          {
            "node": "Merge Config with Articles",
            "type": "main",
            "index": 1
          },
          {
            "node": "Limit to Top 10 Trends",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit to Top 10 Trends": {
      "main": [
        [
          {
            "node": "Inject Config Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Config with Articles": {
      "main": [
        [
          {
            "node": "Generate Business Insights (GPT)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Business Insights (GPT)": {
      "main": [
        [
          {
            "node": "Post to Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set User Config (Country, Category, Query)": {
      "main": [
        [
          {
            "node": "Fetch News Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}