Dropcontact email verification with BillionVerify
Dropcontact is a B2B data enrichment tool that finds, verifies, and deduplicates professional contact information directly inside CRMs like HubSpot and Salesforce. Pairing it with BillionVerify adds a deep SMTP-level check on enriched email addresses, giving sales teams an extra layer of confidence before launching outreach campaigns.
Why verify before the send
Dropcontact derives email addresses algorithmically from professional data, but not every generated address maps to an active inbox. BillionVerify performs live deliverability checks on enriched contacts, catching addresses that pass format validation but still bounce β so your outreach sequences start with emails that are confirmed deliverable, not just correctly formatted.
Ready-to-use n8n workflow
Import this workflow into n8n β it verifies every address with BillionVerify before Dropcontact sends, so only deliverable contacts are emailed. Install the BillionVerify community node first, then add your API key. Adapted from this n8n template
{
"name": "Email Verification and Enrichment from Google Sheets with Hunter and Dropcontact + BillionVerify",
"nodes": [
{
"id": "18f93941-0514-4410-a269-ebd7213d6a75",
"name": "Workflow Configuration",
"type": "n8n-nodes-base.set",
"position": [
-1072,
1600
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "slackChannel",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Slack channel ID for sales team__>"
},
{
"id": "id-2",
"name": "airtableBaseId",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Airtable base ID__>"
},
{
"id": "id-3",
"name": "airtableTableId",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Airtable table ID__>"
},
{
"id": "id-4",
"name": "companyName",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Your Company Name__>"
},
{
"id": "id-5",
"name": "senderName",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Your Name__>"
},
{
"id": "id-6",
"name": "senderTitle",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Your Title__>"
},
{
"id": "id-7",
"name": "companyEmail",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Company Email__>"
},
{
"id": "id-8",
"name": "companyPhone",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Company Phone__>"
},
{
"id": "id-9",
"name": "companyAddress",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Company Address__>"
},
{
"id": "id-10",
"name": "linkedinUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__LinkedIn URL__>"
},
{
"id": "id-11",
"name": "twitterUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Twitter URL__>"
},
{
"id": "id-12",
"name": "facebookUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Facebook URL__>"
},
{
"id": "id-13",
"name": "websiteUrl",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Website URL__>"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "faafb419-ad4f-4643-9b56-24b30f855cfe",
"name": "Extract Lead Data",
"type": "n8n-nodes-base.set",
"position": [
-848,
1600
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "leadName",
"type": "string",
"value": "={{ $json.body.name || 'Unknown' }}"
},
{
"id": "id-2",
"name": "leadEmail",
"type": "string",
"value": "={{ $json.body.email || '' }}"
},
{
"id": "id-3",
"name": "leadCompany",
"type": "string",
"value": "={{ $json.body.company || '' }}"
},
{
"id": "id-4",
"name": "leadPhone",
"type": "string",
"value": "={{ $json.body.phone || '' }}"
},
{
"id": "id-5",
"name": "leadMessage",
"type": "string",
"value": "={{ $json.body.message || '' }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "da6733ad-bef2-41f9-b33a-180158fb93f1",
"name": "Generate Email Draft",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-624,
1600
],
"parameters": {
"text": "=You are a professional sales assistant. Based on the lead information provided, write a personalized and engaging follow-up email. \n\nAlways Use the Lead details to personalize the email:\n- Name: {{ $json.Name }}\n- Email: {{ $json.Email }}\n- Company: {{ $json.Company }}\n- Phone: {{ $json.Phone }}\n- Message: {{ $json.Message }}\n\nWrite a warm, professional email that:\n1. Thanks them for their interest\n2. Addresses their specific inquiry or message\n3. Highlights how we can help\n4. Includes a clear call-to-action\n5. Maintains a friendly but professional tone\n\nReturn ONLY the email body text, no subject line.",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "efe047b8-1294-4358-a52a-fc4749e29ce6",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-560,
1824
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "credential-id",
"name": "openAiApi Credential"
}
},
"typeVersion": 1.2
},
{
"id": "aa0b05bd-3c27-479d-adca-d0d279ec7772",
"name": "Wait for Approval",
"type": "n8n-nodes-base.wait",
"position": [
-48,
1600
],
"webhookId": "5ff74c3e-6848-4ee1-87fc-65a4933456f5",
"parameters": {
"resume": "webhook",
"options": {},
"resumeAmount": 24,
"limitWaitTime": true
},
"typeVersion": 1.1
},
{
"id": "fe447420-96da-484b-965a-8c6091db3bcd",
"name": "Check Approval Status",
"type": "n8n-nodes-base.if",
"position": [
176,
1600
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "id-1",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Wait for Approval').item.json.query.action }}",
"rightValue": "approve"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "5727706c-2cf3-4f3c-a659-ef2791302905",
"name": "Send Email to Lead",
"type": "n8n-nodes-base.gmail",
"position": [
400,
1504
],
"webhookId": "b52725e9-16fb-416e-8b88-e41b6ffebf69",
"parameters": {
"sendTo": "={{ $('On form submission').item.json.Email }}",
"message": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Thank You for Your Interest</title>\n</head>\n<body style=\"margin: 0; padding: 0; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f4f4f4;\">\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"background-color: #f4f4f4; padding: 20px 0;\">\n <tr>\n <td align=\"center\">\n <table width=\"600\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" style=\"max-width: 600px; background-color: #ffffff; border-radius: 8px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\">\n \n <!-- Main Content -->\n <tr>\n <td style=\"padding: 40px 30px; background-color: #ffffff;\">\n <div style=\"color: #333333; font-size: 16px; line-height: 1.8;\">\n {{ $('Generate Email Draft').item.json.output }}\n </div>\n </td>\n </tr>\n \n <!-- Signature Section -->\n <tr>\n <td style=\"padding: 30px; background-color: #f9f9f9; border-top: 1px solid #e0e0e0;\">\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr>\n <td>\n <p style=\"margin: 0 0 10px 0; color: #333333; font-size: 16px; font-weight: bold;\">Best regards,</p>\n <p style=\"margin: 0 0 5px 0; color: #667eea; font-size: 18px; font-weight: bold;\">{{ $('Workflow Configuration').item.json.senderName }}</p>\n <p style=\"margin: 0 0 5px 0; color: #666666; font-size: 14px;\">{{ $('Workflow Configuration').item.json.companyName }}</p>\n <p style=\"margin: 0; color: #666666; font-size: 14px;\">Email: {{ $('Workflow Configuration').item.json.companyEmail }} | Phone: {{ $('Workflow Configuration').item.json.companyPhone }}</p>\n </td>\n </tr>\n </table>\n </td>\n </tr>\n \n <!-- Footer -->\n <tr>\n <td style=\"padding: 30px; background-color: #2c3e50; text-align: center;\">\n <p style=\"margin: 0 0 15px 0; color: #ffffff; font-size: 14px;\">Connect with us:</p>\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr>\n <td align=\"center\">\n <a href=\"{{ $('Workflow Configuration').item.json.linkedinUrl }}\" style=\"display: inline-block; margin: 0 10px; color: #ffffff; text-decoration: none; font-size: 14px;\">LinkedIn</a>\n <span style=\"color: #7f8c8d;\">|</span>\n <a href=\"{{ $('Workflow Configuration').item.json.twitterUrl }}\" style=\"display: inline-block; margin: 0 10px; color: #ffffff; text-decoration: none; font-size: 14px;\">Twitter</a>\n <span style=\"color: #7f8c8d;\">|</span>\n <a href=\"{{ $('Workflow Configuration').item.json.facebookUrl }}\" style=\"display: inline-block; margin: 0 10px; color: #ffffff; text-decoration: none; font-size: 14px;\">Facebook</a>\n <span style=\"color: #7f8c8d;\">|</span>\n <a href=\"{{ $('Workflow Configuration').item.json.websiteUrl }}\" style=\"display: inline-block; margin: 0 10px; color: #ffffff; text-decoration: none; font-size: 14px;\">Website</a>\n </td>\n </tr>\n </table>\n <p style=\"margin: 20px 0 0 0; color: #95a5a6; font-size: 12px;\">Β© 2024 {{ $('Workflow Configuration').item.json.companyName }}. All rights reserved.</p>\n <p style=\"margin: 10px 0 0 0; color: #95a5a6; font-size: 12px;\">{{ $('Workflow Configuration').item.json.companyAddress }}</p>\n </td>\n </tr>\n \n </table>\n </td>\n </tr>\n </table>\n</body>\n</html>",
"options": {
"appendAttribution": false
},
"subject": "Thank you for your interest!"
},
"credentials": {
"gmailOAuth2": {
"id": "credential-id",
"name": "gmailOAuth2 Credential"
}
},
"typeVersion": 2.1
},
{
"id": "fbb53e8f-6523-424d-8743-785c1c8a0dd9",
"name": "Create Lead in Airtable",
"type": "n8n-nodes-base.airtable",
"position": [
624,
1504
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appLEpUNTNRmFiyLf",
"cachedResultUrl": "https://airtable.com/appLEpUNTNRmFiyLf",
"cachedResultName": "Lead Base"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblS2zfi7bQRZgE3u",
"cachedResultUrl": "https://airtable.com/appLEpUNTNRmFiyLf/tblS2zfi7bQRZgE3u",
"cachedResultName": "Lead Contacts"
},
"columns": {
"value": {
"Email": "={{ $('On form submission').item.json.Email }}",
"Notes": "={{ $('On form submission').item.json.Message }}",
"Phone": "={{ $('On form submission').item.json.Phone }}",
"Status": "Email Sent - Approved",
"First Name": "={{ $('On form submission').item.json.Name }}",
"Email Draft": "={{ $('Generate Email Draft').item.json.output }}",
"Company Name": "={{ $('On form submission').item.json.Company }}"
},
"schema": [
{
"id": "First Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "First Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Name",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Last Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Company Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Budget",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Budget",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created On",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Created On",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Qualification",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Qualification",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Message",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Message",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Contacted On",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Contacted On",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Call Summary",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Call Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Interested",
"type": "boolean",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Interested",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Proposal Sent on",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Proposal Sent on",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Modified",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Last Modified",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "AI Summary",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "AI Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create",
"authentication": "airtableOAuth2Api"
},
"credentials": {
"airtableOAuth2Api": {
"id": "credential-id",
"name": "airtableOAuth2Api Credential"
}
},
"typeVersion": 2.1
},
{
"id": "c78f331f-1b86-486a-8c16-98883c1dea6d",
"name": "Update Lead Status (Rejected)",
"type": "n8n-nodes-base.airtable",
"position": [
400,
1696
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appLEpUNTNRmFiyLf",
"cachedResultUrl": "https://airtable.com/appLEpUNTNRmFiyLf",
"cachedResultName": "Lead Base"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblS2zfi7bQRZgE3u",
"cachedResultUrl": "https://airtable.com/appLEpUNTNRmFiyLf/tblS2zfi7bQRZgE3u",
"cachedResultName": "Lead Contacts"
},
"columns": {
"value": {
"Email": "={{ $('On form submission').item.json.Email }}",
"Notes": "={{ $('On form submission').item.json.Message }}",
"Phone": "={{ $('On form submission').item.json.Phone }}",
"Status": "Email Rejected - Needs Review",
"First Name": "={{ $('On form submission').item.json.Name }}",
"Email Draft": "={{ $('Generate Email Draft').item.json.output }}",
"Company Name": "={{ $('On form submission').item.json.Company }}"
},
"schema": [
{
"id": "First Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "First Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Name",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Last Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Phone",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Company Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Budget",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Budget",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created On",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Created On",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Qualification",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Qualification",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Message",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Message",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Contacted On",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Contacted On",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Call Summary",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Call Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Interested",
"type": "boolean",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Interested",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Proposal Sent on",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Proposal Sent on",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Modified",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Last Modified",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "AI Summary",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "AI Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Draft",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email Draft",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create",
"authentication": "airtableOAuth2Api"
},
"credentials": {
"airtableOAuth2Api": {
"id": "credential-id",
"name": "airtableOAuth2Api Credential"
}
},
"typeVersion": 2.1
},
{
"id": "f681f075-4ce2-426a-8dc7-32e875efbb1b",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-1296,
1600
],
"webhookId": "bf8c24b5-5f8a-40b9-8658-9d51eb214804",
"parameters": {
"options": {},
"formTitle": "Leads",
"formFields": {
"values": [
{
"fieldLabel": "Name",
"requiredField": true
},
{
"fieldType": "email",
"fieldLabel": "Email",
"requiredField": true
},
{
"fieldLabel": "Company",
"requiredField": true
},
{
"fieldLabel": "Phone",
"placeholder": "(222)222-2222",
"requiredField": true
},
{
"fieldLabel": "Message",
"requiredField": true
}
]
},
"formDescription": "We'll reach out to you soon!"
},
"typeVersion": 2.3
},
{
"id": "9fe8ee6f-eed6-42c9-a0d6-f4abf82fcf40",
"name": "Send Approval Request Email",
"type": "n8n-nodes-base.gmail",
"position": [
-272,
1600
],
"webhookId": "b90f429f-d6d8-4869-8d66-d4d67975b554",
"parameters": {
"sendTo": "user@example.com",
"message": "=<div style=\"font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f5f5f5;\">\n <div style=\"background-color: white; padding: 30px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);\">\n <h2 style=\"color: #333; margin-top: 0;\">New Lead Email Draft - Approval Required</h2>\n \n <div style=\"background-color: #f9f9f9; padding: 20px; border-radius: 5px; margin: 20px 0;\">\n <h3 style=\"color: #555; margin-top: 0;\">Lead Information</h3>\n <p><strong>Name:</strong> {{ $('On form submission').item.json.Name }}</p>\n <p><strong>Email:</strong> {{ $('On form submission').item.json.Email }}</p>\n <p><strong>Company:</strong> {{ $('On form submission').item.json.Company }}</p>\n <p><strong>Phone:</strong> {{ $('On form submission').item.json.Phone }}</p>\n <p><strong>Message:</strong> {{ $('On form submission').item.json.Message }}</p>\n </div>\n \n <div style=\"background-color: #fff8e1; padding: 20px; border-radius: 5px; margin: 20px 0; border-left: 4px solid #ffc107;\">\n <h3 style=\"color: #555; margin-top: 0;\">Generated Email Draft</h3>\n <div style=\"white-space: pre-wrap; color: #333; line-height: 1.6;\">\n {{ $('Generate Email Draft').item.json.output }}\n </div>\n </div>\n \n <div style=\"text-align: center; margin-top: 30px;\">\n <p style=\"color: #666; margin-bottom: 20px;\">Please review the email draft and choose an action:</p>\n \n <a href=\"{{ $resumeWebhookUrl }}?action=approve\" \n style=\"display: inline-block; padding: 12px 30px; margin: 0 10px; background-color: #4CAF50; color: white; text-decoration: none; border-radius: 5px; font-weight: bold;\">\n β Approve & Send\n </a>\n \n <a href=\"{{ $resumeWebhookUrl }}?action=reject\" \n style=\"display: inline-block; padding: 12px 30px; margin: 0 10px; background-color: #f44336; color: white; text-decoration: none; border-radius: 5px; font-weight: bold;\">\n β Reject\n </a>\n </div>\n </div>\n</div>",
"options": {
"appendAttribution": false
},
"subject": "New Lead Email Draft - Approval Required"
},
"credentials": {
"gmailOAuth2": {
"id": "credential-id",
"name": "gmailOAuth2 Credential"
}
},
"typeVersion": 2.1
},
{
"id": "2157463a-b563-40b2-a2ad-f9f378421d51",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2192,
704
],
"parameters": {
"width": 656,
"height": 432,
"content": "### π Purpose \nAutomatically process new leads from an n8n Form, generate an AI-written follow-up email, request approval from your sales team, and then send the approved email to the lead while logging everything into Airtable.\n\nThis workflow is ideal for:\n- Small teams that want AI to draft emails, but still keep a human review step \n- Businesses that receive inbound inquiries and need fast, consistent follow-ups \n- Anyone who wants an automated lead-intake β email β CRM update pipeline \n- Teams that want to save approved/rejected drafts for future reference\n\nWhy this is helpful:\n- AI handles the writing, saving your team time \n- Sales still decides what actually gets sent \n- Airtable automatically stores every lead + email draft + status \n- Everything runs from a simple form submission β no manual copying or rewriting\n\nWhy download this template:\nIt gives you a polished lead-response system with human approval, CRM logging, and automated Gmail sending β all without needing a full CRM or sales tool.\n"
},
"typeVersion": 1
},
{
"id": "c2ce48eb-13f3-4b2e-b026-0eef2e57d14c",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2192,
1136
],
"parameters": {
"width": 656,
"height": 416,
"content": "### π§ Setup Instructions \n1. **Connect credentials:** Gmail, Airtable, OpenAI. \n2. **Configure Airtable Table** with the following fields: \n - Name \n - Email \n - Phone \n - Company Name \n - Message \n - Status \n - Email Draft \n - Created On \n3. **Add Airtable Base & Table IDs** in the configuration node. \n4. **Add company details** (your name, title, email, phone, website, etc.) so the final email is branded correctly. \n5. **Set the sales approval email address** (where the draft should be sent for review). \n6. Enable the **Webhooks** node used for the approval link. \n7. Publish your n8n Form and test by submitting a new lead.\n"
},
"typeVersion": 1
},
{
"id": "3ae04115-2e42-4875-9165-0901a7cb1c75",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1536,
704
],
"parameters": {
"color": 3,
"width": 720,
"height": 336,
"content": "### π οΈ Troubleshooting \n- **Approval link not working?** \n Make sure the Webhook node is set to βProduction URLβ and not βTest URL.β\n\n- **Emails not sending?** \n Verify Gmail credentials and that the βFromβ address is allowed by Google.\n\n- **Airtable fields not updating?** \n Check Base ID, Table ID, and field names match exactly.\n\n- **Draft missing lead details?** \n Ensure the Form field names match those referenced in the AI prompt.\n\n- **Stuck waiting for approval?** \n Confirm the approval webhook is receiving a request when clicked.\n"
},
"typeVersion": 1
},
{
"id": "7d1343bb-fed5-414d-9421-4e36c178cbe2",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1360,
1440
],
"parameters": {
"color": 7,
"width": 688,
"height": 400,
"content": "### π Lead Intake & Preparation \nThis section receives a new lead from an n8n Form and prepares the information for AI processing.\n\nWhy: \nWe normalize all form fields early so the AI model always receives clean, predictable data β making email generation more accurate and consistent.\n"
},
"typeVersion": 1
},
{
"id": "b9eded9e-7f4e-4e8e-ac7e-29301622bac3",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-656,
1440
],
"parameters": {
"color": 7,
"width": 992,
"height": 512,
"content": "### π€ Draft Generation & Human Approval \nAI writes the initial draft, then the workflow emails it to your sales team for review and approval via a secure link.\n\nWhy: \nThis blends automation with human judgment β speeding up response time while maintaining quality control.\n"
},
"typeVersion": 1
},
{
"id": "5c84ef79-c18d-4143-88b2-e74b541855e4",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
352,
1328
],
"parameters": {
"color": 7,
"width": 544,
"height": 544,
"content": "### π Log Lead in Airtable & Send Final Email \nDepending on approval, this section sends the email to the lead and logs the result in Airtable.\n\nWhy: \nYour CRM stays clean and accurate β each lead gets a clear status, timestamp, and saved email draft for reference.\n"
},
"typeVersion": 1
},
{
"parameters": {
"operation": "verify",
"email": "={{ $('On form submission').item.json.Email }}",
"additionalOptions": {}
},
"type": "n8n-nodes-billionverify.billionVerify",
"typeVersion": 1,
"position": [
40,
1504
],
"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": [
220,
1504
],
"name": "IF deliverable"
},
{
"parameters": {
"operation": "verify",
"email": "={{ $json.email || $json.Email }}",
"additionalOptions": {}
},
"type": "n8n-nodes-billionverify.billionVerify",
"typeVersion": 1,
"position": [
-632,
1600
],
"name": "Verify Email (BillionVerify) 2",
"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": [
-452,
1600
],
"name": "IF deliverable 2"
}
],
"connections": {
"Extract Lead Data": {
"main": [
[
{
"node": "Generate Email Draft",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Generate Email Draft",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Wait for Approval": {
"main": [
[
{
"node": "Check Approval Status",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Workflow Configuration",
"type": "main",
"index": 0
}
]
]
},
"Send Email to Lead": {
"main": [
[
{
"node": "Create Lead in Airtable",
"type": "main",
"index": 0
}
]
]
},
"Generate Email Draft": {
"main": [
[
{
"node": "Verify Email (BillionVerify) 2",
"type": "main",
"index": 0
}
]
]
},
"Check Approval Status": {
"main": [
[
{
"node": "Verify Email (BillionVerify)",
"type": "main",
"index": 0
}
],
[
{
"node": "Update Lead Status (Rejected)",
"type": "main",
"index": 0
}
]
]
},
"Workflow Configuration": {
"main": [
[
{
"node": "Extract Lead Data",
"type": "main",
"index": 0
}
]
]
},
"Send Approval Request Email": {
"main": [
[
{
"node": "Wait for Approval",
"type": "main",
"index": 0
}
]
]
},
"Verify Email (BillionVerify)": {
"main": [
[
{
"node": "IF deliverable",
"type": "main",
"index": 0
}
]
]
},
"IF deliverable": {
"main": [
[
{
"node": "Send Email to Lead",
"type": "main",
"index": 0
}
],
[]
]
},
"Verify Email (BillionVerify) 2": {
"main": [
[
{
"node": "IF deliverable 2",
"type": "main",
"index": 0
}
]
]
},
"IF deliverable 2": {
"main": [
[
{
"node": "Send Approval Request Email",
"type": "main",
"index": 0
}
],
[]
]
}
},
"settings": {
"executionOrder": "v1"
}
}Workflow templates with Dropcontact
Ready-to-use workflows that verify emails before Dropcontact sends.
How it works
- 1
Connect BillionVerify using the n8n community node, Integrately, or the REST API alongside your Dropcontact workflow.
- 2
Trigger the process when Dropcontact returns an enriched or updated email address for a contact.
- 3
Send the enriched email to BillionVerify for SMTP and pattern-level validation.
- 4
Mark contacts with verified addresses as safe to contact; flag others as needing manual review.
- 5
Sync the verification status back to your CRM so sales reps always see which emails are confirmed good.
When to use this
Post-enrichment deliverability check
After Dropcontact enriches a contact record with a new or corrected email, pass it to BillionVerify for an SMTP-level verification. This two-layer approach catches addresses that look valid but belong to inactive or non-existent mailboxes.
Outbound sequence protection
Before enrolling enriched contacts into a cold outreach sequence, verify the full batch with BillionVerify. Removing undeliverable addresses upfront keeps bounce rates below provider thresholds and protects your sending domain's reputation.
FAQ
Doesn't Dropcontact already verify emails?
Dropcontact validates email format and checks domain patterns, but BillionVerify adds real-time SMTP verification β actually probing the receiving mail server to confirm the mailbox exists and accepts messages.
How do I set up BillionVerify after a Dropcontact enrichment step?
In n8n, chain a BillionVerify node directly after the Dropcontact node. In Integrately, connect both apps in a single automation flow. For custom pipelines, call the BillionVerify REST API with the email returned by Dropcontact.
What bounce rate reduction can I expect?
Results vary by list quality, but teams combining enrichment with BillionVerify verification typically see hard bounce rates drop well below 2% β the threshold most email providers enforce before throttling or suspending accounts.
Can I verify catch-all domains that Dropcontact returns?
Yes. BillionVerify identifies catch-all domains explicitly so you can segment them from clearly valid addresses. Many sales teams choose to include catch-alls at lower send volume rather than excluding them entirely.
Verify emails in Dropcontact
Create a free account, grab your API key, and stop bounces before they happen.
Get started free