AutomationFlowsAI & RAG › Watchlist Alert with AI Explanation

Watchlist Alert with AI Explanation

Watchlist Alert with AI Explanation. Uses googleSheets, agent, lmChatGroq, httpRequest. Scheduled trigger; 23 nodes.

Cron / scheduled trigger★★★★☆ complexityAI-powered23 nodesGoogle SheetsAgentGroq ChatHTTP RequestSlackRSS Feed Read
AI & RAG Trigger: Cron / scheduled Nodes: 23 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Agent → Google Sheets 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": "iAqO11MTDVdoYDFq",
  "name": "Watchlist Alert with AI Explanation",
  "tags": [],
  "nodes": [
    {
      "id": "f905e91c-0cef-497a-8c32-435a5666252c",
      "name": "Read Stock Watchlist",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        304,
        960
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 2012226065,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/16kFb0DSKlCCYE9OHRUhShbKqTRT_qB7aUmjm7LL9qkg/edit#gid=2012226065",
          "cachedResultName": "Watchlist"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "16kFb0DSKlCCYE9OHRUhShbKqTRT_qB7aUmjm7LL9qkg",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/16kFb0DSKlCCYE9OHRUhShbKqTRT_qB7aUmjm7LL9qkg/edit?usp=drivesdk",
          "cachedResultName": "watchlist_n8n (1)"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "2548944b-1fba-4d86-b2ba-cd75df2e900b",
      "name": "Extract Current Price",
      "type": "n8n-nodes-base.set",
      "position": [
        1504,
        800
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a1",
              "name": "symbol",
              "type": "string",
              "value": "={{ $json.ticker }}"
            },
            {
              "id": "a2",
              "name": "current_price",
              "type": "number",
              "value": "={{ $json.current_price }}"
            },
            {
              "id": "a3",
              "name": "buy_price",
              "type": "number",
              "value": "={{ $('Read Stock Watchlist').item.json.buy_price }}"
            },
            {
              "id": "64d0832d-fa82-4817-ab9c-02917b55d76c",
              "name": "alert_threshold_pct",
              "type": "number",
              "value": "={{ $('Read Stock Watchlist').item.json.alert_threshold_pct }}"
            },
            {
              "id": "80b0dd31-5dad-44d1-a8a6-43cce4a2b993",
              "name": "change_percentage",
              "type": "number",
              "value": "={{ $('Transform Stock API Response').item.json.change_percent }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7dc1c6bc-821c-4ec3-aa01-4b450104c381",
      "name": "Generate AI Stock Insight",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "onError": "continueErrorOutput",
      "position": [
        2752,
        864
      ],
      "parameters": {
        "text": "=You are a financial market analyst.\n\nAnalyze the stock movement using ONLY the provided stock data and news headlines.\n\nStock Information:\n- Company: {{ $json.symbol }}\n- Current Price: \u20b9{{ $json.current_price }}\n- Price Change: {{ $json.change_percentage }}%\n\nNews Headlines:\n{{ $json.headlines }}\n\nRules:\n1. Use only provided headlines.\n2. Keep explanation concise.\n3. No emojis.\n4. Do not use markdown.\n5. Return ONLY valid JSON.\n6. Do not include ```json formatting.\n\nOutput Format:\n\n{\n  \"market_insight\": \"\",\n  \"sentiment\": \"\",\n  \"risk_level\": \"\",\n  \"summary\": \"\"\n}",
        "options": {
          "maxIterations": 3,
          "systemMessage": "You are a concise financial analyst. Format: 1) Reason for price movement 2) Key factor 3) Sentiment: Bullish/Bearish/Neutral. Max 150 words."
        },
        "promptType": "define"
      },
      "typeVersion": 3.1
    },
    {
      "id": "c18da864-f869-49e5-a98c-ca5f4970b400",
      "name": "Groq Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        2768,
        1040
      ],
      "parameters": {
        "model": "groq/compound-mini",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "8bec3397-f7e0-4010-9f92-4d8256842ba0",
      "name": "Stock price API",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        528,
        960
      ],
      "parameters": {
        "url": "=https://memic-nse-quotes-api.hf.space/quotes",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ JSON.stringify({ symbols: [$json.ticker] }) }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.3
    },
    {
      "id": "1d1bb727-1873-480a-9f13-a94f87aba71a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        608
      ],
      "parameters": {
        "color": 7,
        "width": 896,
        "height": 576,
        "content": "## Stock Watchlist Monitoring Pipeline\n\nThis section is responsible for initiating the automated stock monitoring workflow.\n\nCore Responsibilities:\n\u2022 Trigger the workflow at scheduled intervals\n\u2022 Load stock watchlist data from Google Sheets\n\u2022 Fetch live NSE stock prices using external market APIs\n\nGoal:\nContinuously monitor market activity and prepare real-time stock data for intelligent alert generation."
      },
      "typeVersion": 1
    },
    {
      "id": "2317dad7-859e-4e6c-a0f4-9ac95e0141e4",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        400
      ],
      "parameters": {
        "color": 7,
        "width": 868,
        "height": 800,
        "content": "## Stock Price Processing & Data Synchronization\n\nThis section processes live stock market responses and synchronizes updated prices with the watchlist database.\n\nCore Responsibilities:\n\u2022 Transform raw stock API responses into structured data\n\u2022 Extract current market price and percentage movement\n\u2022 Normalize stock information for workflow processing\n\u2022 Update the latest stock prices in Google Sheets\n\nGoal:\nMaintain accurate and real-time stock pricing data for threshold analysis and AI-driven market insights."
      },
      "typeVersion": 1
    },
    {
      "id": "bb605533-b67b-44ae-bf91-e3969b75dd34",
      "name": "Schedule Stock Monitoring",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        80,
        960
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes"
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "36dbe57c-d226-4d53-81bc-c05a27b0fc7b",
      "name": "Process Stocks One By One",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        832,
        880
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "691e4f51-9460-4b1d-99fe-f01ae7444403",
      "name": "Transform Stock API Response",
      "type": "n8n-nodes-base.code",
      "position": [
        1072,
        800
      ],
      "parameters": {
        "jsCode": "const stockKey = Object.keys($json.prices)[0];\nconst stock = $json.prices[stockKey];\n\nreturn [\n  {\n    json: {\n      symbol: stock.symbol,\n      current_price: stock.last_price,\n      change: stock.change,\n      change_percent: stock.pchange,\n      prev_close:stock.raw.previousClose\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "4b1b5a66-54f3-4106-900c-e5d4afc19f71",
      "name": "Update Latest Prices In Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1280,
        800
      ],
      "parameters": {
        "columns": {
          "value": {
            "ticker": "={{ $json.symbol }}",
            "current_price": "={{ $json.current_price }}"
          },
          "schema": [
            {
              "id": "ticker",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ticker",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company_name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "company_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sector",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "sector",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "asset_type",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "asset_type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "buy_price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "buy_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "current_price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "current_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sell_price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "sell_price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "alert_threshold_pct",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "alert_threshold_pct",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "price_api_symbol",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "price_api_symbol",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "news_query",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "news_query",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "alert_channel",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "alert_channel",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "active",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "active",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "notes",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "ticker"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 2012226065,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/16kFb0DSKlCCYE9OHRUhShbKqTRT_qB7aUmjm7LL9qkg/edit#gid=2012226065",
          "cachedResultName": "Watchlist"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "16kFb0DSKlCCYE9OHRUhShbKqTRT_qB7aUmjm7LL9qkg",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/16kFb0DSKlCCYE9OHRUhShbKqTRT_qB7aUmjm7LL9qkg/edit?usp=drivesdk",
          "cachedResultName": "watchlist_n8n (1)"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "b404a88c-0d0a-4c4e-8908-e8354703d6e6",
      "name": "Format News Headlines",
      "type": "n8n-nodes-base.code",
      "position": [
        2224,
        864
      ],
      "parameters": {
        "jsCode": "const allItems = $input.all();\n\nconst recent = allItems.filter(item => {\n\n  if (!item.json.pubDate) return false;\n\n  const pubDate = new Date(item.json.pubDate);\n  const now = new Date();\n\n  const diffHours =\n    (now - pubDate) / (1000 * 60 * 60);\n\n  return diffHours <= 24;\n});\n\nconst headlines = recent\n  .slice(0, 3)\n  .map(item => item.json.title)\n  .join('\\n');\n\nreturn [\n  {\n    json: {\n      headlines\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "a69a65c9-1e54-4159-b535-7edbc5b2721a",
      "name": "Prepare AI Input Payload",
      "type": "n8n-nodes-base.set",
      "position": [
        2560,
        864
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5207a871-63bc-4c3b-8ded-424ef996e68b",
              "name": "symbol",
              "type": "string",
              "value": "={{ $('Check Alert Threshold').item.json.symbol }}"
            },
            {
              "id": "572fe058-6a36-4555-b83a-e5331e66a1cb",
              "name": "current_price",
              "type": "number",
              "value": "={{ $('Check Alert Threshold').item.json.current_price }}"
            },
            {
              "id": "68dc299b-ad88-4946-bc85-f027212ed3e6",
              "name": "buy_price",
              "type": "number",
              "value": "={{ $('Check Alert Threshold').item.json.buy_price }}"
            },
            {
              "id": "9dfd0f07-6591-4410-8bb6-6ffc3a5f89de",
              "name": "alert_threshold_pct",
              "type": "number",
              "value": "={{ $('Check Alert Threshold').item.json.alert_threshold_pct }}"
            },
            {
              "id": "dbb0ce0d-e9bc-4ca7-9d92-b7fbf2d2662a",
              "name": "change_percentage",
              "type": "number",
              "value": "={{ $('Check Alert Threshold').item.json.change_percentage }}"
            },
            {
              "id": "8d63f863-5afe-40e3-9c78-c62957fa0817",
              "name": "headlines",
              "type": "string",
              "value": "={{ $json.headlines }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d29bc40f-97f3-42e6-81d1-7ec8030d5b62",
      "name": "Parse AI JSON Response",
      "type": "n8n-nodes-base.code",
      "position": [
        3104,
        864
      ],
      "parameters": {
        "jsCode": "const parsed = JSON.parse($input.first().json.output);\n\nreturn [\n  {\n    json: parsed\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "ba93b0a6-e513-44b2-924e-d6e3b4ecf6cd",
      "name": "Send Slack Alert Message",
      "type": "n8n-nodes-base.slack",
      "position": [
        3760,
        912
      ],
      "parameters": {
        "text": "={{ $('Prepare AI Input Payload').item.json.symbol }}\n{{ $json.slack_message }}\n{{ $('Parse AI JSON Response').item.json.summary }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C0AP6AD7069",
          "cachedResultName": "all-group-d"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "1d83f87e-4353-4d66-9fa7-805e591a02a5",
      "name": "Send Error Notification",
      "type": "n8n-nodes-base.slack",
      "position": [
        3648,
        1152
      ],
      "parameters": {
        "text": "Something went wrong!!",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C0AP6AD7069",
          "cachedResultName": "all-group-d"
        },
        "otherOptions": {}
      },
      "typeVersion": 2.4
    },
    {
      "id": "eb12a6a6-ec9b-444b-8350-772062306c15",
      "name": "Build Alert Notification",
      "type": "n8n-nodes-base.set",
      "position": [
        3536,
        912
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "e1",
              "name": "slack_message",
              "type": "string",
              "value": "={{ $json.market_insight }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "1b035b50-f62f-428c-af2f-c21f614c2be5",
      "name": "Check Alert Threshold",
      "type": "n8n-nodes-base.if",
      "position": [
        1808,
        864
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "85ee3b9a-9fb6-4f16-8615-b766caf4e97a",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.change_percentage }}",
              "rightValue": "={{ $json.alert_threshold_pct * 100 }} "
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.3
    },
    {
      "id": "72de5b01-0b7e-4651-9145-5ee3a11a4249",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1728,
        400
      ],
      "parameters": {
        "color": 7,
        "width": 704,
        "height": 800,
        "content": "## Market News Collection & AI Preparation\n\nThis section gathers recent financial news related to triggered stocks and prepares structured data for AI analysis.\n\nCore Responsibilities:\n\u2022 Detect stocks crossing the alert threshold\n\u2022 Fetch related market news using RSS feeds\n\u2022 Filter and format recent news headlines\n\u2022 Prepare structured payloads for AI processing\n\nGoal:\nProvide relevant market context so the AI can generate accurate and meaningful stock movement insights."
      },
      "typeVersion": 1
    },
    {
      "id": "db322dcc-7862-4083-9e0c-fa290bb5cff6",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2496,
        400
      ],
      "parameters": {
        "color": 7,
        "width": 768,
        "height": 896,
        "content": "## AI Market Insight Generation\n\nThis section uses AI to analyze stock movements and generate structured financial insights based on live price data and recent market news.\n\nCore Responsibilities:\n\u2022 Send stock and news data to the AI model\n\u2022 Generate market movement explanations\n\u2022 Analyze market sentiment and risk level\n\u2022 Return structured JSON responses for automation workflows\n\u2022 Parse AI responses into clean machine-readable data\n\nGoal:\nTransform raw market data into concise, intelligent, and actionable stock insights automatically."
      },
      "typeVersion": 1
    },
    {
      "id": "2b599617-9c40-41fc-9dfb-e8073578e74d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3328,
        400
      ],
      "parameters": {
        "color": 7,
        "width": 704,
        "height": 928,
        "content": "## Smart Alert Delivery & Error Handling\n\nThis section delivers AI-generated stock alerts to communication platforms and manages workflow failures gracefully.\n\nCore Responsibilities:\n\u2022 Build structured stock alert notifications\n\u2022 Send real-time alerts to Slack channels\n\u2022 Deliver AI-generated market insights and sentiment analysis\n\u2022 Handle workflow/API failures using dedicated error notifications\n\nGoal:\nProvide timely, actionable, and reliable stock market alerts with automated error monitoring."
      },
      "typeVersion": 1
    },
    {
      "id": "3dc86caf-13a4-42c8-a6ae-90d1414af434",
      "name": "Fetch Stock Related Market News",
      "type": "n8n-nodes-base.rssFeedRead",
      "onError": "continueErrorOutput",
      "position": [
        2016,
        864
      ],
      "parameters": {
        "url": "=https://news.google.com/rss/search?q= {{ $json.symbol }}",
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "11b69d35-1de1-4132-8016-015cb5f2042b",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        0
      ],
      "parameters": {
        "width": 896,
        "height": 576,
        "content": "## Overview\n\nThis workflow monitors live stock prices using NSE market APIs and tracks significant price movements from a custom watchlist. When a stock crosses the configured threshold, it fetches related financial news and uses AI to generate market insights and sentiment analysis. Finally, automated alerts are sent to Slack with real-time stock updates and AI-generated summaries.\n\n## How to Setup\n\n1. Create a Google Sheet with columns:\n   company_name, sector, asset_type, symbol, buy_price, alert_threshold_pct, current_price\n\n2. Configure Google Sheets credentials in n8n.\n\n3. Set up Slack credentials and create a Slack channel for stock alerts.\n\n6. Activate the workflow to start real-time stock monitoring and alert notifications.\n\n## Credentials Needed\n\n- Google Sheets OAuth2\n- Slack Bot Token\n- Groq API Key / Other LLM API Token"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "executionOrder": "v1"
  },
  "versionId": "49d30393-1356-437d-9663-1627e196b03f",
  "nodeGroups": [],
  "connections": {
    "Groq Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Generate AI Stock Insight",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Stock price API": {
      "main": [
        [
          {
            "node": "Process Stocks One By One",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Error Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Stock Watchlist": {
      "main": [
        [
          {
            "node": "Stock price API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Alert Threshold": {
      "main": [
        [
          {
            "node": "Fetch Stock Related Market News",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Process Stocks One By One",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Current Price": {
      "main": [
        [
          {
            "node": "Check Alert Threshold",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format News Headlines": {
      "main": [
        [
          {
            "node": "Prepare AI Input Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI JSON Response": {
      "main": [
        [
          {
            "node": "Build Alert Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Alert Notification": {
      "main": [
        [
          {
            "node": "Send Slack Alert Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare AI Input Payload": {
      "main": [
        [
          {
            "node": "Generate AI Stock Insight",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Slack Alert Message": {
      "main": [
        [
          {
            "node": "Process Stocks One By One",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate AI Stock Insight": {
      "main": [
        [
          {
            "node": "Parse AI JSON Response",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Error Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Stocks One By One": {
      "main": [
        [],
        [
          {
            "node": "Transform Stock API Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Stock Monitoring": {
      "main": [
        [
          {
            "node": "Read Stock Watchlist",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transform Stock API Response": {
      "main": [
        [
          {
            "node": "Update Latest Prices In Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Latest Prices In Sheet": {
      "main": [
        [
          {
            "node": "Extract Current Price",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Stock Related Market News": {
      "main": [
        [
          {
            "node": "Format News Headlines",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Error Notification",
            "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

Watchlist Alert with AI Explanation. Uses googleSheets, agent, lmChatGroq, httpRequest. Scheduled trigger; 23 nodes.

Source: https://github.com/weblineindia/n8n-Send-AI-stock-watchlist-alerts-with-Google-Sheets-Groq-and-Slack/blob/main/workflow-template.json — 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

Categories Content Creation AI Automation Publishing Social Media

Google Docs, HTTP Request, Slack +7
AI & RAG

Supplier Capacity Risk Alert Workflow. Uses httpRequest, lmChatGroq, agent, gmail. Scheduled trigger; 28 nodes.

HTTP Request, Groq Chat, Agent +3
AI & RAG

Youtube Video: https://youtu.be/BOodBD6HWSU?si=yEenUFBdYOq_1RVj This workflow runs daily at 7AM to generate buyer-style prompts with Google Gemini, query Groq, OpenRouter, and a search-grounded Gemini

HTTP Request, Google Gemini Chat, @Tavily/N8N Nodes Tavily +5
AI & RAG

This workflow automatically generates 2–3 high-quality Indian stock investment ideas daily by combining trending stock data + latest market news, processing it with AI (Groq/OpenAI), avoiding duplicat

HTTP Request, Agent, RSS Feed Read +5
AI & RAG

This workflow runs daily at 10:00 and reads commodity news from OilPrice and Invezz RSS feeds, uses a Groq-hosted LLM to classify sentiment and extract commodity/impact details, appends the results to

RSS Feed Read, Agent, Groq Chat +2