{"workflow":{"id":14169,"name":"Qualify and manage voice sales calls with Claude, GPT-4o, Gemini, and GoHighLevel","views":69,"recentViews":2,"totalViews":69,"createdAt":"2026-03-18T19:50:02.721Z","description":"                                                                                                                                                                                                                                                                    \n⏺ 🚀 How it works                                                                                                                                                                                                                                                     \n                                                                                                                                                                                                                                                                      \n  Fully automates your inbound and outbound voice sales pipeline — from live call qualification to CRM pipeline management — with multi-agent AI and automatic lead nurturing if a prospect doesn't book.                                                             \n                                                                                                                                                                                                                                                                      \n  - 📞 Receives end-of-call reports from Vapi or Retell AI via webhook — works with both providers out of the box                                                                                                                                                     \n  - 🧠 Qualifies every inbound lead using BANT scoring (Budget · Authority · Need · Timeline) powered by Claude Haiku                                                                                                                                                 \n  - 📅 Detects appointment intent and preferred meeting time using GPT-4o before touching your CRM                                                                                                                                                                    \n  - 🗂️  Upserts the contact and creates a pipeline opportunity in GoHighLevel automatically — no duplicates                                                                                                                                                            \n  - 💬 Analyses objections and generates a rebuttal script using Claude Sonnet (feel-felt-found + Challenger Sale)                                                                                                                                                    \n  - 📝 Writes a professional CRM note from the call summary using Gemini 2.0 Flash — ready to sync                                                                                                                                                                    \n  - 🔁 Enrols unqualified leads into a GoHighLevel nurture workflow automatically for long-term follow-up                                                                                                                                                             \n  - 📤 Fires prioritised outbound calls every morning at 9 AM via Vapi — GPT-4o Mini ranks leads by conversion probability                                                                                                                                            \n  - 📊 Logs every call (inbound + outbound) to Supabase and Google Sheets for full pipeline reporting                                                                                                                                                                 \n                                                                                                                                                                                                                                                                      \n  🛠️  Set up steps                                                                                                                                                                                                                                                     \n                                                                                                                                                                                                                                                                      \n  Estimated setup time: ~45 minutes                                                                                                                                                                                                                                   \n                                                                                                                                                                                                                                                                      \n  1. Webhook — copy the webhook URL and paste it into your Vapi or Retell dashboard as the end-of-call report URL                                                                                                                                                     \n  2. GoHighLevel — connect your HighLevel OAuth2 credential; set your Pipeline ID, Hot Stage ID, and Nurturing Stage ID in the opportunity nodes (Opportunities → Settings → Pipelines)\n  3. Anthropic — connect your Anthropic API credential; used for Claude Haiku (BANT qualification) and Claude Sonnet (objection handling)\n  4. OpenAI — connect your OpenAI API credential; used for GPT-4o (booking intent detection) and GPT-4o Mini (outbound lead ranking)                                                                                                                                  \n  5. Google Gemini — connect your Google Gemini API credential; used for CRM note writing with gemini-2.0-flash\n  6. Vapi — add your Vapi API key to the HTTP Request node header; set your Phone Number ID and Assistant ID in the outbound call node (Vapi Dashboard → Phone Numbers / Assistants)                                                                                  \n  7. Supabase — connect your Supabase API credential; create the voice_call_logs table using the SQL in the setup sticky note inside the workflow                                                                                                                     \n  8. Google Sheets — connect Google Sheets OAuth2; set your Spreadsheet ID and ensure a sheet named Voice Call Log exists with the columns listed in the setup sticky note                                                                                            \n  9. Follow the sticky notes inside the workflow — each section has a one-liner setup guide                                                                                                                                                                           \n                                                                                                                                                                                                                                                                      \n  📋 Prerequisites                                                                                                                                                                                                                                                    \n                                                                                                                                                                                                                                                                      \n  - Vapi or Retell AI account with an active phone number and assistant configured                                                                                                                                                                                    \n  - Anthropic API key (Claude API access)                                                                                                                                                                                                                             \n  - OpenAI API key (GPT-4o and GPT-4o Mini access)                                                                                                                                                                                                                    \n  - Google Gemini API key                                                                                                                                                                                                                                             \n  - GoHighLevel account with at least one pipeline and automation workflow set up\n  - Supabase project with the voice_call_logs table created                                                                                                                                                                                                           \n  - Google Sheets spreadsheet set up as your call log\n                                                                                                                                                                                                                                                                      \n  ---                                                                                                                                                                                                                                                                 \n  Custom Workflow Request with Personal Dashboard\n                                                                                                                                                                                                                                                                      \n  kumar@smartflowcraft.com\n                                                                                                                                                                                                                                                                      \n  https://www.smartflowcraft.com/contact  \n\n  More free templates                                                                                                                                                                                                                                                 \n   \n  https://www.smartflowcraft.com/n8n-templates","workflow":{"meta":{"instanceId":"22fdca31d9968d6f06af303ef9be6a073b9af5f54fda4c07e35417e4d15e704f"},"nodes":[{"id":"2c6149e5-01bc-4a87-903b-ce16f36f3ff4","name":"Setup Guide","type":"n8n-nodes-base.stickyNote","position":[30688,6576],"parameters":{"color":7,"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` API key credential\n- Add `Google Gemini (PaLM) API` credential\n- Add `Supabase` credential (URL + Service Role Key)\n- Add `Google Sheets OAuth2` credential\n\n**STEP 2 — Supabase**\n- Run the CREATE TABLE SQL shown in the Supabase Schema note\n- Replace `YOUR_SUPABASE_CRED_ID` in all Supabase nodes\n\n**STEP 3 — GoHighLevel**\n- Replace `YOUR_HL_CRED_ID` with your GHL credential ID\n- Replace `YOUR_PIPELINE_ID` with your GHL pipeline ID\n- Replace `YOUR_HOT_STAGE_ID` with the Hot Lead stage ID\n- Replace `YOUR_NURTURING_STAGE_ID` with the Nurturing stage ID\n- Replace `YOUR_NURTURE_WORKFLOW_ID` with your GHL automation workflow ID\n\n**STEP 4 — Voice Provider (Vapi)**\n- Set env var `VAPI_API_KEY` in n8n Settings → Environment Variables\n- Replace `YOUR_VAPI_PHONE_NUMBER_ID` with your Vapi phone number ID\n- Replace `YOUR_VAPI_ASSISTANT_ID` with your Vapi assistant ID\n- Inbound webhook URL: `https://YOUR_N8N_URL/webhook/voice-sales-inbound`\n- Configure Vapi End-of-Call webhook to POST to the inbound URL\n- For Retell: configure `call_ended` webhook to POST to same URL\n\n**STEP 5 — Google Sheets**\n- Create a spreadsheet with sheet named `Voice Call Log`\n- Add all column headers listed in the Sheets Columns note\n- Replace `YOUR_SPREADSHEET_ID` with the spreadsheet ID from the URL\n\n**STEP 6 — GHL API Key (for Trigger Nurture Workflow)**\n- Set env var `GHL_API_KEY` in n8n Settings → Environment Variables\n- This is your GHL Location API key (Settings → API Keys)\n\n**STEP 7 — Activate**\n- Activate the workflow\n- Test with a short test call to verify BANT scoring\n- Monitor the Voice Call Log sheet for entries"},"typeVersion":1},{"id":"b038c1cd-3d50-4088-b140-55f41d5f7240","name":"Supabase Schema","type":"n8n-nodes-base.stickyNote","position":[31376,6512],"parameters":{"color":5,"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  provider TEXT,\n  duration_sec INTEGER,\n  transcript TEXT,\n  recording_url TEXT,\n  bant_score INTEGER,\n  qualified BOOLEAN DEFAULT FALSE,\n  budget_confirmed BOOLEAN,\n  authority_confirmed BOOLEAN,\n  need_identified BOOLEAN,\n  timeline_defined BOOLEAN,\n  bant_summary TEXT,\n  key_objections JSONB,\n  appointment_requested BOOLEAN,\n  preferred_time TEXT,\n  ghl_contact_id TEXT,\n  ghl_opp_id TEXT,\n  crm_note TEXT,\n  objection_response TEXT,\n  outbound_call_id TEXT,\n  created_at TIMESTAMPTZ DEFAULT NOW()\n);\n\nCREATE INDEX idx_vcl_phone\n  ON voice_call_logs(phone_number);\nCREATE INDEX idx_vcl_qualified\n  ON voice_call_logs(qualified);\nCREATE INDEX idx_vcl_created\n  ON voice_call_logs(created_at DESC);\n```"},"typeVersion":1},{"id":"8e3f1b65-ed3a-48dc-8dd8-0d19a7be1da0","name":"Google Sheets Columns","type":"n8n-nodes-base.stickyNote","position":[31920,6512],"parameters":{"color":5,"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. Qualified\n9. Appointment Requested\n10. GHL Contact ID\n11. GHL Opp ID\n12. CRM Note\n13. Objection Response"},"typeVersion":1},{"id":"5b03b0d6-20a4-495d-ab30-89f3343f90cd","name":"HighLevel IDs","type":"n8n-nodes-base.stickyNote","position":[32336,6496],"parameters":{"color":6,"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_STAGE_ID` | GHL → Pipeline → Stage ID from URL |\n| `YOUR_NURTURING_STAGE_ID` | GHL → Pipeline → Stage ID from URL |\n| `YOUR_NURTURE_WORKFLOW_ID` | GHL → Automation → Workflow ID |\n\n**Finding Stage IDs:**\nGo to GHL Opportunities → Edit Pipeline\n→ click a stage → check URL for the UUID\n\n**Finding Pipeline ID:**\nGHL Settings → Pipelines\n→ click pipeline → UUID in URL\n\n**Vapi IDs:**\n| `YOUR_VAPI_PHONE_NUMBER_ID` | Vapi Dashboard → Phone Numbers |\n| `YOUR_VAPI_ASSISTANT_ID` | Vapi Dashboard → Assistants |"},"typeVersion":1},{"id":"8766ca49-3c85-4668-abb5-399e30f93562","name":"INBOUND FLOW","type":"n8n-nodes-base.stickyNote","position":[30976,7696],"parameters":{"color":4,"width":600,"height":50,"content":"## 📞 INBOUND FLOW — Vapi / Retell Webhook → BANT → Booking → HighLevel CRM"},"typeVersion":1},{"id":"d4221ed4-192d-42aa-a900-6ce94e1bdc0f","name":"Inbound Call Webhook","type":"n8n-nodes-base.webhook","position":[30960,7920],"webhookId":"voice-sales-inbound-webhook-id","parameters":{"path":"voice-sales-inbound","options":{},"httpMethod":"POST"},"typeVersion":2},{"id":"ff5adfec-1e48-4860-93e4-ea46f0147454","name":"Normalize Call Payload","type":"n8n-nodes-base.code","position":[31200,7920],"parameters":{"jsCode":"// Normalize Vapi and Retell webhook payloads into a unified structure\nconst items = $input.all();\nconst body = items[0].json.body || items[0].json;\n\nlet call_id, phone_number, transcript, recording_url, duration_sec, provider;\n\n// Detect Vapi format\nif (body.message && (body.message.type === 'end-of-call-report' || body.message.type === 'end-of-call')) {\n  provider = 'vapi';\n  const msg = body.message;\n  call_id = (msg.call && msg.call.id) || msg.callId || 'unknown';\n  phone_number = (msg.call && msg.call.customer && msg.call.customer.number) || msg.customerNumber || '';\n  transcript = msg.transcript || msg.artifactTranscript || '';\n  recording_url = msg.recordingUrl || (msg.artifact && msg.artifact.recordingUrl) || '';\n  duration_sec = (msg.call && msg.call.duration) || msg.duration || 0;\n\n// Detect Retell format\n} else if (body.event === 'call_ended' || body.event === 'call_analyzed') {\n  provider = 'retell';\n  const data = body.data || body;\n  call_id = data.call_id || data.callId || 'unknown';\n  phone_number = data.from_number || data.fromNumber || data.customer_number || '';\n  // Retell transcript may be an array of turn objects\n  if (Array.isArray(data.transcript)) {\n    transcript = data.transcript.map(t => `${t.role || t.speaker}: ${t.content || t.text}`).join('\\n');\n  } else {\n    transcript = data.transcript || '';\n  }\n  recording_url = data.recording_url || data.recordingUrl || '';\n  duration_sec = data.duration_sec || (data.duration_ms ? Math.round(data.duration_ms / 1000) : 0);\n\n// Fallback / generic format\n} else {\n  provider = 'unknown';\n  call_id = body.call_id || body.callId || 'unknown-' + Date.now();\n  phone_number = body.phone_number || body.from || body.customer_number || '';\n  transcript = body.transcript || '';\n  recording_url = body.recording_url || '';\n  duration_sec = body.duration_sec || body.duration || 0;\n}\n\n// Normalize phone to E.164\nif (phone_number && !phone_number.startsWith('+')) {\n  const digits = phone_number.replace(/\\D/g, '');\n  phone_number = digits.length === 10 ? '+1' + digits : '+' + digits;\n}\n\nreturn [{\n  json: {\n    call_id,\n    phone_number,\n    transcript,\n    recording_url,\n    duration_sec: parseInt(duration_sec) || 0,\n    provider,\n    raw_body: body\n  }\n}];"},"typeVersion":2},{"id":"e12f23c5-2490-4993-b4dc-c828de36a6f5","name":"Valid Call?","type":"n8n-nodes-base.if","position":[31440,7920],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"cond-duration","operator":{"type":"number","operation":"gte"},"leftValue":"={{ $json.duration_sec }}","rightValue":30},{"id":"cond-transcript","operator":{"type":"number","operation":"gt"},"leftValue":"={{ $json.transcript.length }}","rightValue":50}]}},"typeVersion":2},{"id":"6bc7ecd9-aa1e-461e-aa21-b1d297534e4c","name":"BANT Qualifier","type":"@n8n/n8n-nodes-langchain.agent","position":[31680,7904],"parameters":{"text":"=Phone Number: {{ $json.phone_number }}\nCall Duration: {{ $json.duration_sec }} seconds\nProvider: {{ $json.provider }}\n\nCALL TRANSCRIPT:\n{{ $json.transcript }}\n\nAnalyze this sales call transcript using the BANT framework and return your structured assessment.","options":{"systemMessage":"You are an expert B2B sales qualification specialist with 15+ years of experience analyzing sales calls using the BANT framework (Budget, Authority, Need, Timeline).\n\nYour task is to analyze the provided call transcript and score the lead's qualification level.\n\nSCORING CRITERIA:\n- Budget (0-3 pts): 0=not discussed, 1=vague mention of budget, 2=budget range confirmed, 3=specific budget confirmed and allocated\n- Authority (0-3 pts): 0=unknown/gatekeeper, 1=influencer only, 2=shared decision-maker, 3=sole decision-maker\n- Need (0-2 pts): 0=no need identified, 1=pain point mentioned, 2=urgent clear business need confirmed\n- Timeline (0-2 pts): 0=no timeline mentioned, 1=vague future intent, 2=specific timeline or urgency expressed\n\nTotal score range: 0-10. Score >= 6 = qualified lead.\n\nKey objection extraction: pull exact phrases or paraphrased objections verbatim from the transcript.\nBANT summary: write a concise 2-3 sentence executive summary of the lead's qualification status and business situation.\n\nAlways respond with valid JSON matching the output schema exactly. Do not wrap in markdown code blocks."},"promptType":"define","hasOutputParser":true},"typeVersion":1.8},{"id":"50365d33-a693-44b4-89a7-0a7578012245","name":"Claude Haiku (BANT)","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[31584,8128],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-3-haiku-20240307"},"options":{"temperature":0.1}},"typeVersion":1.3},{"id":"c768b57e-963d-45e7-8746-403e4e7f1603","name":"BANT Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[31792,8128],"parameters":{"schemaType":"manual","inputSchema":"{\"type\": \"object\", \"properties\": {\"score\": {\"type\": \"number\"}, \"budget_confirmed\": {\"type\": \"boolean\"}, \"authority_confirmed\": {\"type\": \"boolean\"}, \"need_identified\": {\"type\": \"boolean\"}, \"timeline_defined\": {\"type\": \"boolean\"}, \"summary\": {\"type\": \"string\"}, \"key_objections\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}}, \"required\": [\"score\", \"budget_confirmed\", \"authority_confirmed\", \"need_identified\", \"timeline_defined\", \"summary\", \"key_objections\"]}"},"typeVersion":1.2},{"id":"15f47f1f-bf86-40d0-8469-cebe0c38619e","name":"Extract BANT","type":"n8n-nodes-base.code","position":[31984,7920],"parameters":{"jsCode":"const items = $input.all();\nconst item = items[0];\n\n// The AI Agent output is in item.json.output (string) or already parsed object\nlet bant;\ntry {\n  const raw = item.json.output || item.json;\n  if (typeof raw === 'string') {\n    const cleaned = raw.replace(/```json\\n?/g, '').replace(/```\\n?/g, '').trim();\n    bant = JSON.parse(cleaned);\n  } else if (typeof raw === 'object' && raw.score !== undefined) {\n    bant = raw;\n  } else if (raw.output && typeof raw.output === 'object') {\n    bant = raw.output;\n  } else {\n    bant = { score: 0, budget_confirmed: false, authority_confirmed: false, need_identified: false, timeline_defined: false, summary: 'Parse error', key_objections: [] };\n  }\n} catch(e) {\n  bant = { score: 0, budget_confirmed: false, authority_confirmed: false, need_identified: false, timeline_defined: false, summary: 'Parse error: ' + e.message, key_objections: [] };\n}\n\nreturn [{\n  json: {\n    ...item.json,\n    bant_score: bant.score || 0,\n    budget_confirmed: bant.budget_confirmed || false,\n    authority_confirmed: bant.authority_confirmed || false,\n    need_identified: bant.need_identified || false,\n    timeline_defined: bant.timeline_defined || false,\n    bant_summary: bant.summary || '',\n    key_objections: bant.key_objections || [],\n    qualified: (bant.score || 0) >= 6\n  }\n}];"},"typeVersion":2},{"id":"8d35cf31-1c05-4092-93b5-aab3eb719bbc","name":"Qualified?","type":"n8n-nodes-base.if","position":[32160,7920],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"cond-qualified","operator":{"type":"number","operation":"gte"},"leftValue":"={{ $json.bant_score }}","rightValue":6}]}},"typeVersion":2},{"id":"1c9d4c01-47ee-4169-aee0-fde73118f5f5","name":"Booking Intent Detector","type":"@n8n/n8n-nodes-langchain.agent","position":[32400,7920],"parameters":{"text":"=Phone: {{ $json.phone_number }}\nBANT Score: {{ $json.bant_score }}/10\nBANT Summary: {{ $json.bant_summary }}\nKey Objections: {{ JSON.stringify($json.key_objections) }}\n\nCALL TRANSCRIPT:\n{{ $json.transcript }}\n\nAnalyze the booking intent and all objections from this qualified sales call.","options":{"systemMessage":"You are an expert sales conversation analyst specializing in appointment setting and objection identification.\n\nYour task is to:\n1. Detect whether the prospect expressed intent to book a meeting, demo, or follow-up call\n2. Extract any preferred time or date mentioned by the prospect\n3. Rate your confidence in the booking intent on a scale of 0.0 to 1.0\n4. List ALL sales objections raised during the call (pricing, timing, competition, authority, need doubt, integration concerns, etc.)\n\nExplicit booking signals: 'book a call', 'schedule a demo', 'let's meet', 'send me a calendar link', 'set up a time'\nImplicit booking signals: 'I'd like to learn more', 'can you send details', 'when are you available', 'I'll think about it and we can talk'\n\nFor objections: capture the actual language or substance from the transcript, not generic categories.\n\nAlways respond with valid JSON matching the output schema exactly. Do not wrap in markdown code blocks."},"promptType":"define","hasOutputParser":true},"typeVersion":1.8},{"id":"34a49c29-44e5-45a2-b58a-8065b7cfde35","name":"GPT-4o (Booking)","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[32304,8128],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o"},"options":{"maxTokens":800,"temperature":0.1}},"typeVersion":1.2},{"id":"f56f0b20-5cef-4c2b-a0f0-57336c99430d","name":"Booking Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[32512,8128],"parameters":{"schemaType":"manual","inputSchema":"{\"type\": \"object\", \"properties\": {\"appointment_requested\": {\"type\": \"boolean\"}, \"preferred_time\": {\"type\": \"string\"}, \"confidence\": {\"type\": \"number\"}, \"objections\": {\"type\": \"array\", \"items\": {\"type\": \"string\"}}}, \"required\": [\"appointment_requested\", \"preferred_time\", \"confidence\", \"objections\"]}"},"typeVersion":1.2},{"id":"df626c1e-4cb1-45b4-9249-c60e92936493","name":"Extract Booking","type":"n8n-nodes-base.code","position":[32704,7920],"parameters":{"jsCode":"const items = $input.all();\nconst item = items[0];\n\nlet booking;\ntry {\n  const raw = item.json.output || item.json;\n  if (typeof raw === 'string') {\n    const cleaned = raw.replace(/```json\\n?/g, '').replace(/```\\n?/g, '').trim();\n    booking = JSON.parse(cleaned);\n  } else if (typeof raw === 'object' && raw.appointment_requested !== undefined) {\n    booking = raw;\n  } else if (raw.output && typeof raw.output === 'object') {\n    booking = raw.output;\n  } else {\n    booking = { appointment_requested: false, preferred_time: '', confidence: 0, objections: [] };\n  }\n} catch(e) {\n  booking = { appointment_requested: false, preferred_time: '', confidence: 0, objections: [] };\n}\n\nreturn [{\n  json: {\n    ...item.json,\n    appointment_requested: booking.appointment_requested || false,\n    preferred_time: booking.preferred_time || '',\n    booking_confidence: booking.confidence || 0,\n    detected_objections: booking.objections || item.json.key_objections || []\n  }\n}];"},"typeVersion":2},{"id":"2e5a0f2a-1316-4a26-bf83-0dae5a81d753","name":"Search GHL Contact","type":"n8n-nodes-base.highLevel","position":[32880,7920],"parameters":{"limit":1,"filters":{"query":"={{ $json.phone_number }}"},"options":{},"operation":"getAll","requestOptions":{}},"typeVersion":2},{"id":"7e34c94c-036f-4b36-85ff-d4813208c581","name":"Contact Exists?","type":"n8n-nodes-base.if","position":[33120,7920],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"cond-contact-exists","operator":{"type":"string","operation":"notEmpty"},"leftValue":"={{ $json.id }}","rightValue":""}]}},"typeVersion":2},{"id":"225e773a-d172-4b4c-8098-cc161d52c157","name":"Update Contact","type":"n8n-nodes-base.highLevel","position":[33360,7776],"parameters":{"contactId":"={{ $json.id }}","operation":"update","updateFields":{"tags":"voice-lead,qualified"},"requestOptions":{}},"typeVersion":2},{"id":"8baf9ac3-da6f-4f45-ab43-42894b2cdf21","name":"Create Contact","type":"n8n-nodes-base.highLevel","position":[33360,8064],"parameters":{"phone":"={{ $('Extract Booking').item.json.phone_number }}","requestOptions":{},"additionalFields":{"tags":"voice-lead,qualified","source":"Voice AI","firstName":"Voice Lead"}},"typeVersion":2},{"id":"e1830164-2269-4350-bac8-5caeb6fd53fa","name":"Merge Contact Paths","type":"n8n-nodes-base.merge","position":[33600,7920],"parameters":{"mode":"chooseBranch"},"typeVersion":3},{"id":"2f73c33f-4668-4998-b644-2df3d023e98f","name":"Create Hot Opportunity","type":"n8n-nodes-base.highLevel","position":[33840,7920],"parameters":{"name":"={{ 'Voice Lead — ' + $('Extract Booking').item.json.phone_number }}","resource":"opportunity","contactId":"={{ $json.id }}","pipelineId":"YOUR_PIPELINE_ID","requestOptions":{},"additionalFields":{"stageId":"YOUR_HOT_STAGE_ID","monetaryValue":0}},"typeVersion":2},{"id":"0dfc8efc-c2d6-4c90-a35a-744ece82c633","name":"Objection Handler","type":"@n8n/n8n-nodes-langchain.agent","position":[34080,7920],"parameters":{"text":"=Lead Phone: {{ $('Extract Booking').item.json.phone_number }}\nBANT Score: {{ $('Extract BANT').item.json.bant_score }}/10\nAppointment Requested: {{ $('Extract Booking').item.json.appointment_requested }}\nPreferred Time: {{ $('Extract Booking').item.json.preferred_time }}\n\nObjections raised by the prospect:\n{{ JSON.stringify($('Extract Booking').item.json.detected_objections, null, 2) }}\n\nBANT Summary:\n{{ $('Extract BANT').item.json.bant_summary }}\n\nGenerate a professional objection handling response script for this qualified lead.","options":{"systemMessage":"You are a world-class B2B sales coach specializing in objection handling. You have deep expertise in consultative selling, value-based selling, and advanced persuasion techniques.\n\nYour task is to:\n1. Analyze all objections raised by the prospect in priority order\n2. Select the single most effective objection handling technique:\n   - feel-felt-found: for emotional/uncertain objections ('I feel it's too expensive')\n   - acknowledge-clarify-respond: for factual/pricing objections with specific numbers\n   - reframe: for competitive/comparison objections\n   - isolate-and-solve: when there is one single blocking objection\n   - social-proof: when prospect is skeptical about results\n3. Write a specific, personalized response script for the sales rep to use on the follow-up call\n4. Rate your confidence (0.0-1.0) that this response will effectively address the objections\n\nThe response script requirements:\n- 3-5 sentences maximum\n- Natural, conversational tone (not corporate/stiff)\n- Reference the specific objection language or context from the call\n- End with a clear, low-pressure call-to-action\n- Should feel like it was written by a human sales coach, not a template\n\nAlways respond with valid JSON matching the output schema exactly. Do not wrap in markdown code blocks."},"promptType":"define","hasOutputParser":true},"typeVersion":1.8},{"id":"c35439d6-5c34-4e25-b650-25e2c89871b8","name":"Claude Sonnet (Objection)","type":"@n8n/n8n-nodes-langchain.lmChatAnthropic","position":[33984,8128],"parameters":{"model":{"__rl":true,"mode":"list","value":"claude-3-5-sonnet-20241022"},"options":{"temperature":0.3}},"typeVersion":1.3},{"id":"915179ba-1e73-4152-956c-83270f947bd9","name":"Objection Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[34304,8128],"parameters":{"schemaType":"manual","inputSchema":"{\"type\": \"object\", \"properties\": {\"response_script\": {\"type\": \"string\"}, \"technique\": {\"type\": \"string\"}, \"confidence\": {\"type\": \"number\"}}, \"required\": [\"response_script\", \"technique\", \"confidence\"]}"},"typeVersion":1.2},{"id":"e256abc8-7cc7-4c7b-bb30-0218f66cad54","name":"Extract Objection Response","type":"n8n-nodes-base.code","position":[34368,7920],"parameters":{"jsCode":"const items = $input.all();\nconst item = items[0];\n\nlet resp;\ntry {\n  const raw = item.json.output || item.json;\n  if (typeof raw === 'string') {\n    const cleaned = raw.replace(/```json\\n?/g, '').replace(/```\\n?/g, '').trim();\n    resp = JSON.parse(cleaned);\n  } else if (typeof raw === 'object' && raw.response_script !== undefined) {\n    resp = raw;\n  } else if (raw.output && typeof raw.output === 'object') {\n    resp = raw.output;\n  } else {\n    resp = { response_script: 'Follow up with value proposition tailored to their specific pain points.', technique: 'generic', confidence: 0.5 };\n  }\n} catch(e) {\n  resp = { response_script: 'Follow up with value proposition tailored to their specific pain points.', technique: 'generic', confidence: 0.5 };\n}\n\n// Carry forward all previous context\nconst bant = $('Extract BANT').item.json;\nconst booking = $('Extract Booking').item.json;\nconst mergedContact = $('Merge Contact Paths').item.json;\nconst opp = $('Create Hot Opportunity').item.json;\n\nreturn [{\n  json: {\n    call_id: bant.call_id,\n    phone_number: bant.phone_number,\n    transcript: bant.transcript,\n    recording_url: bant.recording_url,\n    duration_sec: bant.duration_sec,\n    provider: bant.provider,\n    bant_score: bant.bant_score,\n    budget_confirmed: bant.budget_confirmed,\n    authority_confirmed: bant.authority_confirmed,\n    need_identified: bant.need_identified,\n    timeline_defined: bant.timeline_defined,\n    bant_summary: bant.bant_summary,\n    key_objections: bant.key_objections,\n    qualified: true,\n    appointment_requested: booking.appointment_requested,\n    preferred_time: booking.preferred_time,\n    booking_confidence: booking.booking_confidence,\n    detected_objections: booking.detected_objections,\n    ghl_contact_id: mergedContact.id || '',\n    ghl_opp_id: opp.id || '',\n    objection_response_script: resp.response_script,\n    objection_technique: resp.technique,\n    objection_confidence: resp.confidence\n  }\n}];"},"typeVersion":2},{"id":"379041e0-2fcf-470b-8702-d510b525e0d1","name":"CRM Note Writer","type":"@n8n/n8n-nodes-langchain.agent","position":[34560,7920],"parameters":{"text":"=Contact Phone: {{ $json.phone_number }}\nCall Date: {{ $now.toISO() }}\nCall Duration: {{ $json.duration_sec }} seconds\nProvider: {{ $json.provider }}\nBANT Score: {{ $json.bant_score }}/10\nBudget Confirmed: {{ $json.budget_confirmed }}\nAuthority Confirmed: {{ $json.authority_confirmed }}\nNeed Identified: {{ $json.need_identified }}\nTimeline Defined: {{ $json.timeline_defined }}\nBANT Summary: {{ $json.bant_summary }}\nAppointment Requested: {{ $json.appointment_requested }}\nPreferred Appointment Time: {{ $json.preferred_time }}\nObjections Raised: {{ JSON.stringify($json.detected_objections) }}\nObjection Handling Technique Selected: {{ $json.objection_technique }}\nObjection Response Script: {{ $json.objection_response_script }}\n\nWrite a professional CRM activity note for this inbound voice AI sales call.","options":{"systemMessage":"You are a professional CRM administrator and sales operations specialist with expertise in Salesforce, HubSpot, and GoHighLevel CRM systems. Your task is to write concise, structured, professional activity notes for sales CRM systems.\n\nThe CRM note MUST follow this exact structure:\n\nCALL SUMMARY\n[1-2 sentences describing what happened on the call]\n\nQUALIFICATION STATUS\nBANT Score: X/10\n- Budget: [status and detail]\n- Authority: [status and detail]\n- Need: [status and detail]\n- Timeline: [status and detail]\n\nNEXT STEPS\n[Specific actionable items with dates/times where mentioned. Use bullet points.]\n\nOBJECTIONS ON FILE\n[List each objection. Use bullet points.]\n\nRECOMMENDED APPROACH\n[Which technique to use and brief rationale. 1-2 sentences.]\n\nTotal note length: 150-250 words. Use third person (e.g., 'Prospect confirmed...', 'Lead indicated...'). Be specific and actionable — any sales rep should be able to pick up this lead and know exactly what to do next.\n\nAlways respond with valid JSON matching the output schema exactly. Do not wrap in markdown code blocks."},"promptType":"define","hasOutputParser":true},"typeVersion":1.8},{"id":"ae2993f0-aa6c-4a9b-aaab-4f10caaef1f8","name":"Gemini Flash (CRM Note)","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[34464,8128],"parameters":{"options":{"temperature":0.2,"maxOutputTokens":800},"modelName":{"__rl":true,"mode":"list","value":""}},"typeVersion":1},{"id":"8956d772-8e28-4d96-ac8e-5d1a145b32fc","name":"CRM Note Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[34768,8128],"parameters":{"schemaType":"manual","inputSchema":"{\"type\": \"object\", \"properties\": {\"crm_note\": {\"type\": \"string\"}}, \"required\": [\"crm_note\"]}"},"typeVersion":1.2},{"id":"90320e2e-a46e-40d1-a8b8-8ca9fd52ca7d","name":"Extract CRM Note","type":"n8n-nodes-base.code","position":[34880,7920],"parameters":{"jsCode":"const items = $input.all();\nconst item = items[0];\n\nlet note;\ntry {\n  const raw = item.json.output || item.json;\n  if (typeof raw === 'string') {\n    const cleaned = raw.replace(/```json\\n?/g, '').replace(/```\\n?/g, '').trim();\n    note = JSON.parse(cleaned);\n  } else if (typeof raw === 'object' && raw.crm_note !== undefined) {\n    note = raw;\n  } else if (raw.output && typeof raw.output === 'object') {\n    note = raw.output;\n  } else {\n    note = { crm_note: 'Voice AI inbound call — see transcript for details.' };\n  }\n} catch(e) {\n  note = { crm_note: 'Voice AI inbound call — see transcript for details.' };\n}\n\nconst prev = $('Extract Objection Response').item.json;\n\nreturn [{\n  json: {\n    ...prev,\n    crm_note: note.crm_note || 'Voice AI call logged.'\n  }\n}];"},"typeVersion":2},{"id":"60f7c53e-fa87-4abb-814c-a5a141b6d2f4","name":"Update Contact Notes","type":"n8n-nodes-base.highLevel","position":[35040,7920],"parameters":{"contactId":"={{ $json.ghl_contact_id }}","operation":"update","updateFields":{"tags":"voice-lead,qualified,hot"},"requestOptions":{}},"typeVersion":2},{"id":"31d77ea6-aa77-446d-933a-27fb25e20cc2","name":"Update Stage: Hot Lead","type":"n8n-nodes-base.highLevel","position":[35280,7920],"parameters":{"resource":"opportunity","operation":"update","updateFields":{"stageId":"YOUR_HOT_STAGE_ID"},"opportunityId":"={{ $json.ghl_opp_id }}","requestOptions":{}},"typeVersion":2},{"id":"16c3ca21-35f0-4707-8830-01f9abf439da","name":"Log to Supabase","type":"n8n-nodes-base.supabase","position":[35520,7920],"parameters":{"tableId":"voice_call_logs","fieldsUi":{"fieldValues":[{"fieldId":"call_id","fieldValue":"={{ $json.call_id }}"},{"fieldId":"phone_number","fieldValue":"={{ $json.phone_number }}"},{"fieldId":"direction","fieldValue":"inbound"},{"fieldId":"provider","fieldValue":"={{ $json.provider }}"},{"fieldId":"duration_sec","fieldValue":"={{ $json.duration_sec }}"},{"fieldId":"transcript","fieldValue":"={{ $json.transcript }}"},{"fieldId":"recording_url","fieldValue":"={{ $json.recording_url }}"},{"fieldId":"bant_score","fieldValue":"={{ $json.bant_score }}"},{"fieldId":"qualified","fieldValue":"={{ $json.qualified }}"},{"fieldId":"budget_confirmed","fieldValue":"={{ $json.budget_confirmed }}"},{"fieldId":"authority_confirmed","fieldValue":"={{ $json.authority_confirmed }}"},{"fieldId":"need_identified","fieldValue":"={{ $json.need_identified }}"},{"fieldId":"timeline_defined","fieldValue":"={{ $json.timeline_defined }}"},{"fieldId":"bant_summary","fieldValue":"={{ $json.bant_summary }}"},{"fieldId":"key_objections","fieldValue":"={{ JSON.stringify($json.key_objections) }}"},{"fieldId":"appointment_requested","fieldValue":"={{ $json.appointment_requested }}"},{"fieldId":"preferred_time","fieldValue":"={{ $json.preferred_time }}"},{"fieldId":"ghl_contact_id","fieldValue":"={{ $json.ghl_contact_id }}"},{"fieldId":"ghl_opp_id","fieldValue":"={{ $json.ghl_opp_id }}"},{"fieldId":"crm_note","fieldValue":"={{ $json.crm_note }}"},{"fieldId":"objection_response","fieldValue":"={{ $json.objection_response_script }}"}]}},"typeVersion":1},{"id":"c118faa4-789a-454e-a1cd-7f3d8cd0ef1a","name":"Log to Google Sheets","type":"n8n-nodes-base.googleSheets","position":[35760,7920],"parameters":{"columns":{"value":{"Date":"={{ $now.toISO() }}","Call ID":"={{ $json.call_id }}","CRM Note":"={{ $json.crm_note }}","Provider":"={{ $json.provider }}","Direction":"inbound","Qualified":"={{ $json.qualified }}","BANT Score":"={{ $json.bant_score }}","GHL Opp ID":"={{ $json.ghl_opp_id }}","Phone Number":"={{ $json.phone_number }}","Duration (sec)":"={{ $json.duration_sec }}","GHL Contact ID":"={{ $json.ghl_contact_id }}","Objection Response":"={{ $json.objection_response_script }}","Appointment Requested":"={{ $json.appointment_requested }}"},"schema":[],"mappingMode":"defineBelow","matchingColumns":[]},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"Voice Call Log"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_SPREADSHEET_ID"}},"typeVersion":4.4},{"id":"596534cd-65a3-42da-8348-819a0edfe61a","name":"Search GHL Contact NQ","type":"n8n-nodes-base.highLevel","position":[32400,8416],"parameters":{"limit":1,"filters":{"query":"={{ $json.phone_number }}"},"options":{},"operation":"getAll","requestOptions":{}},"typeVersion":2},{"id":"8a3a87b6-7f53-4d25-a7a1-38f01e077ac3","name":"Contact Exists NQ?","type":"n8n-nodes-base.if","position":[32640,8416],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"cond-nq-contact","operator":{"type":"string","operation":"notEmpty"},"leftValue":"={{ $json.id }}","rightValue":""}]}},"typeVersion":2},{"id":"a7374849-8c33-427a-8e12-f895f811d18a","name":"Update Contact NQ","type":"n8n-nodes-base.highLevel","position":[32880,8288],"parameters":{"contactId":"={{ $json.id }}","operation":"update","updateFields":{"tags":"voice-lead,nurturing"},"requestOptions":{}},"typeVersion":2},{"id":"a202a62e-3393-43da-b585-e7169f30175f","name":"Create Contact NQ","type":"n8n-nodes-base.highLevel","position":[32880,8560],"parameters":{"phone":"={{ $('Extract BANT').item.json.phone_number }}","requestOptions":{},"additionalFields":{"tags":"voice-lead,nurturing","source":"Voice AI","firstName":"Voice Lead"}},"typeVersion":2},{"id":"89c14e26-81fb-4b90-a80a-267583429d40","name":"Merge Contact NQ","type":"n8n-nodes-base.merge","position":[33120,8416],"parameters":{"mode":"chooseBranch"},"typeVersion":3},{"id":"1cf22c70-82c5-4fbd-9f0e-c96e5bf67246","name":"Create Nurturing Opportunity","type":"n8n-nodes-base.highLevel","position":[33360,8416],"parameters":{"name":"={{ 'Voice Lead (Nurturing) — ' + $('Extract BANT').item.json.phone_number }}","resource":"opportunity","contactId":"={{ $json.id }}","pipelineId":"YOUR_PIPELINE_ID","requestOptions":{},"additionalFields":{"stageId":"YOUR_NURTURING_STAGE_ID","monetaryValue":0}},"typeVersion":2},{"id":"6c911ccd-41ec-4359-9b5b-dfbc985f754c","name":"Trigger Nurture Workflow","type":"n8n-nodes-base.httpRequest","position":[33600,8416],"parameters":{"url":"=https://services.leadconnectorhq.com/contacts/{{ $json.id }}/workflow/YOUR_NURTURE_WORKFLOW_ID","method":"POST","options":{"response":{"response":{"neverError":true}}},"sendBody":true,"sendHeaders":true,"bodyParameters":{"parameters":[{}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"={{ 'Bearer ' + $env.GHL_API_KEY }}"},{"name":"Content-Type","value":"application/json"},{"name":"Version","value":"2021-04-15"}]}},"typeVersion":4.2},{"id":"525f27f8-5a33-45d3-942d-a9c312f1a073","name":"Log to Supabase NQ","type":"n8n-nodes-base.supabase","position":[33840,8416],"parameters":{"tableId":"voice_call_logs","fieldsUi":{"fieldValues":[{"fieldId":"call_id","fieldValue":"={{ $('Extract BANT').item.json.call_id }}"},{"fieldId":"phone_number","fieldValue":"={{ $('Extract BANT').item.json.phone_number }}"},{"fieldId":"direction","fieldValue":"inbound"},{"fieldId":"provider","fieldValue":"={{ $('Extract BANT').item.json.provider }}"},{"fieldId":"duration_sec","fieldValue":"={{ $('Extract BANT').item.json.duration_sec }}"},{"fieldId":"transcript","fieldValue":"={{ $('Extract BANT').item.json.transcript }}"},{"fieldId":"recording_url","fieldValue":"={{ $('Extract BANT').item.json.recording_url }}"},{"fieldId":"bant_score","fieldValue":"={{ $('Extract BANT').item.json.bant_score }}"},{"fieldId":"qualified","fieldValue":"false"},{"fieldId":"budget_confirmed","fieldValue":"={{ $('Extract BANT').item.json.budget_confirmed }}"},{"fieldId":"authority_confirmed","fieldValue":"={{ $('Extract BANT').item.json.authority_confirmed }}"},{"fieldId":"need_identified","fieldValue":"={{ $('Extract BANT').item.json.need_identified }}"},{"fieldId":"timeline_defined","fieldValue":"={{ $('Extract BANT').item.json.timeline_defined }}"},{"fieldId":"bant_summary","fieldValue":"={{ $('Extract BANT').item.json.bant_summary }}"},{"fieldId":"key_objections","fieldValue":"={{ JSON.stringify($('Extract BANT').item.json.key_objections) }}"},{"fieldId":"ghl_contact_id","fieldValue":"={{ $json.id }}"}]}},"typeVersion":1},{"id":"d35df5f0-9f24-4fe7-80c3-1b7414ee8182","name":"Log to Google Sheets NQ","type":"n8n-nodes-base.googleSheets","position":[34080,8416],"parameters":{"columns":{"value":{"Date":"={{ $now.toISO() }}","Call ID":"={{ $('Extract BANT').item.json.call_id }}","CRM Note":"Not qualified — added to nurturing pipeline","Provider":"={{ $('Extract BANT').item.json.provider }}","Direction":"inbound","Qualified":"false","BANT Score":"={{ $('Extract BANT').item.json.bant_score }}","GHL Opp ID":"","Phone Number":"={{ $('Extract BANT').item.json.phone_number }}","Duration (sec)":"={{ $('Extract BANT').item.json.duration_sec }}","GHL Contact ID":"={{ $json.id }}","Objection Response":"","Appointment Requested":"false"},"schema":[],"mappingMode":"defineBelow","matchingColumns":[]},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"Voice Call Log"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_SPREADSHEET_ID"}},"typeVersion":4.4},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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[]"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"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"},"typeVersion":1},{"id":"7c0b7c45-afce-440a-ba2c-f3f241baa9b6","name":"OUTBOUND FLOW1","type":"n8n-nodes-base.stickyNote","position":[30928,8560],"parameters":{"color":4,"width":600,"height":144,"content":"## 📤 OUTBOUND FLOW — Daily Prioritised Outbound Calls via Vapi"},"typeVersion":1},{"id":"6cbe841a-03fb-4dad-8108-524d284ede39","name":"Daily Outbound Schedule1","type":"n8n-nodes-base.scheduleTrigger","position":[30960,8928],"parameters":{"rule":{"interval":[{"field":"cronExpression","expression":"0 9 * * 1-5"}]}},"typeVersion":1.2},{"id":"f7b5cb74-65cf-4977-893e-0e03e9372ef8","name":"Fetch GHL Nurturing Leads1","type":"n8n-nodes-base.highLevel","position":[31200,8928],"parameters":{"filters":{"query":"nurturing"},"options":{},"operation":"getAll","returnAll":true,"requestOptions":{}},"typeVersion":2},{"id":"47536bb6-c07e-4360-a703-ba9a7237cbd4","name":"Priority Ranker1","type":"@n8n/n8n-nodes-langchain.agent","position":[31440,8928],"parameters":{"text":"=Today's date: {{ $now.toISO() }}\nDay of week: {{ $now.toFormat('EEEE') }}\n\nNurturing leads to rank for outbound calling today:\n{{ JSON.stringify($input.all().map(i => ({ id: i.json.id, phone: i.json.phone || i.json.phoneNumber || i.json.phone_number || '', name: ((i.json.firstName || '') + ' ' + (i.json.lastName || '')).trim(), tags: i.json.tags || [], dateAdded: i.json.dateAdded || i.json.createdAt || '', lastActivity: i.json.lastActivityDate || i.json.updatedAt || '' })), null, 2) }}\n\nRank these leads by call priority for today's outbound campaign. Return the top 50 only.","options":{"systemMessage":"You are an expert B2B sales operations manager specializing in outbound call prioritization and pipeline management.\n\nYour task is to rank nurturing leads for today's outbound call campaign based on the following scoring factors:\n\n1. RECENCY SIGNALS (highest weight — 40%):\n   - Added 1-7 days ago: +4 points (still warm from initial inquiry)\n   - Added 8-14 days ago: +2 points\n   - Added 15-30 days ago: +1 point\n   - Added 30+ days ago: 0 points (need full reengagement)\n\n2. ENGAGEMENT SIGNALS (medium weight — 35%):\n   - Tags: hot/warm/qualified = +3, interested = +2, contacted = +1, cold/unresponsive = -2\n   - Has phone number: +1\n   - Has full name: +0.5\n\n3. TIMING SIGNALS (medium weight — 25%):\n   - Monday: prioritize leads added last Thursday-Friday\n   - Tuesday-Thursday: prioritize most recently added\n   - Friday: prioritize leads not reached earlier this week (older dates)\n\nFinal priority_score: 1-10 scale.\nOnly include leads that have a valid phone number.\nLimit output to top 50 leads sorted descending by priority_score.\n\nFor each lead provide a brief reason (1 sentence max) explaining their priority ranking.\n\nAlways respond with valid JSON matching the output schema exactly. Do not wrap in markdown code blocks."},"promptType":"define","hasOutputParser":true},"typeVersion":1.8},{"id":"984e0153-57ba-4df3-bdef-8752498fc506","name":"GPT-4o Mini (Ranker)1","type":"@n8n/n8n-nodes-langchain.lmChatOpenAi","position":[31344,9120],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{"maxTokens":4000,"temperature":0.1}},"typeVersion":1.2},{"id":"73c26cf5-8bf2-45e5-823f-22aeee809ea3","name":"Priority Ranker Output Parser1","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[31552,9120],"parameters":{"schemaType":"manual","inputSchema":"{\"type\": \"object\", \"properties\": {\"ranked_leads\": {\"type\": \"array\", \"items\": {\"type\": \"object\", \"properties\": {\"contact_id\": {\"type\": \"string\"}, \"phone\": {\"type\": \"string\"}, \"priority_score\": {\"type\": \"number\"}, \"reason\": {\"type\": \"string\"}}, \"required\": [\"contact_id\", \"phone\", \"priority_score\", \"reason\"]}}}, \"required\": [\"ranked_leads\"]}"},"typeVersion":1.2},{"id":"9a08fea7-3854-4e4c-8f27-e715015d5edf","name":"Extract Ranked Leads1","type":"n8n-nodes-base.code","position":[31712,8928],"parameters":{"jsCode":"const items = $input.all();\nconst item = items[0];\n\nlet ranked;\ntry {\n  const raw = item.json.output || item.json;\n  if (typeof raw === 'string') {\n    const cleaned = raw.replace(/```json\\n?/g, '').replace(/```\\n?/g, '').trim();\n    ranked = JSON.parse(cleaned);\n  } else if (typeof raw === 'object' && raw.ranked_leads) {\n    ranked = raw;\n  } else if (raw.output && typeof raw.output === 'object') {\n    ranked = raw.output;\n  } else {\n    ranked = { ranked_leads: [] };\n  }\n} catch(e) {\n  ranked = { ranked_leads: [] };\n}\n\n// Sort descending by priority_score, filter for valid phone numbers, limit 50\nconst leads = (ranked.ranked_leads || [])\n  .sort((a, b) => (b.priority_score || 0) - (a.priority_score || 0))\n  .filter(l => l.phone && l.phone.trim() !== '' && l.phone !== 'undefined')\n  .slice(0, 50);\n\nif (leads.length === 0) {\n  return [{ json: { skip: true, message: 'No leads with phone numbers to call today.' } }];\n}\n\n// Return each lead as a separate item for batch processing\nreturn leads.map(lead => ({ json: lead }));"},"typeVersion":2},{"id":"cac84cf1-03ac-4f48-a265-7f0349da29d5","name":"Split in Batches1","type":"n8n-nodes-base.splitInBatches","position":[31920,8928],"parameters":{"options":{},"batchSize":5},"typeVersion":3},{"id":"2756c4c4-1817-402c-aae4-8f2db0cccf4e","name":"Initiate Vapi Outbound Call1","type":"n8n-nodes-base.httpRequest","position":[32144,8912],"parameters":{"url":"https://api.vapi.ai/call/phone","method":"POST","options":{"response":{"response":{"neverError":true}}},"sendBody":true,"sendHeaders":true,"bodyParameters":{"parameters":[{}]},"headerParameters":{"parameters":[{"name":"Authorization","value":"={{ 'Bearer ' + $env.VAPI_API_KEY }}"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2},{"id":"a6821b70-b51f-4453-865b-2c9ebd208562","name":"Log Outbound to Supabase1","type":"n8n-nodes-base.supabase","position":[32432,8976],"parameters":{"tableId":"voice_call_logs","fieldsUi":{"fieldValues":[{"fieldId":"call_id","fieldValue":"={{ $json.id || ('outbound-' + $now.toUnixInteger()) }}"},{"fieldId":"phone_number","fieldValue":"={{ $('Split in Batches1').item.json.phone }}"},{"fieldId":"direction","fieldValue":"outbound"},{"fieldId":"provider","fieldValue":"vapi"},{"fieldId":"duration_sec","fieldValue":"0"},{"fieldId":"qualified","fieldValue":"false"},{"fieldId":"ghl_contact_id","fieldValue":"={{ $('Split in Batches1').item.json.contact_id }}"},{"fieldId":"outbound_call_id","fieldValue":"={{ $json.id }}"},{"fieldId":"crm_note","fieldValue":"={{ 'Outbound call initiated. Priority score: ' + $('Split in Batches1').item.json.priority_score + '. Reason: ' + $('Split in Batches1').item.json.reason }}"}]}},"typeVersion":1},{"id":"05379090-29cd-4a6e-877a-21e922e6abfa","name":"Log Outbound to Sheets1","type":"n8n-nodes-base.googleSheets","position":[32688,8912],"parameters":{"columns":{"value":{"Date":"={{ $now.toISO() }}","Call ID":"={{ $json.id || ('outbound-' + $now.toUnixInteger()) }}","CRM Note":"={{ 'Outbound call initiated. Priority: ' + $('Split in Batches1').item.json.priority_score + ' — ' + $('Split in Batches1').item.json.reason }}","Provider":"vapi","Direction":"outbound","Qualified":"false","BANT Score":"","GHL Opp ID":"","Phone Number":"={{ $('Split in Batches1').item.json.phone }}","Duration (sec)":"0","GHL Contact ID":"={{ $('Split in Batches1').item.json.contact_id }}","Objection Response":"","Appointment Requested":""},"schema":[],"mappingMode":"defineBelow","matchingColumns":[]},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"name","value":"Voice Call Log"},"documentId":{"__rl":true,"mode":"id","value":"YOUR_SPREADSHEET_ID"}},"typeVersion":4.4}],"pinData":{},"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}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":94,"nodeTypes":{"n8n-nodes-base.if":{"count":4},"n8n-nodes-base.code":{"count":6},"n8n-nodes-base.merge":{"count":2},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.supabase":{"count":3},"n8n-nodes-base.highLevel":{"count":11},"n8n-nodes-base.stickyNote":{"count":45},"n8n-nodes-base.httpRequest":{"count":2},"n8n-nodes-base.googleSheets":{"count":3},"n8n-nodes-base.splitInBatches":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":5},"n8n-nodes-base.scheduleTrigger":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenAi":{"count":2},"@n8n/n8n-nodes-langchain.lmChatAnthropic":{"count":2},"@n8n/n8n-nodes-langchain.lmChatGoogleGemini":{"count":1},"@n8n/n8n-nodes-langchain.outputParserStructured":{"count":5}}},"status":"published","readyToDemo":null,"user":{"name":"Kumar SmartFlow Craft","username":"smartflowautomate","bio":"Founder of SmartFlowCraft — an AI agent platform for deploying production-ready automation for sales, support, and content ops. I build n8n workflow templates for real B2B use cases: SDR pipelines, churn detection, \n  multi-agent orchestration, content repurposing, and revenue operations.","verified":true,"links":["https://www.smartflowcraft.com/"],"avatar":"https://gravatar.com/avatar/da2267caca3c05aef7c35ee3394094a845dd4b2d1696e5e455c8bf5e9ce8f1c6?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":39,"icon":"fa:sync","name":"n8n-nodes-base.splitInBatches","codex":{"data":{"alias":["Loop","Concatenate","Batch","Split","Split In Batches"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Loop Over Items","color":"#007755"},"iconData":{"icon":"sync","type":"icon"},"displayName":"Loop Over Items (Split in Batches)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":545,"icon":"file:supabase.svg","name":"n8n-nodes-base.supabase","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.supabase/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/supabase/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Supabase"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDkiIGhlaWdodD0iMTEzIiBmaWxsPSJub25lIj48cGF0aCBmaWxsPSJ1cmwoI2EpIiBkPSJNNjMuNzA4IDExMC4yODRjLTIuODYgMy42MDEtOC42NTggMS42MjgtOC43MjctMi45N2wtMS4wMDctNjcuMjUxaDQ1LjIyYzguMTkgMCAxMi43NTggOS40NiA3LjY2NSAxNS44NzR6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZmlsbC1vcGFjaXR5PSIuMiIgZD0iTTYzLjcwOCAxMTAuMjg0Yy0yLjg2IDMuNjAxLTguNjU4IDEuNjI4LTguNzI3LTIuOTdsLTEuMDA3LTY3LjI1MWg0NS4yMmM4LjE5IDAgMTIuNzU4IDkuNDYgNy42NjUgMTUuODc0eiIvPjxwYXRoIGZpbGw9IiMzRUNGOEUiIGQ9Ik00NS4zMTcgMi4wNzFjMi44Ni0zLjYwMSA4LjY1Ny0xLjYyOCA4LjcyNiAyLjk3bC40NDIgNjcuMjUxSDkuODNjLTguMTkgMC0xMi43NTktOS40Ni03LjY2NS0xNS44NzV6Ii8+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNTMuOTc0IiB4Mj0iOTQuMTYzIiB5MT0iNTQuOTc0IiB5Mj0iNzEuODI5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzI0OTM2MSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzNFQ0Y4RSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMzYuMTU2IiB4Mj0iNTQuNDg0IiB5MT0iMzAuNTc4IiB5Mj0iNjUuMDgxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3AvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+"},"displayName":"Supabase","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":825,"icon":"file:highLevel.svg","name":"n8n-nodes-base.highLevel","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.highlevel/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/highlevel/"}]},"categories":["Marketing","Sales"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"transform\"]","defaults":{"name":"HighLevel"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iNS43NzczNCIgeT0iNi44MDQyIiB3aWR0aD0iNS4yOTIxNiIgaGVpZ2h0PSIzMi44ODciIGZpbGw9IiNGREM0MDAiLz4KPHJlY3QgeD0iMjguODM1OSIgeT0iNi44MDQyIiB3aWR0aD0iNS4yOTIxNiIgaGVpZ2h0PSIzMi44ODciIGZpbGw9IiM0QUNGMjciLz4KPHJlY3QgeD0iMTYuOTI4NyIgeT0iMTguOTk1MSIgd2lkdGg9IjYuMDQ4MTkiIGhlaWdodD0iMjAuNjk2MSIgZmlsbD0iIzI4OTZGQiIvPgo8cGF0aCBkPSJNOC40NzA2NCAwTDE2Ljk0MTMgOC45MzA1M0gwTDguNDcwNjQgMFoiIGZpbGw9IiNGREM0MDAiLz4KPHBhdGggZD0iTTMxLjUyOTIgMEwzOS45OTk5IDguOTMwNTNIMjMuMDU4NkwzMS41MjkyIDBaIiBmaWxsPSIjNEFDRjI3Ii8+CjxwYXRoIGQ9Ik0xOS45OTk5IDEyLjY2MzNMMjguNDcwNiAyMS41OTM5SDExLjUyOTNMMTkuOTk5OSAxMi42NjMzWiIgZmlsbD0iIzI4OTZGQiIvPgo8cGF0aCBkPSJNNS43NzczNCA4LjkzMDQySDExLjA2OTVWMTQuMjIyNkw1Ljc3NzM0IDguOTMwNDJaIiBmaWxsPSIjREFBOTAwIi8+CjxwYXRoIGQ9Ik0yOC44MzU5IDguOTMwNDJIMzQuMTI4MVYxNC4yMjI2TDI4LjgzNTkgOC45MzA0MloiIGZpbGw9IiM1MUIzNDYiLz4KPHBhdGggZD0iTTE2LjkyODcgMjEuNTk0SDIyLjk3NjlWMjcuNjQyMkwxNi45Mjg3IDIxLjU5NFoiIGZpbGw9IiMxRjgxREIiLz4KPC9zdmc+Cg=="},"displayName":"HighLevel","typeVersion":2,"nodeCategories":[{"id":2,"name":"Sales"},{"id":27,"name":"Marketing"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1145,"icon":"file:anthropic.svg","name":"@n8n/n8n-nodes-langchain.lmChatAnthropic","codex":{"data":{"alias":["claude","sonnet","opus"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatanthropic/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Anthropic Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzdEN0Q4NyIgZD0iTTMyLjczIDBoLTYuOTQ1TDM4LjQ1IDMyaDYuOTQ1ek0xMi42NjUgMCAwIDMyaDcuMDgybDIuNTktNi43MmgxMy4yNWwyLjU5IDYuNzJoNy4wODJMMTkuOTI5IDB6bS0uNzAyIDE5LjMzNyA0LjMzNC0xMS4yNDYgNC4zMzQgMTEuMjQ2eiIvPjwvc3ZnPg=="},"displayName":"Anthropic Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1153,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"OpenAI Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1179,"icon":"fa:code","name":"@n8n/n8n-nodes-langchain.outputParserStructured","codex":{"data":{"alias":["json","zod"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Output Parsers"]}}},"group":"[\"transform\"]","defaults":{"name":"Structured Output Parser"},"iconData":{"icon":"code","type":"icon"},"displayName":"Structured Output Parser","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1262,"icon":"file:google.svg","name":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatgooglegemini/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Google Gemini Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDggNDgiPjxkZWZzPjxwYXRoIGlkPSJhIiBkPSJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2MtNy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40LTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIyYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNCIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBmaWxsPSIjRkJCQzA1IiBkPSJNMCAzN1YxMWwxNyAxM3oiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im0wIDExIDE3IDEzIDctNi4xTDQ4IDE0VjBIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiMzNEE4NTMiIGQ9Im0wIDM3IDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiM0Mjg1RjQiIGQ9Ik00OCA0OCAxNyAyNGwtNC0zIDM1LTEweiIgY2xpcC1wYXRoPSJ1cmwoI2IpIi8+PC9zdmc+"},"displayName":"Google Gemini Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":38,"name":"Lead Nurturing"},{"id":47,"name":"AI Chatbot"}],"image":[]}}