n8n Workflow
Advanced

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:

  1. Trigger - Lead Capture: The workflow starts when a new entry is submitted to your specified form in the Typeform Trigger node.

  2. Data Enrichment: The Dropcontact node 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.

  3. Duplicate Check: The Airtable - Contact List node searches your Airtable "Contacts" base to see if a record with the same full name already exists.

  4. 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.
  5. New Lead Path:

    • The Set - Contacts to update node formats the enriched data from Dropcontact.
    • The Airtable - Create Contacts node creates a new record in your Airtable base.
    • The Slack node sends a message: "🎉 A new lead has just subscribed!"
  6. Existing Lead Path:

    • The Set - Contacts to create node formats the enriched data.
    • The Airtable - Update Contacts node updates the existing record with the latest information from Dropcontact.
    • The Slack node sends a message: "🥳 An existing lead has just subscribed!"

✅ 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

  1. Download workflow JSON
  2. Import into n8n
  3. Configure node parameters as needed
  4. Test and enable the workflow

💡 Tips

After importing, verify all connectors and credentials match your environment.

Preview

Workflow Visualization

10 nodes
100%
Typeform TriggertypeformTriggerSlack1slackAirtable - Contact ListairtableAirtable - Update Contacts1airtableSlackslackSet - Contacts to updatesetDropcontactdropcontactContact ID empty ?ifAirtable - Create ContactsairtableSet - Contacts to createset

Nodes

1

Typeform Trigger

typeformTrigger

v1
2

Slack1

slack

v1
3

Airtable - Contact List

airtable

v1
4

Airtable - Update Contacts1

airtable

v1
5

Slack

slack

v1
6

Set - Contacts to update

set

v1
7

Dropcontact

dropcontact

v1
8

Contact ID empty ?

if

v1
9

Airtable - Create Contacts

airtable

v1
10

Set - Contacts to create

set

v1

Statistics

Total nodes:10
Disabled nodes:0
Node types:6
Connections:8
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

Share
Categories:
Tags:
ifsettypeformtriggerslackairtabledropcontact

Technical Specs

Complexity:
Advanced
Node Count:
10 nodes
Published:11 months ago
Updated:3 months ago

Compatibility

Platform:
N8N Cloud & Self-hosted
Min Version:
N8N v1.0.0+
Supports cloud and self-hosted deployment

License

This workflow template follows MIT license, you can freely use, modify and distribute.

Please comply with relevant third-party service terms when using.

Related Workflows