โ† All Forms

Typeform email verification with BillionVerify

Typeform is a popular form and survey builder known for its conversational, one-question-at-a-time interface. Integrating BillionVerify into your Typeform submissions means every email address collected from respondents is validated before reaching your CRM, email platform, or sales team.

Why verify before the send

Forms are a primary source of new contacts, but they also attract typos, fake entries, and disposable addresses from users who want to avoid follow-up. BillionVerify filters these out at submission time, so your marketing lists stay clean, your bounce rates stay low, and your email sender reputation stays intact.

Ready-to-use n8n workflow

Import this workflow into n8n โ€” it verifies every address with BillionVerify before Typeform sends, so only deliverable contacts are emailed. Install the BillionVerify community node first, then add your API key. Adapted from this n8n template

verify-emails-in-typeform.json
{
  "name": "Automated event management with Typeform, Stripe, Google tools & Slack notifications + BillionVerify",
  "nodes": [
    {
      "id": "7c944a05-dc18-4966-875e-f101544e3597",
      "name": "Typeform Registration Form",
      "type": "n8n-nodes-base.typeformTrigger",
      "position": [
        0,
        0
      ],
      "webhookId": "baa3faaf-3d23-45ca-89b6-b2f399fb6899",
      "parameters": {
        "formId": "<__PLACEHOLDER_VALUE__Typeform Form ID__>"
      },
      "typeVersion": 1.1
    },
    {
      "id": "b4c828ad-aae3-4131-9383-165702e353e4",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        224,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "eventName",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Event Name__>"
            },
            {
              "id": "id-2",
              "name": "eventDate",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Event Date (YYYY-MM-DD)__>"
            },
            {
              "id": "id-3",
              "name": "eventTime",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Event Time__>"
            },
            {
              "id": "id-4",
              "name": "eventLocation",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Event Location__>"
            },
            {
              "id": "id-5",
              "name": "participationFee",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Participation Fee Amount__>"
            },
            {
              "id": "id-6",
              "name": "reminderDaysBefore",
              "type": "number",
              "value": 3
            },
            {
              "id": "id-7",
              "name": "followupDaysAfter",
              "type": "number",
              "value": 2
            },
            {
              "id": "id-8",
              "name": "organizerSlackChannel",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Slack Channel ID__>"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "d2e4b2da-73e2-485c-82c7-1f41d6b9a4f4",
      "name": "Add to Participant List",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        448,
        0
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "={{ $json.name }}",
            "Email": "={{ $json.email }}",
            "Phone": "={{ $json.phone }}",
            "Event Date": "={{ $('Workflow Configuration').first().json.eventDate }}",
            "Event Name": "={{ $('Workflow Configuration').first().json.eventName }}",
            "Payment Status": "Pending",
            "Registration Date": "={{ $now.toISO() }}"
          },
          "schema": [
            {
              "id": "Name",
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "required": false,
              "displayName": "Email",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone",
              "required": false,
              "displayName": "Phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Registration Date",
              "required": false,
              "displayName": "Registration Date",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "Event Name",
              "required": false,
              "displayName": "Event Name",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "Event Date",
              "required": false,
              "displayName": "Event Date",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "Payment Status",
              "required": false,
              "displayName": "Payment Status",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ]
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "<__PLACEHOLDER_VALUE__Sheet Name (e.g., Participants)__>"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "<__PLACEHOLDER_VALUE__Google Sheets Document ID__>"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "credential-id",
          "name": "googleSheetsOAuth2Api Credential"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "0847f022-be9a-4137-95cb-291f6f1608e9",
      "name": "Process Payment",
      "type": "n8n-nodes-base.stripe",
      "position": [
        672,
        0
      ],
      "parameters": {
        "amount": "={{ $('Workflow Configuration').first().json.participationFee * 100 }}",
        "source": "<__PLACEHOLDER_VALUE__Source ID__>",
        "currency": "jpy",
        "resource": "charge",
        "operation": "create",
        "customerId": "<__PLACEHOLDER_VALUE__Customer ID__>",
        "additionalFields": {
          "metadata": {
            "metadataProperties": [
              {
                "key": "participant_email",
                "value": "={{ $json.email }}"
              },
              {
                "key": "participant_name",
                "value": "={{ $json.name }}"
              },
              {
                "key": "event_name",
                "value": "={{ $('Workflow Configuration').first().json.eventName }}"
              }
            ]
          },
          "description": "={{ 'Event Registration: ' + $('Workflow Configuration').first().json.eventName }}"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5d2c0d4e-5f4e-4659-9467-575667f47c0b",
      "name": "Check Payment Status",
      "type": "n8n-nodes-base.if",
      "position": [
        896,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "succeeded"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "e2462463-af2a-445c-b526-efcce51b9b18",
      "name": "Send Confirmation Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1136,
        -96
      ],
      "webhookId": "8731cfaf-f3fb-46aa-923e-ce0a23184d70",
      "parameters": {
        "sendTo": "={{ $('Typeform Registration Form').first().json.email }}",
        "message": "=<h2>ใ”็™ป้Œฒใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™</h2><p>{{ $('Typeform Registration Form').first().json.name }} ๆง˜</p><p>{{ $('Workflow Configuration').first().json.eventName }} ใธใฎใ”็™ป้ŒฒใŒๅฎŒไบ†ใ—ใพใ—ใŸใ€‚</p><p><strong>ใ‚คใƒ™ใƒณใƒˆ่ฉณ็ดฐ:</strong></p><ul><li>ๆ—ฅๆ™‚: {{ $('Workflow Configuration').first().json.eventDate }} {{ $('Workflow Configuration').first().json.eventTime }}</li><li>ๅ ดๆ‰€: {{ $('Workflow Configuration').first().json.eventLocation }}</li></ul><p>ๅฝ“ๆ—ฅใŠไผšใ„ใงใใ‚‹ใ“ใจใ‚’ๆฅฝใ—ใฟใซใ—ใฆใŠใ‚Šใพใ™ใ€‚</p>",
        "options": {},
        "subject": "={{ 'ใ‚คใƒ™ใƒณใƒˆๅ‚ๅŠ ็ขบ่ช: ' + $('Workflow Configuration').first().json.eventName }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "credential-id",
          "name": "gmailOAuth2 Credential"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "e63d3572-bc39-4a7a-aa8c-2840ccc46c18",
      "name": "Add to Calendar",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        1360,
        -96
      ],
      "parameters": {
        "end": "={{ DateTime.fromISO($('Workflow Configuration').first().json.eventDate + 'T' + $('Workflow Configuration').first().json.eventTime).plus({ hours: 2 }).toISO() }}",
        "start": "={{ $('Workflow Configuration').first().json.eventDate + 'T' + $('Workflow Configuration').first().json.eventTime }}",
        "calendar": {
          "__rl": true,
          "mode": "id",
          "value": "primary"
        },
        "additionalFields": {
          "summary": "={{ $('Workflow Configuration').first().json.eventName }}",
          "location": "={{ $('Workflow Configuration').first().json.eventLocation }}",
          "description": "={{ 'Participant: ' + $('Typeform Registration Form').first().json.name }}"
        }
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "credential-id",
          "name": "googleCalendarOAuth2Api Credential"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "b5c019f2-6e53-4348-adbf-1962574e9568",
      "name": "Notify Organizer",
      "type": "n8n-nodes-base.slack",
      "position": [
        1584,
        -96
      ],
      "webhookId": "bc4122aa-5c01-489d-a173-99dd915e0212",
      "parameters": {
        "text": "={{ '๐ŸŽ‰ ๆ–ฐ่ฆๅ‚ๅŠ ่€…็™ป้Œฒ\nๅๅ‰: ' + $('Typeform Registration Form').first().json.name + '\nใƒกใƒผใƒซ: ' + $('Typeform Registration Form').first().json.email + '\nใ‚คใƒ™ใƒณใƒˆ: ' + $('Workflow Configuration').first().json.eventName }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.organizerSlackChannel }}"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "id": "credential-id",
          "name": "slackOAuth2Api Credential"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "657ee013-6bca-4659-be15-1470fccb5b7f",
      "name": "Daily Reminder Check",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        224
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f4f8d33b-3f41-42d5-99f1-3c721bb1af0d",
      "name": "Get Upcoming Events",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        224,
        224
      ],
      "parameters": {
        "options": {
          "returnFirstMatch": false
        },
        "filtersUI": {
          "values": [
            {
              "lookupValue": "succeeded",
              "lookupColumn": "Payment Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "<__PLACEHOLDER_VALUE__Sheet Name (e.g., Participants)__>"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "<__PLACEHOLDER_VALUE__Google Sheets Document ID (same as registration)__>"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "credential-id",
          "name": "googleSheetsOAuth2Api Credential"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "86f23720-e55e-492e-87ba-3b4a961565d7",
      "name": "Calculate Reminder Date",
      "type": "n8n-nodes-base.dateTime",
      "position": [
        448,
        224
      ],
      "parameters": {
        "options": {},
        "duration": "={{ $('Workflow Configuration').first().json.reminderDaysBefore }}",
        "magnitude": "={{ $json['Event Date'] }}",
        "operation": "subtractFromDate"
      },
      "typeVersion": 2
    },
    {
      "id": "feb98889-9ac8-41cb-bbb1-ef6a26eb3b76",
      "name": "Check If Reminder Needed",
      "type": "n8n-nodes-base.if",
      "position": [
        672,
        224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $now.toFormat('yyyy-MM-dd') }}",
              "rightValue": "={{ $json.output }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "07b2d002-cb41-4228-b46f-fada104e2bf1",
      "name": "Send Reminder Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1392,
        256
      ],
      "webhookId": "696b628c-3be0-432e-93e3-67c9e0c2ab34",
      "parameters": {
        "sendTo": "={{ $json.Email }}",
        "message": "=<h2>ใ‚คใƒ™ใƒณใƒˆใƒชใƒžใ‚คใƒณใƒ€ใƒผ</h2><p>{{ $json.Name }} ๆง˜</p><p>{{ $json['Event Name'] }} ใฎ้–‹ๅ‚ฌใŒ่ฟ‘ใฅใ„ใฆใพใ„ใ‚Šใพใ—ใŸใ€‚</p><p><strong>ใ‚คใƒ™ใƒณใƒˆ่ฉณ็ดฐ:</strong></p><ul><li>ๆ—ฅๆ™‚: {{ $json['Event Date'] }} {{ $('Workflow Configuration').first().json.eventTime }}</li><li>ๅ ดๆ‰€: {{ $('Workflow Configuration').first().json.eventLocation }}</li></ul><p>ใŠๅฟ˜ใ‚Œใชใใ”ๅ‚ๅŠ ใใ ใ•ใ„ใ€‚</p>",
        "options": {},
        "subject": "={{ 'ใƒชใƒžใ‚คใƒณใƒ€ใƒผ: ' + $json['Event Name'] + ' ใŒ้–“ใ‚‚ใชใ้–‹ๅ‚ฌใ•ใ‚Œใพใ™' }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "credential-id",
          "name": "gmailOAuth2 Credential"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "b71cafb3-d90f-4817-a9b5-6f48bd3110da",
      "name": "Daily Follow-up Check",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        448
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 10
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ac113bc3-20d2-455f-b042-de09ad00c333",
      "name": "Get Past Events",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        224,
        448
      ],
      "parameters": {
        "options": {
          "returnFirstMatch": false
        },
        "filtersUI": {
          "values": [
            {
              "lookupValue": "succeeded",
              "lookupColumn": "Payment Status"
            },
            {
              "lookupColumn": "Follow-up Sent"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "<__PLACEHOLDER_VALUE__Sheet Name (e.g., Participants)__>"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "<__PLACEHOLDER_VALUE__Google Sheets Document ID (same as registration)__>"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "credential-id",
          "name": "googleSheetsOAuth2Api Credential"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "238e21d8-5ef5-4f41-8c24-969b0db3f66f",
      "name": "Calculate Follow-up Date",
      "type": "n8n-nodes-base.dateTime",
      "position": [
        448,
        448
      ],
      "parameters": {
        "options": {},
        "duration": "={{ $('Workflow Configuration').first().json.followupDaysAfter }}",
        "magnitude": "={{ $json['Event Date'] }}",
        "operation": "addToDate"
      },
      "typeVersion": 2
    },
    {
      "id": "ac0142fc-af2f-4e01-8090-303f02b3fca0",
      "name": "Check If Follow-up Needed",
      "type": "n8n-nodes-base.if",
      "position": [
        672,
        448
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "string",
                "operation": "gte"
              },
              "leftValue": "={{ $now.toFormat('yyyy-MM-dd') }}",
              "rightValue": "={{ $json.output }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9f776c37-6551-4f18-a046-c3dc59a53fe9",
      "name": "Send Thank You & Survey",
      "type": "n8n-nodes-base.gmail",
      "position": [
        912,
        624
      ],
      "webhookId": "0414943d-a2c0-442c-abc2-3165206f299e",
      "parameters": {
        "sendTo": "={{ $json.Email }}",
        "message": "=<h2>ใ”ๅ‚ๅŠ ใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ—ใŸ</h2><p>{{ $json.Name }} ๆง˜</p><p>{{ $json['Event Name'] }} ใธใฎใ”ๅ‚ๅŠ ใ€่ช ใซใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ—ใŸใ€‚</p><p>ไปŠๅพŒใฎใ‚คใƒ™ใƒณใƒˆๆ”นๅ–„ใฎใŸใ‚ใ€็ฐกๅ˜ใชใ‚ขใƒณใ‚ฑใƒผใƒˆใซใ”ๅ”ๅŠ›ใ„ใŸใ ใ‘ใพใ™ใจๅนธใ„ใงใ™ใ€‚</p><p><a href=\"<__PLACEHOLDER_VALUE__Survey URL__>\">ใ‚ขใƒณใ‚ฑใƒผใƒˆใซๅ›ž็ญ”ใ™ใ‚‹</a></p><p>ใพใŸใฎใ”ๅ‚ๅŠ ใ‚’ใŠๅพ…ใกใ—ใฆใŠใ‚Šใพใ™ใ€‚</p>",
        "options": {},
        "subject": "={{ 'ใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ—ใŸ: ' + $json['Event Name'] }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "credential-id",
          "name": "gmailOAuth2 Credential"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "22af0070-2118-4523-841c-533531700257",
      "name": "Update Follow-up Status",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1120,
        624
      ],
      "parameters": {
        "columns": {
          "value": {
            "Follow-up Date": "={{ $now.toISO() }}",
            "Follow-up Sent": "Yes"
          },
          "schema": [
            {
              "id": "Email",
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Follow-up Sent",
              "required": false,
              "displayName": "Follow-up Sent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Follow-up Date",
              "required": false,
              "displayName": "Follow-up Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ]
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "<__PLACEHOLDER_VALUE__Sheet Name (e.g., Participants)__>"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "<__PLACEHOLDER_VALUE__Google Sheets Document ID (same as registration)__>"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "credential-id",
          "name": "googleSheetsOAuth2Api Credential"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "42f7eaec-aa5a-4ee2-8d79-70bbbf8a73b0",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1744,
        -416
      ],
      "parameters": {
        "width": 944,
        "height": 1504,
        "content": "## Event Participant Management and Automated Follow-up System\n**\n### Who is this for?\n\nThis template is ideal for event organizers, community managers, and businesses that host workshops, webinars, conferences, or any event requiring participant registration and communication.\n\n### How it works\n\nThe workflow is divided into three main parts:\n\n1.  **Registration and Onboarding:**\n    *   When a new participant registers via a Typeform, their details are immediately added to a Google Sheet.\n    *   Payment is processed via Stripe.\n    *   Upon successful payment, a confirmation email is sent to the participant, and the event is added to their Google Calendar.\n    *   The organizer receives a Slack notification about the new registration.\n\n2.  **Event Reminders:**\n    *   A daily scheduled trigger checks the Google Sheet for upcoming events.\n    *   It calculates if an event is within the specified reminder period (e.g., 3 days before).\n    *   If a reminder is needed, an email is automatically sent to the participant.\n\n3.  **Post-Event Follow-up:**\n    *   Another daily scheduled trigger checks for past events.\n    *   It calculates if an event is due for a follow-up (e.g., 2 days after).\n    *   A thank-you email, including a survey link, is sent to participants.\n    *   The participant's status in the Google Sheet is updated to mark the follow-up as sent.\n\n### How to set it up\n\n1.  **Typeform Registration Form:** Replace `<__PLACEHOLDER_VALUE__Typeform Form ID__>` with your actual Typeform ID.\n2.  **Workflow Configuration:** Fill in the placeholder values for `Event Name`, `Event Date`, `Event Time`, `Event Location`, `Participation Fee Amount`, and `Slack Channel ID`.\n3.  **Google Sheets:**\n    *   Replace `<__PLACEHOLDER_VALUE__Google Sheets Document ID__>` and `<__PLACEHOLDER_VALUE__Sheet Name (e.g., Participants)__>` with your Google Sheet details. Ensure your sheet has columns for \"Name\", \"Email\", \"Phone\", \"Registration Date\", \"Event Name\", \"Event Date\", \"Payment Status\", \"Follow-up Sent\", and \"Follow-up Date\".\n    *   You will need to set up Google Sheets OAuth2 API credentials.\n4.  **Stripe (Process Payment):** Replace `<__PLACEHOLDER_VALUE__Customer ID__>` and `<__PLACEHOLDER_VALUE__Source ID__>` with your Stripe customer and source IDs. You will need Stripe API credentials.\n5.  **Gmail (Send Confirmation Email, Send Reminder Email, Send Thank You & Survey):** You will need to set up Gmail OAuth2 credentials.\n6.  **Google Calendar (Add to Calendar):** You will need to set up Google Calendar OAuth2 API credentials.\n7.  **Slack (Notify Organizer):** Replace `<__PLACEHOLDER_VALUE__Slack Channel ID__>` (if not already set in Workflow Configuration) and set up Slack OAuth2 API credentials.\n8.  **Survey URL (Send Thank You & Survey):** Replace `<__PLACEHOLDER_VALUE__Survey URL__>` with the link to your post-event survey.\n\n### Requirements\n\n*   Typeform account and a registration form.\n*   Google Sheet for participant management.\n*   Stripe account for payment processing.\n*   Gmail account for sending emails.\n*   Google Calendar for event scheduling.\n*   Slack account for organizer notifications.\n*   n8n credentials for Google Sheets, Stripe, Gmail, Google Calendar, and Slack.\n\n### How to customize the workflow\n\n*   **Reminder/Follow-up Timing:** Adjust the `reminderDaysBefore` and `followupDaysAfter` values in the \"Workflow Configuration\" node to change when reminder and follow-up emails are sent.\n*   **Email Content:** Modify the HTML content in the \"Send Confirmation Email\", \"Send Reminder Email\", and \"Send Thank You & Survey\" nodes to match your branding and messaging.\n*   **Payment Currency:** Change the `currency` in the \"Process Payment\" node if your event uses a different currency.\n*   **Additional Data:** Extend the Google Sheets nodes to capture more participant information from Typeform if needed.\n*   **Integration:** Easily integrate with other services by adding more nodes, for example, a CRM to add new participants as leads.\n`"
      },
      "typeVersion": 1
    },
    {
      "id": "63c03b4f-0fd4-44e7-b220-f38b1edd266f",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        -192
      ],
      "parameters": {
        "color": 3,
        "width": 640,
        "height": 784,
        "content": "## Registration and Onboarding\n ใ€€*   When a new participant registers via a Typeform, their details are immediately added to a Google Sheet.\n    *   Payment is processed via Stripe.\n    *   Upon successful payment, a confirmation email is sent to the participant, and the event is added to their Google Calendar.\n    *   The organizer receives a Slack notification about the new registration."
      },
      "typeVersion": 1
    },
    {
      "id": "a6e75768-514e-498a-9f45-2ea5f9bfdede",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        432
      ],
      "parameters": {
        "color": 4,
        "width": 448,
        "height": 368,
        "content": "## Post-Event Follow-up \n ใ€€*  Another daily scheduled trigger checks for past events.\n    *   It calculates if an event is due for a follow-up (e.g., 2 days after).\n    *   A thank-you email, including a survey link, is sent to participants.\n    *   The participant's status in the Google Sheet is updated to mark the follow-up as sent.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4f61bb8e-5bff-4dbd-abbc-0b5ef624bc6f",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1312,
        64
      ],
      "parameters": {
        "color": 6,
        "width": 368,
        "height": 336,
        "content": "## Event Reminders \n**    *   A daily scheduled trigger checks the Google Sheet for upcoming events.\n    *   It calculates if an event is within the specified reminder period (e.g., 3 days before).\n    *   If a reminder is needed, an email is automatically sent to the participant."
      },
      "typeVersion": 1
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $('Typeform Registration Form').first().json.email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        776,
        -96
      ],
      "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": [
        956,
        -96
      ],
      "name": "IF deliverable"
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $json.Email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        1032,
        256
      ],
      "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": [
        1212,
        256
      ],
      "name": "IF deliverable 2"
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $json.Email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        552,
        624
      ],
      "name": "Verify Email (BillionVerify) 3",
      "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": [
        732,
        624
      ],
      "name": "IF deliverable 3"
    }
  ],
  "connections": {
    "Add to Calendar": {
      "main": [
        [
          {
            "node": "Notify Organizer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Past Events": {
      "main": [
        [
          {
            "node": "Calculate Follow-up Date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Payment": {
      "main": [
        [
          {
            "node": "Check Payment Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Upcoming Events": {
      "main": [
        [
          {
            "node": "Calculate Reminder Date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Payment Status": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Reminder Check": {
      "main": [
        [
          {
            "node": "Get Upcoming Events",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Follow-up Check": {
      "main": [
        [
          {
            "node": "Get Past Events",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Add to Participant List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add to Participant List": {
      "main": [
        [
          {
            "node": "Process Payment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Reminder Date": {
      "main": [
        [
          {
            "node": "Check If Reminder Needed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Confirmation Email": {
      "main": [
        [
          {
            "node": "Add to Calendar",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Thank You & Survey": {
      "main": [
        [
          {
            "node": "Update Follow-up Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Follow-up Date": {
      "main": [
        [
          {
            "node": "Check If Follow-up Needed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check If Reminder Needed": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify) 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check If Follow-up Needed": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify) 3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Typeform Registration Form": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Email (BillionVerify)": {
      "main": [
        [
          {
            "node": "IF deliverable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable": {
      "main": [
        [
          {
            "node": "Send Confirmation Email",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Verify Email (BillionVerify) 2": {
      "main": [
        [
          {
            "node": "IF deliverable 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable 2": {
      "main": [
        [
          {
            "node": "Send Reminder Email",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Verify Email (BillionVerify) 3": {
      "main": [
        [
          {
            "node": "IF deliverable 3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable 3": {
      "main": [
        [
          {
            "node": "Send Thank You & Survey",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}

Workflow templates with Typeform

Ready-to-use workflows that verify emails before Typeform sends.

How it works

  1. 1

    A respondent submits a Typeform that includes an email field.

  2. 2

    Typeform sends the response to an n8n workflow or Integrately automation via webhook.

  3. 3

    BillionVerify verifies the address โ€” checking format, domain MX records, SMTP reachability, disposable-service lists, and catch-all status.

  4. 4

    A clear result is returned: valid, invalid, risky, or catch-all.

  5. 5

    Your workflow forwards valid addresses to downstream tools and routes problematic ones to a review queue or triggers a notification.

When to use this

Clean lead generation forms in real time

Whenever a Typeform submission includes an email address, BillionVerify checks it immediately. Only verified addresses are forwarded to HubSpot, Salesforce, or your email platform โ€” keeping your pipeline free of junk contacts.

Protect gated content and lead magnets

Users who enter a throwaway address to download a guide or access a demo are caught before your delivery automation runs. BillionVerify identifies disposable domains so your content stays valuable.

Maintain list hygiene across survey campaigns

Survey respondents sometimes enter inaccurate contact details. Verifying emails at the Typeform layer means your re-engagement or follow-up campaign starts with a clean, high-quality audience.

FAQ

How do I connect BillionVerify to Typeform?

Use Typeform's webhook feature to send submissions to n8n, where the BillionVerify community node handles verification. Alternatively, Integrately offers a 1-click setup between Typeform and BillionVerify.

Can BillionVerify detect typos in email addresses?

Yes. BillionVerify validates syntax and checks whether the domain actually exists and accepts mail, so a typo that produces an undeliverable address will be caught before it enters your list.

What should I do with addresses marked as catch-all?

Catch-all domains cannot be confirmed deliverable via SMTP alone. A common strategy is to accept them but tag them separately, then suppress them if they bounce on first send.

Does real-time verification work with Typeform's hidden fields or conditional logic?

Yes. BillionVerify operates at the webhook layer after submission, so it is independent of Typeform's internal logic โ€” it works regardless of which fields or conditions your form uses.

Verify emails in Typeform

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

Get started free