{
  "id": "eU3mOTO8q2WgjYtn",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Earnings News \u2192 Key Takeaways Extractor",
  "tags": [],
  "nodes": [
    {
      "id": "5f4cec36-c29b-4d3f-bfbb-a95809ff270d",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -288,
        -512
      ],
      "parameters": {
        "width": 464,
        "height": 480,
        "content": "## Earnings News \u2192 Key Takeaways Extractor\n\n## How it Works\nThis workflow automates financial monitoring by fetching the latest earnings reports via Google News RSS. It uses Gemini AI to parse messy news snippets into structured data (Revenue, Guidance and Surprises). A Logic Filter then separates actual financial results from simple meeting announcements, ensuring only high-signal alerts are sent to Slack while all data is logged for records.\n\n## Setup Steps\n\nHTTP Request: Update the q= parameter with your target companies.\n\nGemini Node: Ensure your Google AI API key is connected.\n\nSlack Node: Connect your Slack account and select a destination channel.\n\nDatabase: Map the \"Clean AI Output\" fields to your table columns.\n\nTest: Click \"Execute Workflow\" to verify the extraction and filtering logic."
      },
      "typeVersion": 1
    },
    {
      "id": "8960a447-da8d-4581-ad2b-5f27902d6e3e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        304,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 368,
        "content": "## Data Acquisition Group \n(Nodes: Fetch: Google News RSS \u2192 Filter: Top 5 Articles\u2192 Iterator: Process Each Article)\n\nSection: Source Fetching\nRetrieves the latest RSS feed from Google News. The Limit node prevents high API costs by processing only the top 5 stories, while the Loop ensures each article is analyzed individually."
      },
      "typeVersion": 1
    },
    {
      "id": "8a625516-9519-46d7-af20-bc05b961a48a",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        -192
      ],
      "parameters": {
        "color": 7,
        "width": 768,
        "height": 416,
        "content": "## AI Processing Group \n(Nodes: Parser: XML to JSON\u2192 Prompt Builder: Financial Analyst \u2192 Gemini)\n\nSection: Intelligence Engine\nConverts raw XML into readable JSON. The Edit Fields node constructs a \"Financial Analyst\" prompt, which Gemini uses to extract hard numbers and market sentiment from the news text."
      },
      "typeVersion": 1
    },
    {
      "id": "fd3eb0e2-c135-4159-88fe-bc79bd484906",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1968,
        -160
      ],
      "parameters": {
        "color": 7,
        "width": 784,
        "height": 336,
        "content": "## Governance & Delivery Layer\n(Nodes: Formatter \u2192 Database Log \u2192 High-Signal Filter \u2192 Slack Alert)\n\nSection: Quality & Alerts\nCleans AI responses for database compatibility and logs every result. A Logic Filter then identifies \"empty\" announcements, ensuring only high-value, actionable financial data is pushed to Slack to prevent user alert fatigue."
      },
      "typeVersion": 1
    },
    {
      "id": "8aa8d8db-0cbb-47b6-a6e2-748023216d1c",
      "name": "Start: Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        128,
        48
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "b67fa332-4438-4c2a-aa85-dd2151adea94",
      "name": "Fetch: Google News RSS",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        368,
        48
      ],
      "parameters": {
        "url": "https://news.google.com/rss/search?q=company+earnings+OR+quarterly+results+OR+earnings+report&hl=en-IN&gl=IN&ceid=IN:en",
        "options": {}
      },
      "typeVersion": 4.3
    },
    {
      "id": "c8e3c655-c571-4001-bf7b-3750111c92cd",
      "name": "Filter: Top 5 Articles",
      "type": "n8n-nodes-base.limit",
      "position": [
        592,
        48
      ],
      "parameters": {
        "maxItems": 5
      },
      "typeVersion": 1
    },
    {
      "id": "bab0f7b6-7fcc-4bee-9d1c-d0534b400230",
      "name": "Iterator: Process Each Article",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        816,
        48
      ],
      "parameters": {
        "options": {}
      },
      "executeOnce": false,
      "retryOnFail": false,
      "typeVersion": 3,
      "alwaysOutputData": false
    },
    {
      "id": "e47d5c1a-5448-4c7f-87be-9358aefaaa6b",
      "name": "Parser: XML to JSON",
      "type": "n8n-nodes-base.xml",
      "position": [
        1168,
        64
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "c677e3dd-befd-4ae7-a02d-dc95c195cce7",
      "name": "Prompt Builder: Financial Analyst",
      "type": "n8n-nodes-base.set",
      "position": [
        1392,
        64
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "62befc81-af19-446f-b722-bec904d04fe3",
              "name": "rss.channel.title",
              "type": "string",
              "value": "={{ $json.rss.channel.title }}"
            },
            {
              "id": "960b17dd-200c-42fc-853d-179b09c28a81",
              "name": "rss.channel.link",
              "type": "string",
              "value": "={{ $json.rss.channel.link }}"
            },
            {
              "id": "bbb706b6-e457-419a-be57-c50462f6775f",
              "name": "rss.channel.item[0].description",
              "type": "string",
              "value": "={{ $json.rss.channel.item[0].description }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9e9d4b71-b32b-47c4-941e-02fb75466857",
      "name": "AI: Extract Key Takeaways",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1648,
        -32
      ],
      "parameters": {
        "text": "=You are a financial analyst. I have an earnings headline: \"{{ $json.rss.channel.title }},{{ $json.rss.channel.link }}, {{ $json.rss.channel.item[0].description }}\nIf the headline contains specific numbers, extract them. If it doesn't, then check the given link summarize the general sentiment (e.g., \"Record results implies a positive revenue trend\").\n\nProvide:\n1. Revenue Trend\n2. Guidance\n3. Surprises\n\n",
        "batching": {},
        "promptType": "define"
      },
      "typeVersion": 1.8
    },
    {
      "id": "0e678609-c19e-4264-a818-ac4eb5b0cfb9",
      "name": "Model: Gemini Pro",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1664,
        240
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1,
      "waitBetweenTries": 5000
    },
    {
      "id": "2280c704-3807-4bbf-ad85-8f30a654372d",
      "name": "Formatter: Clean AI Output",
      "type": "n8n-nodes-base.set",
      "position": [
        2000,
        32
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "fcd2a217-cb80-47c8-9a99-fab4c089e2bc",
              "name": "rss.channel.title",
              "type": "string",
              "value": "={{ $node[\"Parser: XML to JSON\"].json[\"rss\"][\"channel\"][\"item\"][0][\"title\"] }}"
            },
            {
              "id": "b7cc388a-b0cc-4794-aaf7-21f0fc5c3265",
              "name": "Revenue Trend",
              "type": "string",
              "value": "={{ $json.text.split('Guidance:')[0].replace('Revenue:', '').trim() }}"
            },
            {
              "id": "ffae6c06-8a8b-44c0-83d1-a78639bf7838",
              "name": "Guidance",
              "type": "string",
              "value": "={{ $json.text.split('Guidance:')[1].split('Surprises:')[0].trim() }}"
            },
            {
              "id": "43c39cf5-a084-4b58-9b22-17a3c74d8358",
              "name": "Surprises",
              "type": "string",
              "value": "={{ $json.text.split('Surprises:')[1].trim() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "1f647dee-e19f-4c75-b34d-552a207fc23a",
      "name": "Database: Log Results",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        2224,
        48
      ],
      "parameters": {
        "columns": {
          "value": {
            "Title": "={{ $json.rss.channel.title }}",
            "Guidance": "={{ $json.Guidance }}",
            "Surprises": "={{ $json.Surprises }}",
            "Revenue_Trend": "={{ $json['Revenue Trend'] }}"
          },
          "schema": [
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false
            },
            {
              "id": "Revenue_Trend",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Revenue_Trend",
              "defaultMatch": false
            },
            {
              "id": "Guidance",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Guidance",
              "defaultMatch": false
            },
            {
              "id": "Surprises",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Surprises",
              "defaultMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "dataTableId": {
          "__rl": true,
          "mode": "list",
          "value": "eRSBSLxgRO2ZZN8D",
          "cachedResultUrl": "/projects/XkgejKSYcPusPWyB/datatables/eRSBSLxgRO2ZZN8D",
          "cachedResultName": "Lalit-n8n"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "b23b8f45-c7d2-467a-aad4-7f6383a3d1fa",
      "name": "Send a message",
      "type": "n8n-nodes-base.slack",
      "position": [
        2640,
        48
      ],
      "parameters": {
        "text": "=New Earnings Takeaway:  {{ $json.Title }}  Revenue Trend:{{ $json.Revenue_Trend }} Guidance: {{ $json[\"Guidance\"] }}  Surprises: {{ $json[\"Surprises\"] }}   [View Original Article]({{ $node[\"Parser: XML to JSON\"].json[\"rss\"][\"channel\"][\"item\"][0][\"link\"] }})",
        "user": {
          "__rl": true,
          "mode": "id",
          "value": "U0AP17N3QRY"
        },
        "select": "user",
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "b325a5d9-cff3-45ca-a391-b42bacef4829",
      "name": "High-Signal Filter",
      "type": "n8n-nodes-base.filter",
      "position": [
        2432,
        48
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "2987caa3-03c1-4c73-af02-b729037472a1",
              "operator": {
                "type": "string",
                "operation": "notContains"
              },
              "leftValue": "={{ $json.Revenue_Trend }}",
              "rightValue": "Not available"
            }
          ]
        }
      },
      "typeVersion": 2.3
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "442a81d9-8a78-4371-a9ac-b04ff20063ad",
  "connections": {
    "Model: Gemini Pro": {
      "ai_languageModel": [
        [
          {
            "node": "AI: Extract Key Takeaways",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "High-Signal Filter": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parser: XML to JSON": {
      "main": [
        [
          {
            "node": "Prompt Builder: Financial Analyst",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Database: Log Results": {
      "main": [
        [
          {
            "node": "High-Signal Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start: Manual Trigger": {
      "main": [
        [
          {
            "node": "Fetch: Google News RSS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch: Google News RSS": {
      "main": [
        [
          {
            "node": "Filter: Top 5 Articles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter: Top 5 Articles": {
      "main": [
        [
          {
            "node": "Iterator: Process Each Article",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI: Extract Key Takeaways": {
      "main": [
        [
          {
            "node": "Formatter: Clean AI Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Formatter: Clean AI Output": {
      "main": [
        [
          {
            "node": "Database: Log Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Iterator: Process Each Article": {
      "main": [
        [],
        [
          {
            "node": "Parser: XML to JSON",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prompt Builder: Financial Analyst": {
      "main": [
        [
          {
            "node": "AI: Extract Key Takeaways",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}