AutomationFlowsEmail & Gmail › Score Macro News Impact with Groq, Serpapi, Google Sheets and Gmail

Score Macro News Impact with Groq, Serpapi, Google Sheets and Gmail

ByWeblineIndia @weblineindia on n8n.io

This workflow is a high-precision financial intelligence engine that monitors macroeconomic news to identify high-impact trading opportunities. It retrieves real-time data via SerpAPI, processes it through a dual-layered engine—combining a custom weighted Rule Engine with…

Event trigger★★★★☆ complexityAI-powered26 nodesGoogle SheetsHTTP RequestChain LlmGroq ChatOutput Parser StructuredGmail
Email & Gmail Trigger: Event Nodes: 26 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Chainllm → Gmail 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": "TjQGTnPazYvzoExj",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Macro News \u2192 Market Impact Scoring",
  "tags": [],
  "nodes": [
    {
      "id": "85ddc18e-2f80-4cff-87c5-75b2faabe44a",
      "name": "Start Workflow",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -624,
        416
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e0265353-9e9b-4c9f-a67c-b16706116917",
      "name": "Fetch Existing News",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -400,
        416
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1_-IyhRpy6kcngHX6S8pvNr1DSUWW49YcE7ySwi1js38/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "1_-IyhRpy6kcngHX6S8pvNr1DSUWW49YcE7ySwi1js38"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "e208df72-d3d0-4a74-a2c6-22542619ce6a",
      "name": "Fetch Macro Rules",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -176,
        416
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JBB_viy-l0dDDcUiPWJVm3bXJKAiKGEG5d8FYQf1S4I/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1JBB_viy-l0dDDcUiPWJVm3bXJKAiKGEG5d8FYQf1S4I",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1JBB_viy-l0dDDcUiPWJVm3bXJKAiKGEG5d8FYQf1S4I/edit?usp=drivesdk",
          "cachedResultName": "Macro Rules"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "32b749b7-2240-4ca6-9c2b-05fde0016144",
      "name": "Fetch Macro News (SerpAPI)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        48,
        416
      ],
      "parameters": {
        "url": "https://serpapi.com/search?engine=google_news",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "api_key"
            },
            {
              "name": "q",
              "value": "RBI OR inflation India OR GDP India OR repo rate"
            },
            {
              "name": "gl",
              "value": "in"
            },
            {
              "name": "hl",
              "value": "en"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "f5d8a1bf-6915-40a3-8b03-ce4afe6b2b3f",
      "name": "Normalize & Generate News ID",
      "type": "n8n-nodes-base.code",
      "position": [
        272,
        416
      ],
      "parameters": {
        "jsCode": "// Simple hash function\nfunction createId(str) {\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    hash = ((hash << 5) - hash) + str.charCodeAt(i);\n    hash |= 0;\n  }\n  return hash.toString();\n}\n\nconst news = items[0].json.news_results || [];\n\nreturn news.map(n => {\n  const title = (n.title || \"\").trim();\n  const description = (n.snippet || \"\").trim();\n\n  const combined_text = `${title}. ${description}`.toLowerCase();\n\n  const id = createId(title + description);\n\n  return {\n    json: {\n      id,\n      title,\n      description,\n      source: n.source || \"unknown\",\n      url: n.link || \"\",\n      publishedAt: n.date || new Date().toISOString(),\n      combined_text\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "660ff503-417e-430d-a241-2a6c7f05ef94",
      "name": "Iterate News Articles",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        688,
        416
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "51e37c04-47b7-43b9-b9cc-03098170619f",
      "name": "Remove Duplicate Articles",
      "type": "n8n-nodes-base.code",
      "position": [
        912,
        -16
      ],
      "parameters": {
        "jsCode": "const existing = $items(\"Fetch Existing News\").map(i => i.json.id);\n\nreturn items.filter(item => {\n  return !existing.includes(item.json.id);\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "1bdef196-0823-46a0-88cd-4f409a6128fa",
      "name": "Check If New Article",
      "type": "n8n-nodes-base.if",
      "position": [
        1136,
        -16
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "1fcc89a8-e01f-460a-bf1c-d6ecd1bbd159",
              "operator": {
                "type": "number",
                "operation": "notExists",
                "singleValue": true
              },
              "leftValue": "={{ $json.ID }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "1b981383-62ab-4f0d-b358-e5126f630ba7",
      "name": "Apply Macro Rules Engine",
      "type": "n8n-nodes-base.code",
      "position": [
        1504,
        -32
      ],
      "parameters": {
        "jsCode": "const rules = $items(\"Fetch Macro Rules\") || [];\n\nreturn items.map(item => {\n  const text = (item.json.combined_text || \"\").toLowerCase();\n\n  let matches = [];\n  let score = 0;\n  let seen = new Set();\n\n  for (const r of rules) {\n    const keyword = (r.json.Keyword || \"\")\n      .toLowerCase()\n      .trim();\n\n    if (keyword && text.includes(keyword) && !seen.has(keyword)) {\n      seen.add(keyword);\n\n      matches.push({\n        keyword: r.json.Keyword,\n        impact: r.json.Impact,\n        asset: r.json.Asset,\n        sentiment: r.json.Sentiment,\n        weight: r.json.Weight\n      });\n\n      score += Number(r.json.Weight || 0);\n    }\n  }\n\n  return {\n    json: {\n      ...item.json,\n      rule_matches: matches,\n      rule_score: score\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "97f47f1e-e1f5-447f-bec0-0e2e0e29dc29",
      "name": "AI Market Impact Analysis",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1760,
        192
      ],
      "parameters": {
        "text": "=You are a professional macro trader.\n\nAnalyze this news:\n\nTitle: {{$json.title}}\nDescription: {{$json.description}}\n\nMatched rules:\n{{$json.rule_matches}}\n\nUse BOTH:\n1. News context\n2. Rule matches\n\nReturn ONLY valid JSON:\n\n{\n  \"impact_level\": \"low | medium | high\",\n  \"affected_assets\": [\"forex\", \"stocks\", \"crypto\", \"bonds\", \"commodities\"],\n  \"sentiment\": \"bullish | bearish | neutral\",\n  \"trade_bias\": {\n    \"forex\": \"buy USD | sell USD | neutral\",\n    \"crypto\": \"buy BTC | sell BTC | neutral\",\n    \"stocks\": \"buy equities | sell equities | neutral\"\n  },\n  \"confidence\": 0-100,\n  \"reason\": \"short explanation\"\n}",
        "batching": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.8
    },
    {
      "id": "00050a5a-5c7d-4288-807e-c98a3a6cbdac",
      "name": "LLM Engine (Groq)",
      "type": "@n8n/n8n-nodes-langchain.lmChatGroq",
      "position": [
        1760,
        384
      ],
      "parameters": {
        "model": "openai/gpt-oss-120b",
        "options": {}
      },
      "credentials": {
        "groqApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "28a9e752-c1b9-4865-aa03-5c95be73a910",
      "name": "Parse AI JSON Output",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1904,
        384
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"impact_level\": {\n      \"type\": \"string\",\n      \"enum\": [\"low\", \"medium\", \"high\"]\n    },\n    \"affected_assets\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\"forex\", \"stocks\", \"crypto\", \"bonds\", \"commodities\"]\n      }\n    },\n    \"sentiment\": {\n      \"type\": \"string\",\n      \"enum\": [\"bullish\", \"bearish\", \"neutral\"]\n    },\n    \"trade_bias\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"forex\": {\n          \"type\": \"string\",\n          \"enum\": [\"buy USD\", \"sell USD\", \"neutral\"]\n        },\n        \"crypto\": {\n          \"type\": \"string\",\n          \"enum\": [\"buy BTC\", \"sell BTC\", \"neutral\"]\n        },\n        \"stocks\": {\n          \"type\": \"string\",\n          \"enum\": [\"buy equities\", \"sell equities\", \"neutral\"]\n        }\n      },\n      \"required\": [\"forex\", \"crypto\", \"stocks\"]\n    },\n    \"confidence\": {\n      \"type\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 100\n    },\n    \"reason\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\n    \"impact_level\",\n    \"affected_assets\",\n    \"sentiment\",\n    \"trade_bias\",\n    \"confidence\",\n    \"reason\"\n  ]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "d0c2b2e6-872d-469e-be66-b29c948c6b63",
      "name": "Combine Rule + AI Outputs",
      "type": "n8n-nodes-base.merge",
      "position": [
        2080,
        -16
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "577d6a4a-0b55-4fd2-ac05-6b12d82bd517",
      "name": "Flatten AI Response",
      "type": "n8n-nodes-base.code",
      "position": [
        2432,
        -16
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const ai = item.json.output || {};\n\n  return {\n    json: {\n      ...item.json,\n      ...ai\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "71aa98dd-a4da-4b14-8626-3b0cfaaa0564",
      "name": "Calculate Final Score",
      "type": "n8n-nodes-base.code",
      "position": [
        2864,
        -16
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const ruleScore = Number(item.json.rule_score || 0);\n  const confidence = Number(item.json.confidence || 0);\n\n  let impactBoost = 0;\n\n  // Boost based on impact level\n  if (item.json.impact_level === \"high\") impactBoost = 20;\n  else if (item.json.impact_level === \"medium\") impactBoost = 10;\n\n  // Final score calculation\n  const final_score = ruleScore + confidence + impactBoost;\n\n  return {\n    json: {\n      ...item.json,\n      final_score\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "80a2e990-3f3d-467d-8cc2-5209bb64b74a",
      "name": "Assign Final Impact Level",
      "type": "n8n-nodes-base.code",
      "position": [
        3088,
        -16
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const score = Number(item.json.final_score || 0);\n\n  let impact_level_final = \"low\";\n\n  if (score >= 90) impact_level_final = \"high\";\n  else if (score >= 60) impact_level_final = \"medium\";\n\n  return {\n    json: {\n      ...item.json,\n      impact_level_final\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "723de95f-f821-47b0-9e90-4adcf4918a53",
      "name": "Filter High Impact Alerts",
      "type": "n8n-nodes-base.if",
      "position": [
        3312,
        -16
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "b1246b16-32e4-4d8d-9a18-e0ac0b9fbd09",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.impact_level_final }}",
              "rightValue": "high"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "eb813d2c-9ae0-4dcd-822d-c1f82b68fb1d",
      "name": "Store High Impact News",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3536,
        -16
      ],
      "parameters": {
        "columns": {
          "value": {
            "ID": "={{ $json.id }}",
            "Link": "={{ $json.url }}",
            "Title": "={{ $json.title }}",
            "Source": "={{ $json.source.name }}"
          },
          "schema": [
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Source",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Source",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Link",
              "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/1_-IyhRpy6kcngHX6S8pvNr1DSUWW49YcE7ySwi1js38/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1_-IyhRpy6kcngHX6S8pvNr1DSUWW49YcE7ySwi1js38",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1_-IyhRpy6kcngHX6S8pvNr1DSUWW49YcE7ySwi1js38/edit?usp=drivesdk",
          "cachedResultName": "Macro News lookup"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "a9e0ef55-9d04-4b0b-a562-037a9eb70308",
      "name": "Send Email Alert",
      "type": "n8n-nodes-base.gmail",
      "position": [
        3760,
        112
      ],
      "parameters": {
        "message": "=<div style=\"font-family: Arial, sans-serif; max-width: 600px; margin: auto; border: 1px solid #eee; padding: 20px; border-radius: 10px;\">\n\n  <h2 style=\"color:#d9534f;\">Macro Market Alert</h2>\n\n  <p><strong>News:</strong><br>\n  {{ $('Filter High Impact Alerts').item.json.title }}</p>\n\n  <p>\n    <strong>Impact:</strong> {{ $('Filter High Impact Alerts').item.json.impact_level_final }}<br>\n    <strong>Sentiment:</strong> {{ $('Filter High Impact Alerts').item.json.sentiment }}<br>\n    <strong>Score:</strong> {{ $('Filter High Impact Alerts').item.json.final_score }}\n  </p>\n\n  <hr>\n\n  <h3>Trade Signals</h3>\n  <ul>\n    <li><strong>Forex:</strong> {{ $('Filter High Impact Alerts').item.json.trade_bias.forex }}</li>\n    <li><strong>Crypto:</strong> {{ $('Filter High Impact Alerts').item.json.trade_bias.crypto }}</li>\n    <li><strong>Stocks:</strong> {{ $('Filter High Impact Alerts').item.json.trade_bias.stocks }}</li>\n  </ul>\n\n  <hr>\n\n  <h3>Analysis</h3>\n  <p>{{ $('Filter High Impact Alerts').item.json.reason }}</p>\n\n  <hr>\n\n  <p>\n    <a href=\"{{ $('Filter High Impact Alerts').item.json.url }}\" target=\"_blank\">Read Full Article</a>\n  </p>\n\n</div>",
        "options": {},
        "subject": "={{ $('Filter High Impact Alerts').item.json.impact_level_final.toUpperCase() }} Macro Alert | Score {{ $('Filter High Impact Alerts').item.json.final_score }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "bc2657d9-ae97-4393-8f86-6413b571759c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -640,
        288
      ],
      "parameters": {
        "color": 7,
        "width": 1056,
        "height": 304,
        "content": "## News Ingestion & Normalization\nFetch macroeconomic news using SerpAPI and normalize articles into a structured format. Generate unique IDs and combine title + description for downstream processing, ensuring consistency for rule matching and AI analysis."
      },
      "typeVersion": 1
    },
    {
      "id": "64909037-73eb-4772-8a0c-18724f43f3a3",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        576,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 752,
        "height": 736,
        "content": "## Deduplication & Flow Control\nLoop through incoming articles and compare against stored records in Google Sheets. Filter out duplicates using unique IDs, ensuring only fresh news enters the pipeline while maintaining controlled execution flow."
      },
      "typeVersion": 1
    },
    {
      "id": "280389b1-2dc4-4f0c-96b9-83d1b8ff9f54",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1456,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 768,
        "height": 736,
        "content": "## Rule Engine & AI Market Analysis\nMatch news content against predefined macro rules to generate a rule-based score and context. Enrich this with AI-driven analysis to determine sentiment, affected assets, trade bias and confidence using structured output parsing."
      },
      "typeVersion": 1
    },
    {
      "id": "aae36316-5cb4-437c-91ff-99a76939022c",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2368,
        -144
      ],
      "parameters": {
        "color": 7,
        "width": 1360,
        "height": 464,
        "content": "## Scoring, Filtering & Alerting\nCompute a final impact score by combining rule scores, AI confidence and impact boosts. Classify impact level, store high-impact events in Google Sheets and trigger formatted email alerts for actionable opportunities."
      },
      "typeVersion": 1
    },
    {
      "id": "9ba60eaa-1632-42e8-9a74-7594868b1d95",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -656,
        -1136
      ],
      "parameters": {
        "width": 992,
        "height": 832,
        "content": "## Workflow Overview: Macro News \u2192 Market Impact Scoring\n\nThis workflow automates the end-to-end processing of macroeconomic news to identify high-impact trading opportunities. It fetches real-time macro news, removes duplicates, applies a rule-based scoring engine and enhances insights using AI-driven market analysis. Each article is evaluated for sentiment, affected assets and trade bias, followed by a final impact score calculation. Only high-impact opportunities are stored and trigger alerts, enabling faster, data-driven trading decisions with minimal manual effort.\n\n## How it works\n\nThe workflow starts by fetching existing news records and macro rules from Google Sheets. It then retrieves the latest macroeconomic news using SerpAPI.\nEach article is normalized and assigned a unique ID before being processed in a loop. Duplicate articles are filtered out by comparing IDs with stored records, ensuring only new data moves forward.\nNext, a rule engine scans each article for predefined macro keywords and assigns a rule-based score. This is combined with AI-powered analysis that evaluates sentiment, impact level, affected assets and trade bias.\nThe outputs are merged and transformed into a final score by combining rule score, AI confidence and impact boosts. Based on this score, the workflow classifies the final impact level.\nOnly high-impact news is stored in Google Sheets and triggers a formatted email alert with actionable trade insights.\n\n## Setup steps\n\n**Fetch Existing News**: Connect your Google Sheet to retrieve previously processed article IDs for deduplication.  \n**Fetch Macro Rules**: Maintain a rules sheet with keywords, impact, sentiment and weights to power the rule engine.  \n**Fetch Macro News**: Use SerpAPI with queries like `RBI OR inflation India OR GDP India OR repo rate` to retrieve relevant macro news.  \n**Normalize Articles**: Clean and structure incoming articles while generating unique IDs and combined text fields for analysis.  \n**Iterate Articles**: Process each article individually using a loop for controlled execution.  \n**Deduplicate Articles**: Compare generated IDs with stored records and filter out already processed news.  \n**Apply Rule Engine**: Match article content with macro rules to generate rule matches and a weighted score.  \n**Rate Limit**: Add a Wait node before the AI step to delay execution by 5 seconds per item, preventing API rate limits and ensuring stable LLM performance.  \n**AI Market Analysis**: Configure the LLM (Groq) to analyze news and return structured JSON including impact, sentiment, trade bias and confidence.  \n**Combine Rule + AI Outputs**: Combine rule-based insights with AI output into a unified data structure.  \n**Format & Enrich News Data**: Use a Set node to clean, structure and standardize the combined rule and AI output. Select only required fields and prepare a consistent data format for scoring and downstream processing.\n**Final Scoring Logic**: Calculate a final score using rule score, AI confidence and impact-level boosts, then assign a final impact category.  \n**Filter High Impact News**: Allow only articles with high final impact to proceed further.  \n**Store Results**: Append high-impact news into Google Sheets with relevant fields like ID, Title, Source and Link.  \n**Send Alert**: Configure Gmail node to send a formatted HTML alert including impact level, score, sentiment and trade signals.  "
      },
      "typeVersion": 1
    },
    {
      "id": "7a70d17d-18aa-4d25-b5c8-4a78aa1e3373",
      "name": "Rate Limit",
      "type": "n8n-nodes-base.wait",
      "position": [
        1568,
        192
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "07d73fcf-71db-400b-a727-aefd61ed80cb",
      "name": "Format & Enrich News Data",
      "type": "n8n-nodes-base.set",
      "position": [
        2640,
        -16
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9468f0b8-b3a1-48b5-8f4b-a503d3e894df",
              "name": "id",
              "type": "string",
              "value": "={{ $json.id }}"
            },
            {
              "id": "f9376401-d272-4af5-be85-b2708d2e7196",
              "name": "title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "245be5ea-1630-4aca-95dc-15df651f278a",
              "name": "description",
              "type": "string",
              "value": "={{ $json.description }}"
            },
            {
              "id": "01b2ebd9-5ede-4433-bbcd-1663d66fa9c4",
              "name": "sentiment",
              "type": "string",
              "value": "={{ $json.output.sentiment }}"
            },
            {
              "id": "0411adbf-06e1-4ab9-b202-c0c5f5f106e0",
              "name": "impact_level",
              "type": "string",
              "value": "={{ $json.output.impact_level }}"
            },
            {
              "id": "468723ac-a506-4d8d-8117-e7332a524a7a",
              "name": "confidence",
              "type": "number",
              "value": "={{ $json.output.confidence }}"
            },
            {
              "id": "45090636-3adc-4db7-89bf-ad25742ebc41",
              "name": "rule_score",
              "type": "number",
              "value": "={{ $json.rule_score }}"
            },
            {
              "id": "82dcb260-28db-4c16-8f7d-1e0b4829297e",
              "name": "confidence",
              "type": "number",
              "value": "={{ $json.output.confidence }}"
            },
            {
              "id": "08e17bfb-0cac-4609-bf5b-6d9a3abfd726",
              "name": "trade_bias",
              "type": "object",
              "value": "={{ $json.output.trade_bias }}"
            },
            {
              "id": "59f25a88-1cea-4e0a-8eff-95202944df8c",
              "name": "url",
              "type": "string",
              "value": "={{ $json.url }}"
            },
            {
              "id": "4d637263-bd9c-42d2-afda-479dffbdcff8",
              "name": "reason",
              "type": "string",
              "value": "={{ $json.output.reason }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "7f6c82a2-cf0d-4980-b3c7-4b1dd1d74bba",
  "connections": {
    "Rate Limit": {
      "main": [
        [
          {
            "node": "AI Market Impact Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Workflow": {
      "main": [
        [
          {
            "node": "Fetch Existing News",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email Alert": {
      "main": [
        [
          {
            "node": "Iterate News Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Macro Rules": {
      "main": [
        [
          {
            "node": "Fetch Macro News (SerpAPI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LLM Engine (Groq)": {
      "ai_languageModel": [
        [
          {
            "node": "AI Market Impact Analysis",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Existing News": {
      "main": [
        [
          {
            "node": "Fetch Macro Rules",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Flatten AI Response": {
      "main": [
        [
          {
            "node": "Format & Enrich News Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check If New Article": {
      "main": [
        [
          {
            "node": "Apply Macro Rules Engine",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Iterate News Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI JSON Output": {
      "ai_outputParser": [
        [
          {
            "node": "AI Market Impact Analysis",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Final Score": {
      "main": [
        [
          {
            "node": "Assign Final Impact Level",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Iterate News Articles": {
      "main": [
        [],
        [
          {
            "node": "Remove Duplicate Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store High Impact News": {
      "main": [
        [
          {
            "node": "Send Email Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Apply Macro Rules Engine": {
      "main": [
        [
          {
            "node": "Combine Rule + AI Outputs",
            "type": "main",
            "index": 0
          },
          {
            "node": "Rate Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Market Impact Analysis": {
      "main": [
        [
          {
            "node": "Combine Rule + AI Outputs",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Assign Final Impact Level": {
      "main": [
        [
          {
            "node": "Filter High Impact Alerts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine Rule + AI Outputs": {
      "main": [
        [
          {
            "node": "Flatten AI Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter High Impact Alerts": {
      "main": [
        [
          {
            "node": "Store High Impact News",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Iterate News Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format & Enrich News Data": {
      "main": [
        [
          {
            "node": "Calculate Final Score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicate Articles": {
      "main": [
        [
          {
            "node": "Check If New Article",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Macro News (SerpAPI)": {
      "main": [
        [
          {
            "node": "Normalize & Generate News ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize & Generate News ID": {
      "main": [
        [
          {
            "node": "Iterate News Articles",
            "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 workflow is a high-precision financial intelligence engine that monitors macroeconomic news to identify high-impact trading opportunities. It retrieves real-time data via SerpAPI, processes it through a dual-layered engine—combining a custom weighted Rule Engine with…

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

More Email & Gmail workflows → · Browse all categories →

Related workflows

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

Email & Gmail

This workflow is a comprehensive automation engine that bridges the gap between raw client data and expert-level financial advice. Upon receiving a new onboarding form from Google Sheets, the system f

Chain Llm, Output Parser Structured, Google Sheets +4
Email & Gmail

n8n Graphic Design Team. Uses googleSheets, googleDrive, httpRequest, outputParserStructured. Event-driven trigger; 37 nodes.

Google Sheets, Google Drive, HTTP Request +5
Email & Gmail

Wait Splitout. Uses lmOpenAi, outputParserStructured, httpRequest, stickyNote. Event-driven trigger; 26 nodes.

Lm Open Ai, Output Parser Structured, HTTP Request +4
Email & Gmail

Wait Splitout. Uses lmOpenAi, outputParserStructured, httpRequest, stickyNote. Event-driven trigger; 26 nodes.

Lm Open Ai, Output Parser Structured, HTTP Request +4
Email & Gmail

The automation loads rows from a Google Sheet of leads that you want to contact. It makes a Google search via Apify for LinkedIn links based on the First name / Last name / Company. Another Apify acto

HTTP Request, Google Sheets, Chain Llm +3