AutomationFlowsAI & RAG › Qualify Insurance Leads Using Vapi, Gpt-4 Proposals and Airtable

Qualify Insurance Leads Using Vapi, Gpt-4 Proposals and Airtable

ByHarvex AI @harvexai on n8n.io

This workflow automates the "speed-to-lead" process for insurance agencies. It instantly triggers an AI voice call when a new lead comes in, qualifies their needs via conversation, and automatically generates and emails a personalized insurance proposal (Blueprint) using GPT-4.

Event trigger★★★★☆ complexityAI-powered18 nodesForm TriggerAirtableHTTP RequestGmailSlackOpenAI
AI & RAG Trigger: Event Nodes: 18 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #11794 — we link there as the canonical source.

This workflow follows the Airtable → Form Trigger 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 →

Download .json
{
  "id": "4DBt7jIiVg1kuEgv",
  "name": "Qualify Insurance Leads using Vapi, GPT-4 Proposals and Airtable",
  "tags": [],
  "nodes": [
    {
      "id": "a02b2c97-e7d1-4315-afec-dd4228f8b15a",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1424,
        -704
      ],
      "parameters": {
        "options": {},
        "formTitle": "Harvex Insurance",
        "formFields": {
          "values": [
            {
              "fieldLabel": "name",
              "placeholder": "Type name"
            },
            {
              "fieldType": "email",
              "fieldLabel": "Email",
              "placeholder": "Type your Email"
            },
            {
              "fieldType": "number",
              "fieldLabel": "Phone Number",
              "placeholder": "Type your phone number"
            }
          ]
        },
        "formDescription": "Input your following details for an agent to get back to you !"
      },
      "typeVersion": 2.3
    },
    {
      "id": "9127768b-f7ae-469c-8437-971c58ecf614",
      "name": "Create a record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -1136,
        -704
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appLkiHBdG20uxDwJ",
          "cachedResultUrl": "https://airtable.com/appLkiHBdG20uxDwJ",
          "cachedResultName": "Leads"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblCyRuAtVAL3Y7sx",
          "cachedResultUrl": "https://airtable.com/appLkiHBdG20uxDwJ/tblCyRuAtVAL3Y7sx",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "name": "={{ $json.name }}",
            "Email": "={{ $json.Email }}",
            "Phone number": "={{ $json[\"Phone Number\"].toString() }}"
          },
          "schema": [
            {
              "id": "name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "name",
              "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": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Qualify",
                  "value": "Qualify"
                },
                {
                  "name": "Unqualified",
                  "value": "Unqualified"
                }
              ],
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Call summary",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Call summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "typecast": true
        },
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "0e4ef931-ae4e-4647-868c-d0c6e3b46cd6",
      "name": "Vapi call",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -800,
        -704
      ],
      "parameters": {
        "url": "https://api.vapi.ai/call/phone",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"assistantId:\" \\\"ENTER_ASSISTANT_ID_HERE\\\",\n  \"phoneNumberId:\"\\\"ENTER_PHONE_NUMBER_ID_HERE\\\"\",\n  \"customer\": {\n    \"number\": \"{{ '+230' + $json.fields['Phone number']}}\",\n    \"name\": \"{{$json.fields.name }}\"\n  },\n  \"assistantOverrides\": {\n    \"variableValues\": {\n      \"name\": \"{{ $json.fields.name }}\",\n      \"email\": \"{{$json.fields.Email }}\"\n    },\n    \"server\": {\n      \"url\": \"\"\n    },\n    \"serverMessages\": [\n      \"end-of-call-report\"\n    ]\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization"
            }
          ]
        }
      },
      "credentials": {
        "httpBasicAuth": {
          "name": "<your credential>"
        },
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "1e838f66-e4fa-46e5-82b2-133aeb2da118",
      "name": "Post call",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -1648,
        -192
      ],
      "parameters": {
        "path": "cf226daa-a404-4c24-a44a-33526891e5f2",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode"
      },
      "typeVersion": 2.1
    },
    {
      "id": "12df5994-b37f-416d-9365-a2efef290d54",
      "name": "Is Qualified ?",
      "type": "n8n-nodes-base.if",
      "position": [
        -1232,
        -192
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "471f687c-6e2d-4449-9201-9ec639847886",
              "operator": {
                "type": "string",
                "operation": "regex"
              },
              "leftValue": "={{ $json.Success }}",
              "rightValue": "true"
            },
            {
              "id": "4be77afa-a65a-4173-8498-22c3c0857a38",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json['Type of Insurance'] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "455936e5-9174-4298-a101-eaea08aa27d0",
      "name": "Update record1",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -1024,
        -256
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appLkiHBdG20uxDwJ",
          "cachedResultUrl": "https://airtable.com/appLkiHBdG20uxDwJ",
          "cachedResultName": "Leads"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblCyRuAtVAL3Y7sx",
          "cachedResultUrl": "https://airtable.com/appLkiHBdG20uxDwJ/tblCyRuAtVAL3Y7sx",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "Email": "={{ $json.Email }}",
            "Status": "Qualify",
            "Call summary": "={{ $json['Call summary '] }}",
            "Type of Insurance": "={{ $json['Type of Insurance'] }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "name",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Phone number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Qualify",
                  "value": "Qualify"
                },
                {
                  "name": "Unqualified",
                  "value": "Unqualified"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Type of Insurance",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Type of Insurance",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Call summary",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Call summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Created",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Created",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "e230a822-80be-45e3-b129-8de107d43c85",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "onError": "continueErrorOutput",
      "position": [
        -464,
        -256
      ],
      "parameters": {
        "sendTo": "={{ $('Update record1').item.json.fields.Email }}",
        "message": "={{ $json.output[0].content[0].text }}",
        "options": {},
        "subject": "Your insurance blueprint",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.1
    },
    {
      "id": "d44d2932-c1c1-4abf-94b9-07e2c2ca34e2",
      "name": "Send a message1",
      "type": "n8n-nodes-base.slack",
      "position": [
        -656,
        112
      ],
      "parameters": {
        "text": "=*Unqualified Lead Alert*\n\n*Name:* {{ $('Clean data').item.json.Name}}\n*Phone:* {{ $('Clean data').item.json['phone number'] }}\n\n*Call Summary:*\n{{ $('Clean data').item.json['Call summary '] }}\n*Reason:* Lead did not meet qualification criteria.",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C0A2Z9HEKL7",
          "cachedResultName": "all-harvex"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "6602b532-0c3a-4cb1-bded-a341f9534f64",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1488,
        -848
      ],
      "parameters": {
        "color": 7,
        "width": 864,
        "height": 304,
        "content": "## Lead Ingestion & Voice Trigger\nCaptures the lead from the form submitted then logs the data  in Airtable  followed by  the  phone call via Vapi."
      },
      "typeVersion": 1
    },
    {
      "id": "3b3ad935-f422-4c66-aed9-f468cb7ac194",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1712,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 592,
        "height": 272,
        "content": "## Call Processing & Logic\nReceives the call summary and entity data from Vapi. It determines if the lead provided enough information to be considered as  \"Qualified.\""
      },
      "typeVersion": 1
    },
    {
      "id": "5c7fa027-2707-4da0-9fc4-5252e9ffc4d6",
      "name": "Prepare Blueprint",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -816,
        -256
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {},
        "responses": {
          "values": [
            {
              "role": "system",
              "content": "=You are Alex Mercer, a Senior Underwriter and Insurance Consultant at Harvex Insurance.\n\nYour task is to generate a professional \"Insurance Blueprint\" email for a prospective client based on the provided phone consultation summary.\nuse clients name {{ $json.fields.name }}     and type of insurance {{ $json.fields['Type of Insurance'] }}\nand personal details provided from call summary.{{ $json.fields['Call summary'] }}\n\n### GUIDELINES:\n1.  **Persona:** You are Alex Mercer. Your tone is professional, direct, and helpful. \n2.  **Formatting:** \n    - Use clean Markdown.\n    - **MANDATORY:** You must present the \"Proposed Coverage Plan\" inside a Markdown Table.\n    - **Style:** Avoid unnecessary punctuation (no exclamation marks, no excessive ellipses, no decorative symbols like '***'). Keep the text clean and orderly.\n    - Do not use fluff words. Be concise.\n\n### EMAIL STRUCTURE:\n\n1.  **Salutation:** Professional greeting.\n2.  **Executive Summary:** A concise 1-2 sentence overview of their current situation and needs based on the call.\n3.  **The Blueprint (Table):** \n    - Create a table with two columns: \"Coverage Feature\" and \"Description/Benefit\". \n    - Populate this based on the insurance type they requested (e.g., if Health, list Outpatient, Inpatient, Dental; if Auto, list Liability, Collision, etc.).\n4.  **Key Benefits:** A simple bulleted list of 3 distinct advantages of choosing XYZ Insurance for this specific plan.\n5.  **Next Steps:** Clear instruction on how to bind the coverage.\n6.  **Sign-off:** \n    Alex Mercer\n    Senior Consultant\n    Harvex Insurance\n\n### INPUT CONTEXT:\nUse the provided call summary and user details to generate this email. {{ $json.fields.name }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "bf44a008-0f2b-4b6b-8d82-eb965a6804ae",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2496,
        -880
      ],
      "parameters": {
        "width": 656,
        "height": 880,
        "content": "## Qualify Insurance Leads using Vapi, GPT-4 Proposals and Airtable\n## What this workflow does\n\nThis workflow automates the \"speed-to-lead\" process for insurance brokers. When a prospective client submits a form, the workflow immediately triggers an AI voice agent (Vapi) to call them to gather missing requirements and qualify their interest. After the conversation, the workflow will  generate a professional insurance proposal using OpenAI and email it to the client.  If the lead is unqualified a slack notification is sent to the team.\n\n### Prerequisites\n\nVapi Account: To handle the AI voice conversation.\nOpenAI Account: To analyze the call and generate the proposal blueprint.\nAirtable: To store lead data and track status.\nGmail: To send the generated blueprint to the client.\nSlack: To receive team notifications for unqualified leads or system errors to take actions.\n\n### How it works\nLead Capture: A lead submits a contact form (Name, Email, Phone). The workflow creates a record in Airtable and immediately triggers a Vapi outbound call to the lead.\nCall Analysis: Once the call ends, Vapi sends a transcript and analysis back to n8n via a Webhook.\nQualification Logic: The workflow checks if the AI successfully identified the \"Type of Insurance\" desired by the client.\nIf Qualified: The workflow updates Airtable, uses OpenAI (GPT-4) to write a detailed \"Insurance Blueprint\" proposal, and emails it directly to the client.\nIf Unqualified: The workflow updates Airtable and sends a notification to a Slack channel explaining why the lead didn't qualify.\nError Handling: If the proposal email fails to send, a fallback alert is sent to Slack containing the proposal text for manual follow-up.\n\n### How to use\n\nSet your Vapi account and  edit your system prompt\nSet up other accounts listed in prerequisites.\nConfigure the nodes in order.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0044ea00-671d-44ef-b7bc-948d5c43211f",
      "name": "Error Handling",
      "type": "n8n-nodes-base.slack",
      "position": [
        -160,
        -160
      ],
      "parameters": {
        "text": "=*CRITICAL ERROR: Email Failed* *Manual Action Required*  The user: {{ $('Is Qualified ?').item.json.Name }}* Email: {{ $('Is Qualified ?').item.json.Email }} is qualified and a blueprint was generated, but the Email Node failed to send it.\n*COPY THE BLUEPRINT BELOW TO SEND MANUALLY:* --- {{ $('Prepare Blueprint').item.json.output[0].content[0].text }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C0A2Z9HEKL7",
          "cachedResultName": "all-harvex"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "93786273-3ce2-4ed7-b60b-38a04219f3f7",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        -384
      ],
      "parameters": {
        "color": 7,
        "width": 752,
        "height": 304,
        "content": "## Qualified Lead Actions \nIf the lead is  qualified,  the CRM is updated by qualifying the person and  GPT-4 is used to draft a custom insurance blueprint. This blueprint is sent to the qualified leads via email"
      },
      "typeVersion": 1
    },
    {
      "id": "2bfc95eb-8abc-4156-8686-447eeb4cc4e4",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 592,
        "height": 240,
        "content": "## Unqualified Lead Actions\nIf the lead is unqualified the CRM updates and alerts the team via Slack with the reason for disqualification."
      },
      "typeVersion": 1
    },
    {
      "id": "cf5c856f-2ab4-4282-93d4-f76317fc4474",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        -16
      ],
      "parameters": {
        "color": 7,
        "width": 304,
        "height": 128,
        "content": "## Error Handling\nIf the email fails to send, this alerts the team via Slack with the generated proposal text so it can be sent manually."
      },
      "typeVersion": 1
    },
    {
      "id": "6e792749-4302-494f-979e-cea409a3f17a",
      "name": "Update record",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -1008,
        112
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appLkiHBdG20uxDwJ",
          "cachedResultUrl": "https://airtable.com/appLkiHBdG20uxDwJ",
          "cachedResultName": "Leads"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblCyRuAtVAL3Y7sx",
          "cachedResultUrl": "https://airtable.com/appLkiHBdG20uxDwJ/tblCyRuAtVAL3Y7sx",
          "cachedResultName": "Table 1"
        },
        "columns": {
          "value": {
            "name": "={{ $json.Name }}",
            "Email": "={{ $json.Email }}",
            "Status": "Unqualified",
            "Call summary": "={{ $json['Call summary '] }}",
            "Phone number": "={{ $json['phone number'] }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "name",
              "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": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Qualify",
                  "value": "Qualify"
                },
                {
                  "name": "Unqualified",
                  "value": "Unqualified"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Type of Insurance",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Type of Insurance",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Call summary",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Call summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Created",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Created",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "11fd4232-d010-4a82-8441-87d931a87a5c",
      "name": "Clean data",
      "type": "n8n-nodes-base.set",
      "position": [
        -1440,
        -192
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3ef69e3f-d0f3-4a2b-9053-09ff0a29c8b7",
              "name": "Call summary ",
              "type": "string",
              "value": "={{ $json.body.message.analysis.summary }}"
            },
            {
              "id": "0fd7150d-dcab-45d2-a3d6-ea34cab8b3ad",
              "name": "Success",
              "type": "string",
              "value": "={{ $json.body.message.analysis.successEvaluation }}"
            },
            {
              "id": "6a36be18-d14d-464e-be73-77067506e986",
              "name": "date",
              "type": "string",
              "value": "={{ $json.body.message.artifact.variableValues.date }}"
            },
            {
              "id": "7cf9a270-032d-42ba-a54c-2bc547bdb4a1",
              "name": "Time",
              "type": "string",
              "value": "={{ $json.body.message.artifact.variableValues.time }}"
            },
            {
              "id": "1dc62117-15c7-45a8-8555-a308293dd932",
              "name": "Email",
              "type": "string",
              "value": "={{ $json.body.message.artifact.variableValues.email }}"
            },
            {
              "id": "e81fc088-42ac-4d98-90f1-a707817458e2",
              "name": "Name",
              "type": "string",
              "value": "={{ $json.body.message.assistant.variableValues.name }}"
            },
            {
              "id": "dba3ea41-4800-4cf0-9cdb-4bb99a139d05",
              "name": "phone number",
              "type": "string",
              "value": "={{ $json.body.message.call.customer.number }}"
            },
            {
              "id": "7538ac1c-c843-46d1-8110-99b24cc4b713",
              "name": "Type of Insurance",
              "type": "string",
              "value": "={{ $json.body.message.artifact.messages[4].message }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    }
  ],
  "active": false,
  "settings": {},
  "versionId": "c3e7e4ab-8c7f-443d-8e00-3ab2460fd07c",
  "connections": {
    "Post call": {
      "main": [
        [
          {
            "node": "Clean data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean data": {
      "main": [
        [
          {
            "node": "Is Qualified ?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update record": {
      "main": [
        [
          {
            "node": "Send a message1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Qualified ?": {
      "main": [
        [
          {
            "node": "Update record1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Update record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a message": {
      "main": [
        [],
        [
          {
            "node": "Error Handling",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update record1": {
      "main": [
        [
          {
            "node": "Prepare Blueprint",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a record": {
      "main": [
        [
          {
            "node": "Vapi call",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Blueprint": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Create a record",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automates the "speed-to-lead" process for insurance agencies. It instantly triggers an AI voice call when a new lead comes in, qualifies their needs via conversation, and automatically generates and emails a personalized insurance proposal (Blueprint) using GPT-4.

Source: https://n8n.io/workflows/11794/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow captures website visitor form submissions, researches the visitor’s company using SerpApi, extracts structured insights and drafts a personalized outreach email with OpenAI, logs the enr

Error Trigger, Slack, Form Trigger +4
AI & RAG

Some use cases: "Speed-to-Lead" optimization, lead enrichment, automated prospect research. Ingestion: A lead submits their details (Name, Email, Website) via a form. Intelligent scraping: The workflo

Form Trigger, OpenAI, Airtable +2
AI & RAG

This template is perfect for digital agencies, SDRs, lead generators, or outreach teams that want to automatically convert LinkedIn company profiles into high-quality cold emails. If you spend too muc

Form Trigger, HTTP Request, Dropcontact +3
AI & RAG

Analyze incoming support requests, classify intent and priority with AI, create Jira tickets, assign the correct team, send Slack notifications, and track SLA deadlines. Supports Gmail, WhatsApp, form

Gmail Trigger, HTTP Request, Form Trigger +4
AI & RAG

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Airtable, OpenAI, Form Trigger +3