This workflow follows the Airtable → HTTP Request 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 →
{
"name": "CRM Automatisierung \u2014 Kontaktformular \u2192 Airtable + WhatsApp",
"active": false,
"settings": {
"executionOrder": "v1"
},
"nodes": [
{
"id": "c444c68f-e5b3-4c74-8a72-687b17a9a709",
"name": "Webhook \u2014 Kontaktformular",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-208,
0
],
"parameters": {
"httpMethod": "POST",
"path": "contact-form",
"responseMode": "responseNode",
"options": {}
}
},
{
"id": "0a51c800-a348-4f16-b533-6442a3e04959",
"name": "Code \u2014 Extrait donn\u00e9es formulaire",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
16,
0
],
"parameters": {
"jsCode": "// Extrait les donn\u00e9es du body du webhook\nfor (const item of $input.all()) {\n item.json = item.json.body;\n}\nreturn $input.all();"
}
},
{
"id": "f609cb2d-d63a-4940-8afb-03cf714bf411",
"name": "Airtable \u2014 Cr\u00e9er contact CRM",
"type": "n8n-nodes-base.airtable",
"typeVersion": 2.1,
"position": [
208,
0
],
"parameters": {
"operation": "create",
"base": {
"__rl": true,
"value": "YOUR_AIRTABLE_BASE_ID",
"mode": "id"
},
"table": {
"__rl": true,
"value": "YOUR_AIRTABLE_TABLE_ID",
"mode": "id"
},
"columns": {
"mappingMode": "autoMapInputData",
"schema": [
{
"id": "name",
"displayName": "name",
"type": "string"
},
{
"id": "email",
"displayName": "email",
"type": "string"
},
{
"id": "phone",
"displayName": "phone",
"type": "string"
},
{
"id": "company",
"displayName": "company",
"type": "string"
},
{
"id": "message",
"displayName": "message",
"type": "string"
},
{
"id": "service",
"displayName": "service",
"type": "string"
},
{
"id": "timestamp",
"displayName": "timestamp",
"type": "dateTime"
},
{
"id": "source",
"displayName": "source",
"type": "string"
}
]
}
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
}
},
{
"id": "fa2a56bd-b7b4-4200-aa93-0eb5adc80906",
"name": "Code \u2014 Normaliser num\u00e9ro t\u00e9l\u00e9phone",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
432,
0
],
"parameters": {
"jsCode": "// Normalise le num\u00e9ro de t\u00e9l\u00e9phone pour Evolution API\n// Supporte les formats DE (49) et CM (237)\nconst input = $json;\nlet phoneInput = input.phone || (input.fields ? input.fields.phone : '') || '';\n\nlet raw = phoneInput.toString().replace(/[^0-9]/g, '');\nif (raw.startsWith('00')) raw = raw.slice(2);\n\nlet finalNumber = '';\n\n// Allemagne (49)\nif (raw.startsWith('49')) {\n finalNumber = raw;\n} else if (raw.startsWith('0') && (raw.length === 10 || raw.length === 11)) {\n finalNumber = '49' + raw.slice(1);\n}\n// Cameroun (237)\nelse if (raw.startsWith('237')) {\n finalNumber = raw;\n} else if (raw.match(/^[236][0-9]{8}$/)) {\n finalNumber = '237' + raw;\n} else {\n finalNumber = raw;\n}\n\nreturn { ...input, normalizedNumber: finalNumber, debug_raw: raw };"
}
},
{
"id": "8d284f4c-941a-482a-994d-e0ae8107ab50",
"name": "WhatsApp \u2014 Envoyer confirmation client",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
656,
0
],
"parameters": {
"method": "POST",
"url": "=https://YOUR_EVOLUTION_API_URL/message/sendText/YOUR_INSTANCE_NAME",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "apikey",
"value": "={{ $env.EVOLUTION_API_KEY }}"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"number\": \"{{ $json.normalizedNumber }}\",\n \"text\": \"\ud83d\udc4b Bonjour {{ $json.fields.name }}, merci pour votre demande concernant {{ $json.fields.service }}. Nous vous r\u00e9pondrons dans les 24h.\",\n \"delay\": 0\n}"
}
},
{
"id": "f4c792f2-f401-4795-9975-0830e2d5a80a",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.5,
"position": [
848,
0
],
"parameters": {
"options": {}
}
}
],
"connections": {
"Webhook \u2014 Kontaktformular": {
"main": [
[
{
"node": "Code \u2014 Extrait donn\u00e9es formulaire",
"type": "main",
"index": 0
}
]
]
},
"Code \u2014 Extrait donn\u00e9es formulaire": {
"main": [
[
{
"node": "Airtable \u2014 Cr\u00e9er contact CRM",
"type": "main",
"index": 0
}
]
]
},
"Airtable \u2014 Cr\u00e9er contact CRM": {
"main": [
[
{
"node": "Code \u2014 Normaliser num\u00e9ro t\u00e9l\u00e9phone",
"type": "main",
"index": 0
}
]
]
},
"Code \u2014 Normaliser num\u00e9ro t\u00e9l\u00e9phone": {
"main": [
[
{
"node": "WhatsApp \u2014 Envoyer confirmation client",
"type": "main",
"index": 0
}
]
]
},
"WhatsApp \u2014 Envoyer confirmation client": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
}
},
"tags": [
"crm",
"airtable",
"whatsapp",
"contact-form"
]
}
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.
airtableTokenApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
CRM Automatisierung — Kontaktformular → Airtable + WhatsApp. Uses airtable, httpRequest. Webhook trigger; 6 nodes.
Source: https://github.com/guilloulearnlife/n8n-portfolio/blob/24614da8343195909d722fe7754bfcdb6d1820bf/workflows/crm-automatisierung.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
qualiopi. Uses airtable, telegram, emailSend, httpRequest. Webhook trigger; 51 nodes.
How it works • Webhook triggers from content creation system in Airtable • Downloads media (images/videos) from Airtable URLs • Uploads media to Postiz cloud storage • Schedules or publishes content a
This workflow automatically deletes user data from different apps/services when a specific slash command is issued in Slack.
This guide will walk you through setting up your n8n workflow. By the end, you'll have a fully automated system for managing your contract employee placements, from generating documents to sending ren
HR teams, IT Operations, and System Administrators managing employee onboarding at scale. It’s perfect if you use Odoo 18 to trigger account requests and need Redmine + GitLab accounts created instant