← All Lead Capture Workflows
BillionVerifyGoogle Forms

Automated customer support with GPT-4o-mini AI triage for Google Forms & Gmail

Pull contacts, verify each address with BillionVerify, and continue to Google Forms β€” only deliverable addresses get through.

Why verify before the send

Sending to invalid, risky, catch-all, or disposable addresses spikes your bounce rate and erodes sender reputation. A verification gate before the Google Forms step removes that risk automatically β€” only deliverable addresses continue, the rest are flagged.

The workflow

BillionVerify β€” verification sits right before the send.

+9
n8n steps
+6
n8n steps

Node by node

  1. 1
    Google Form Responses TriggerTriggerΒ· n8n

    Starts the workflow β€” on a schedule, a webhook, or manually while you test.

  2. 2
    Map Form Column NamesSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  3. 3
    Analyze with AI TriageSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  4. 4
    Parse AI Analysis ResultsSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  5. 5
    Route by Priority LevelLogicΒ· n8n

    Routes items based on the workflow logic.

  6. 6
    Generate Urgent ResponseSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  7. 7
    Generate Standard ResponseSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  8. 8
    Generate Friendly ResponseSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  9. 9
    Extract Email Subject and BodySourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  10. 10
    Verify Email (BillionVerify)VerifyΒ· billionverify

    The BillionVerify node verifies the address β€” status (valid / invalid / risky / catch-all / role / disposable), is_deliverable, and a confidence score β€” before anything is sent.

  11. 11
    IF deliverableLogicΒ· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  12. 12
    Send Auto-Reply via GmailSendΒ· n8n

    Sends only to verified, deliverable addresses. Swap in your own provider node if you send elsewhere.

  13. 13
    Prepare Data for TrackingSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  14. 14
    Is High Priority?LogicΒ· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  15. 15
    Alert Team on SlackSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

  16. 16
    Log to Tracking SheetSourceΒ· n8n

    Provides or transforms the contact data flowing through the workflow.

Workflow JSON

Copy or download this workflow, then import it in n8n (Workflows β†’ Import from File / Paste). Install the BillionVerify community node first, then add your API key credential.

verify-emails-in-google-forms.json
{
  "name": "Automated customer support with GPT-4o-mini AI triage for Google Forms & Gmail + BillionVerify",
  "nodes": [
    {
      "id": "00ee0984-b75a-4eda-939d-db882cee466d",
      "name": "Google Form Responses Trigger",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        -576,
        352
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1ef2d3c8-4431-4c88-9f15-09be5d27c6f0",
      "name": "Map Form Column Names",
      "type": "n8n-nodes-base.set",
      "position": [
        -240,
        352
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "emailColumnName",
              "type": "string",
              "value": "Email Address"
            },
            {
              "id": "id-2",
              "name": "inquiryColumnName",
              "type": "string",
              "value": "Inquiry"
            },
            {
              "id": "id-3",
              "name": "nameColumnName",
              "type": "string",
              "value": "Name"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "dd8030ab-2052-4789-bb69-95d577d65eba",
      "name": "Analyze with AI Triage",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -16,
        352
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "content": "=You are an expert customer support triage system with deep understanding of multiple languages and cultural context.\n\nAnalyze this customer inquiry:\n\nCustomer Name: {{$json[\"Name\"]}}\nCustomer Email: {{$json[\"Email Address\"]}}\nInquiry: {{$json.inquiry}}\n\nURGENCY CLASSIFICATION RULES (be strict):\n\nHIGH urgency - Use when ANY of these apply:\n- Product is broken/damaged/defective\n- Words indicating immediate need: immediately, urgent, ASAP\n- Customer explicitly states they are troubled or frustrated\n- Complaints or angry tone\n- Request for refund/replacement/exchange\n- Service failure or system down\n- Time-sensitive issues\n\nMEDIUM urgency - Use when:\n- General questions about product usage\n- Feature inquiries or clarifications\n- Manual/documentation questions\n- Non-urgent support requests\n- Neutral tone inquiries\n\nLOW urgency - Use when:\n- General information requests\n- Compliments or positive feedback\n- Future product inquiries\n- Casual questions with no time pressure\n\nCATEGORIES:\n- technical: Software bugs, technical issues, errors, login problems\n- sales: Pricing, product information, purchase inquiries\n- support: How-to questions, usage help, troubleshooting\n- billing: Payment issues, invoices, refunds\n- general: Everything else\n\nSENTIMENT:\n- negative: Complaints, problems, dissatisfaction, frustrated tone\n- neutral: Questions, information requests\n- positive: Compliments, satisfaction, thank you messages\n\nReturn ONLY valid JSON in this format (no markdown, no code blocks):\n{\n  \"urgency\": \"low\" | \"medium\" | \"high\",\n  \"category\": \"technical\" | \"sales\" | \"support\" | \"billing\" | \"general\",\n  \"sentiment\": \"positive\" | \"neutral\" | \"negative\",\n  \"keywords\": [\"keyword1\", \"keyword2\"],\n  \"summary\": \"One sentence summary\"\n}"
            }
          ]
        },
        "builtInTools": {}
      },
      "typeVersion": 2
    },
    {
      "id": "7022d016-142f-40f0-ae43-876b609f7897",
      "name": "Parse AI Analysis Results",
      "type": "n8n-nodes-base.code",
      "position": [
        336,
        352
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// Parse AI analysis results\nconst allData = $input.item.json;\n\nlet analysis = {\n  urgency: 'medium',\n  category: 'general',\n  sentiment: 'neutral',\n  keywords: [],\n  summary: ''\n};\n\nif (allData.output && Array.isArray(allData.output) && allData.output.length > 0) {\n  const outputItem = allData.output[0];\n  if (outputItem.content && Array.isArray(outputItem.content) && outputItem.content.length > 0) {\n    const aiResponse = outputItem.content[0].text || '{}';\n    try {\n      analysis = JSON.parse(aiResponse);\n    } catch (e) {\n      console.log('Failed to parse AI response:', aiResponse);\n    }\n  }\n}\n\n// Get original form data\nconst workflowConfig = $('Map Form Column Names').first().json;\nconst emailColumnName = workflowConfig.emailColumnName || 'Email Address';\nconst inquiryColumnName = workflowConfig.inquiryColumnName || 'Inquiry';\nconst nameColumnName = workflowConfig.nameColumnName || 'Name';\n\nreturn {\n  email: workflowConfig[emailColumnName] || '',\n  inquiry: workflowConfig[inquiryColumnName] || '',\n  name: workflowConfig[nameColumnName] || '',\n  urgency: analysis.urgency,\n  category: analysis.category,\n  sentiment: analysis.sentiment,\n  keywords: analysis.keywords,\n  summary: analysis.summary,\n  timestamp: new Date().toISOString()\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "bf80a552-17a8-445d-bdb7-288ad0d8bb25",
      "name": "Route by Priority Level",
      "type": "n8n-nodes-base.switch",
      "position": [
        560,
        336
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "High Priority",
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.urgency }}",
                    "rightValue": "high"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Medium Priority",
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.urgency }}",
                    "rightValue": "medium"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Low Priority",
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.urgency }}",
                    "rightValue": "low"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "7ca42752-5260-4ddc-abd3-a2e52ba53162",
      "name": "Generate Urgent Response",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        768,
        240
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "content": "=Create a polite, professional, and URGENT response email to this HIGH PRIORITY inquiry.\n\nCustomer Name: {{$json.name}}\nInquiry Category: {{$json.category}}\nSentiment: {{$json.sentiment}}\nInquiry: {{$json.inquiry}}\n\nIMPORTANT INSTRUCTIONS:\n- Acknowledge the urgency and apologize if negative sentiment detected\n- Provide immediate next steps\n- Include a commitment to fast response time (within 1-2 hours)\n- Be empathetic and professional\n\nOutput format (strictly follow):\nSUBJECT: (write urgent subject here)\n\nBODY: (write body here)"
            }
          ]
        },
        "builtInTools": {}
      },
      "typeVersion": 2
    },
    {
      "id": "8715f230-d87d-4ef9-808f-96d5679be8a3",
      "name": "Generate Standard Response",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        768,
        352
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "content": "=Create a polite and professional response email to this inquiry.\n\nCustomer Name: {{$json.name}}\nInquiry Category: {{$json.category}}\nInquiry: {{$json.inquiry}}\n\nOutput format (strictly follow):\nSUBJECT: (write subject here)\n\nBODY: (write body here)"
            }
          ]
        },
        "builtInTools": {}
      },
      "typeVersion": 2
    },
    {
      "id": "24788dbe-f143-499b-b54e-ab2f8b081e5b",
      "name": "Generate Friendly Response",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        768,
        464
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "content": "=Create a polite and friendly response email to this inquiry.\n\nCustomer Name: {{$json.name}}\nInquiry Category: {{$json.category}}\nInquiry: {{$json.inquiry}}\n\nOutput format (strictly follow):\nSUBJECT: (write subject here)\n\nBODY: (write body here)"
            }
          ]
        },
        "builtInTools": {}
      },
      "typeVersion": 2
    },
    {
      "id": "40134468-499c-4c55-bce1-62a991d82ee4",
      "name": "Extract Email Subject and Body",
      "type": "n8n-nodes-base.code",
      "position": [
        1136,
        352
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// Get AI-generated email and triage data\nconst allData = $input.item.json;\n\nlet aiResponse = '';\nif (allData.output && Array.isArray(allData.output) && allData.output.length > 0) {\n  const outputItem = allData.output[0];\n  if (outputItem.content && Array.isArray(outputItem.content) && outputItem.content.length > 0) {\n    aiResponse = outputItem.content[0].text || '';\n  }\n}\n\n// Parse subject and body from AI response\nlet subject = 'Thank you for your inquiry';\nlet body = '';\n\nif (aiResponse) {\n  const subjectMatch = aiResponse.match(/SUBJECT:\\s*([\\s\\S]*?)(?=\\nBODY:|$)/);\n  if (subjectMatch && subjectMatch[1]) {\n    subject = subjectMatch[1].trim();\n  }\n\n  const parts = aiResponse.split(/BODY:\\s*/);\n  if (parts.length > 1) {\n    body = parts[1].trim();\n  } else {\n    body = aiResponse.trim();\n  }\n}\n\nconst triageData = $('Parse AI Analysis Results').first().json;\n\nreturn {\n  subject,\n  body,\n  email: triageData.email,\n  name: triageData.name,\n  urgency: triageData.urgency,\n  category: triageData.category,\n  sentiment: triageData.sentiment,\n  keywords: triageData.keywords,\n  summary: triageData.summary,\n  inquiry: triageData.inquiry,\n  timestamp: triageData.timestamp\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "112807ff-a82c-4f08-bcd6-8f80b00c9e7f",
      "name": "Send Auto-Reply via Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1360,
        352
      ],
      "webhookId": "b58c0315-fb54-4b41-8198-f0ceba77ced1",
      "parameters": {
        "sendTo": "={{ $json.email }}",
        "message": "={{ $json.body }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "={{ $json.subject }}"
      },
      "typeVersion": 2.1
    },
    {
      "id": "90ac9a6c-8644-4369-8dc0-7ad6e48db909",
      "name": "Prepare Data for Tracking",
      "type": "n8n-nodes-base.set",
      "position": [
        1584,
        352
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "name",
              "type": "string",
              "value": "={{ $('Parse AI Analysis Results').item.json.name }}"
            },
            {
              "id": "id-2",
              "name": "email",
              "type": "string",
              "value": "={{ $('Parse AI Analysis Results').item.json.email }}"
            },
            {
              "id": "id-3",
              "name": "urgency",
              "type": "string",
              "value": "={{ $('Parse AI Analysis Results').item.json.urgency }}"
            },
            {
              "id": "id-4",
              "name": "category",
              "type": "string",
              "value": "={{ $('Parse AI Analysis Results').item.json.category }}"
            },
            {
              "id": "id-5",
              "name": "sentiment",
              "type": "string",
              "value": "={{ $('Parse AI Analysis Results').item.json.sentiment }}"
            },
            {
              "id": "id-6",
              "name": "summary",
              "type": "string",
              "value": "={{ $('Parse AI Analysis Results').item.json.summary }}"
            },
            {
              "id": "id-7",
              "name": "keywords",
              "type": "string",
              "value": "={{ $('Parse AI Analysis Results').item.json.keywords }}"
            },
            {
              "id": "id-8",
              "name": "subject",
              "type": "string",
              "value": "={{ $('Extract Email Subject and Body').item.json.subject }}"
            },
            {
              "id": "id-9",
              "name": "inquiry",
              "type": "string",
              "value": "={{ $('Parse AI Analysis Results').item.json.inquiry }}"
            },
            {
              "id": "id-10",
              "name": "timestamp",
              "type": "string",
              "value": "={{ $('Parse AI Analysis Results').item.json.timestamp }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "bd3aa2c7-e7f0-42e5-843b-9ecba1746432",
      "name": "Is High Priority?",
      "type": "n8n-nodes-base.if",
      "position": [
        1792,
        352
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "caseSensitive": false,
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.urgency }}",
              "rightValue": "high"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "426bf20f-ab48-453b-945c-a70a65818526",
      "name": "Alert Team on Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        2032,
        272
      ],
      "webhookId": "9d621a32-e3b1-4280-9c01-599989094a8a",
      "parameters": {
        "text": "=🚨 *HIGH PRIORITY INQUIRY RECEIVED*\n\n*Customer:* {{ $json.name }}\n*Email:* {{ $json.email }}\n*Category:* {{ $json.category }}\n*Sentiment:* {{ $json.sentiment }}\n\n*Summary:* {{ $json.summary }}\n\n*Original Inquiry:*\n{{ $json.inquiry }}\n\nβœ… Auto-reply sent. Manual follow-up recommended within 1-2 hours.",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "typeVersion": 2.3
    },
    {
      "id": "8435195b-82c2-4085-afbe-b1e6bd40830a",
      "name": "Log to Tracking Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2208,
        368
      ],
      "parameters": {
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "1ad7a7ae-1f80-4081-a481-74cfd89bdaa7",
      "name": "Sticky Note - Workflow Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1408,
        -272
      ],
      "parameters": {
        "width": 680,
        "height": 1596,
        "content": "## πŸ“‹ AI-Powered Customer Support Automation\n\n**Automatically triage and respond to Google Form submissions with intelligent priority routing**\n\n### 🎯 What This Workflow Does\n\nThis workflow transforms your Google Form into an intelligent customer support system that:\n- **Analyzes** every inquiry using AI to determine urgency, category, and sentiment\n- **Routes** inquiries based on priority (High/Medium/Low)\n- **Generates** contextual, personalized email responses\n- **Alerts** your team via Slack for high-priority cases\n- **Tracks** all interactions in a Google Sheet\n\n### βš™οΈ How It Works\n\n1. **Trigger**: Monitors Google Sheets for new form responses\n2. **AI Analysis**: OpenAI analyzes inquiry for urgency, category, sentiment\n3. **Smart Routing**: Routes to appropriate response template\n4. **Response Generation**: AI creates personalized reply email\n5. **Auto-Reply**: Sends email via Gmail\n6. **Team Alert**: Notifies team on Slack for urgent cases\n7. **Tracking**: Logs all data to tracking sheet\n\n### πŸ“¦ Requirements\n\n- Google Form connected to Google Sheets\n- OpenAI API key (GPT-4o-mini recommended)\n- Gmail account for sending emails\n- Slack workspace (optional, for team notifications)\n- Google Sheets for tracking logs\n\n### ⏱️ Setup Time\n\nApproximately **15-20 minutes**\n\n### πŸš€ Setup Steps\n\n1. **Create Google Form** with fields: Name, Email Address, Inquiry\n2. **Connect to Google Sheets** (automatically created by Google Forms)\n3. **Configure trigger node** with your form response sheet\n4. **Add OpenAI credentials** (get API key from platform.openai.com)\n5. **Connect Gmail** for sending auto-replies\n6. **Create tracking sheet** with columns: timestamp, name, email, category, urgency, sentiment, summary, keywords, subject, inquiry\n7. **Optional: Connect Slack** for high-priority alerts\n8. **Customize AI prompts** to match your brand voice and use case\n9. **Test with sample data** before activating\n\n### 🎨 Customization Options\n\n- **Adjust urgency criteria** in AI Triage prompt for your specific needs\n- **Modify response templates** for different priority levels\n- **Add custom categories** (e.g., refunds, appointments, technical issues)\n- **Multi-language support** - AI handles multiple languages automatically\n- **Add more notification channels** (Discord, email, SMS)\n- **Integrate with CRM** systems for customer history\n\n### πŸ’‘ Use Cases\n\n- **Customer Support**: Auto-respond to product questions and issues\n- **Lead Management**: Instant follow-up on sales inquiries\n- **Event Registration**: Confirm bookings with personalized messages\n- **Feedback Collection**: Acknowledge and categorize user feedback\n- **Service Requests**: Triage and route service/maintenance requests\n\n---\n\n*Created by the n8n community. Questions? Check the sticky notes inside each workflow section for detailed instructions.*"
      },
      "typeVersion": 1
    },
    {
      "id": "d1a6e001-f164-4985-9cc9-c22493349127",
      "name": "Sticky Note - Step 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        -16
      ],
      "parameters": {
        "color": 7,
        "width": 360,
        "height": 352,
        "content": "### πŸ“₯ Step 1: Form Response Trigger\n\nMonitors your Google Sheet for new form submissions.\n\n**Setup:**\n1. Select your Google Form's response sheet\n2. Sheet automatically updates when forms are submitted\n3. Trigger runs every minute to check for new rows\n\n**Requirements:**\n- Google Form with fields: Name, Email Address, Inquiry\n- Form must be connected to Google Sheets"
      },
      "typeVersion": 1
    },
    {
      "id": "4122d26f-5ccf-4ad3-b130-99bbe84a020f",
      "name": "Sticky Note - Step 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        528
      ],
      "parameters": {
        "color": 7,
        "width": 340,
        "height": 236,
        "content": "### πŸ”§ Step 2: Map Column Names\n\nMaps your form fields to workflow variables.\n\n**Customize:**\n- Update column names if your form uses different field names\n- Default: \"Name\", \"Email Address\", \"Inquiry\"\n\n**Tip:** Keep \"includeOtherFields\" enabled to preserve all form data"
      },
      "typeVersion": 1
    },
    {
      "id": "0ee1a9d8-3e37-412e-9a63-db17b354e52e",
      "name": "Sticky Note - Step 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 360,
        "height": 364,
        "content": "### 🧠 Step 3: AI Triage Analysis\n\nOpenAI analyzes inquiry to determine:\n- **Urgency**: low/medium/high\n- **Category**: technical/sales/support/billing/general\n- **Sentiment**: positive/neutral/negative\n- **Keywords**: Key terms extracted\n- **Summary**: One-sentence overview\n\n**Customize:**\n- Adjust urgency criteria for your business\n- Add custom categories\n- Supports multiple languages automatically\n\n**Cost:** ~$0.001-0.002 per inquiry with GPT-4o-mini"
      },
      "typeVersion": 1
    },
    {
      "id": "bd556784-eb77-4347-8821-b0c301fca7b4",
      "name": "Sticky Note - Step 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        528
      ],
      "parameters": {
        "color": 7,
        "width": 360,
        "height": 344,
        "content": "### πŸ”€ Step 4: Priority Routing\n\nRoutes inquiries to appropriate response template:\n\n**High Priority β†’** Urgent, empathetic response\n- Broken products, complaints, angry customers\n- Immediate needs, refund requests\n\n**Medium Priority β†’** Professional, standard response\n- General questions, usage help\n- Feature inquiries\n\n**Low Priority β†’** Friendly, casual response\n- Information requests, compliments\n- Future product questions"
      },
      "typeVersion": 1
    },
    {
      "id": "d47878da-4235-44b9-bc04-85fa618298e4",
      "name": "Sticky Note - Step 5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        -128
      ],
      "parameters": {
        "color": 7,
        "width": 360,
        "height": 340,
        "content": "### βœ‰οΈ Step 5: Generate AI Response\n\nThree separate AI nodes create priority-specific responses.\n\n**Each template considers:**\n- Customer name for personalization\n- Inquiry category and sentiment\n- Urgency level for appropriate tone\n\n**Output format:**\nSUBJECT: (email subject)\nBODY: (email body)\n\n**Customize:** Edit prompts to match your brand voice and policies"
      },
      "typeVersion": 1
    },
    {
      "id": "49768cd0-7811-43e7-b90e-ec0e0cc599a5",
      "name": "Sticky Note - Step 6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1232,
        64
      ],
      "parameters": {
        "color": 7,
        "width": 340,
        "height": 268,
        "content": "### πŸ“€ Step 6: Send Auto-Reply\n\nSends personalized email via Gmail.\n\n**Features:**\n- Uses Gmail OAuth for secure sending\n- Includes customer name in email\n- Professional formatting\n- No n8n attribution footer\n\n**Setup:** Connect your Gmail account via OAuth2"
      },
      "typeVersion": 1
    },
    {
      "id": "0de2f195-b296-43b2-99b5-38c41de47dba",
      "name": "Sticky Note - Step 7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1872,
        528
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 380,
        "content": "### 🚨 Step 7: Team Alerts & Tracking\n\n**High Priority Cases:**\n- Instant Slack notification to team\n- Includes customer details and inquiry\n- Prompts manual follow-up within 1-2 hours\n\n**All Cases:**\n- Logged to Google Sheets tracking sheet\n- Includes: timestamp, urgency, category, sentiment, keywords, summary\n- Creates audit trail and analytics data\n\n**Setup:**\n1. Connect Slack workspace (optional)\n2. Create tracking sheet with proper column headers\n3. Select channel for notifications"
      },
      "typeVersion": 1
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $json.email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        1000,
        352
      ],
      "name": "Verify Email (BillionVerify)",
      "credentials": {
        "billionVerifyApi": {
          "id": "",
          "name": "BillionVerify account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "is-deliverable",
              "leftValue": "={{ $json.is_deliverable }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ]
        }
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1180,
        352
      ],
      "name": "IF deliverable"
    }
  ],
  "connections": {
    "Is High Priority?": {
      "main": [
        [
          {
            "node": "Alert Team on Slack",
            "type": "main",
            "index": 0
          },
          {
            "node": "Log to Tracking Sheet",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log to Tracking Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map Form Column Names": {
      "main": [
        [
          {
            "node": "Analyze with AI Triage",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze with AI Triage": {
      "main": [
        [
          {
            "node": "Parse AI Analysis Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route by Priority Level": {
      "main": [
        [
          {
            "node": "Generate Urgent Response",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Generate Standard Response",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Generate Friendly Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Urgent Response": {
      "main": [
        [
          {
            "node": "Extract Email Subject and Body",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Analysis Results": {
      "main": [
        [
          {
            "node": "Route by Priority Level",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Data for Tracking": {
      "main": [
        [
          {
            "node": "Is High Priority?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Auto-Reply via Gmail": {
      "main": [
        [
          {
            "node": "Prepare Data for Tracking",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Friendly Response": {
      "main": [
        [
          {
            "node": "Extract Email Subject and Body",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Standard Response": {
      "main": [
        [
          {
            "node": "Extract Email Subject and Body",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Form Responses Trigger": {
      "main": [
        [
          {
            "node": "Map Form Column Names",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Email Subject and Body": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Email (BillionVerify)": {
      "main": [
        [
          {
            "node": "IF deliverable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable": {
      "main": [
        [
          {
            "node": "Send Auto-Reply via Gmail",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}

When to use this

  • Cleaning a list before a Google Forms send or sync.
  • Protecting Google Forms deliverability and sender reputation.
  • Keeping bounce rates low so your sending is never throttled.

FAQ

Why verify before sending in Google Forms?

Verifying first keeps your bounce rate low, which protects your sender reputation and your results.

How do I import this workflow?

Download the JSON, then in n8n go to Workflows β†’ Import from File (or paste it). Install the BillionVerify community node and add your API key credential.

What happens to risky or catch-all addresses?

They are routed to the false branch and excluded from the send. You decide whether to retry, review, or drop them.

Add verification to your workflow

Create a free account, grab your API key, and stop bounces before they happen.

Get started free