Automated Lead Enrichment: Typeform to Airtable via Dropcontact with Slack Notifications
Automatically enrich leads from Typeform submissions using Dropcontact, then create or update contact records in Airtable. Get real-time Slack notifications for new and updated leads.
Overview
Streamlines lead capture and data enrichment by connecting Typeform, Dropcontact, and Airtable, providing sales and marketing teams with up-to-date contact information and real-time Slack alerts.
🧠 Description & Use Case
This workflow automates the entire lead capture and enrichment process. It takes new submissions from a Typeform, enriches the contact data using Dropcontact, and then intelligently adds them to an Airtable base, checking for duplicates to either create a new record or update an existing one. Finally, it sends a notification to Slack to alert your team.
🔄 How It Works:
-
Trigger - Lead Capture: The workflow starts when a new entry is submitted to your specified form in the
Typeform Triggernode. -
Data Enrichment: The
Dropcontactnode takes the initial information (like name, company, and website) from the Typeform and enriches it, finding details such as a verified email address, phone number, LinkedIn profile, company industry, and physical address. -
Duplicate Check: The
Airtable - Contact Listnode searches your Airtable "Contacts" base to see if a record with the same full name already exists. -
Conditional Logic: The
Contact ID empty?IF node checks the result of the Airtable search:- If TRUE (New Lead): If no matching contact is found, the workflow proceeds to the 'new lead' path.
- If FALSE (Existing Lead): If a contact already exists, the workflow proceeds to the 'update lead' path.
-
New Lead Path:
- The
Set - Contacts to updatenode formats the enriched data from Dropcontact. - The
Airtable - Create Contactsnode creates a new record in your Airtable base. - The
Slacknode sends a message: "🎉 A new lead has just subscribed!"
- The
-
Existing Lead Path:
- The
Set - Contacts to createnode formats the enriched data. - The
Airtable - Update Contactsnode updates the existing record with the latest information from Dropcontact. - The
Slacknode sends a message: "🥳 An existing lead has just subscribed!"
- The
✅ Real-World Use Cases:
- Sales Teams: Automatically populate your CRM (Airtable) with clean, enriched data the moment a lead fills out a contact form, saving hours of manual data entry.
- Marketing Automation: Build a robust and detailed contact list for email campaigns without worrying about data quality or duplicates.
- Event Registration: Capture registrations via Typeform and instantly create detailed attendee profiles in Airtable, complete with social media links and company information.
- Efficient Lead Management: Ensure your contact database is always up-to-date and free of duplicates, providing a single source of truth for your customer data.
This workflow is a powerful tool for any team looking to streamline their lead generation pipeline, improve data quality, and keep the team informed in real-time. 🚀
Instructions
Basic steps
- Download workflow JSON
- Import into n8n
- Configure node parameters as needed
- Test and enable the workflow
💡 Tips
After importing, verify all connectors and credentials match your environment.
Preview
Workflow Visualization
Nodes
Typeform Trigger
typeformTrigger
Slack1
slack
Airtable - Contact List
airtable
Airtable - Update Contacts1
airtable
Slack
slack
Set - Contacts to update
set
Dropcontact
dropcontact
Contact ID empty ?
if
Airtable - Create Contacts
airtable
Set - Contacts to create
set
Statistics
View full JSON structure
{
"nodes": [
{
"name": "Typeform Trigger",
"type": "n8n-nodes-base.typeformTrigger",
"position": [
140,
200
],
"webhookId": "",
"parameters": {
"formId": ""
},
"credentials": {
"typeformApi": {
"id": "",
"name": ""
}
},
"typeVersion": 1
},
{
"name": "Slack1",
"type": "n8n-nodes-base.slack",
"position": [
1360,
300
],
"parameters": {
"text": "🥳 An existing lead has just subscribed!",
"channel": "",
"attachments": [],
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "",
"name": ""
}
},
"typeVersion": 1
},
{
"name": "Airtable - Contact List",
"type": "n8n-nodes-base.airtable",
"position": [
540,
200
],
"parameters": {
"table": "Contacts",
"operation": "list",
"returnAll": false,
"application": "",
"additionalOptions": {
"fields": [],
"filterByFormula": "=fullName=\"{{$json[\"full_name\"]}}\""
}
},
"credentials": {
"airtableApi": {
"id": "",
"name": ""
}
},
"executeOnce": false,
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "Airtable - Update Contacts1",
"type": "n8n-nodes-base.airtable",
"position": [
1150,
300
],
"parameters": {
"id": "={{$node[\"Airtable - Contact List\"].json[\"id\"]}}",
"table": "Contacts",
"fields": [
"firstName",
"lastName",
"linkedInProfile",
"Email",
"Phone",
"website",
"LinkedIn Company",
"Industry",
"Address"
],
"options": {
"typecast": true
},
"operation": "update",
"application": "",
"updateAllFields": false
},
"credentials": {
"airtableApi": {
"id": "",
"name": ""
}
},
"typeVersion": 1
},
{
"name": "Slack",
"type": "n8n-nodes-base.slack",
"position": [
1360,
100
],
"parameters": {
"text": "=🎉 A new lead has just subscribed!",
"channel": "",
"attachments": [],
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "",
"name": ""
}
},
"typeVersion": 1
},
{
"name": "Set - Contacts to update",
"type": "n8n-nodes-base.set",
"position": [
940,
100
],
"parameters": {
"values": {
"string": [
{
"name": "firstName",
"value": "={{$node[\"Dropcontact\"].json[\"first_name\"]}}"
},
{
"name": "lastName",
"value": "={{$node[\"Dropcontact\"].json[\"last_name\"]}}"
},
{
"name": "linkedInProfile",
"value": "={{$node[\"Dropcontact\"].json[\"linkedin\"]}}"
},
{
"name": "Email",
"value": "={{$node[\"Dropcontact\"].json[\"email\"][0][\"email\"]}}"
},
{
"name": "Phone",
"value": "={{$node[\"Dropcontact\"].json[\"phone\"]}}"
},
{
"name": "website",
"value": "={{$node[\"Dropcontact\"].json[\"website\"]}}"
},
{
"name": "LinkedIn Company",
"value": "={{$node[\"Dropcontact\"].json[\"company_linkedin\"]}}"
},
{
"name": "Industry",
"value": "={{$node[\"Dropcontact\"].json[\"naf5_des\"]}}"
},
{
"name": "Address",
"value": "={{$node[\"Dropcontact\"].json[\"siret_address\"]}}, {{$node[\"Dropcontact\"].json[\"siret_zip\"]}} {{$node[\"Dropcontact\"].json[\"siret_city\"]}}"
}
]
},
"options": {
"dotNotation": true
}
},
"typeVersion": 1
},
{
"name": "Dropcontact",
"type": "n8n-nodes-base.dropcontact",
"position": [
340,
200
],
"parameters": {
"email": "=",
"options": {
"siren": true,
"language": "fr"
},
"additionalFields": {
"company": "={{$json[\"and your company ?\"]}}",
"website": "={{$node[\"Typeform Trigger\"].json[\"tell me more... What's your website ?\"]}}",
"last_name": "={{$json[\"Hi [field:1c6436830dfffbf1], what's your last name ?\"]}}",
"first_name": "={{$json[\"First, what's your name?\"]}}"
}
},
"credentials": {
"dropcontactApi": {
"id": "",
"name": ""
}
},
"typeVersion": 1
},
{
"name": "Contact ID empty ?",
"type": "n8n-nodes-base.if",
"position": [
730,
200
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json[\"id\"]}}",
"operation": "isEmpty"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"name": "Airtable - Create Contacts",
"type": "n8n-nodes-base.airtable",
"position": [
1150,
100
],
"parameters": {
"table": "Contacts",
"options": {
"typecast": true
},
"operation": "append",
"application": ""
},
"credentials": {
"airtableApi": {
"id": "",
"name": ""
}
},
"typeVersion": 1
},
{
"name": "Set - Contacts to create",
"type": "n8n-nodes-base.set",
"position": [
940,
300
],
"parameters": {
"values": {
"string": [
{
"name": "firstName",
"value": "={{$node[\"Dropcontact\"].json[\"first_name\"]}}"
},
{
"name": "lastName",
"value": "={{$node[\"Dropcontact\"].json[\"last_name\"]}}"
},
{
"name": "linkedInProfile",
"value": "={{$node[\"Dropcontact\"].json[\"linkedin\"]}}"
},
{
"name": "Email",
"value": "={{$node[\"Dropcontact\"].json[\"email\"][0][\"email\"]}}"
},
{
"name": "Phone",
"value": "={{$node[\"Dropcontact\"].json[\"phone\"]}}"
},
{
"name": "website",
"value": "={{$node[\"Dropcontact\"].json[\"website\"]}}"
},
{
"name": "LinkedIn Company",
"value": "={{$node[\"Dropcontact\"].json[\"company_linkedin\"]}}"
},
{
"name": "Industry",
"value": "={{$node[\"Dropcontact\"].json[\"naf5_des\"]}}"
},
{
"name": "Address",
"value": "={{$node[\"Dropcontact\"].json[\"siret_address\"]}}, {{$node[\"Dropcontact\"].json[\"siret_zip\"]}} {{$node[\"Dropcontact\"].json[\"siret_city\"]}}"
}
]
},
"options": {
"dotNotation": true
}
},
"typeVersion": 1
}
],
"connections": {
"Dropcontact": {
"main": [
[
{
"node": "Airtable - Contact List",
"type": "main",
"index": 0
}
]
]
},
"Typeform Trigger": {
"main": [
[
{
"node": "Dropcontact",
"type": "main",
"index": 0
}
]
]
},
"Contact ID empty ?": {
"main": [
[
{
"node": "Set - Contacts to update",
"type": "main",
"index": 0
}
],
[
{
"node": "Set - Contacts to create",
"type": "main",
"index": 0
}
]
]
},
"Airtable - Contact List": {
"main": [
[
{
"node": "Contact ID empty ?",
"type": "main",
"index": 0
}
]
]
},
"Set - Contacts to create": {
"main": [
[
{
"node": "Airtable - Update Contacts1",
"type": "main",
"index": 0
}
]
]
},
"Set - Contacts to update": {
"main": [
[
{
"node": "Airtable - Create Contacts",
"type": "main",
"index": 0
}
]
]
},
"Airtable - Create Contacts": {
"main": [
[
{
"node": "Slack",
"type": "main",
"index": 0
}
]
]
},
"Airtable - Update Contacts1": {
"main": [
[
{
"node": "Slack1",
"type": "main",
"index": 0
}
]
]
}
}
}Actions
Technical Specs
Compatibility
License
This workflow template follows MIT license, you can freely use, modify and distribute.
Please comply with relevant third-party service terms when using.