← All Cold Outreach Workflows
BillionVerifyClearbit

Auto-schedule demos for high-intent leads with Clearbit, Slack, and Calendly

Pull contacts, verify each address with BillionVerify, and continue to Clearbit β€” only deliverable addresses get through.

Why verify before the send

Sending to invalid, risky, catch-all, or disposable addresses spikes your bounce rate and erodes sender reputation. A verification gate before the Clearbit step removes that risk automatically β€” only deliverable addresses continue, the rest are flagged.

The workflow

BillionVerify β€” verification sits right before the send.

+18
n8n steps
+2
n8n steps

Node by node

  1. 1
    Lead Form WebhookSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  2. 2
    Normalize Lead DataSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  3. 3
    Enrich with ClearbitSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  4. 4
    Calculate Fit ScoreSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  5. 5
    High Intent Lead?LogicΒ· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  6. 6
    Create HubSpot ContactSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  7. 7
    Alert Sales (Standard)SourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  8. 8
    Create HubSpot DealSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  9. 9
    Get Calendly Event TypesSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  10. 10
    Prepare Availability ParamsSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  11. 11
    Get Available Demo SlotsSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  12. 12
    Format Demo SlotsSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  13. 13
    Alert Sales (High Intent)SourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  14. 14
    Wait 10 MinutesSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  15. 15
    Log to Google SheetsSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  16. 16
    Webhook ResponseSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  17. 17
    Check Slack RepliesSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  18. 18
    No Response?LogicΒ· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  19. 19
    Verify Email (BillionVerify)VerifyΒ· billionverify

    The BillionVerify node verifies the address β€” status (valid / invalid / risky / catch-all / role / disposable), is_deliverable, and a confidence score β€” before anything is sent.

  20. 20
    IF deliverableLogicΒ· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  21. 21
    Send Fallback EmailSendΒ· n8n

    Sends only to verified, deliverable addresses. Swap in your own provider node if you send elsewhere.

Workflow JSON

Copy or download this workflow, then import it in n8n (Workflows β†’ Import from File / Paste). Install the BillionVerify community node first, then add your API key credential.

verify-emails-in-clearbit.json
{
  "name": "Auto-schedule demos for high-intent leads with Clearbit, Slack, and Calendly + BillionVerify",
  "nodes": [
    {
      "id": "2c0c576e-c4b9-417b-810a-e39b92f24604",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2736,
        -192
      ],
      "parameters": {
        "width": 640,
        "height": 888,
        "content": "## Instant Demo Booker for High-Intent Leads\n\n### How it works  \n- **Lead Capture**: Collects form submissions via webhook (e.g., email, name, company).  \n- **Data Enrichment**: Uses Clearbit to enrich lead data (company size, revenue, industry, etc.).  \n- **Fit Scoring**: Calculates a fit score based on company size, revenue, and job title (0–100).  \n- **Lead Routing**: \n   - **High-Intent Leads (score β‰₯ 60)**: Routed to a fast track for immediate action.  \n   - **Standard Leads (score < 60)**: Routed for standard follow-up.  \n- **Demo Scheduling**: Fetches available demo slots from Calendly and sends them to sales team in Slack.  \n- **Sales Alerts**: Sends Slack notifications to sales with lead details and available demo slots.  \n- **Follow-Up**: If no response from sales within 10 minutes, an automatic email is sent to the lead.  \n- **Logging**: Logs all data to Google Sheets for analytics and tracking.\n\n\n### Setup Requirements  \n1. **Clearbit**: API key for lead enrichment.  \n2. **HubSpot**: App token for CRM integration (create/update contacts & deals).  \n3. **Calendly**: OAuth2 token & user URI for demo scheduling.  \n4. **Slack**: Bot token for channel notifications, configure channels for hot leads & standard leads.  \n5. **SendGrid**: API key for sending fallback emails.  \n6. **Google Sheets**: OAuth2 connection and sheet ID for lead & demo logs.\n\n\n### Customize\nβ€’ Fit score logic (Calculate Fit Score node)\nβ€’ Slack channel names\nβ€’ Email template\nβ€’ Calendar event name filter"
      },
      "typeVersion": 1
    },
    {
      "id": "20280207-e88f-4dca-8e45-70a2914912b2",
      "name": "High-Intent Flow",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        -192
      ],
      "parameters": {
        "color": 5,
        "width": 3212,
        "height": 536,
        "content": "## High-Intent Path (Score β‰₯60)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2b5e5e41-6449-4d32-a0c3-d5f12564f87f",
      "name": "Standard Flow",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        368
      ],
      "parameters": {
        "color": 6,
        "width": 392,
        "height": 324,
        "content": "## Standard Path (Score <60)\nPosts to #leads Slack channel\nNo automated follow-up\nStandard nurture workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "2ead105b-92f4-4f51-98be-f3ff5fe55324",
      "name": "Lead Form Webhook",
      "type": "n8n-nodes-base.webhook",
      "notes": "Receives lead submissions via POST request",
      "onError": "continueRegularOutput",
      "position": [
        -1984,
        144
      ],
      "webhookId": "demo-webhook-001",
      "parameters": {
        "path": "demo-request",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "notesInFlow": true,
      "typeVersion": 2.1
    },
    {
      "id": "f3b76dd2-b228-4200-bd11-e400cfb6b935",
      "name": "Normalize Lead Data",
      "type": "n8n-nodes-base.set",
      "notes": "Standardizes field names from different form providers",
      "position": [
        -1760,
        144
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "email",
              "name": "email",
              "type": "string",
              "value": "={{ $json.body.email || $json.body.contact_email }}"
            },
            {
              "id": "fullName",
              "name": "fullName",
              "type": "string",
              "value": "={{ $json.body.name || $json.body.full_name }}"
            },
            {
              "id": "company",
              "name": "company",
              "type": "string",
              "value": "={{ $json.body.company || $json.body.company_name || '' }}"
            },
            {
              "id": "phone",
              "name": "phone",
              "type": "string",
              "value": "={{ $json.body.phone || '' }}"
            },
            {
              "id": "utmSource",
              "name": "utmSource",
              "type": "string",
              "value": "={{ $json.body.utm_source || '' }}"
            },
            {
              "id": "utmCampaign",
              "name": "utmCampaign",
              "type": "string",
              "value": "={{ $json.body.utm_campaign || '' }}"
            },
            {
              "id": "pageUrl",
              "name": "pageUrl",
              "type": "string",
              "value": "={{ $json.body.page_url || $json.body.referrer || '' }}"
            },
            {
              "id": "message",
              "name": "message",
              "type": "string",
              "value": "={{ $json.body.message || $json.body.notes || '' }}"
            },
            {
              "id": "timestamp",
              "name": "submittedAt",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 3.4
    },
    {
      "id": "afed81f7-9ddf-4195-97e2-e3ea38021415",
      "name": "Enrich with Clearbit",
      "type": "n8n-nodes-base.clearbit",
      "notes": "Enriches contact with company data (size, revenue, industry, job title)",
      "onError": "continueRegularOutput",
      "position": [
        -1536,
        144
      ],
      "parameters": {
        "email": "={{ $json.email }}",
        "resource": "person",
        "additionalFields": {}
      },
      "credentials": {
        "clearbitApi": {
          "id": "credential-id",
          "name": "clearbitApi Credential"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "625bcc5e-5ae9-4b14-a77c-d8cbf7632bb6",
      "name": "Calculate Fit Score",
      "type": "n8n-nodes-base.set",
      "notes": "Scores 0-100 based on company size (40), seniority (30), revenue (30)",
      "position": [
        -1312,
        144
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "enrichedCompany",
              "name": "enrichedCompany",
              "type": "string",
              "value": "={{ $json.company && $json.company.name ? $json.company.name : $('Normalize Lead Data').item.json.company }}"
            },
            {
              "id": "companySize",
              "name": "companySize",
              "type": "number",
              "value": "={{ $json.company && $json.company.metrics && $json.company.metrics.employees ? $json.company.metrics.employees : 0 }}"
            },
            {
              "id": "industry",
              "name": "industry",
              "type": "string",
              "value": "={{ $json.company && $json.company.category && $json.company.category.industry ? $json.company.category.industry : 'Unknown' }}"
            },
            {
              "id": "annualRevenue",
              "name": "annualRevenue",
              "type": "number",
              "value": "={{ $json.company && $json.company.metrics && $json.company.metrics.annualRevenue ? $json.company.metrics.annualRevenue : 0 }}"
            },
            {
              "id": "jobTitle",
              "name": "jobTitle",
              "type": "string",
              "value": "={{ $json.person && $json.person.employment && $json.person.employment.title ? $json.person.employment.title : '' }}"
            },
            {
              "id": "seniority",
              "name": "seniority",
              "type": "string",
              "value": "={{ $json.person && $json.person.employment && $json.person.employment.seniority ? $json.person.employment.seniority : '' }}"
            },
            {
              "id": "fitScore",
              "name": "fitScore",
              "type": "number",
              "value": "={{ ($json.company && $json.company.metrics && $json.company.metrics.employees >= 50 && $json.company.metrics.employees <= 5000 ? 40 : 0) + ($json.person && $json.person.employment && ($json.person.employment.seniority === 'executive' || $json.person.employment.seniority === 'director') ? 30 : 0) + ($json.company && $json.company.metrics && $json.company.metrics.annualRevenue >= 1000000 ? 30 : 0) }}"
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 3.4
    },
    {
      "id": "03a8939e-1e58-4798-9273-e7848264b8d1",
      "name": "High Intent Lead?",
      "type": "n8n-nodes-base.if",
      "notes": "Routes leads with score β‰₯60 to fast track, others to standard",
      "position": [
        -1088,
        144
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "fit-check",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json.fitScore }}",
              "rightValue": 60
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.2
    },
    {
      "id": "bef98f70-efb1-4a15-b732-655f9c952b08",
      "name": "Create HubSpot Contact",
      "type": "n8n-nodes-base.hubspot",
      "notes": "Creates or updates contact in HubSpot CRM",
      "onError": "continueRegularOutput",
      "maxTries": 3,
      "position": [
        -736,
        32
      ],
      "parameters": {
        "email": "={{ $('Normalize Lead Data').item.json.email }}",
        "options": {},
        "authentication": "appToken",
        "additionalFields": {
          "jobTitle": "={{ $json.jobTitle }}",
          "lastName": "={{ $('Normalize Lead Data').item.json.fullName.split(' ').slice(1).join(' ') }}",
          "firstName": "={{ $('Normalize Lead Data').item.json.fullName.split(' ')[0] }}",
          "companyName": "={{ $json.enrichedCompany }}",
          "phoneNumber": "={{ $('Normalize Lead Data').item.json.phone }}"
        }
      },
      "credentials": {
        "hubspotAppToken": {
          "id": "credential-id",
          "name": "hubspotAppToken Credential"
        }
      },
      "retryOnFail": true,
      "typeVersion": 2.2,
      "waitBetweenTries": 2000
    },
    {
      "id": "be4256a3-6f78-45b2-a3f7-3ef8bec480a8",
      "name": "Create HubSpot Deal",
      "type": "n8n-nodes-base.hubspot",
      "notes": "Creates deal in 'Appointment Scheduled' stage",
      "onError": "continueRegularOutput",
      "maxTries": 3,
      "position": [
        -496,
        32
      ],
      "parameters": {
        "stage": "appointmentscheduled",
        "resource": "deal",
        "authentication": "appToken",
        "additionalFields": {
          "amount": "0",
          "dealName": "=Demo Request - {{ $json.enrichedCompany }}",
          "pipeline": "=default",
          "closeDate": "={{ $now.plus({ days: 30 }).toISO() }}"
        }
      },
      "credentials": {
        "hubspotAppToken": {
          "id": "credential-id",
          "name": "hubspotAppToken Credential"
        }
      },
      "retryOnFail": true,
      "typeVersion": 2.2,
      "waitBetweenTries": 2000
    },
    {
      "id": "0b4ee4ba-f453-4e9e-9030-712bf2e2dbaa",
      "name": "Get Calendly Event Types",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Fetches your Calendly event types to find Demo events",
      "onError": "continueRegularOutput",
      "position": [
        -272,
        32
      ],
      "parameters": {
        "url": "https://api.calendly.com/event_types",
        "options": {},
        "sendQuery": true,
        "authentication": "predefinedCredentialType",
        "queryParameters": {
          "parameters": [
            {
              "name": "user",
              "value": "Your user URI"
            }
          ]
        },
        "nodeCredentialType": "calendlyOAuth2Api"
      },
      "credentials": {
        "calendlyOAuth2Api": {
          "id": "credential-id",
          "name": "calendlyOAuth2Api Credential"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.3
    },
    {
      "id": "4e3a9a46-8170-4188-8286-5c6d005c2d2f",
      "name": "Prepare Availability Params",
      "type": "n8n-nodes-base.code",
      "notes": "Finds Demo event and prepares 7-day availability window",
      "onError": "continueRegularOutput",
      "position": [
        -48,
        32
      ],
      "parameters": {
        "jsCode": "const eventTypes = $input.first().json.collection || [];\nconst demoEventType = eventTypes.find(e => e.name.toLowerCase().includes('demo'));\n\nif (!demoEventType) {\n  return [{\n    json: {\n      error: 'No demo event type found',\n      fallbackUrl: 'https://calendly.com/your-team/demo'\n    }\n  }];\n}\n\nconst startTime = new Date();\nconst endTime = new Date();\nendTime.setDate(endTime.getDate() + 7);\n\nreturn [{\n  json: {\n    eventTypeUri: demoEventType.uri,\n    startTime: startTime.toISOString(),\n    endTime: endTime.toISOString(),\n    schedulingUrl: demoEventType.scheduling_url\n  }\n}];"
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "a9ccbc19-252e-4059-a305-b852bb67e2d3",
      "name": "Get Available Demo Slots",
      "type": "n8n-nodes-base.httpRequest",
      "notes": "Fetches real available time slots from Calendly API",
      "onError": "continueRegularOutput",
      "maxTries": 2,
      "position": [
        176,
        32
      ],
      "parameters": {
        "url": "https://api.calendly.com/event_type_available_times",
        "options": {},
        "sendQuery": true,
        "authentication": "predefinedCredentialType",
        "queryParameters": {
          "parameters": [
            {
              "name": "event_type",
              "value": "={{ $json.eventTypeUri }}"
            },
            {
              "name": "start_time",
              "value": "={{ $json.startTime }}"
            },
            {
              "name": "end_time",
              "value": "={{ $json.endTime }}"
            }
          ]
        },
        "nodeCredentialType": "calendlyOAuth2Api"
      },
      "credentials": {
        "calendlyOAuth2Api": {
          "id": "credential-id",
          "name": "calendlyOAuth2Api Credential"
        }
      },
      "notesInFlow": true,
      "retryOnFail": true,
      "typeVersion": 4.3,
      "waitBetweenTries": 1000
    },
    {
      "id": "110b29c4-7c1f-42e9-b6d4-6682e0417361",
      "name": "Format Demo Slots",
      "type": "n8n-nodes-base.code",
      "notes": "Formats next 2 available slots with booking URLs",
      "onError": "continueRegularOutput",
      "position": [
        400,
        32
      ],
      "parameters": {
        "jsCode": "const availableTimes = $input.first().json.collection || [];\nconst fallbackUrl = $('Prepare Availability Params').first().json.schedulingUrl || 'https://calendly.com/your-team/demo';\n\nif (availableTimes.length === 0) {\n  return [{\n    json: {\n      bookingUrl: fallbackUrl,\n      nextSlots: ['No slots in next 7 days', 'Check calendar'],\n      slotCount: 0\n    }\n  }];\n}\n\nconst formattedSlots = availableTimes.slice(0, 2).map(slot => {\n  const date = new Date(slot.start_time);\n  return date.toLocaleString('en-US', {\n    weekday: 'short',\n    month: 'short',\n    day: 'numeric',\n    hour: 'numeric',\n    minute: '2-digit',\n    timeZoneName: 'short'\n  });\n});\n\nconst firstSlotUrl = availableTimes[0].scheduling_url || fallbackUrl;\n\nreturn [{\n  json: {\n    bookingUrl: firstSlotUrl,\n    nextSlots: formattedSlots,\n    slotCount: availableTimes.length,\n    allSlots: availableTimes.slice(0, 5).map(s => ({\n      time: s.start_time,\n      url: s.scheduling_url\n    }))\n  }\n}];"
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "4e1451f4-6646-4c37-85bc-892cea0c15e3",
      "name": "Alert Sales (High Intent)",
      "type": "n8n-nodes-base.slack",
      "notes": "Posts to #hot-leads with full lead details and booking links",
      "onError": "continueRegularOutput",
      "position": [
        704,
        32
      ],
      "webhookId": "6b9e8ef0-29ce-4295-b754-3f77f5ae6795",
      "parameters": {
        "text": "=πŸ”₯ HIGH INTENT LEAD\n\nπŸ‘€ {{ $('Normalize Lead Data').item.json.fullName }}\nπŸ“§ {{ $('Normalize Lead Data').item.json.email }}\n🏒 {{ $('Calculate Fit Score').item.json.enrichedCompany }} ({{ $('Calculate Fit Score').item.json.companySize }} employees)\nπŸ’Ό {{ $('Calculate Fit Score').item.json.jobTitle }}\nπŸ“Š Fit Score: {{ $('Calculate Fit Score').item.json.fitScore }}/100\n\n🎯 Source: {{ $('Normalize Lead Data').item.json.utmSource || 'Direct' }}\n🌐 Page: {{ $('Normalize Lead Data').item.json.pageUrl }}\nπŸ’¬ Message: {{ $('Normalize Lead Data').item.json.message || 'None' }}\n\nπŸ“… Available Slots ({{ $('Format Demo Slots').item.json.slotCount }} total):\nβ€’ {{ $('Format Demo Slots').item.json.nextSlots[0] }}\nβ€’ {{ $('Format Demo Slots').item.json.nextSlots[1] }}\n\nπŸ”— Book: {{ $('Format Demo Slots').item.json.bookingUrl }}\n\n⚑ Respond in 10min or auto-email sends!",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "hot-leads"
        },
        "otherOptions": {
          "mrkdwn": true
        }
      },
      "credentials": {
        "slackApi": {
          "id": "credential-id",
          "name": "slackApi Credential"
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.3
    },
    {
      "id": "50c42a60-8b79-409f-9876-b97a2278a0d0",
      "name": "Alert Sales (Standard)",
      "type": "n8n-nodes-base.slack",
      "notes": "Posts to #leads channel for standard priority",
      "onError": "continueRegularOutput",
      "position": [
        -672,
        512
      ],
      "webhookId": "f7f985ab-c5d2-490a-a549-38ebd0eaaafc",
      "parameters": {
        "text": "=πŸ“‹ New Lead\n\nπŸ‘€ {{ $('Normalize Lead Data').item.json.fullName }}\nπŸ“§ {{ $('Normalize Lead Data').item.json.email }}\n🏒 {{ $('Calculate Fit Score').item.json.enrichedCompany }}\nπŸ“Š Fit: {{ $('Calculate Fit Score').item.json.fitScore }}/100\n\nπŸ”— Book: {{ $('Format Demo Slots').item.json.bookingUrl }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "leads"
        },
        "otherOptions": {
          "mrkdwn": true
        }
      },
      "credentials": {
        "slackApi": {
          "id": "credential-id",
          "name": "slackApi Credential"
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.3
    },
    {
      "id": "66a0f0e0-afc8-4c1f-a02a-65ae586a2f82",
      "name": "Wait 10 Minutes",
      "type": "n8n-nodes-base.wait",
      "notes": "Waits for sales rep to respond in Slack thread",
      "position": [
        1504,
        32
      ],
      "webhookId": "wait-001",
      "parameters": {
        "unit": "minutes",
        "amount": 10
      },
      "notesInFlow": true,
      "typeVersion": 1.1
    },
    {
      "id": "91a5228c-5072-4159-913f-b549c6ed4936",
      "name": "Check Slack Replies",
      "type": "n8n-nodes-base.slack",
      "notes": "Checks if sales team replied in thread",
      "onError": "continueRegularOutput",
      "position": [
        1696,
        32
      ],
      "webhookId": "f1916193-ab83-4196-8039-cef48a44c1a1",
      "parameters": {
        "ts": "={{ $('Alert Sales (High Intent)').first().json.ts }}",
        "filters": {},
        "resource": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Alert Sales (High Intent)').first().json.channel }}"
        },
        "operation": "replies"
      },
      "credentials": {
        "slackApi": {
          "id": "credential-id",
          "name": "slackApi Credential"
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.3
    },
    {
      "id": "efef0ae7-7c05-4e42-9e57-c56229bc08ab",
      "name": "No Response?",
      "type": "n8n-nodes-base.if",
      "notes": "Sends email if no Slack reply (message count = 1)",
      "position": [
        1904,
        32
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "reply-check",
              "operator": {
                "type": "number",
                "operation": "equals"
              },
              "leftValue": "={{ $json.messages && $json.messages.length ? $json.messages.length : 1 }}",
              "rightValue": 1
            }
          ]
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.2
    },
    {
      "id": "423bf560-215a-4f67-8b37-1d63014ae027",
      "name": "Send Fallback Email",
      "type": "n8n-nodes-base.sendGrid",
      "notes": "Auto-sends booking email if sales doesn't respond",
      "maxTries": 2,
      "position": [
        2144,
        32
      ],
      "parameters": {
        "subject": "=Book Your Demo - {{ $('Calculate Fit Score').first().json.enrichedCompany }}",
        "toEmail": "={{ $('Normalize Lead Data').first().json.email }}",
        "fromName": "Demo Team",
        "resource": "mail",
        "fromEmail": "user@example.com",
        "contentType": "text/html",
        "contentValue": "=<h2>Thanks for your interest!</h2><p>Hi {{ $('Normalize Lead Data').first().json.fullName }},</p><p>We received your demo request for {{ $('Calculate Fit Score').first().json.enrichedCompany }}.</p><p><strong>Next available:</strong></p><ul><li>{{ $('Format Demo Slots').first().json.nextSlots[0] }}</li><li>{{ $('Format Demo Slots').first().json.nextSlots[1] }}</li></ul><p><a href='{{ $('Format Demo Slots').first().json.bookingUrl }}' style='background:#0066cc;color:white;padding:12px 24px;text-decoration:none;border-radius:4px;display:inline-block;'>Book Demo Now</a></p><p>Looking forward to connecting!</p>",
        "additionalFields": {}
      },
      "credentials": {
        "sendGridApi": {
          "id": "credential-id",
          "name": "sendGridApi Credential"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1
    },
    {
      "id": "4fc94d27-1dff-4828-9bd6-6f8544c2d59c",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Logs all lead data for analytics and reporting",
      "onError": "continueRegularOutput",
      "position": [
        1136,
        -64
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "={{ $('Normalize Lead Data').item.json.fullName }}",
            "Email": "={{ $('Normalize Lead Data').item.json.email }}",
            "Company": "={{ $('Calculate Fit Score').item.json.enrichedCompany }}",
            "Page URL": "={{ $('Normalize Lead Data').item.json.pageUrl }}",
            "Priority": "={{ $('Calculate Fit Score').item.json.fitScore >= 60 ? 'High' : 'Standard' }}",
            "Fit Score": "={{ $('Calculate Fit Score').item.json.fitScore }}",
            "Timestamp": "={{ $('Normalize Lead Data').item.json.submittedAt }}",
            "UTM Source": "={{ $('Normalize Lead Data').item.json.utmSource }}",
            "Booking URL": "={{ $('Format Demo Slots').item.json.bookingUrl }}",
            "HubSpot Deal": "={{ $('Create HubSpot Deal').item.json.id || 'Failed' }}",
            "Fallback Email": "={{ $('Check Slack Replies').item.json.messages && $('Check Slack Replies').item.json.messages.length === 1 ? 'Sent' : 'Not Needed' }}",
            "Sales Response": "={{ $('Check Slack Replies').item.json.messages && $('Check Slack Replies').item.json.messages.length > 1 ? 'Yes' : 'No' }}",
            "HubSpot Contact": "={{ $('Create HubSpot Contact').item.json.id || 'Failed' }}",
            "Slots Available": "={{ $('Format Demo Slots').item.json.slotCount }}"
          },
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Lead Log"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_GOOGLE_SHEET_ID"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "credential-id",
          "name": "googleSheetsOAuth2Api Credential"
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.7
    },
    {
      "id": "b2d9ad7d-6a02-4d5a-9088-33a9b9453aeb",
      "name": "Webhook Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "notes": "Returns success message to form with booking details",
      "position": [
        1136,
        128
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={\"success\":true,\"message\":\"Demo request received!\",\"fitScore\":{{$('Calculate Fit Score').item.json.fitScore}},\"priority\":\"{{$('Calculate Fit Score').item.json.fitScore>=60?'high':'standard'}}\",\"availableSlots\":{{$('Format Demo Slots').item.json.slotCount}},\"bookingUrl\":\"{{$('Format Demo Slots').item.json.bookingUrl}}\"}"
      },
      "notesInFlow": true,
      "typeVersion": 1.4
    },
    {
      "id": "e94eb671-7d06-48f2-a282-71a0e200ce05",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 432,
        "content": "## Create HubSpot contact + deal\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8c3fc727-c681-4051-826e-fd71fa75c810",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -336,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 880,
        "height": 432,
        "content": "## Get real Calendly slots\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8f9aa05d-df2e-4800-8dcc-0459d82024c0",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 400,
        "height": 432,
        "content": "## Post to #hot-leads Slack\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "692eceab-17c8-48f2-bea6-0a7446bd1fb4",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        976,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 432,
        "content": "## Log to Google Sheet and Send Response\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a13d737c-0348-40d3-9a80-12f749e7fa00",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 960,
        "height": 432,
        "content": "## Wait 10 minutes, Check for response. Send email if no reply"
      },
      "typeVersion": 1
    },
    {
      "id": "8bac8fd3-abd1-42c5-bd55-191085c497f5",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1824,
        -16
      ],
      "parameters": {
        "color": 7,
        "width": 944,
        "height": 432,
        "content": "## Enrich the Lead data and calculate the Fit Score"
      },
      "typeVersion": 1
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $('Normalize Lead Data').first().json.email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        1784,
        32
      ],
      "name": "Verify Email (BillionVerify)",
      "credentials": {
        "billionVerifyApi": {
          "id": "",
          "name": "BillionVerify account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "is-deliverable",
              "leftValue": "={{ $json.is_deliverable }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ]
        }
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1964,
        32
      ],
      "name": "IF deliverable"
    }
  ],
  "connections": {
    "No Response?": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 10 Minutes": {
      "main": [
        [
          {
            "node": "Check Slack Replies",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Demo Slots": {
      "main": [
        [
          {
            "node": "Alert Sales (High Intent)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "High Intent Lead?": {
      "main": [
        [
          {
            "node": "Create HubSpot Contact",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Alert Sales (Standard)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lead Form Webhook": {
      "main": [
        [
          {
            "node": "Normalize Lead Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Fit Score": {
      "main": [
        [
          {
            "node": "High Intent Lead?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Slack Replies": {
      "main": [
        [
          {
            "node": "No Response?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create HubSpot Deal": {
      "main": [
        [
          {
            "node": "Get Calendly Event Types",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Lead Data": {
      "main": [
        [
          {
            "node": "Enrich with Clearbit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enrich with Clearbit": {
      "main": [
        [
          {
            "node": "Calculate Fit Score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create HubSpot Contact": {
      "main": [
        [
          {
            "node": "Create HubSpot Deal",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Available Demo Slots": {
      "main": [
        [
          {
            "node": "Format Demo Slots",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Calendly Event Types": {
      "main": [
        [
          {
            "node": "Prepare Availability Params",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Alert Sales (High Intent)": {
      "main": [
        [
          {
            "node": "Wait 10 Minutes",
            "type": "main",
            "index": 0
          },
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          },
          {
            "node": "Webhook Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Availability Params": {
      "main": [
        [
          {
            "node": "Get Available Demo Slots",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Email (BillionVerify)": {
      "main": [
        [
          {
            "node": "IF deliverable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable": {
      "main": [
        [
          {
            "node": "Send Fallback Email",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}

When to use this

  • Cleaning a list before a Clearbit send or sync.
  • Protecting Clearbit deliverability and sender reputation.
  • Keeping bounce rates low so your sending is never throttled.

FAQ

Why verify before sending in Clearbit?

Verifying first keeps your bounce rate low, which protects your sender reputation and your results.

How do I import this workflow?

Download the JSON, then in n8n go to Workflows β†’ Import from File (or paste it). Install the BillionVerify community node and add your API key credential.

What happens to risky or catch-all addresses?

They are routed to the false branch and excluded from the send. You decide whether to retry, review, or drop them.

Add verification to your workflow

Create a free account, grab your API key, and stop bounces before they happen.

Get started free