Automatisation du traitement de formulaires Tally
Ceci est unLead Generationworkflow d'automatisation du domainecontenant 11 nœuds.Utilise principalement des nœuds comme Set, Wait, Gmail, Webhook, Airtable. Utiliser Gmail pour automatiser les réponses aux soumissions de formulaires Tally vers Airtable
- •Compte Google et informations d'identification Gmail API
- •Point de terminaison HTTP Webhook (généré automatiquement par n8n)
- •Clé API Airtable
Catégorie
{
"id": "5ecs295v3ZaiY8HM",
"meta": {
"instanceId": "e95c8554b03e2c16a5c8c44cc7d45f6192b966fba75d5438d1201989ceff13e2",
"templateCredsSetupCompleted": true
},
"name": "Automate a Tally Form",
"tags": [],
"nodes": [
{
"id": "de34d97a-e3e8-4be7-9a2b-c77222eeb2ca",
"name": "Modifier les champs",
"type": "n8n-nodes-base.set",
"position": [
1060,
1060
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "0186e9c9-424c-4ad8-8382-1614cf48c9d1",
"name": "full_name",
"type": "string",
"value": "={{ $json.body.data.fields[0].value }}"
},
{
"id": "e5559efc-1458-48e6-a207-f7fea896e930",
"name": "company_name",
"type": "string",
"value": "={{ $json.body.data.fields[1].value }}"
},
{
"id": "bbc04ed4-a8f7-4778-bfdc-038c637320fa",
"name": "job_title",
"type": "string",
"value": "={{ $json.body.data.fields[2].value }}"
},
{
"id": "8175addd-ef95-45f9-b307-b218d6ede2be",
"name": "email",
"type": "string",
"value": "={{ $json.body.data.fields[3].value }}"
},
{
"id": "f017c0bd-bd5d-4a5e-967f-bb27c514f5ee",
"name": "phone_number",
"type": "string",
"value": "={{ $json.body.data.fields[4].value }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "635a0ccc-dd60-4e24-aaff-50dda69e9705",
"name": "Attente",
"type": "n8n-nodes-base.wait",
"position": [
1960,
1060
],
"webhookId": "f647bd2e-8bdd-49ab-8eba-8a1db07bc2e8",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "8592b7dc-baa5-4306-9ffa-f341ade8e434",
"name": "Webhook : Tally",
"type": "n8n-nodes-base.webhook",
"position": [
620,
1060
],
"webhookId": "e92bb825-14ff-43e0-bd7c-24504d4acb56",
"parameters": {
"path": "formulaire-tally",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "316dcbae-3957-4109-a984-cbf068529c74",
"name": "Airtable : Créer un enregistrement",
"type": "n8n-nodes-base.airtable",
"position": [
1600,
1060
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appPk6zfIQ1EbBq43",
"cachedResultUrl": "https://airtable.com/appPk6zfIQ1EbBq43",
"cachedResultName": "Client Requests"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblLkuoQ9AYsAQ0io",
"cachedResultUrl": "https://airtable.com/appPk6zfIQ1EbBq43/tblLkuoQ9AYsAQ0io",
"cachedResultName": "Client Requests"
},
"columns": {
"value": {
"Email": "={{ $json.email }}",
"Full Name": "={{ $json.full_name }}",
"Job Title": "={{ $json.job_title }}",
"Company Name": "={{ $json.company_name }}",
"Phone Number": "={{ $json.phone_number }}"
},
"schema": [
{
"id": "Full Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Full Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Company Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job Title",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Job Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone Number",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Phone Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Submission Date",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Submission Date",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "fbET2GdSoJjK5Idu",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2.1
},
{
"id": "9fc0fee1-0896-4d3b-bb97-30c6bc8e9493",
"name": "GMAIL : Envoyer un message",
"type": "n8n-nodes-base.gmail",
"position": [
2360,
1060
],
"webhookId": "52b3183a-ee31-49ed-8711-d822c07ea3aa",
"parameters": {
"sendTo": "={{ $json.fields.Email }}",
"message": "=<p>Hi {{ $json.fields['Full Name'] }},</p>\n\n<p>Thanks for reaching out! We’ve received your request and our team will get back to you as soon as possible.</p>\n\n<p><strong>Here’s a quick summary:</strong></p>\n<ul>\n\n <li><strong>Company:</strong>{{ $json.fields['Company Name'] }} </li>\n <li><strong>Job Title:</strong> {{ $json.fields['Job Title'] }}</li>\n\n<p>We’ll be in touch very soon!</p>\n<p>— The Team</p>\n\n",
"options": {},
"subject": "Thanks for reaching out!"
},
"credentials": {
"gmailOAuth2": {
"id": "FKD43HaVeVoUXOi0",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "531b37a5-ab97-401f-b8c1-71b076319121",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
160,
620
],
"parameters": {
"width": 200,
"height": 340,
"content": "**Still manually copy-pasting your Tally form responses?**\n\nWhat if every submission went straight into Airtable — and the user got an automatic email right after?\n\nThat’s exactly what this workflow does.\nNo code, no headache — just a simple and fast automation:\n\n**Tally → Airtable → Gmail.**\n\n"
},
"typeVersion": 1
},
{
"id": "90a2d5a9-1138-468e-b5be-1f98b0a027eb",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
560,
1240
],
"parameters": {
"color": 3,
"height": 1460,
"content": "## STEP 1 — Capture Tally Form Responses\n\n### Goal\nTrigger the workflow automatically every time someone submits your Tally form.\n\n### What we're setting up\nA webhook that catches form responses and kicks off the rest of the flow.\n\n### Steps to follow\nAdd a Webhook node\n\nParameter :\tValue\nMethod :\tPOST\nPath :\tformulaire-tally\nAuthentication : None\nRespond : Immediately\n\n\nSave the workflow\n→ This will generate a URL like:\n\n*https://your-workspace.n8n.cloud/webhook-test/formulaire-tally*\n*\n💡 Use the Test URL first (found under Parameters > Test URL)\n\nHead over to Tally\nGo to your form → Form Settings > Integrations > Webhooks\nPaste the Test URL into the Webhook field\nEnable the webhook ✅\n\nSubmit a test entry\n→ Tally won’t send anything until a real submission is made.\nThis step is required for n8n to capture the structure.\n\n### Expected output\n\nn8n receives a JSON object containing:\n\nGeneral info (IDs, timestamps, etc.)\n\nA fields[] array with all the form inputs (name, email, etc.)\n\nEach field is nicely structured with a label, key, type, and most importantly, a value.\n\nPerfect foundation for the next step: data cleanup."
},
"typeVersion": 1
},
{
"id": "28b97f32-e5ac-4368-a644-663ce1f0fce7",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
1240
],
"parameters": {
"color": 6,
"width": 300,
"height": 1160,
"content": "## STEP 2 — Clean and Structure the Form Data (Set node)\n\n### Goal\n\nTake the raw data sent by Tally and turn it into clean, readable JSON that's easy to use in the rest of the workflow.\n\nTally sends the responses inside a big array called field.\n\nCan you grab a field directly with something like {{$json[\"fields\"][3][\"value\"]}}? Yes.\n\nBut a good workflow is like a sock drawer — when everything’s folded and labeled, life’s just easier.\n\nSo we’re going to clean it up using a Set node.\n\n### Steps to follow\n\nAdd a Set node right after the Webhook.\n\nEnable the “Keep only set” option.\n\nDefine the following fields in the Set node:\n\nField name:\tExpression\nfull_name:\t{{$json[\"fields\"][0][\"value\"]}}\ncompany_name:\t{{$json[\"fields\"][1][\"value\"]}}\njob_title:\t{{$json[\"fields\"][2][\"value\"]}}\nemail:\t{{$json[\"fields\"][3][\"value\"]}}\nphone_number:\t{{$json[\"fields\"][4][\"value\"] ?? \"\"}}\nsubmission_date:\t{{$now.toISOString()}}\n\n⚠️ The order of fields[] depends on your Tally form. If you change the question order, make sure to update these indexes accordingly.\n\n### Expected output\n\nYou’ll get a clean, structured JSON like this:\n\nNow your data is clear, labeled, and ready for the rest of your workflow."
},
"typeVersion": 1
},
{
"id": "6bd0534c-1b1f-43ae-927a-b976d7a8de7e",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1540,
1220
],
"parameters": {
"color": 2,
"width": 280,
"height": 1500,
"content": "## STEP 3 — Save Data in Airtable\n\nEvery time someone submits your Tally form, their info is automatically added to an Airtable base. No more copy-pasting — everything lands right where it should.\n\n## Steps to follow\n1. Create your Airtable base\nStart by creating a base named Leads (or whatever you prefer), with a table called Form Submissions.\n\nAdd the following columns in this exact order so everything maps correctly later:\n\n### Generate an Airtable token\nSo n8n can send data into your base:\n\nGo to 👉 [ https://airtable.com/create/tokens](https://airtable.com/create/tokens\n)\n\nClick Create token\n\nGive it a name (e.g. Tally Automation)\n\nCheck the following permissions:\n\ndata.records:read\n\ndata.records:write\n\nschema.bases:read\n\nUnder Base access, either choose your base manually or select “All current and future bases”\n\nClick Create token and copy the generated key\n\n### Add configure the Airtable node in n8n\n\nNode: Airtable\n\nOperation: Create\n\nAuthentication: Personal Access Token\n\nPaste your token\n\nn8n will suggest your base and table (or you can manually grab the IDs from the URL:\nhttps://airtable.com/appXXXXXXXX/tblYYYYYYYY/...)\n\nMap your fields\nInside the Airtable node, add the following field mappings:\n\nEvery new Tally form submission automatically creates a new row in your Airtable base."
},
"typeVersion": 1
},
{
"id": "0ecbb548-23dd-4f81-9ba7-b60da12227d9",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1980,
1240
],
"parameters": {
"color": 4,
"width": 520,
"height": 900,
"content": "## STEP 4 — Send an Automatic Confirmation Email\n\n### Goal\n\nSend a professional email as soon as a form is completed\n\n### Steps to follow\n\n1. Add a Wait node\n\nYou don’t want the email to go out instantly — it feels cold and robotic.\n→ Add a Wait node right after Airtable.\n\nMode: Wait for a period of time\n\nDelay: 5 to 10 minutes\n\nUnit: Minutes\n\n2. Add a Gmail > Send Email node\nAuthentication: OAuth2\n\nConnect a Gmail account (business or test)\n⚠️ No API keys here — Gmail requires OAuth.\n\n3. Configure the Send Email node\n\n\n\nField\tValue\n\nCredential to connect with Gmail account via OAuth2\n\nResource :\tMessage\nOperation :\tSend\nTo :\t{{ $json.fields[\"Email\"] }}\nSubject : Thanks for reaching out!\nEmail Type : HTML\nMessage: (but do the mapping correctly using the Input so that lead receives its name correctly )"
},
"typeVersion": 1
},
{
"id": "27ecea70-1450-40a4-9adc-b71c3916d403",
"name": "Note adhésive5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2580,
1020
],
"parameters": {
"width": 320,
"height": 200,
"content": "## End of the Workflow\n\nAnd that’s it — your automation is live!\n\nYour lead fills out the Tally form → the info goes to Airtable → they get a clean, professional email without you doing a thing."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "734ed2ae-e251-4b36-a008-4f8f1703fe45",
"connections": {
"635a0ccc-dd60-4e24-aaff-50dda69e9705": {
"main": [
[
{
"node": "9fc0fee1-0896-4d3b-bb97-30c6bc8e9493",
"type": "main",
"index": 0
}
]
]
},
"de34d97a-e3e8-4be7-9a2b-c77222eeb2ca": {
"main": [
[
{
"node": "316dcbae-3957-4109-a984-cbf068529c74",
"type": "main",
"index": 0
}
]
]
},
"8592b7dc-baa5-4306-9ffa-f341ade8e434": {
"main": [
[
{
"node": "de34d97a-e3e8-4be7-9a2b-c77222eeb2ca",
"type": "main",
"index": 0
}
]
]
},
"316dcbae-3957-4109-a984-cbf068529c74": {
"main": [
[
{
"node": "635a0ccc-dd60-4e24-aaff-50dda69e9705",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Intermédiaire - Génération de leads
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Baptiste Fort
@baptistefort👋 I'm Baptiste Fort. What if automating was simply our way of taking back control in a world that's moving too fast? I build workflows that are simple, useful — sometimes invisible lol. Automation isn’t cheating. It’s just being one step ahead.
Partager ce workflow