{
  "name": "AI-Powered Executive Financial Monitoring & Alerting System",
  "nodes": [
    {
      "id": "255ad886-0c84-4d56-9745-4d32b5c5719e",
      "name": "Sticky Note — Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2144,
        4064
      ],
      "parameters": {
        "width": 692,
        "height": 476,
        "content": "## 📊 CFO Intelligence Dashboard — Daily Briefing\n\n### How it works\nEvery weekday at 7 AM, this workflow pulls live financial data from five Google Sheets tabs (Cash Flow, Revenue, Payroll, Subscriptions, Expenses), calculates key KPIs, and passes the results to an AI agent. The AI writes a concise executive briefing, which is saved to Notion and sent to a Telegram channel. If revenue drops more than 10%, a separate critical alert fires immediately.\n\n### Setup steps\n1. **Google Sheets** — Connect your `googleSheetsOAuth2Api` credential and update the sheet ID in all five Fetch nodes to point to your own spreadsheet.\n2. **OpenAI** — Add your OpenAI API key under the `openAiApi` credential used by the GPT-4o-mini node.\n3. **Notion** — Connect your `notionApi` credential and update the Notion database ID in the Save node to match your CFO Report database.\n4. **Telegram** — Add your `telegramApi` credential and confirm the correct Chat ID in both Telegram nodes.\n5. **Test** — Manually trigger the workflow once to verify data is fetched, the AI report generates correctly, and the Telegram message arrives as expected."
      },
      "typeVersion": 1
    },
    {
      "id": "36ea10a1-1576-4fd0-9d91-c4cfb7028e90",
      "name": "Sticky Note — Trigger",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1360,
        4624
      ],
      "parameters": {
        "color": 7,
        "width": 280,
        "height": 372,
        "content": "## ⏰ Schedule Trigger\nRuns Monday–Friday at 7 AM using a cron expression. Kicks off all five data-fetch branches in parallel."
      },
      "typeVersion": 1
    },
    {
      "id": "72074ea2-efdf-4dfd-b9f6-9304f95769d8",
      "name": "Sticky Note — Data Fetching",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1024,
        4272
      ],
      "parameters": {
        "color": 7,
        "width": 556,
        "height": 1292,
        "content": "## 📥 Data Fetching\nPulls the latest rows from all five financial sheets simultaneously — CashFlow, Revenue, Payroll, Subscriptions, and Expenses — then merges them into a single dataset for analysis."
      },
      "typeVersion": 1
    },
    {
      "id": "6effccf9-7c69-459e-b4c5-97527fee0d28",
      "name": "Sticky Note — KPI Analysis",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        4544
      ],
      "parameters": {
        "color": 7,
        "width": 516,
        "height": 648,
        "content": "## 🧮 KPI Analysis\nAggregates totals, calculates percentage changes, and assigns status labels (GOOD / WARNING / ALERT) for revenue, payroll, marketing ROI, and cash runway. Output feeds directly into the AI node."
      },
      "typeVersion": 1
    },
    {
      "id": "0cf52ea3-8531-4afb-8f33-93163331bcfa",
      "name": "Sticky Note — AI Generation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        4528
      ],
      "parameters": {
        "color": 7,
        "width": 636,
        "height": 716,
        "content": "## 🤖 AI Report Generation\nThe Agent node uses GPT-4o-mini with a structured system prompt to write a Telegram-formatted executive briefing from the raw KPI data. Output is merged back with financial fields before routing to destinations."
      },
      "typeVersion": 1
    },
    {
      "id": "75180ea9-255a-4749-87f9-2bdbfceae9ca",
      "name": "Sticky Note — Delivery",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        768,
        4288
      ],
      "parameters": {
        "color": 7,
        "width": 668,
        "height": 1164,
        "content": "## 📤 Delivery & Logging\nSends the AI-written report to Telegram and saves a structured record to Notion. If revenue has dropped more than 10%, a second critical alert message is sent immediately to the same Telegram channel."
      },
      "typeVersion": 1
    },
    {
      "id": "41a4a381-85dd-439a-a1bf-5bd25703195c",
      "name": "Sticky Note — Security",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1472,
        5072
      ],
      "parameters": {
        "color": 3,
        "width": 300,
        "height": 308,
        "content": "## 🔐 Credentials & Security\nUse OAuth2 for Google Sheets and Notion. Add OpenAI and Telegram credentials via n8n's credential manager — never paste keys directly into node fields. Replace all personal IDs with your own before sharing this workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "93224007-4e5a-404d-87d0-6eb4a878e2ba",
      "name": "Calculate KPIs & Status Labels",
      "type": "n8n-nodes-base.code",
      "position": [
        -48,
        4848
      ],
      "parameters": {
        "jsCode": "const allItems = $input.all();\n\nconst cashflowData = allItems.filter(i => i.json.sheet === 'CashFlow' || i.json.cash_in !== undefined);\nconst revenueData = allItems.filter(i => i.json.sheet === 'Revenue' || i.json.revenue_current !== undefined);\nconst payrollData = allItems.filter(i => i.json.sheet === 'Payroll' || i.json.payroll_current !== undefined);\nconst subscriptionData = allItems.filter(i => i.json.sheet === 'Subscriptions' || i.json.subscription_revenue !== undefined);\nconst expensesData = allItems.filter(i => i.json.sheet === 'Expenses' || i.json.expense_amount !== undefined);\n\nconst totalRevenueCurrent = revenueData.reduce((sum, i) => sum + (parseFloat(i.json.revenue_current) || 0), 0);\nconst totalRevenuePrevious = revenueData.reduce((sum, i) => sum + (parseFloat(i.json.revenue_previous) || 0), 0);\nconst revenueChange = totalRevenuePrevious > 0 ? (((totalRevenueCurrent - totalRevenuePrevious) / totalRevenuePrevious) * 100).toFixed(1) : 0;\n\nconst totalPayrollCurrent = payrollData.reduce((sum, i) => sum + (parseFloat(i.json.payroll_current) || 0), 0);\nconst totalPayrollPrevious = payrollData.reduce((sum, i) => sum + (parseFloat(i.json.payroll_previous) || 0), 0);\nconst payrollChange = totalPayrollPrevious > 0 ? (((totalPayrollCurrent - totalPayrollPrevious) / totalPayrollPrevious) * 100).toFixed(1) : 0;\n\nconst totalMarketingSpend = expensesData.reduce((sum, i) => sum + (parseFloat(i.json.marketing_spend) || 0), 0);\nconst totalMarketingRevenue = revenueData.reduce((sum, i) => sum + (parseFloat(i.json.marketing_attributed_revenue) || 0), 0);\nconst marketingROI = totalMarketingSpend > 0 ? ((totalMarketingRevenue / totalMarketingSpend) * 100).toFixed(1) : 0;\nconst marketingROIPrevious = 85;\nconst marketingROIChange = (marketingROI - marketingROIPrevious).toFixed(1);\n\nconst currentCash = cashflowData.reduce((sum, i) => sum + (parseFloat(i.json.cash_balance) || 0), 0);\nconst monthlyBurnRate = expensesData.reduce((sum, i) => sum + (parseFloat(i.json.monthly_burn) || 0), 0);\nconst cashRunway = monthlyBurnRate > 0 ? (currentCash / monthlyBurnRate).toFixed(1) : 'N/A';\n\nconst totalSubscriptions = subscriptionData.reduce((sum, i) => sum + (parseFloat(i.json.subscription_revenue) || 0), 0);\nconst totalExpenses = expensesData.reduce((sum, i) => sum + (parseFloat(i.json.expense_amount) || 0), 0);\n\nconst today = new Date().toISOString().split('T')[0];\n\nconst revenueStatus = revenueChange < -10 ? '🔴 ALERT' : revenueChange < 0 ? '🟡 WARNING' : '🟢 GOOD';\nconst payrollStatus = payrollChange > 10 ? '🔴 ALERT' : payrollChange > 5 ? '🟡 WARNING' : '🟢 GOOD';\nconst cashRunwayStatus = parseFloat(cashRunway) < 3 ? '🔴 CRITICAL' : parseFloat(cashRunway) < 6 ? '🟡 WARNING' : '🟢 HEALTHY';\nconst marketingStatus = marketingROIChange > 0 ? '🟢 IMPROVING' : '🟡 DECLINING';\n\nreturn [{\n  json: {\n    date: today,\n    revenue_current: totalRevenueCurrent,\n    revenue_previous: totalRevenuePrevious,\n    revenue_change_pct: parseFloat(revenueChange),\n    payroll_current: totalPayrollCurrent,\n    payroll_change_pct: parseFloat(payrollChange),\n    marketing_roi: parseFloat(marketingROI),\n    marketing_roi_change: parseFloat(marketingROIChange),\n    cash_balance: currentCash,\n    monthly_burn_rate: monthlyBurnRate > 0 ? monthlyBurnRate / allItems.filter(i => i.json.monthly_burn).length : 0,\n    cash_runway_months: parseFloat(cashRunway),\n    subscriptions_mrr: totalSubscriptions,\n    total_expenses: totalExpenses,\n    revenue_status: revenueStatus,\n    payroll_status: payrollStatus,\n    cash_status: cashRunwayStatus,\n    marketing_status: marketingStatus\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "7ce123fe-a6b9-4ba7-91db-19f30a37dc9c",
      "name": "Merge AI Report + Financial Data",
      "type": "n8n-nodes-base.code",
      "position": [
        640,
        4848
      ],
      "parameters": {
        "jsCode": "const aiOutput = $('Generate AI Outreach Message1').item.json.output || '';\nconst financialData = $('Calculate KPIs & Status Labels').item.json;\n\nreturn [{\n  json: {\n    ...financialData,\n    telegram_report: aiOutput\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "aaca23c6-472e-460c-8ff4-f77f4b0f46cb",
      "name": "Weekday 7 AM Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1264,
        4800
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 7 * * 1-5"
            }
          ]
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "a859b98e-26af-42f6-af87-e7bf69c5e578",
      "name": "Fetch Cash Flow Data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -800,
        4496
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1633478050,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=1633478050",
          "cachedResultName": "CashFlow"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit",
          "cachedResultName": "CFO Dashboard Spreadsheet"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "0e5b9cfe-d746-48d7-a5e4-90405b10d3a2",
      "name": "Fetch Revenue Data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -800,
        4720
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1706846147,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=1706846147",
          "cachedResultName": "Revenue"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit",
          "cachedResultName": "CFO Dashboard Spreadsheet"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "afb56320-8bf9-4429-b078-20e1b3f6674b",
      "name": "Fetch Payroll Data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -800,
        4912
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 195536092,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=195536092",
          "cachedResultName": "Payroll"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit",
          "cachedResultName": "CFO Dashboard Spreadsheet"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "5f235cb5-0a53-4ade-8211-087911ed8fc5",
      "name": "Fetch Subscriptions Data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -800,
        5088
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1836920758,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=1836920758",
          "cachedResultName": "Subscriptions"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit",
          "cachedResultName": "CFO Dashboard Spreadsheet"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "d8cd861b-67ca-4a02-9050-63ae2362e549",
      "name": "Fetch Expenses Data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -800,
        5296
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 2069863123,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=2069863123",
          "cachedResultName": "Expenses"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEET_ID",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit",
          "cachedResultName": "CFO Dashboard Spreadsheet"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "e68f2b4c-8428-4c4b-b23d-74ce4fcff869",
      "name": "Merge All Sheet Data",
      "type": "n8n-nodes-base.merge",
      "position": [
        -336,
        4800
      ],
      "parameters": {
        "numberInputs": 5
      },
      "typeVersion": 3.2
    },
    {
      "id": "ba7f2284-83e9-4736-9a06-870401cc47f3",
      "name": "Save CFO Report to Notion",
      "type": "n8n-nodes-base.notion",
      "position": [
        960,
        4544
      ],
      "parameters": {
        "title": "=CFO Report — {{ $json.date }}",
        "blockUi": {
          "blockValues": [
            {
              "textContent": "={{ $json.telegram_report }}"
            }
          ]
        },
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_NOTION_DATABASE_ID",
          "cachedResultUrl": "https://app.notion.com/p/YOUR_NOTION_DATABASE_ID",
          "cachedResultName": "CFO Report"
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "date|title",
              "title": "={{ $json.date }}"
            },
            {
              "key": "marketing status|rich_text",
              "textContent": "={{ $json.marketing_status }}"
            },
            {
              "key": "report|rich_text",
              "textContent": "={{ $json.telegram_report }}"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "bab31bff-d680-4920-8d87-7558f0e48aab",
      "name": "Send Daily Briefing to Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        960,
        5152
      ],
      "parameters": {
        "text": "={{ $json.telegram_report }}",
        "chatId": "YOUR_TELEGRAM_CHAT_ID",
        "additionalFields": {
          "parse_mode": "Markdown"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "0c78fcaa-45c1-4af1-9b62-6b2bae004d63",
      "name": "Check for Critical Revenue Drop",
      "type": "n8n-nodes-base.if",
      "position": [
        944,
        4848
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "cond-revenue-alert",
              "operator": {
                "type": "number",
                "operation": "lt"
              },
              "leftValue": "={{ $json.revenue_change_pct }}",
              "rightValue": -10
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "caf9ba49-1721-424b-b5e0-ab83b69e3ffa",
      "name": "Send Critical Revenue Alert",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1312,
        4832
      ],
      "parameters": {
        "text": "=🚨 *CRITICAL CFO ALERT — {{ $json.date }}*\n\n⚠️ Revenue has dropped {{ $json.revenue_change_pct }}% — immediate attention required!\n\n💰 Cash Runway: {{ $json.cash_runway_months }} months\n🔥 Monthly Burn: ${{ $json.monthly_burn_rate }}\n\nCheck the full report in Notion now.",
        "chatId": "YOUR_TELEGRAM_CHAT_ID",
        "additionalFields": {
          "parse_mode": "Markdown"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "197f6694-ea66-4900-a2a6-76f913d6f718",
      "name": "Generate AI Outreach Message1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "onError": "continueRegularOutput",
      "position": [
        192,
        4848
      ],
      "parameters": {
        "text": "=You are an expert CFO assistant. Write a concise daily financial briefing for the executive team based on the data below. Format it for Telegram using *bold* for section labels. Use emojis for quick scanning. Be direct, highlight what changed and what action (if any) is needed. Keep it under 350 words.\n\n📅 Report Date: {{ $json.date }}\n\n💰 REVENUE\n- Current: ${{ $json.revenue_current }}\n- Previous: ${{ $json.revenue_previous }}\n- Change: {{ $json.revenue_change_pct }}%\n- Status: {{ $json.revenue_status }}\n\n👥 PAYROLL\n- Current: ${{ $json.payroll_current }}\n- Change: {{ $json.payroll_change_pct }}%\n- Status: {{ $json.payroll_status }}\n\n📣 MARKETING ROI\n- ROI: {{ $json.marketing_roi }}%\n- Change vs baseline: {{ $json.marketing_roi_change }}%\n- Status: {{ $json.marketing_status }}\n\n🏦 CASH POSITION\n- Balance: ${{ $json.cash_balance }}\n- Monthly Burn: ${{ $json.monthly_burn_rate }}\n- Runway: {{ $json.cash_runway_months }} months\n- Status: {{ $json.cash_status }}\n\n📦 SUBSCRIPTIONS MRR: ${{ $json.subscriptions_mrr }}\n💸 TOTAL EXPENSES: ${{ $json.total_expenses }}\n\nEnd with a 1–2 line executive summary highlighting the single most important insight today.",
        "options": {
          "systemMessage": "You are a senior CFO assistant. Your job is to turn raw financial KPI data into a sharp, scannable executive briefing for Telegram. Rules: use Telegram Markdown (*bold* for labels), include emojis for each section, keep total length under 350 words, be direct and action-oriented — if a metric is at WARNING or ALERT status call out the specific recommended action, otherwise just confirm it is healthy. Never add filler sentences."
        },
        "promptType": "define"
      },
      "retryOnFail": false,
      "typeVersion": 3
    },
    {
      "id": "171d6d4f-aff0-467a-a0d1-a94200024c78",
      "name": "OpenAI GPT-4o-mini",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        192,
        5072
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "gpt-4o-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "437e604c-ca4a-44b9-8cb5-0475bc549c90",
      "name": "On Workflow Error",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        -1600,
        5440
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "51995a33-1568-4315-9cad-98b08fc04732",
      "name": "Slack: Error Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        -1344,
        5440
      ],
      "parameters": {
        "text": "=Error occured ",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C0AN1UGL0RM",
          "cachedResultName": "all-n8n-automations"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "typeVersion": 2.3
    },
    {
      "id": "cec7a946-37f9-44e8-86a6-3d73a218a431",
      "name": "Section: Error Handler",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1680,
        5296
      ],
      "parameters": {
        "color": 7,
        "width": 492,
        "height": 328,
        "content": "## ⚠️ Error Handler\nCatches any failure across the entire workflow and immediately sends a Slack alert to the ops channel. Wire this to every sub-workflow or critical node to ensure no silent failures."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "On Workflow Error": {
      "main": [
        [
          {
            "node": "Slack: Error Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Payroll Data": {
      "main": [
        [
          {
            "node": "Merge All Sheet Data",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Fetch Revenue Data": {
      "main": [
        [
          {
            "node": "Merge All Sheet Data",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "OpenAI GPT-4o-mini": {
      "ai_languageModel": [
        [
          {
            "node": "Generate AI Outreach Message1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Expenses Data": {
      "main": [
        [
          {
            "node": "Merge All Sheet Data",
            "type": "main",
            "index": 4
          }
        ]
      ]
    },
    "Fetch Cash Flow Data": {
      "main": [
        [
          {
            "node": "Merge All Sheet Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge All Sheet Data": {
      "main": [
        [
          {
            "node": "Calculate KPIs & Status Labels",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Weekday 7 AM Trigger": {
      "main": [
        [
          {
            "node": "Fetch Cash Flow Data",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch Revenue Data",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch Payroll Data",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch Subscriptions Data",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch Expenses Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Subscriptions Data": {
      "main": [
        [
          {
            "node": "Merge All Sheet Data",
            "type": "main",
            "index": 3
          }
        ]
      ]
    },
    "Generate AI Outreach Message1": {
      "main": [
        [
          {
            "node": "Merge AI Report + Financial Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate KPIs & Status Labels": {
      "main": [
        [
          {
            "node": "Generate AI Outreach Message1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check for Critical Revenue Drop": {
      "main": [
        [
          {
            "node": "Send Critical Revenue Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge AI Report + Financial Data": {
      "main": [
        [
          {
            "node": "Save CFO Report to Notion",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Daily Briefing to Telegram",
            "type": "main",
            "index": 0
          },
          {
            "node": "Check for Critical Revenue Drop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "active": false
}
