{
  "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
          }
        ]
      ]
    }
  }
}