{
  "id": "ySBT8cLVgOBLHPAg",
  "meta": {
    "instanceId": "18b0d04ad5030054be4ab49562e84ea4a079ab4cb036003697394140227c7e76",
    "templateCredsSetupCompleted": true
  },
  "name": "Centralize your forms and reply automatically with Tally + Airtable + Gmail",
  "tags": [],
  "nodes": [
    {
      "id": "6fca68c6-4f99-46a6-b5e8-c5e537734e7b",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        1168,
        448
      ],
      "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": "bbe5bde7-1f23-4bbb-8e42-cd9d43b6ad1b",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        1888,
        448
      ],
      "webhookId": "f647bd2e-8bdd-49ab-8eba-8a1db07bc2e8",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "12105139-18e1-485c-9b21-6c83ad3ba721",
      "name": "Webhook : Tally",
      "type": "n8n-nodes-base.webhook",
      "position": [
        848,
        448
      ],
      "webhookId": "e92bb825-14ff-43e0-bd7c-24504d4acb56",
      "parameters": {
        "path": "formulaire-tally",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "de5f57be-7ebc-479a-a30b-1a19e05d8799",
      "name": "Airtable : Create a record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1488,
        448
      ],
      "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": "credential-id",
          "name": "airtableTokenApi Credential"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "9bb28166-bf1e-49aa-be3b-5538c7cd629e",
      "name": "GMAIL : Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2208,
        448
      ],
      "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": "credential-id",
          "name": "gmailOAuth2 Credential"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "b4de773e-1454-4c8f-a156-273d040d0859",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        128
      ],
      "parameters": {
        "width": 200,
        "height": 484,
        "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": "f24cb0f3-2a17-4301-a6d9-9421c62f5733",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        -1024
      ],
      "parameters": {
        "color": 3,
        "height": 1636,
        "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![AutomateTallyFormn8netape1.png](6)\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": "82800864-d262-4ce6-879f-651706f1ca36",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        -544
      ],
      "parameters": {
        "color": 6,
        "width": 380,
        "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": "2278b4e6-73cb-4f7d-ab41-2a2a7aff1311",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        -1024
      ],
      "parameters": {
        "color": 2,
        "width": 312,
        "height": 1644,
        "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": "420df683-9b1c-471d-8c90-1244db3feb95",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1712,
        -480
      ],
      "parameters": {
        "color": 4,
        "width": 712,
        "height": 1092,
        "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![AutomateTallyFormn8netape11.png](15)\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": "c6675cf5-a621-4e37-a400-74257354a135",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2416,
        416
      ],
      "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": "efdec661-3213-4bf6-b3a2-2a13c9a07722",
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "GMAIL : Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Airtable : Create a record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook : Tally": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable : Create a record": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}