AutomationFlowsSlack & Telegram › Typeform to Slack & Airtable Contact Sync

Typeform to Slack & Airtable Contact Sync

Original n8n title: Slack Typeform

Slack Typeform. Uses typeformTrigger, slack, airtable, dropcontact. Event-driven trigger; 10 nodes.

Event trigger★★★★☆ complexity10 nodesTypeform TriggerSlackAirtableDropcontact
Slack & Telegram Trigger: Event Nodes: 10 Complexity: ★★★★☆ Added:

This workflow follows the Airtable → Slack recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "nodes": [
    {
      "name": "Typeform Trigger",
      "type": "n8n-nodes-base.typeformTrigger",
      "position": [
        140,
        200
      ],
      "parameters": {
        "formId": ""
      },
      "credentials": {
        "typeformApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Slack1",
      "type": "n8n-nodes-base.slack",
      "position": [
        1360,
        300
      ],
      "parameters": {
        "text": "\ud83e\udd73 An existing lead has just subscribed!",
        "channel": "",
        "attachments": [],
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "name": "Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        1360,
        100
      ],
      "parameters": {
        "text": "=\ud83c\udf89 A new lead has just subscribed!",
        "channel": "",
        "attachments": [],
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "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": {
          "name": "<your credential>"
        }
      },
      "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
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

How this works

This workflow streamlines lead capture by automatically enriching contact details from Typeform submissions and notifying your team via Slack, saving hours of manual data entry for sales and marketing professionals handling inbound inquiries. It processes form responses to check and update an Airtable contact database, then uses Dropcontact to fetch verified emails and phone numbers if gaps exist, ensuring your CRM stays current without effort. The key step involves the conditional check for missing contact IDs, which triggers enrichment only when necessary, keeping the process efficient and targeted.

Use this workflow when you receive frequent Typeform leads that need quick validation and team alerts, such as for event registrations or customer feedback forms integrated with Slack channels. Avoid it for high-volume scenarios exceeding thousands of submissions daily, as rate limits on Dropcontact could cause delays; instead, opt for batch processing tools. Common variations include swapping Airtable for Google Sheets or adding email notifications via SendGrid for broader outreach.

About this workflow

Slack Typeform. Uses typeformTrigger, slack, airtable, dropcontact. Event-driven trigger; 10 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

Slack Typeform. Uses typeformTrigger, airtable, slack. Event-driven trigger; 4 nodes.

Typeform Trigger, Airtable, Slack
Slack & Telegram

Airtable Automate Recurring Tasks. Uses airtable, httpRequest, slack, stickyNote. Event-driven trigger; 14 nodes.

Airtable, HTTP Request, Slack +1
Slack & Telegram

Googleslides Slack. Uses hubspot, slack, airtable, googleSlides. Event-driven trigger; 10 nodes.

HubSpot, Slack, Airtable +2
Slack & Telegram

Add Positive Feedback Messages To A Table In Notion. Uses typeformTrigger, googleCloudNaturalLanguage, notion, slack. Event-driven trigger; 6 nodes.

Typeform Trigger, Google Cloud Natural Language, Notion +2
Slack & Telegram

This template ingests feedback from Typeform, runs Google Cloud Natural Language sentiment analysis, routes based on sentiment, and then creates a Notion database page and posts a Slack notification f

Typeform Trigger, Google Cloud Natural Language, Notion +2