{
  "name": "Qualify and manage voice sales calls with Claude, GPT-4o, Gemini, and GoHighLevel",
  "nodes": [
    {
      "id": "2c6149e5-01bc-4a87-903b-ce16f36f3ff4",
      "name": "Setup Guide",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        30688,
        6576
      ],
      "parameters": {
        "width": 636,
        "height": 928,
        "content": "## 🚀 Voice AI + GHL Sales Agent — Setup Guide\n\n**STEP 1 — Credentials**\n- Add `HighLevel OAuth2` credential (OAuth2 flow via GHL marketplace app)\n- Add `Anthropic` API key credential\n- Add `OpenAI` AP"
      }
    },
    {
      "id": "b038c1cd-3d50-4088-b140-55f41d5f7240",
      "name": "Supabase Schema",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        31376,
        6512
      ],
      "parameters": {
        "width": 520,
        "height": 988,
        "content": "## 🗄️ Supabase Table Schema\n\n```sql\nCREATE TABLE voice_call_logs (\n  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n  call_id TEXT NOT NULL,\n  phone_number TEXT,\n  direction TEXT DEFAULT 'inbound',\n  "
      }
    },
    {
      "id": "8e3f1b65-ed3a-48dc-8dd8-0d19a7be1da0",
      "name": "Google Sheets Columns",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        31920,
        6512
      ],
      "parameters": {
        "width": 380,
        "height": 980,
        "content": "## 📊 Google Sheets Columns\n\nSheet name: **Voice Call Log**\n\nCreate these columns (Row 1 headers):\n1. Call ID\n2. Date\n3. Phone Number\n4. Direction\n5. Provider\n6. Duration (sec)\n7. BANT Score\n8. Qualifi"
      }
    },
    {
      "id": "5b03b0d6-20a4-495d-ab30-89f3343f90cd",
      "name": "HighLevel IDs",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32336,
        6496
      ],
      "parameters": {
        "width": 480,
        "height": 996,
        "content": "## 🔑 HighLevel Placeholder IDs\n\n| Placeholder | Where to find |\n|---|---|\n| `YOUR_HL_CRED_ID` | n8n Credentials page |\n| `YOUR_PIPELINE_ID` | GHL → Opportunities → Pipeline settings |\n| `YOUR_HOT_STAG"
      }
    },
    {
      "id": "8766ca49-3c85-4668-abb5-399e30f93562",
      "name": "INBOUND FLOW",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        30976,
        7696
      ],
      "parameters": {
        "width": 600,
        "height": 50,
        "content": "## 📞 INBOUND FLOW — Vapi / Retell Webhook → BANT → Booking → HighLevel CRM"
      }
    },
    {
      "id": "d4221ed4-192d-42aa-a900-6ce94e1bdc0f",
      "name": "Inbound Call Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        30960,
        7920
      ]
    },
    {
      "id": "ff5adfec-1e48-4860-93e4-ea46f0147454",
      "name": "Normalize Call Payload",
      "type": "n8n-nodes-base.code",
      "position": [
        31200,
        7920
      ]
    },
    {
      "id": "e12f23c5-2490-4993-b4dc-c828de36a6f5",
      "name": "Valid Call?",
      "type": "n8n-nodes-base.if",
      "position": [
        31440,
        7920
      ]
    },
    {
      "id": "6bc7ecd9-aa1e-461e-aa21-b1d297534e4c",
      "name": "BANT Qualifier",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        31680,
        7904
      ]
    },
    {
      "id": "50365d33-a693-44b4-89a7-0a7578012245",
      "name": "Claude Haiku (BANT)",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        31584,
        8128
      ]
    },
    {
      "id": "c768b57e-963d-45e7-8746-403e4e7f1603",
      "name": "BANT Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        31792,
        8128
      ]
    },
    {
      "id": "15f47f1f-bf86-40d0-8469-cebe0c38619e",
      "name": "Extract BANT",
      "type": "n8n-nodes-base.code",
      "position": [
        31984,
        7920
      ]
    },
    {
      "id": "8d35cf31-1c05-4092-93b5-aab3eb719bbc",
      "name": "Qualified?",
      "type": "n8n-nodes-base.if",
      "position": [
        32160,
        7920
      ]
    },
    {
      "id": "1c9d4c01-47ee-4169-aee0-fde73118f5f5",
      "name": "Booking Intent Detector",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        32400,
        7920
      ]
    },
    {
      "id": "34a49c29-44e5-45a2-b58a-8065b7cfde35",
      "name": "GPT-4o (Booking)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        32304,
        8128
      ]
    },
    {
      "id": "f56f0b20-5cef-4c2b-a0f0-57336c99430d",
      "name": "Booking Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        32512,
        8128
      ]
    },
    {
      "id": "df626c1e-4cb1-45b4-9249-c60e92936493",
      "name": "Extract Booking",
      "type": "n8n-nodes-base.code",
      "position": [
        32704,
        7920
      ]
    },
    {
      "id": "2e5a0f2a-1316-4a26-bf83-0dae5a81d753",
      "name": "Search GHL Contact",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        32880,
        7920
      ]
    },
    {
      "id": "7e34c94c-036f-4b36-85ff-d4813208c581",
      "name": "Contact Exists?",
      "type": "n8n-nodes-base.if",
      "position": [
        33120,
        7920
      ]
    },
    {
      "id": "225e773a-d172-4b4c-8098-cc161d52c157",
      "name": "Update Contact",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        33360,
        7776
      ]
    },
    {
      "id": "8baf9ac3-da6f-4f45-ab43-42894b2cdf21",
      "name": "Create Contact",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        33360,
        8064
      ]
    },
    {
      "id": "e1830164-2269-4350-bac8-5caeb6fd53fa",
      "name": "Merge Contact Paths",
      "type": "n8n-nodes-base.merge",
      "position": [
        33600,
        7920
      ]
    },
    {
      "id": "2f73c33f-4668-4998-b644-2df3d023e98f",
      "name": "Create Hot Opportunity",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        33840,
        7920
      ]
    },
    {
      "id": "0dfc8efc-c2d6-4c90-a35a-744ece82c633",
      "name": "Objection Handler",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        34080,
        7920
      ]
    },
    {
      "id": "c35439d6-5c34-4e25-b650-25e2c89871b8",
      "name": "Claude Sonnet (Objection)",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        33984,
        8128
      ]
    },
    {
      "id": "915179ba-1e73-4152-956c-83270f947bd9",
      "name": "Objection Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        34304,
        8128
      ]
    },
    {
      "id": "e256abc8-7cc7-4c7b-bb30-0218f66cad54",
      "name": "Extract Objection Response",
      "type": "n8n-nodes-base.code",
      "position": [
        34368,
        7920
      ]
    },
    {
      "id": "379041e0-2fcf-470b-8702-d510b525e0d1",
      "name": "CRM Note Writer",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        34560,
        7920
      ]
    },
    {
      "id": "ae2993f0-aa6c-4a9b-aaab-4f10caaef1f8",
      "name": "Gemini Flash (CRM Note)",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        34464,
        8128
      ]
    },
    {
      "id": "8956d772-8e28-4d96-ac8e-5d1a145b32fc",
      "name": "CRM Note Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        34768,
        8128
      ]
    },
    {
      "id": "90320e2e-a46e-40d1-a8b8-8ca9fd52ca7d",
      "name": "Extract CRM Note",
      "type": "n8n-nodes-base.code",
      "position": [
        34880,
        7920
      ]
    },
    {
      "id": "60f7c53e-fa87-4abb-814c-a5a141b6d2f4",
      "name": "Update Contact Notes",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        35040,
        7920
      ]
    },
    {
      "id": "31d77ea6-aa77-446d-933a-27fb25e20cc2",
      "name": "Update Stage: Hot Lead",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        35280,
        7920
      ]
    },
    {
      "id": "16c3ca21-35f0-4707-8830-01f9abf439da",
      "name": "Log to Supabase",
      "type": "n8n-nodes-base.supabase",
      "position": [
        35520,
        7920
      ]
    },
    {
      "id": "c118faa4-789a-454e-a1cd-7f3d8cd0ef1a",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        35760,
        7920
      ]
    },
    {
      "id": "596534cd-65a3-42da-8348-819a0edfe61a",
      "name": "Search GHL Contact NQ",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        32400,
        8416
      ]
    },
    {
      "id": "8a3a87b6-7f53-4d25-a7a1-38f01e077ac3",
      "name": "Contact Exists NQ?",
      "type": "n8n-nodes-base.if",
      "position": [
        32640,
        8416
      ]
    },
    {
      "id": "a7374849-8c33-427a-8e12-f895f811d18a",
      "name": "Update Contact NQ",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        32880,
        8288
      ]
    },
    {
      "id": "a202a62e-3393-43da-b585-e7169f30175f",
      "name": "Create Contact NQ",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        32880,
        8560
      ]
    },
    {
      "id": "89c14e26-81fb-4b90-a80a-267583429d40",
      "name": "Merge Contact NQ",
      "type": "n8n-nodes-base.merge",
      "position": [
        33120,
        8416
      ]
    },
    {
      "id": "1cf22c70-82c5-4fbd-9f0e-c96e5bf67246",
      "name": "Create Nurturing Opportunity",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        33360,
        8416
      ]
    },
    {
      "id": "6c911ccd-41ec-4359-9b5b-dfbc985f754c",
      "name": "Trigger Nurture Workflow",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        33600,
        8416
      ]
    },
    {
      "id": "525f27f8-5a33-45d3-942d-a9c312f1a073",
      "name": "Log to Supabase NQ",
      "type": "n8n-nodes-base.supabase",
      "position": [
        33840,
        8416
      ]
    },
    {
      "id": "d35df5f0-9f24-4fe7-80c3-1b7414ee8182",
      "name": "Log to Google Sheets NQ",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        34080,
        8416
      ]
    },
    {
      "id": "273af585-e14a-400c-b0a3-b602d0c9a0d7",
      "name": "_Inbound Call Webhook",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        30928,
        7792
      ],
      "parameters": {
        "width": 230,
        "height": 96,
        "content": "Receives end-of-call report from Vapi or Retell — auto 200 response"
      }
    },
    {
      "id": "e48837f4-ed25-46d3-9340-29dd48d67cee",
      "name": "_Normalize Call Payload",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        31216,
        7792
      ],
      "parameters": {
        "width": 202,
        "height": 96,
        "content": "Normalises Vapi + Retell payloads → unified: call_id, phone, transcript, duration_sec, provider"
      }
    },
    {
      "id": "29735a4b-b331-4f46-a76e-6d6b58b4d67d",
      "name": "_Valid Call?",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        31424,
        7808
      ],
      "parameters": {
        "width": 234,
        "height": 80,
        "content": "Skip calls < 30 s or transcript < 50 chars"
      }
    },
    {
      "id": "0d851d7f-44da-4e10-a294-d74f4662190e",
      "name": "_BANT Qualifier",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        31680,
        7792
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "Claude Haiku scores Budget · Authority · Need · Timeline (0–10) from transcript"
      }
    },
    {
      "id": "76d160e0-f72d-475d-b9c7-1509de00ad66",
      "name": "_Extract BANT",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        31936,
        7776
      ],
      "parameters": {
        "width": 186,
        "height": 80,
        "content": "Merges BANT score + objections into working object"
      }
    },
    {
      "id": "a6373e91-8e9c-48ec-843a-9c8cbf8565b0",
      "name": "_Qualified?",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32160,
        7792
      ],
      "parameters": {
        "width": 201,
        "height": 80,
        "content": "score ≥ 6 → Booking path  |  score < 6 → Nurture path"
      }
    },
    {
      "id": "736f9818-dd92-477d-9ae2-f9f12cc27778",
      "name": "_Booking Intent Detector",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32400,
        7776
      ],
      "parameters": {
        "width": 214,
        "height": 96,
        "content": "GPT-4o detects appointment intent + preferred time + confidence"
      }
    },
    {
      "id": "9ef9c75b-a8bc-4df2-b599-d89048d851ce",
      "name": "_Extract Booking",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32640,
        7792
      ],
      "parameters": {
        "width": 230,
        "height": 80,
        "content": "Extracts appointment_requested, preferred_time, objections[]"
      }
    },
    {
      "id": "47aa31eb-49b6-4015-b19d-816b202d4333",
      "name": "_Search GHL Contact",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32880,
        7808
      ],
      "parameters": {
        "width": 201,
        "height": 80,
        "content": "Search HighLevel contact by phone number"
      }
    },
    {
      "id": "32f39581-4a6b-400b-9060-0da06a47a6c1",
      "name": "_Contact Exists?",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        33104,
        7792
      ],
      "parameters": {
        "width": 202,
        "height": 80,
        "content": "TRUE → update existing  |  FALSE → create new"
      }
    },
    {
      "id": "4277fbd1-83ed-4bb0-a628-4303683e4b2a",
      "name": "_Update Contact",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        33328,
        7664
      ],
      "parameters": {
        "width": 218,
        "height": 80,
        "content": "Tag existing HL contact: voice-lead, qualified"
      }
    },
    {
      "id": "7c9b4dc1-59c9-4164-bfb6-a08d3500df98",
      "name": "_Create Contact",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        33296,
        7936
      ],
      "parameters": {
        "width": 250,
        "height": 60,
        "content": "Create HL contact with phone + source = Voice AI"
      }
    },
    {
      "id": "7729297d-f487-4fe0-be94-0f65a6f44472",
      "name": "_Merge Contact Paths",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        33568,
        7792
      ],
      "parameters": {
        "width": 233,
        "height": 80,
        "content": "Rejoin update + create branches with resolved contact ID"
      }
    },
    {
      "id": "62634ea8-188f-4d28-ac13-ee2fa60e5871",
      "name": "_Create Hot Opportunity",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        33808,
        7776
      ],
      "parameters": {
        "width": 233,
        "height": 112,
        "content": "Open opportunity in Hot Lead pipeline stage"
      }
    },
    {
      "id": "98cf05a0-3247-421b-b81c-afb7c80e47c5",
      "name": "_Objection Handler",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        34064,
        7792
      ],
      "parameters": {
        "width": 250,
        "height": 112,
        "content": "Claude Sonnet generates rebuttal script using feel-felt-found / Challenger Sale"
      }
    },
    {
      "id": "54fd9f1b-3439-4fec-ad78-9c51c9bb3295",
      "name": "_Extract Objection Response",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        34352,
        7792
      ],
      "parameters": {
        "width": 233,
        "height": 80,
        "content": "Extracts response_script, technique, confidence"
      }
    },
    {
      "id": "e1ba0db1-3bc4-411b-94d7-b847986ad2cf",
      "name": "_CRM Note Writer",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        34608,
        7824
      ],
      "parameters": {
        "width": 214,
        "height": 80,
        "content": "Gemini 2.0 Flash writes professional CRM note from call summary"
      }
    },
    {
      "id": "b1d923f6-de29-421a-8cb8-f1ce29a9506d",
      "name": "_Extract CRM Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        34848,
        7824
      ],
      "parameters": {
        "width": 166,
        "height": 80,
        "content": "Extracts crm_note string from agent output"
      }
    },
    {
      "id": "ec400620-50e3-480d-8688-d5635eba682e",
      "name": "_Update Contact Notes",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        35056,
        7808
      ],
      "parameters": {
        "width": 218,
        "height": 80,
        "content": "Append AI CRM note to HL contact record"
      }
    },
    {
      "id": "906c7b58-4f9e-45f3-ad43-8700d2dc18d4",
      "name": "_Update Stage: Hot Lead",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        35312,
        7808
      ],
      "parameters": {
        "width": 186,
        "height": 80,
        "content": "Move HL opportunity to Hot Lead stage"
      }
    },
    {
      "id": "d2b1f2d8-58f9-49b2-98e9-241a12cb3af5",
      "name": "_Log to Supabase",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        35536,
        7792
      ],
      "parameters": {
        "width": 217,
        "height": 80,
        "content": "Persist qualified inbound call to voice_call_logs"
      }
    },
    {
      "id": "78d3b086-17b7-4a5f-ab53-b5331840941a",
      "name": "_Log to Google Sheets",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        35760,
        7792
      ],
      "parameters": {
        "width": 265,
        "height": 60,
        "content": "Append summary row to Voice Call Log sheet"
      }
    },
    {
      "id": "8e433858-ec9b-48eb-92ec-580c9779f63c",
      "name": "_Search GHL Contact NQ",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32400,
        8288
      ],
      "parameters": {
        "width": 265,
        "height": 60,
        "content": "Search HL contact by phone before nurture upsert"
      }
    },
    {
      "id": "d90018f8-a85d-49e0-8e60-4197bce822b0",
      "name": "_Contact Exists NQ?",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32640,
        8288
      ],
      "parameters": {
        "width": 220,
        "height": 60,
        "content": "TRUE → update  |  FALSE → create"
      }
    },
    {
      "id": "41168042-c6b6-4b2f-b6a7-3f0b3b9f0d9f",
      "name": "_Update Contact NQ",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32880,
        8160
      ],
      "parameters": {
        "width": 265,
        "height": 60,
        "content": "Tag contact: not-qualified, add to nurture queue"
      }
    },
    {
      "id": "606e124d-ad07-4b4c-9826-b1f2ce358106",
      "name": "_Create Contact NQ",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32816,
        8448
      ],
      "parameters": {
        "width": 250,
        "height": 60,
        "content": "Create HL contact, flag for nurture sequence"
      }
    },
    {
      "id": "33642913-5e00-43e0-9e22-4033e9d8b7fe",
      "name": "_Merge Contact NQ",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        33088,
        8320
      ],
      "parameters": {
        "width": 218,
        "height": 80,
        "content": "Rejoin upsert paths with resolved contact ID"
      }
    },
    {
      "id": "dbccd6fa-0fe5-4de9-af2c-5a0f69bb67c1",
      "name": "_Create Nurturing Opportunity",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        33328,
        8320
      ],
      "parameters": {
        "width": 201,
        "height": 80,
        "content": "Open opportunity in Nurturing pipeline stage"
      }
    },
    {
      "id": "8e42d98d-6440-4514-8b34-00a608927d10",
      "name": "_Trigger Nurture Workflow",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        33552,
        8304
      ],
      "parameters": {
        "width": 262,
        "height": 80,
        "content": "Fire HL automation to enrol contact in nurture email/SMS sequence"
      }
    },
    {
      "id": "1b18856b-9492-41a1-bcfe-4fac1e1fa12f",
      "name": "_Log to Supabase NQ",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        33840,
        8304
      ],
      "parameters": {
        "width": 234,
        "height": 80,
        "content": "Persist not-qualified call to voice_call_logs"
      }
    },
    {
      "id": "1b82904b-de99-4249-8a92-8e4d575cc0c7",
      "name": "_Log to Google Sheets NQ",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        34112,
        8304
      ],
      "parameters": {
        "width": 188,
        "height": 80,
        "content": "Append not-qualified row to sheet"
      }
    },
    {
      "id": "bbd0c5b6-a5db-486d-b6b4-c266f2fd9e34",
      "name": "_Daily Outbound Schedule",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        30960,
        8800
      ],
      "parameters": {
        "width": 220,
        "height": 60,
        "content": "9:00 AM Mon–Fri · cron: 0 9 * * 1-5"
      }
    },
    {
      "id": "524fc730-14d3-41f7-9e65-4ed9f44ac6af",
      "name": "_Fetch GHL Nurturing Leads",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        31200,
        8800
      ],
      "parameters": {
        "width": 201,
        "height": 80,
        "content": "Retrieve all Nurturing stage contacts from HighLevel"
      }
    },
    {
      "id": "cd18d91b-4023-4bf7-a8d3-03efdef41a18",
      "name": "_Priority Ranker",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        31408,
        8800
      ],
      "parameters": {
        "width": 182,
        "height": 96,
        "content": "GPT-4o Mini ranks leads by conversion priority to maximise call ROI"
      }
    },
    {
      "id": "3e425993-f919-4492-8fc8-e3a5e7b9b268",
      "name": "_Extract Ranked Leads",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        31648,
        8768
      ],
      "parameters": {
        "width": 150,
        "height": 80,
        "content": "Sort ranked_leads by priority_score desc · limit 50"
      }
    },
    {
      "id": "b8f5582d-0b53-4191-862f-ec917946940b",
      "name": "_Split in Batches",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        31872,
        8816
      ],
      "parameters": {
        "width": 218,
        "height": 80,
        "content": "5 leads per batch — respects Vapi rate limits"
      }
    },
    {
      "id": "3e9df9a7-72ea-4414-8d4b-431e9c037405",
      "name": "_Initiate Vapi Outbound Call",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32128,
        8768
      ],
      "parameters": {
        "width": 214,
        "height": 80,
        "content": "POST outbound call to Vapi API for each prioritised lead"
      }
    },
    {
      "id": "24cc9898-1423-4517-b2fc-278a130bdb69",
      "name": "_Log Outbound to Supabase",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32400,
        8784
      ],
      "parameters": {
        "width": 170,
        "height": 80,
        "content": "Record outbound initiation in voice_call_logs"
      }
    },
    {
      "id": "fec7e8f8-44f6-4389-acea-14fc24e59471",
      "name": "_Log Outbound to Sheets",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32640,
        8800
      ],
      "parameters": {
        "width": 265,
        "height": 60,
        "content": "Append outbound row to Voice Call Log sheet"
      }
    },
    {
      "id": "7c0b7c45-afce-440a-ba2c-f3f241baa9b6",
      "name": "OUTBOUND FLOW1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        30928,
        8560
      ],
      "parameters": {
        "width": 600,
        "height": 144,
        "content": "## 📤 OUTBOUND FLOW — Daily Prioritised Outbound Calls via Vapi"
      }
    },
    {
      "id": "6cbe841a-03fb-4dad-8108-524d284ede39",
      "name": "Daily Outbound Schedule1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        30960,
        8928
      ]
    },
    {
      "id": "f7b5cb74-65cf-4977-893e-0e03e9372ef8",
      "name": "Fetch GHL Nurturing Leads1",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        31200,
        8928
      ]
    },
    {
      "id": "47536bb6-c07e-4360-a703-ba9a7237cbd4",
      "name": "Priority Ranker1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        31440,
        8928
      ]
    },
    {
      "id": "984e0153-57ba-4df3-bdef-8752498fc506",
      "name": "GPT-4o Mini (Ranker)1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        31344,
        9120
      ]
    },
    {
      "id": "73c26cf5-8bf2-45e5-823f-22aeee809ea3",
      "name": "Priority Ranker Output Parser1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        31552,
        9120
      ]
    },
    {
      "id": "9a08fea7-3854-4e4c-8f27-e715015d5edf",
      "name": "Extract Ranked Leads1",
      "type": "n8n-nodes-base.code",
      "position": [
        31712,
        8928
      ]
    },
    {
      "id": "cac84cf1-03ac-4f48-a265-7f0349da29d5",
      "name": "Split in Batches1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        31920,
        8928
      ]
    },
    {
      "id": "2756c4c4-1817-402c-aae4-8f2db0cccf4e",
      "name": "Initiate Vapi Outbound Call1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        32144,
        8912
      ]
    },
    {
      "id": "a6821b70-b51f-4453-865b-2c9ebd208562",
      "name": "Log Outbound to Supabase1",
      "type": "n8n-nodes-base.supabase",
      "position": [
        32432,
        8976
      ]
    },
    {
      "id": "05379090-29cd-4a6e-877a-21e922e6abfa",
      "name": "Log Outbound to Sheets1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        32688,
        8912
      ]
    }
  ],
  "connections": {
    "Qualified?": {
      "main": [
        [
          {
            "node": "Booking Intent Detector",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Search GHL Contact NQ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Valid Call?": {
      "main": [
        [
          {
            "node": "BANT Qualifier",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract BANT": {
      "main": [
        [
          {
            "node": "Qualified?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "BANT Qualifier": {
      "main": [
        [
          {
            "node": "Extract BANT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Contact": {
      "main": [
        [
          {
            "node": "Merge Contact Paths",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Update Contact": {
      "main": [
        [
          {
            "node": "Merge Contact Paths",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CRM Note Writer": {
      "main": [
        [
          {
            "node": "Extract CRM Note",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Contact Exists?": {
      "main": [
        [
          {
            "node": "Update Contact",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create Contact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Booking": {
      "main": [
        [
          {
            "node": "Search GHL Contact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract CRM Note": {
      "main": [
        [
          {
            "node": "Update Contact Notes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GPT-4o (Booking)": {
      "ai_languageModel": [
        [
          {
            "node": "Booking Intent Detector",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Merge Contact NQ": {
      "main": [
        [
          {
            "node": "Create Nurturing Opportunity",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Priority Ranker1": {
      "main": [
        [
          {
            "node": "Extract Ranked Leads1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Contact NQ": {
      "main": [
        [
          {
            "node": "Merge Contact NQ",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Objection Handler": {
      "main": [
        [
          {
            "node": "Extract Objection Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split in Batches1": {
      "main": [
        [
          {
            "node": "Initiate Vapi Outbound Call1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Contact NQ": {
      "main": [
        [
          {
            "node": "Merge Contact NQ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "BANT Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "BANT Qualifier",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Contact Exists NQ?": {
      "main": [
        [
          {
            "node": "Update Contact NQ",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Create Contact NQ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search GHL Contact": {
      "main": [
        [
          {
            "node": "Contact Exists?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Claude Haiku (BANT)": {
      "ai_languageModel": [
        [
          {
            "node": "BANT Qualifier",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Merge Contact Paths": {
      "main": [
        [
          {
            "node": "Create Hot Opportunity",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Inbound Call Webhook": {
      "main": [
        [
          {
            "node": "Normalize Call Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Contact Notes": {
      "main": [
        [
          {
            "node": "Update Stage: Hot Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Booking Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Booking Intent Detector",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Extract Ranked Leads1": {
      "main": [
        [
          {
            "node": "Split in Batches1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GPT-4o Mini (Ranker)1": {
      "ai_languageModel": [
        [
          {
            "node": "Priority Ranker1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Search GHL Contact NQ": {
      "main": [
        [
          {
            "node": "Contact Exists NQ?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CRM Note Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "CRM Note Writer",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Create Hot Opportunity": {
      "main": [
        [
          {
            "node": "Objection Handler",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Call Payload": {
      "main": [
        [
          {
            "node": "Valid Call?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Stage: Hot Lead": {
      "main": [
        [
          {
            "node": "Log to Supabase",
            "type": "main",
            "index": 0
          },
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Booking Intent Detector": {
      "main": [
        [
          {
            "node": "Extract Booking",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini Flash (CRM Note)": {
      "ai_languageModel": [
        [
          {
            "node": "CRM Note Writer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Objection Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Objection Handler",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Daily Outbound Schedule1": {
      "main": [
        [
          {
            "node": "Fetch GHL Nurturing Leads1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger Nurture Workflow": {
      "main": [
        [
          {
            "node": "Log to Supabase NQ",
            "type": "main",
            "index": 0
          },
          {
            "node": "Log to Google Sheets NQ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Claude Sonnet (Objection)": {
      "ai_languageModel": [
        [
          {
            "node": "Objection Handler",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Extract Objection Response": {
      "main": [
        [
          {
            "node": "CRM Note Writer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch GHL Nurturing Leads1": {
      "main": [
        [
          {
            "node": "Priority Ranker1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Nurturing Opportunity": {
      "main": [
        [
          {
            "node": "Trigger Nurture Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Initiate Vapi Outbound Call1": {
      "main": [
        [
          {
            "node": "Log Outbound to Supabase1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Log Outbound to Sheets1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Priority Ranker Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "Priority Ranker1",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}