{
  "name": "Chat & Demo Request Enrichment with Lusha",
  "nodes": [
    {
      "id": "508ce848-f505-4914-8631-51d0214ee142",
      "name": "\ud83d\udccb Chatbot & Demo Request Enrichment",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -100,
        -580
      ],
      "parameters": {
        "width": 900,
        "height": 560,
        "content": "## Enrich Chatbot and Demo Request Leads with Lusha\n\n**Who it's for:** SDRs handling inbound chatbot & demo request leads\n\n**What it does:** Enriches leads from chatbots or demo request flows with Lusha, scores them by ICP fit, creates/updates the HubSpot contact, and sends priority-based Slack alerts. High-priority demo requests get an urgent SDR alert.\n\n### How it works\n1. Webhook receives a chatbot message or demo request with an email\n2. Email is validated and the contact is enriched with Lusha\n3. A lead priority score is calculated based on seniority and company size\n4. HubSpot contact is created/updated with enriched data\n5. High-priority leads get an urgent Slack alert; others get a standard notification\n\n### Setup\n1. Install the [Lusha community node](https://www.npmjs.com/package/@lusha-org/n8n-nodes-lusha)\n2. Add your Lusha API, HubSpot OAuth2, and Slack credentials\n3. Point your chatbot or demo form webhook to the n8n endpoint\n4. Customize the priority scoring logic and Slack channels"
      },
      "typeVersion": 1
    },
    {
      "id": "fbeac099-47da-4fae-bbec-382c9cc74544",
      "name": "\u26a1 1. Receive & Validate",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -30,
        50
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 270,
        "content": "Webhook receives the chatbot/demo form POST. A code node validates the email and extracts form fields.\n\n**Nodes:** Webhook \u2192 Validate & Clean Input\n\n\ud83d\udca1 Customize the expected payload fields to match your chatbot."
      },
      "typeVersion": 1
    },
    {
      "id": "0d80e304-4b5e-4c8d-982c-de6246bf0a71",
      "name": "\ud83d\udd0d 2. Enrich & Score",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        450,
        50
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 270,
        "content": "Lusha enriches the contact by email. A code node builds a lead summary and calculates a priority score based on seniority, company size, and request type.\n\n**Nodes:** Lusha Enrich \u2192 Build Summary & Score \u2192 Is High Priority? (IF)\n\n\ud83d\udcd6 [Lusha API docs](https://www.lusha.com/docs/)"
      },
      "typeVersion": 1
    },
    {
      "id": "9ab621a9-79c7-49fb-b48c-e0475a2b0ca5",
      "name": "\ud83d\udcbe 3. CRM + Priority Routing",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1060,
        50
      ],
      "parameters": {
        "color": 7,
        "width": 700,
        "height": 270,
        "content": "HubSpot contact is created/updated with all enriched fields. High-priority leads trigger an urgent Slack alert; standard leads get a normal notification.\n\n**Nodes:** Upsert HubSpot \u2192 Priority Routing \u2192 Urgent Alert / Standard Alert\n\n\ud83d\udca1 Customize the Slack channels and priority thresholds."
      },
      "typeVersion": 1
    },
    {
      "id": "06e7ba98-ae4a-4cf4-a268-1bc025e7971b",
      "name": "Chatbot/Demo Request Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        0,
        400
      ],
      "parameters": {
        "path": "chat-demo-enrichment",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "b13a5021-f4b0-445a-8466-07cc36c33152",
      "name": "Validate & Clean Input",
      "type": "n8n-nodes-base.code",
      "position": [
        280,
        400
      ],
      "parameters": {
        "jsCode": "// Validate and clean chatbot/demo request input\nconst body = $json.body || $json;\nconst email = (body.email || '').trim().toLowerCase();\nif (!email || !email.includes('@')) {\n  throw new Error('Invalid or missing email in demo request');\n}\nreturn { json: {\n  email,\n  firstName: (body.firstName || '').trim(),\n  lastName: (body.lastName || '').trim(),\n  company: (body.company || '').trim(),\n  requestType: body.requestType || 'demo',\n  message: body.message || '',\n  source: body.source || 'chatbot',\n  receivedAt: new Date().toISOString()\n} };"
      },
      "typeVersion": 2
    },
    {
      "id": "add17b65-e184-47d9-9945-022ea08dfb49",
      "name": "Enrich with Lusha",
      "type": "@lusha-org/n8n-nodes-lusha.lusha",
      "position": [
        560,
        400
      ],
      "parameters": {
        "email": "={{ $json.email }}",
        "searchBy": "email",
        "operation": "enrichSingle",
        "contactEnrichAdditionalOptions": {}
      },
      "credentials": {
        "lushaApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5a0d1abf-52f1-405e-98ad-d1163aea53b2",
      "name": "Build Summary & Score",
      "type": "n8n-nodes-base.code",
      "position": [
        840,
        400
      ],
      "parameters": {
        "jsCode": "// Build enriched lead summary with priority score\nconst form = $('Validate & Clean Input').first().json;\nconst lusha = $json;\n\n// Priority scoring\nlet priority = 0;\nconst seniority = (lusha.seniority || '').toLowerCase();\nif (['c-suite', 'founder', 'owner', 'cxo'].some(s => seniority.includes(s))) priority += 40;\nelse if (['vp', 'vice president', 'director'].some(s => seniority.includes(s))) priority += 30;\nelse if (seniority.includes('manager')) priority += 15;\n\nconst empMax = Array.isArray(lusha.companySize) ? lusha.companySize[1] : 0;\nif (empMax >= 500) priority += 25;\nelse if (empMax >= 100) priority += 15;\nelse if (empMax >= 20) priority += 5;\n\nif (form.requestType === 'demo') priority += 15;\nif (lusha.primaryPhone) priority += 10;\n\nconst isHighPriority = priority >= 50;\n\nreturn { json: {\n  email: form.email,\n  firstName: form.firstName || lusha.firstName || '',\n  lastName: form.lastName || lusha.lastName || '',\n  phone: lusha.primaryPhone || '',\n  verifiedEmail: lusha.primaryEmail || '',\n  jobTitle: lusha.jobTitle || '',\n  seniority: lusha.seniority || '',\n  linkedinUrl: lusha.linkedinProfile || '',\n  company: form.company || lusha.companyName || '',\n  companyDomain: lusha.companyDomain || '',\n  industry: lusha.companyMainIndustry || '',\n  companySize: empMax,\n  revenueRange: lusha.revenueRange || '',\n  requestType: form.requestType,\n  message: form.message,\n  source: form.source,\n  priorityScore: priority,\n  isHighPriority,\n  enrichedAt: new Date().toISOString()\n} };"
      },
      "typeVersion": 2
    },
    {
      "id": "7168c764-0918-409c-8b7e-ebbad3f41da4",
      "name": "Create/Update HubSpot Contact",
      "type": "n8n-nodes-base.hubspot",
      "position": [
        1120,
        400
      ],
      "parameters": {
        "email": "={{ $json.email }}",
        "resource": "contact",
        "operation": "upsert",
        "additionalFields": {
          "phone": "={{ $json.phone }}",
          "company": "={{ $json.company }}",
          "website": "={{ $json.companyDomain }}",
          "industry": "={{ $json.industry }}",
          "jobtitle": "={{ $json.jobTitle }}",
          "lastName": "={{ $json.lastName }}",
          "firstName": "={{ $json.firstName }}"
        }
      },
      "credentials": {
        "hubspotOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "74c57ddb-e9e4-4af5-8324-58784383251d",
      "name": "Is High Priority?",
      "type": "n8n-nodes-base.if",
      "position": [
        1400,
        400
      ],
      "parameters": {
        "conditions": {
          "combinator": "and",
          "conditions": [
            {
              "id": "9770171f-1afb-4e14-a007-b7e11694baa9",
              "operator": {
                "type": "boolean",
                "operation": "true"
              },
              "leftValue": "={{ $('Build Summary & Score').item.json.isHighPriority }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "4240b5cc-afae-4160-bcb5-eb8ac316eb39",
      "name": "Urgent SDR Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        1700,
        280
      ],
      "parameters": {
        "text": "=\ud83d\udd25 *URGENT Demo Request (Score: {{ $('Build Summary & Score').item.json.priorityScore }})*\n\n*{{ $('Build Summary & Score').item.json.firstName }} {{ $('Build Summary & Score').item.json.lastName }}*\n{{ $('Build Summary & Score').item.json.jobTitle }} ({{ $('Build Summary & Score').item.json.seniority }})\n\ud83c\udfe2 {{ $('Build Summary & Score').item.json.company }} ({{ $('Build Summary & Score').item.json.companySize }} employees)\n\ud83d\udce7 {{ $('Build Summary & Score').item.json.verifiedEmail || $('Build Summary & Score').item.json.email }}\n\ud83d\udcf1 {{ $('Build Summary & Score').item.json.phone || 'N/A' }}\n\n\ud83d\udcac {{ $('Build Summary & Score').item.json.message || 'No message' }}\n_Source: {{ $('Build Summary & Score').item.json.source }}_",
        "channel": "#urgent-leads",
        "otherOptions": {}
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "ab309a15-5f4d-40b1-b9eb-7bdc2e1222b0",
      "name": "Standard SDR Notification",
      "type": "n8n-nodes-base.slack",
      "position": [
        1700,
        520
      ],
      "parameters": {
        "text": "=\ud83d\udce5 *New {{ $('Build Summary & Score').item.json.requestType }} Request*\n\n*{{ $('Build Summary & Score').item.json.firstName }} {{ $('Build Summary & Score').item.json.lastName }}*\n{{ $('Build Summary & Score').item.json.jobTitle }} at {{ $('Build Summary & Score').item.json.company }}\n\ud83d\udce7 {{ $('Build Summary & Score').item.json.verifiedEmail || $('Build Summary & Score').item.json.email }}\n\ud83d\udcf1 {{ $('Build Summary & Score').item.json.phone || 'N/A' }}\nScore: {{ $('Build Summary & Score').item.json.priorityScore }}",
        "channel": "#inbound-leads",
        "otherOptions": {}
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    }
  ],
  "connections": {
    "Enrich with Lusha": {
      "main": [
        [
          {
            "node": "Build Summary & Score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is High Priority?": {
      "main": [
        [
          {
            "node": "Urgent SDR Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Standard SDR Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Summary & Score": {
      "main": [
        [
          {
            "node": "Create/Update HubSpot Contact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate & Clean Input": {
      "main": [
        [
          {
            "node": "Enrich with Lusha",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Chatbot/Demo Request Webhook": {
      "main": [
        [
          {
            "node": "Validate & Clean Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create/Update HubSpot Contact": {
      "main": [
        [
          {
            "node": "Is High Priority?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}