Summary
In this article, you can learn more about how you can build an N8N workflow that captures lead data from a form, verifies the email address, enriches the lead profile with additional data, and adds qualified leads directly to an outreach campaign.
Here you may find the JSON file including this workflow described above. To get started, download and copy-paste it to your N8N canvas.
Verify Your Emails Automatically via MillionVerifier in N8N.json
For a step by step video guidance please visit the following page:
What you need to start
To build this workflow, you will need active accounts and API access to the following services:
n8n (Cloud or self-hosted)
MillionVerifier (for email verification)
Apollo.io (for data enrichment)
Instantly.ai (for email outreach)
1. Set up the Trigger (n8n Form)
The workflow starts by capturing incoming lead data. While a webhook can be used for third-party apps, this example uses an n8n Form.
Add an n8n Form node to your canvas as the trigger.
Set the Form Title (e.g., "Contact Us").
Add the following Form Elements:
first_name(Text Input)last_name(Text Input)email(Email)
Click Execute step and open the test URL in a new tab. Submit the form with dummy data to populate the node so you have data to map in subsequent steps.
Tip: Right-click the node and select "Pin" to keep this test data available while you build.
2. Verify Email Address with MillionVerifier
Next, check if the submitted email address is valid.
Add an HTTP Request node.
Set the Method to
GET.Set the URL to:
https://api.millionverifier.com/api/v3Configure Authentication:
Authentication Type: Generic Credential Type
Generic Auth Type: Query Auth
Create a new credential. Set the Name to
api(lowercase).Retrieve your API key from the MillionVerifier dashboard (Account > Account Settings > API Keys) and paste it into the Value field. Save the credential.
Under Send Query Parameters, add a parameter:
Name:
emailValue: Map this to the email output from the n8n form (
{{ $json.email }}).
Execute the step and pin the node.
3. Filter for Good Emails
Use an IF node to ensure only verified, good quality emails proceed further.
Add an If node connected to the MillionVerifier output.
Add a Condition:
Value 1: Map the quality result from MillionVerifier (
{{ $json.quality }}).Operator: Is equal to
Value 2: Type the string
good.
The workflow will now branch. Continue building on the True branch.
4. Enrich Lead Data with Apollo
For valid emails, gather more context about the lead.
Add an HTTP Request node to the "True" output of the If node.
Set the Method to
GET.Set the URL to:
https://api.apollo.io/api/v1/people/matchConfigure Authentication:
Authentication Type: Generic Credential Type
Generic Auth Type: Header Auth
Create a new credential. Set the Name to
X-API-KEY.Generate an API key in the Apollo dashboard (Settings > Integrations > API Keys). Ensure the key has scopes for
contact/searchandpeople/match. Paste the key into the Value field and save.
Under Send Query Parameters, add the following parameters mapped from your initial n8n form:
first_name: Map to the form's first name.last_name: Map to the form's last name.email: Map to the form's email.
Execute the step to retrieve the enriched JSON payload. Pin the node.
5. Add Lead to Campaign in Instantly
Finally, send the verified and enriched lead data to your outreach tool.
Add a final HTTP Request node.
Set the Method to
POST.Set the URL to:
https://api.instantly.ai/api/v2/leadsConfigure Authentication:
Authentication Type: Generic Credential Type
Generic Auth Type: Bearer Auth
Create a new credential.
Generate an API key in the Instantly dashboard (Settings > Integrations > API Keys), granting all necessary scopes. Paste it into the Token field and save.
Set Send Body to enabled.
Set Body Content Type to
JSON.Select Specify Body: Using JSON and construct your payload. You will need to map fields from both the initial form and the Apollo enrichment node.
JSON Body Example:Note: You must replace the static campaign ID with your specific campaign ID found in the Instantly URL.
{
"campaign": "YOUR-INSTANTLY-CAMPAIGN-ID",
"email": "{{ $('On form submission').json.email }}",
"first_name": "{{ $('On form submission').json.first_name }}",
"last_name": "{{ $('On form submission').json.last_name }}",
"company_name": "{{ $('Enrich Lead - Apollo').json.person.organization.name }}",
"job_title": "{{ $('Enrich Lead - Apollo').json.person.title }}",
"website": "{{ $('Enrich Lead - Apollo').json.person.organization.primary_domain }}",
"skip_if_in_workspace": true,
"skip_if_in_campaign": true,
"custom_variables": {
"apollo_id": "{{ $('Enrich Lead - Apollo').json.person.id }}",
"industry": "{{ $('Enrich Lead - Apollo').json.person.organization.industry }}",
"employee_count": "{{ $('Enrich Lead - Apollo').json.person.organization.estimated_num_employees }}",
"linkedin_url": "{{ $('Enrich Lead - Apollo').json.person.linkedin_url }}"
}
}Execute the node. You should receive a status response indicating success.
Verify the new lead has been populated correctly by checking the Leads tab of your campaign inside the Instantly application.