This workflow corresponds to n8n.io template #5458 — we link there as the canonical source.
This workflow follows the Airtable → Gmail 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 →
{
"id": "YBUP7BDTMrzcWncr",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Automate Quote Request Processing with Tally, Airtable, Slack and Gmail",
"tags": [],
"nodes": [
{
"id": "6a6880c5-cab9-4473-8515-672049ce61e3",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
1328,
560
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "43240a01-1678-46b8-89ef-e22b7b34b68e",
"name": "Webhook : Tally",
"type": "n8n-nodes-base.webhook",
"position": [
112,
560
],
"parameters": {
"path": "Request a Quote",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "8099b72c-4d67-4bdf-8d07-e286864b4413",
"name": "GMAIL : Send a message",
"type": "n8n-nodes-base.gmail",
"position": [
1584,
560
],
"parameters": {
"sendTo": "={{ $('Edit Fields').item.json['Email Address'] }}",
"message": "=Hi {{ $('Edit Fields').item.json.Name }} ,\n\nThanks a lot for your quote request \u2014 we\u2019ve received your information!\n\nOur team will get back to you within the next 24 hours to discuss your project.\n\nTalk soon, \n\u2014 The WebExperts Team",
"options": {},
"subject": "Thanks for your quote request \ud83d\ude4c"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "0ecb54fe-09cb-4778-b740-02c891576ef4",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
416,
560
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "95bdaad3-0b5e-44a4-bbd3-060d425d7b68",
"name": "Name",
"type": "string",
"value": "={{ $json.body.data.fields[0].label }}"
},
{
"id": "479970d8-e639-463a-bf7a-5f8d55cd65b2",
"name": "Email Address",
"type": "string",
"value": "={{ $json.body.data.fields[1].value }}"
},
{
"id": "ce6234c2-ceff-4191-8942-55a88dc47c77",
"name": "Type of Service Needed",
"type": "string",
"value": "={{ $json.body.data.fields[2].value }}"
},
{
"id": "d2cb542d-1145-466b-93b4-4e377ecc1334",
"name": " Estimated Budget",
"type": "string",
"value": "={{ $json.body.data.fields[3].value }}"
},
{
"id": "e375ee00-745c-472a-862c-dfae10867d3f",
"name": "Preferred Timeline",
"type": "string",
"value": "={{ $json.body.data.fields[4].value }}"
},
{
"id": "0165025d-aee9-4853-ae94-314644aab9e1",
"name": "Additional Details or Questions",
"type": "string",
"value": "={{ $json.body.data.fields[5].value }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "51b5ca70-f018-4f27-a321-1edc79f917ee",
"name": "Create a record",
"type": "n8n-nodes-base.airtable",
"position": [
800,
560
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appZ7CtNukjbwxDap",
"cachedResultUrl": "https://airtable.com/appZ7CtNukjbwxDap",
"cachedResultName": "Request A Quote - Airtable Base"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblcS0ZQeEo4dC1Iv",
"cachedResultUrl": "https://airtable.com/appZ7CtNukjbwxDap/tblcS0ZQeEo4dC1Iv",
"cachedResultName": "Request A Quote - Airtable Base"
},
"columns": {
"value": {
"Name": "={{ $json.Name }}",
"Email": "={{ $json['Email Address'] }}",
"Type of Service": "={{ $json['Type of Service Needed'] }}",
"Additional Details": "={{ $json['Additional Details or Questions'] }}",
"Preferred Timeline": "={{ $json['Preferred Timeline'] }}",
"Estimated Budget (\u20ac)": "={{ $json[' Estimated Budget'] }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Type of Service",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Type of Service",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Estimated Budget (\u20ac)",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Estimated Budget (\u20ac)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Preferred Timeline",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Preferred Timeline",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Additional Details",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Additional Details",
"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": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "1261dcfa-1c5e-4cb0-afa2-b4944a294373",
"name": "Send a message",
"type": "n8n-nodes-base.slack",
"position": [
1136,
560
],
"parameters": {
"text": "=:new: *New quote request received!*\n\n*\ud83d\udc64 Name: {{ $json.fields.Name }}\n*\ud83d\udce7 Email: {{ $json.fields.Email }}\n*\ud83d\udcbc Service: {{ $json.fields['Type of Service'] }}\n*\ud83d\udcb0 Budget: {{ $json.fields['Estimated Budget (\u20ac)'] }}\n*\u23f1\ufe0f Timeline: {{ $json.fields['Preferred Timeline'] }}\n*\ud83d\udcdd Notes: {{ $json.fields['Additional Details'] }}\n",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "=YOUR CANAL"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "95ad5ca7-5cc4-44d0-81e8-1b91a3e436cd",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
480
],
"parameters": {
"width": 380,
"height": 220,
"content": "**=== AUTOMATION OVERVIEW ===**\n\n**Workflow:** Tally \u2192 Airtable \u2192 Slack \u2192 Gmail \n**Purpose:** Automatically process client quote requests\n\n*What if your quote requests managed themselves?*\n\nInstead of manually checking emails, notifying your team, and logging leads \u2014 this automation handles it all.\n"
},
"typeVersion": 1
},
{
"id": "02e8d819-c9ad-42e1-892b-daa4abab5571",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
176
],
"parameters": {
"color": 2,
"height": 520,
"content": "**== STEP 1 \u2013 Webhook (Tally) ==**\n\n**Trigger:** When a user submits the quote form. \n**Type:** POST Webhook \n**Path:** `/Request a Quote` \n**Authentication:** None \n**Respond:** Immediately\n\nTally sends the form fields as an array in `body.data.fields`. \nEach item contains a `label` and a `value`.\n\nWe\u2019ll extract and map these manually in the next step.\n"
},
"typeVersion": 1
},
{
"id": "3ca3da74-7036-4618-b77b-6956a3af6015",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
96
],
"parameters": {
"color": 3,
"width": 320,
"height": 604,
"content": "**== STEP 2 \u2013 Edit Fields ==**\n\n**Goal:** Convert raw array into usable fields.\n\nUse a Set node or Function with manual mapping:\n\n- `Name` = `{{ $json.body.data.fields[0].label }}`\n- `Email Address` = `{{ $json.body.data.fields[1].value }}`\n- `Type of Service Needed` = `{{ $json.body.data.fields[2].value }}`\n- `Estimated Budget` = `{{ $json.body.data.fields[3].value }}`\n- `Preferred Timeline` = `{{ $json.body.data.fields[4].value }}`\n- `Additional Details` = `{{ $json.body.data.fields[5].value }}`\n\nThis prepares clean variables for Airtable, Slack and Gmail.\n"
},
"typeVersion": 1
},
{
"id": "4980315f-a820-40fe-859a-3fb6f1866d9d",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
160
],
"parameters": {
"color": 4,
"width": 444,
"height": 544,
"content": "**== STEP 3 \u2013 Create Airtable Record ==**\n\n**Base:** Request a Quote - Airtable Base \n**Operation:** Create \n**Table:** Same name \n**Mode:** Map Each Column Manually\n\n**Mapped fields:**\n- Name \u2192 `{{ $json.Name }}`\n- Email \u2192 `{{ $json[\"Email Address\"] }}`\n- Service \u2192 `{{ $json[\"Type of Service Needed\"] }}`\n- Budget \u2192 `{{ $json[\"Estimated Budget\"] }}`\n- Timeline \u2192 `{{ $json[\"Preferred Timeline\"] }}`\n- Notes \u2192 `{{ $json[\"Additional Details\"] }}`\n\nEach request is now stored as a structured CRM lead.\n"
},
"typeVersion": 1
},
{
"id": "d61542e0-f8a0-4839-8743-b7e1de00c8a5",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1072,
160
],
"parameters": {
"color": 5,
"width": 216,
"height": 540,
"content": "**== STEP 4 \u2013 Send Slack Notification ==**\n\n**Channel:** #sales (or any other) \n**Message Type:** Simple text\n\n**Slack message:**\n:new: *New quote request received!*\n\n**\ud83d\udc64 Name:** {{ Name }} \n**\ud83d\udce7 Email:** {{ Email }} \n**\ud83d\udcbc Service:** {{ Service }} \n**\ud83d\udcb0 Budget:** {{ Budget }} \n**\u23f1\ufe0f Timeline:** {{ Timeline }} \n**\ud83d\udcdd Notes:** {{ Notes }}\n\nOptionally include an Airtable link at the bottom.\n"
},
"typeVersion": 1
},
{
"id": "5e360dd9-ed44-44e8-9bc9-0a017018e97d",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1280,
240
],
"parameters": {
"color": 6,
"width": 200,
"height": 456,
"content": "**== STEP 5 \u2013 Wait Node ==**\n\n**Purpose:** Delay the confirmation email by 5 minutes. \nThis allows a human to respond first if needed.\n\n**Settings:**\n- Resume After Time Interval\n- Wait Amount: 5\n- Wait Unit: Minutes\n"
},
"typeVersion": 1
},
{
"id": "3082e948-6062-4e64-adcf-2e01552f4193",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1472,
160
],
"parameters": {
"color": 7,
"width": 336,
"height": 536,
"content": "**== STEP 6 \u2013 Send Email via Gmail ==**\n\n**To:** `{{ $('Edit Fields').item.json[\"Email Address\"] }}` \n**Subject:** \"Thanks for your quote request \ud83d\ude4c\" \n**Email Type:** HTML\n\n**Email Body:**\n\nHi `{{ $('Edit Fields').item.json.Name }}`,\n\nThanks a lot for your quote request \u2014 we\u2019ve received your information!\n\nOur team will get back to you within the next 24 hours to discuss your project.\n\nTalk soon, \n\u2014 The WebExperts Team\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "6b50fb1b-4fbe-40b5-8df4-8ce624571377",
"connections": {
"Wait": {
"main": [
[
{
"node": "GMAIL : Send a message",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Create a record",
"type": "main",
"index": 0
}
]
]
},
"Send a message": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Create a record": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
},
"Webhook : Tally": {
"main": [
[
{
"node": "Edit Fields",
"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.
airtableTokenApigmailOAuth2slackOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Every quote request is a potential deal — but only if it's handled quickly, properly, and without things falling through the cracks. What if instead of copy-pasting emails and pinging teammates manually, your entire process just... ran itself?
Source: https://n8n.io/workflows/5458/ — 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.
Wait. Uses httpRequest, itemLists, slack, gmail. Webhook trigger; 29 nodes.
Receive support tickets via webhook, categorize by priority, track SLA deadlines, notify your team on Slack, and send confirmation emails to customers.
This workflow is a fully automated AI matte painting generation system for VFX pipelines, designed to convert a single environment prompt into multiple cinematic background variations. It handles gene
Complete Calendly automation that handles confirmations, cancellations and reschedules in a single workflow. WHAT IT DOES:
Deliver coordinated messages through multiple channels with priority-based formatting, delivery tracking, and compliance logging.