{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "90fb7e98-29a0-4f57-9fbc-49a92ecb0bb6",
      "name": "Google Gemini Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        5376,
        3904
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "c1e12098-b371-4a04-b20b-c1453ad24a5d",
      "name": "Nurture Email \u2014 Medium/Low Lead2",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        6816,
        3840
      ],
      "parameters": {
        "html": "=<html><body style=\"font-family:Arial,sans-serif;background:#f0f4f8;padding:20px;\">\n<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\"><tr><td align=\"center\">\n<table width=\"560\" style=\"background:#fff;border-radius:8px;overflow:hidden;\">\n<tr><td style=\"background:#4a5568;padding:30px;text-align:center;\">\n<h1 style=\"color:#fff;margin:0;\">We Received Your Inquiry</h1>\n<p style=\"color:#cbd5e0;margin:8px 0 0 0;\">Our team will be in touch shortly</p>\n</td></tr>\n<tr><td style=\"padding:32px;\">\n<h2 style=\"color:#2d3748;\">Hi {{ $('Parse AI Output2').first().json.full_name }},</h2>\n<p style=\"color:#4a5568;line-height:1.7;\">Thanks for your inquiry! Based on your requirements, we may have <strong>available properties</strong> that match what you are looking for.</p>\n<p style=\"color:#4a5568;line-height:1.7;\">Would you like to <strong>schedule a showing this week?</strong></p>\n<table width=\"100%\" style=\"background:#f7fafc;border:1px solid #e2e8f0;border-radius:4px;margin:20px 0;\"><tr><td style=\"padding:16px;\">\n<p style=\"margin:0 0 10px;font-weight:bold;color:#2d3748;\">Your Inquiry Summary</p>\n<p style=\"margin:4px 0;color:#2d3748;\"><strong>Property:</strong> {{ $('Parse AI Output2').first().json.property_type }}</p>\n<p style=\"margin:4px 0;color:#2d3748;\"><strong>Location:</strong> {{ $('Parse AI Output2').first().json.location }}</p>\n<p style=\"margin:4px 0;color:#2d3748;\"><strong>Budget:</strong> {{ $('Parse AI Output2').first().json.budget }}</p>\n</td></tr></table>\n<p style=\"color:#4a5568;font-weight:bold;\">While you wait:</p>\n<p style=\"color:#4a5568;\">- Browse our latest listings on our website</p>\n<p style=\"color:#4a5568;\">- Prepare your documents: ID and proof of income</p>\n<p style=\"color:#4a5568;\">- Shortlist your must-have features</p>\n<p style=\"color:#4a5568;margin-top:24px;\">We will be in touch within <strong>1-2 business days</strong>.</p>\n<p style=\"color:#4a5568;margin-top:24px;\">Warm regards,<br><strong>The Leasing Team</strong></p>\n</td></tr>\n<tr><td style=\"background:#f7fafc;padding:12px;text-align:center;\">\n<p style=\"margin:0;color:#a0aec0;font-size:12px;\">You received this because you submitted a property inquiry.</p>\n</td></tr>\n</table></td></tr></table>\n</body></html>",
        "options": {
          "appendAttribution": false
        },
        "subject": "=Thanks for reaching out, {{ $('Parse AI Output2').first().json.full_name }}!",
        "toEmail": "={{ $('Parse AI Output2').first().json.email }}",
        "fromEmail": "user@example.com"
      },
      "typeVersion": 2.1
    },
    {
      "id": "01540a94-d3a7-4e87-b47c-4ef9d62355c0",
      "name": "Priority Email \u2014 High Lead2",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        6816,
        3360
      ],
      "parameters": {
        "html": "=<html><body style=\"font-family:Arial,sans-serif;background:#f0f4f8;padding:20px;\">\n<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\"><tr><td align=\"center\">\n<table width=\"560\" style=\"background:#fff;border-radius:8px;overflow:hidden;\">\n<tr><td style=\"background:#1a365d;padding:30px;text-align:center;\">\n<h1 style=\"color:#fff;margin:0;\">Great News!</h1>\n<p style=\"color:#bee3f8;margin:8px 0 0 0;\">We have matching properties for you</p>\n</td></tr>\n<tr><td style=\"padding:32px;\">\n<h2 style=\"color:#1a365d;\">Hi {{ $('Parse AI Output2').first().json.full_name }},</h2>\n<p style=\"color:#4a5568;line-height:1.7;\">Thanks for your inquiry! Based on your requirements, we may have <strong>available properties</strong> that are a great match.</p>\n<p style=\"color:#4a5568;line-height:1.7;\">Would you like to <strong>schedule a showing this week?</strong></p>\n<table width=\"100%\" style=\"background:#ebf8ff;border-left:4px solid #3182ce;border-radius:4px;margin:20px 0;\"><tr><td style=\"padding:16px;\">\n<p style=\"margin:0 0 10px;font-weight:bold;color:#2c5282;\">Your Inquiry Summary</p>\n<p style=\"margin:4px 0;color:#2d3748;\"><strong>Property:</strong> {{ $('Parse AI Output2').first().json.property_type }}</p>\n<p style=\"margin:4px 0;color:#2d3748;\"><strong>Purpose:</strong> {{ $('Parse AI Output2').first().json.purpose }}</p>\n<p style=\"margin:4px 0;color:#2d3748;\"><strong>Location:</strong> {{ $('Parse AI Output2').first().json.location }}</p>\n<p style=\"margin:4px 0;color:#2d3748;\"><strong>Budget:</strong> {{ $('Parse AI Output2').first().json.budget }}</p>\n<p style=\"margin:4px 0;color:#2d3748;\"><strong>Timeline:</strong> {{ $('Parse AI Output2').first().json.timeline }}</p>\n</td></tr></table>\n<table width=\"100%\" style=\"background:#f0fff4;border-left:4px solid #38a169;border-radius:4px;margin:0 0 20px;\"><tr><td style=\"padding:16px;\">\n<p style=\"margin:0 0 8px;font-weight:bold;color:#276749;\">Our Assessment</p>\n<p style=\"margin:0;color:#2d3748;\">{{ $('Parse AI Output2').first().json.notes }}</p>\n</td></tr></table>\n<p style=\"color:#4a5568;\">A senior agent will contact you within <strong>2 hours</strong>.</p>\n<p style=\"color:#4a5568;margin-top:24px;\">Warm regards,<br><strong>The Leasing Team</strong></p>\n</td></tr>\n<tr><td style=\"background:#f7fafc;padding:12px;text-align:center;\">\n<p style=\"margin:0;color:#a0aec0;font-size:12px;\">You received this because you submitted a property inquiry.</p>\n</td></tr>\n</table></td></tr></table>\n</body></html>",
        "options": {
          "appendAttribution": false
        },
        "subject": "=\ud83c\udfe0 {{ $('Parse AI Output2').first().json.full_name }}, we have properties matching your needs!",
        "toEmail": "={{ $('Parse AI Output2').first().json.email }}",
        "fromEmail": "user@example.com"
      },
      "typeVersion": 2.1
    },
    {
      "id": "00840730-9479-431c-a116-49b158352763",
      "name": "High Lead?2",
      "type": "n8n-nodes-base.if",
      "position": [
        6464,
        3600
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "check-high",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $('Parse AI Output2').first().json.lead_score }}",
              "rightValue": "High"
            }
          ]
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "5da4dd2e-a654-44b0-9801-b60ce3189924",
      "name": "Save to Airtable2",
      "type": "n8n-nodes-base.airtable",
      "position": [
        6096,
        3600
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "id",
          "value": "apphmQzLXYHppqZTB"
        },
        "table": {
          "__rl": true,
          "mode": "id",
          "value": "tbl9t6jSZ8Eg2qn7d"
        },
        "columns": {
          "value": {
            "Notes": "={{ $json.notes }}",
            "Intent": "={{ $json.intent }}",
            "Purpose": "={{ $json.purpose }}",
            "Timeline": "={{ $json.timeline }}",
            "Full Name": "={{ $json.full_name }}",
            "Lead Score": "={{ $json.lead_score }}",
            "Submit Date": "={{ $json.submit_date }}",
            "Budget Range": "={{ $json.budget }}",
            "Requirements": "={{ $json.requirements }}",
            "Email Address": "={{ $json.email }}",
            "Property Type": "={{ $json.property_type }}",
            "Preferred Location": "={{ $json.location }}",
            "Mobile Phone Number": "={{ $json.phone }}"
          },
          "schema": [
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Address",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Mobile Phone Number",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Mobile Phone Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Property Type",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Property Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Purpose",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Purpose",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Preferred Location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Preferred Location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Budget Range",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Budget Range",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Requirements",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Requirements",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Submit Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Submit Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Lead Score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Lead Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Intent",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Intent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Timeline",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Timeline",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Notes",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow"
        },
        "options": {
          "typecast": true
        },
        "operation": "create"
      },
      "typeVersion": 2.1
    },
    {
      "id": "065a88d7-8ad2-421f-af63-f37d34519ccd",
      "name": "Parse AI Output2",
      "type": "n8n-nodes-base.code",
      "position": [
        5728,
        3600
      ],
      "parameters": {
        "jsCode": "const aiRaw = $input.first().json.output || '';\nconst formData = $('Extract Typeform Fields1').first().json;\n\nconsole.log('Raw AI output:', aiRaw);\n\nlet parsed = null;\n\n// Attempt 1: direct parse\ntry { parsed = JSON.parse(aiRaw.trim()); } catch(e) {}\n\n// Attempt 2: strip markdown fences\nif (!parsed) {\n  try {\n    const s = aiRaw.replace(/```json/gi,'').replace(/```/g,'').trim();\n    parsed = JSON.parse(s);\n  } catch(e) {}\n}\n\n// Attempt 3: extract JSON block\nif (!parsed) {\n  try {\n    const m = aiRaw.match(/\\{[\\s\\S]*\\}/);\n    if (m) parsed = JSON.parse(m[0]);\n  } catch(e) {}\n}\n\n// Attempt 4: regex fallback\nif (!parsed) {\n  const s = aiRaw.match(/lead_score[\"'\\s:]+([\"']?)(High|Medium|Low)\\1/i);\n  const i = aiRaw.match(/intent[\"'\\s:]+[\"']([^\"'\\n,}]{3,100})[\"']/);\n  const t = aiRaw.match(/timeline[\"'\\s:]+[\"']([^\"'\\n,}]{3,100})[\"']/);\n  const n = aiRaw.match(/notes[\"'\\s:]+[\"']([^\"'\\n,}]{3,300})[\"']/);\n  parsed = {\n    lead_score: s ? s[2] : 'Medium',\n    intent:     i ? i[1].trim() : 'Needs review',\n    timeline:   t ? t[1].trim() : 'Not specified',\n    notes:      n ? n[1].trim() : 'Manual review required'\n  };\n}\n\n// Ensure lead_score is exactly High / Medium / Low\nconst validScores = ['High', 'Medium', 'Low'];\nif (!validScores.includes(parsed.lead_score)) {\n  parsed.lead_score = 'Medium';\n}\n\nconsole.log('Final parsed:', parsed);\n\nreturn [{\n  json: {\n    full_name:     formData.name     || '',\n    email:         formData.email    || '',\n    phone:         formData.phone    || '',\n    property_type: formData.property_type || '',\n    purpose:       formData.purpose  || '',\n    location:      formData.location || '',\n    budget:        formData.budget   || '',\n    requirements:  formData.requirements || '',\n    submit_date:   formData.submit_date  || new Date().toISOString(),\n    lead_score:    parsed.lead_score,\n    intent:        parsed.intent  || '',\n    timeline:      parsed.timeline || '',\n    notes:         parsed.notes   || ''\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "1e8ae181-0d83-4be2-a225-3f11cb7163dc",
      "name": "AI Lead Qualifier2",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        5264,
        3600
      ],
      "parameters": {
        "text": "=You are an AI leasing assistant for a real estate company.\n\nAnalyze this property inquiry and return ONLY a raw JSON object.\nNo markdown. No code fences. No explanation. Just the JSON.\n\nExact format:\n{\"lead_score\":\"High\",\"intent\":\"...\",\"timeline\":\"...\",\"notes\":\"...\"}\n\nlead_score must be exactly one of: High, Medium, Low\n\nLead Data:\n- Name: {{ $json.name }}\n- Email: {{ $json.email }}\n- Phone: {{ $json.phone }}\n- Property Type: {{ $json.property_type }}\n- Purpose: {{ $json.purpose }}\n- Location: {{ $json.location }}\n- Budget: {{ $json.budget }}\n- Requirements: {{ $json.requirements }}\n\nScoring Rules:\n- High = has budget + specific location + clear purpose (investment or near-term)\n- Medium = partial info, needs follow-up\n- Low = vague, missing budget or location\n\nReturn JSON only. No other text whatsoever.",
        "options": {
          "systemMessage": "You are a real estate lead qualification AI. Return raw JSON only. No markdown. No code blocks. No explanation. Just the JSON object on a single line."
        },
        "promptType": "define"
      },
      "typeVersion": 3.1
    },
    {
      "id": "597b672e-5187-47cd-8c11-9558c357affc",
      "name": "Extract Typeform Fields1",
      "type": "n8n-nodes-base.code",
      "position": [
        4912,
        3600
      ],
      "parameters": {
        "jsCode": "// ============================================================\n// EXACT TYPEFORM FIELD EXTRACTOR\n// Based on confirmed payload with exact field refs\n// ============================================================\n\nconst input = $input.first().json;\n\n// Typeform sends data inside form_response\nconst fr = input.body?.form_response || input.form_response || input.body || input;\nconst answers = fr.answers || [];\n\nconsole.log('Total answers received:', answers.length);\nconsole.log('Raw answers:', JSON.stringify(answers));\n\n// Known field refs from your form\nconst REF_NAME        = '12829b05-575d-4c31-9569-79ddd0d9f2c2';\nconst REF_PHONE       = 'afd6483f-643d-4656-8e9d-d343c3745356';\nconst REF_EMAIL       = 'ebf62b12-c7f5-437f-aefd-848d645794cc';\nconst REF_PROP_TYPE   = 'eebd1c48-17b6-4139-a479-c6426b0fd968';\nconst REF_PURPOSE     = '9bd9f234-e544-49ae-b8a7-db3ed0b7764e';\nconst REF_LOCATION    = '44dc617b-f453-4ec3-8737-be40897c8505';\nconst REF_BUDGET      = '15471e0f-d172-4b2f-aaf1-c7f0799fc4bf';\nconst REF_REQUIREMENTS= '60ddbcf2-dd8b-490a-a0dd-f48bd629a30d';\nconst REF_CONSENT     = '5b0075bb-75fe-47e9-9b0c-ad4364d45ea9';\n\n// Build a ref -> answer map\nconst refMap = {};\nfor (const a of answers) {\n  const ref = a.field?.ref;\n  if (ref) refMap[ref] = a;\n}\n\n// Extract value from answer object\nfunction extract(ref) {\n  const a = refMap[ref];\n  if (!a) return '';\n  if (a.type === 'text')         return a.text || '';\n  if (a.type === 'email')        return a.email || '';\n  if (a.type === 'phone_number') return a.phone_number || '';\n  if (a.type === 'choice')       return a.choice?.label || '';\n  if (a.type === 'choices')      return (a.choices?.labels || []).join(', ');\n  if (a.type === 'boolean')      return a.boolean ? 'Yes' : 'No';\n  if (a.type === 'number')       return String(a.number || '');\n  return '';\n}\n\nconst name         = extract(REF_NAME);\nconst phone        = extract(REF_PHONE);\nconst email        = extract(REF_EMAIL);\nconst propertyType = extract(REF_PROP_TYPE);\nconst purpose      = extract(REF_PURPOSE);\nconst location     = extract(REF_LOCATION);\nconst budget       = extract(REF_BUDGET);\nconst requirements = extract(REF_REQUIREMENTS);\nconst consent      = extract(REF_CONSENT);\nconst submitDate   = fr.submitted_at || new Date().toISOString();\n\nconsole.log('Extracted:', { name, phone, email, propertyType, purpose, location, budget, requirements });\n\nreturn [{\n  json: {\n    name,\n    email,\n    phone,\n    property_type: propertyType,\n    purpose,\n    location,\n    budget,\n    requirements,\n    consent,\n    submit_date: submitDate\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "1e8565dd-9538-4875-b31a-da53b69b849d",
      "name": "Webhook1",
      "type": "n8n-nodes-base.webhook",
      "position": [
        4528,
        3600
      ],
      "parameters": {
        "path": "1676a463-d7fc-43e0-8eba-c654b1e31599",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "156265b2-b77d-4a56-9b4b-bfffda64f055",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4448,
        3072
      ],
      "parameters": {
        "width": 1100,
        "height": 280,
        "content": "## \ud83c\udfe0 Real Estate Lead Qualifier\n\nTypeform submission \u2192 AI scores the lead (High / Medium / Low) \u2192 saves to Airtable CRM \u2192 sends the right email automatically. No manual triage needed.\n\n**Setup checklist:**\n- Paste the Webhook production URL into Typeform \u2192 Connect \u2192 Webhooks\n- Add your Google Gemini API key to the Gemini Chat Model node (or swap for GPT-4o / Claude)\n- Connect your Airtable credential and replace the Base ID + Table ID in the Airtable node\n- Update `fromEmail` in both Send Email nodes before going live\n- If you rebuild the Typeform, update the `REF_` constants in the Extract Fields node"
      },
      "typeVersion": 1
    },
    {
      "id": "fa3971b5-6761-46a1-aeae-896470486ee0",
      "name": "Webhook note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4448,
        3408
      ],
      "parameters": {
        "color": 5,
        "width": 290,
        "height": 402,
        "content": "**Webhook**\n\nTypeform POSTs here on every submission. Copy the production URL from this node and paste it into:\nTypeform \u2192 Connect \u2192 Webhooks"
      },
      "typeVersion": 1
    },
    {
      "id": "13394412-3d94-4d79-aa57-ad7fbd837e9e",
      "name": "Extractor note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4816,
        3408
      ],
      "parameters": {
        "color": 5,
        "width": 322,
        "height": 400,
        "content": "**Extract Typeform Fields**\n\nTypeform sends field *reference IDs*, not names. This node maps refs \u2192 values.\n\n\u26a0\ufe0f If you rebuild the form, update the REF_ constants at the top of this node. Log a test webhook payload to find the new refs."
      },
      "typeVersion": 1
    },
    {
      "id": "5e4aedfb-c1ef-406e-9452-8ae477e49a16",
      "name": "AI note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5184,
        3408
      ],
      "parameters": {
        "color": 6,
        "width": 370,
        "height": 388,
        "content": "**AI Lead Qualifier**\n\nGemini reads the lead and returns JSON:\n\u2022 `lead_score` \u2014 High / Medium / Low\n\u2022 `intent` \u2014 what they actually want\n\u2022 `timeline` \u2014 how urgent\n\u2022 `notes` \u2014 summary for sales\n\nEdit scoring rules in the prompt."
      },
      "typeVersion": 1
    },
    {
      "id": "602203da-a46e-49fd-817e-932827389390",
      "name": "Model note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5104,
        3856
      ],
      "parameters": {
        "color": 6,
        "width": 450,
        "height": 186,
        "content": "Connect your Gemini credential here.\nCan swap for GPT-4o or Claude "
      },
      "typeVersion": 1
    },
    {
      "id": "13568e8f-2eab-491f-8ecc-9d5bded2dac9",
      "name": "Parse note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5600,
        3408
      ],
      "parameters": {
        "color": 6,
        "width": 322,
        "height": 388,
        "content": "**Parse AI Output**\n\nGemini sometimes wraps JSON in backticks or adds extra text. This node tries 4 approaches to extract clean JSON \u2014 direct parse, strip fences, regex, field-by-field fallback.\n\nIf score is wrong, check the execution log here first."
      },
      "typeVersion": 1
    },
    {
      "id": "0185f9e7-eecc-448b-90ca-e03473cca03d",
      "name": "Airtable note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        5968,
        3376
      ],
      "parameters": {
        "color": 3,
        "width": 370,
        "height": 418,
        "content": "**Save to Airtable**\n\nCreates a new CRM record with all lead data + AI assessment.\n\nYour base needs these fields: Full Name, Email, Phone, Property Type, Purpose, Location, Budget, Requirements, Submit Date, Lead Score, Intent, Timeline, Notes.\n\n`typecast: true` handles field type mismatches."
      },
      "typeVersion": 1
    },
    {
      "id": "5e628d9e-6d5f-4728-992c-c8c45b4ab2ca",
      "name": "Route note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        6384,
        3376
      ],
      "parameters": {
        "color": 3,
        "width": 264,
        "height": 418,
        "content": "**Route by score**\n\nHigh \u2192 priority email\nAnything else \u2192 nurture email\n\nWant a third path for Low leads? Add another IF after this one."
      },
      "typeVersion": 1
    },
    {
      "id": "c1592048-2cb9-43d3-8c84-bfd95f96c384",
      "name": "High email note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        6720,
        3200
      ],
      "parameters": {
        "color": 7,
        "width": 348,
        "height": 374,
        "content": "**Priority email \u2014 High leads**\n\nGoes out immediately. Promises callback within 2 hours \u2014 make sure your team is ready when this fires.\n\nUpdate `fromEmail` before going live."
      },
      "typeVersion": 1
    },
    {
      "id": "5c324e57-fba4-47c5-9db3-8965d9a4acdc",
      "name": "Nurture email note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        6720,
        3664
      ],
      "parameters": {
        "color": 7,
        "width": 348,
        "height": 354,
        "content": "**Nurture email \u2014 Medium & Low**\n\nWarmer tone, no urgency. Promises 1\u20132 business days.\n\nSame SMTP credential as the priority email above."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Webhook1": {
      "main": [
        [
          {
            "node": "Extract Typeform Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "High Lead?2": {
      "main": [
        [
          {
            "node": "Priority Email \u2014 High Lead2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Nurture Email \u2014 Medium/Low Lead2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Output2": {
      "main": [
        [
          {
            "node": "Save to Airtable2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save to Airtable2": {
      "main": [
        [
          {
            "node": "High Lead?2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Lead Qualifier2": {
      "main": [
        [
          {
            "node": "Parse AI Output2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Typeform Fields1": {
      "main": [
        [
          {
            "node": "AI Lead Qualifier2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "AI Lead Qualifier2",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}