Streamline quote request processing by automating notifications and data entry using Gmail, Airtable, and Slack. This workflow connects Tally for quote submissions, instantly sending request details to your team via Slack and updating Airtable for organized tracking. Features real-time notifications, automatic data syncing, and efficient team collaboration. Perfect for sales teams managing high volumes of quote requests or client inquiries. Requires 3 accounts: Gmail OAuth, Airtable API, Slack API. Save up to 10 hours a week by automating communication and data management, ensuring no request gets overlooked.
Categories
APIs
Credentials
Copy or download to import into your n8n instance
{ "id": "YBUP7BDTMrzcWncr", "meta": { "instanceId": "18b0d04ad5030054be4ab49562e84ea4a079ab4cb036003697394140227c7e76", "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 ], "webhookId": "f9c8eafb-ecaa-4b32-a6b5-fb10dbee1f19", "parameters": {}, "typeVersion": 1.1 }, { "id": "43240a01-1678-46b8-89ef-e22b7b34b68e", "name": "Webhook : Tally", "type": "n8n-nodes-base.webhook", "position": [ 112, 560 ], "webhookId": "2eefd271-2928-42a7-98ef-7fc65524a950", "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 ], "webhookId": "38134cd8-0b71-4d19-bab4-3c473cb35f47", "parameters": { "sendTo": "={{ $('Edit Fields').item.json['Email Address'] }}", "message": "=Hi {{ $('Edit Fields').item.json.Name }} ,\n\nThanks a lot for your quote request β weβve received your information!\n\nOur team will get back to you within the next 24 hours to discuss your project.\n\nTalk soon, \nβ The WebExperts Team", "options": {}, "subject": "Thanks for your quote request π" }, "credentials": { "gmailOAuth2": { "id": "h1ZY21K9DQNwgOhO", "name": "GMAIL BAPTISTE FORT" } }, "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 (β¬)": "={{ $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 (β¬)", "type": "string", "display": true, "removed": false, "readOnly": false, "required": false, "displayName": "Estimated Budget (β¬)", "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": { "id": "KrRcXyxYN2kyob57", "name": "Airtable Personal Access Token account 2" } }, "typeVersion": 2.1 }, { "id": "1261dcfa-1c5e-4cb0-afa2-b4944a294373", "name": "Send a message", "type": "n8n-nodes-base.slack", "position": [ 1136, 560 ], "webhookId": "fd880910-128a-47f8-98a6-c1b486d98381", "parameters": { "text": "=:new: *New quote request received!*\n\n*π€ Name: {{ $json.fields.Name }}\n*π§ Email: {{ $json.fields.Email }}\n*πΌ Service: {{ $json.fields['Type of Service'] }}\n*π° Budget: {{ $json.fields['Estimated Budget (β¬)'] }}\n*β±οΈ Timeline: {{ $json.fields['Preferred Timeline'] }}\n*π Notes: {{ $json.fields['Additional Details'] }}\n", "select": "channel", "channelId": { "__rl": true, "mode": "id", "value": "=YOUR CANAL" }, "otherOptions": {}, "authentication": "oAuth2" }, "credentials": { "slackOAuth2Api": { "id": "ERqGlDjoRRcGe4Qj", "name": "Slack account 2" } }, "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 β Airtable β Slack β 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 β 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 β 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βll 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 β 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 β 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 β `{{ $json.Name }}`\n- Email β `{{ $json[\"Email Address\"] }}`\n- Service β `{{ $json[\"Type of Service Needed\"] }}`\n- Budget β `{{ $json[\"Estimated Budget\"] }}`\n- Timeline β `{{ $json[\"Preferred Timeline\"] }}`\n- Notes β `{{ $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 β 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**π€ Name:** {{ Name }} \n**π§ Email:** {{ Email }} \n**πΌ Service:** {{ Service }} \n**π° Budget:** {{ Budget }} \n**β±οΈ Timeline:** {{ Timeline }} \n**π 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 β 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 β Send Email via Gmail ==**\n\n**To:** `{{ $('Edit Fields').item.json[\"Email Address\"] }}` \n**Subject:** \"Thanks for your quote request π\" \n**Email Type:** HTML\n\n**Email Body:**\n\nHi `{{ $('Edit Fields').item.json.Name }}`,\n\nThanks a lot for your quote request β weβve received your information!\n\nOur team will get back to you within the next 24 hours to discuss your project.\n\nTalk soon, \nβ The WebExperts Team\n" }, "typeVersion": 1 } ], "active": false, "pinData": {}, "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 } ] ] } } }
Streamline your data collection by automating email scraping from Google Maps using the Google Sheets API. This workflow efficiently extracts business emails, removes duplicates, and organizes them in real-time for easy access. Key features include batch processing to handle large datasets, HTTP requests for seamless API integration, and built-in filters to refine your data. Ideal for data managers or marketers needing accurate contact lists from local businesses. Requires 1 account: Google Sheets OAuth. Save up to 10 hours weekly by automating email collection and maintaining up-to-date contact information effortlessly.
Automate lead generation by extracting business data from Google Maps directly into Google Sheets using the Google Sheets API. This workflow eliminates manual data entry, allowing you to focus on engaging potential customers. Features include real-time data integration, automated updates from Google Maps, and seamless execution of data processing steps. Perfect for data management teams needing to compile lists of local businesses or sales teams targeting specific geographic areas. Requires 1 account: Google Sheets OAuth. Save up to 10 hours weekly by automating the collection of thousands of leads effortlessly.
Automate data management tasks using OpenAI GPT and Google Sheets API for efficient data extraction and processing. This workflow enables you to automatically extract relevant information from HTML sources and consolidate it into Google Sheets, simplifying your data organization. Key features include real-time data extraction, seamless HTML parsing, and automated entry into spreadsheets. Perfect for data analysts or teams managing large datasets that require constant updates. Requires 2 accounts: OpenAI API Key and Google Sheets OAuth. Save up to 10 hours weekly by automating data entry and retrieval, ensuring your team has accurate information at their fingertips.
Streamline data management tasks by automating data entry and processing with Google Sheets API and OpenAI's GPT. This workflow allows you to intelligently manage your data through automated inputs and real-time updates, ensuring accuracy and efficiency. Key features include seamless integration with Google Sheets for instant data syncing, AI-powered data parsing for structured outputs, and automated response generation for queries. Ideal for data analysts and project managers handling large datasets or repetitive tasks. Requires 3 accounts: OpenAI API, Serp API, Google Sheets OAuth. Experience a 70% reduction in manual data handling time and improve accuracy by 90% with automated processes.
Configure credentials and update service-specific settings before executing the workflow. Review required credentials in the Technical Details section above.