This workflow corresponds to n8n.io template #8590 — we link there as the canonical source.
This workflow follows the Form Trigger → Gmail recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "30NPBKKx7NzBicRL",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Creator Template - Lead Qualification & Follow-up (Gemini)",
"tags": [],
"nodes": [
{
"id": "2c79aa92-b720-46fb-abac-093f2a7974dc",
"name": "WordPress Form Trigger",
"type": "n8n-nodes-base.webhook",
"notes": "Template: Lead Qualification & Follow\u2011up (Gemini)\nCaptures leads via webhook or form, qualifies with Gemini, and branches to qualified/not qualified paths with calls, scheduling, email, CRM, and Mailchimp.\n\nSetup:\n- Configure credentials: Google Gemini, Gmail, HubSpot, Zoom, Google Calendar, VAPI.\n- Set env vars: MAILCHIMP_LIST_ID_QUALIFIED, MAILCHIMP_LIST_ID_FOLLOWUP.\n- Enable either Webhook (wordpress-form) or Form Trigger.\n- Test with a form submission; adjust copy and delays as needed.",
"onError": "continueRegularOutput",
"position": [
-1408,
208
],
"parameters": {
"path": "wordpress-form",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "dfbdbf23-7568-4ae3-8bfc-01d9c2ed50f2",
"name": "Initial Delay",
"type": "n8n-nodes-base.wait",
"position": [
-1168,
208
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "18a143b3-3505-439c-92f9-e0c59134b4c1",
"name": "AI Lead Qualification",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
-1008,
208
],
"parameters": {
"modelId": "models/gemini-2.5-flash",
"options": {},
"messages": {
"values": [
{
"role": "system",
"content": "You are a lead qualification assistant. Based on the form submission, decide if the lead is QUALIFIED or NOT QUALIFIED. Output exactly one of: QUALIFIED or NOT QUALIFIED."
},
{
"content": "Name: {{$node['WordPress Form Trigger'].json.body.name || ''}}\nEmail: {{$node['WordPress Form Trigger'].json.body.email || ''}}\nMessage: {{$node['WordPress Form Trigger'].json.body.message || ''}}"
}
]
}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "bc86775e-b69e-40f1-b2fd-18f6b5e12d00",
"name": "Lead Decision",
"type": "n8n-nodes-base.if",
"position": [
-720,
208
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c56904a9-fc19-4003-8a3b-e5b6b15c48bb",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "04f43a7b-f901-4802-b37c-9d182f6d21a3",
"name": "Qualified Lead Delay",
"type": "n8n-nodes-base.wait",
"position": [
-512,
96
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "89703af2-94c6-4d42-9718-82bff7137c5b",
"name": "VAPI AI Call - Qualified",
"type": "n8n-nodes-base.httpRequest",
"position": [
-288,
96
],
"parameters": {
"url": "https://api.vapi.ai/call/phone",
"options": {
"timeout": 30000,
"response": {
"response": {
"responseFormat": "json"
}
}
},
"sendBody": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{}
]
},
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $credentials.vapiApi.token }}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "f78f3612-1a27-4d9b-b511-0bbe219adaf7",
"name": "Post-Call Delay",
"type": "n8n-nodes-base.wait",
"position": [
-64,
96
],
"parameters": {},
"typeVersion": 1.1
},
{
"id": "9e58a05c-2b29-4e6d-b541-a5811200fdff",
"name": "Schedule Meeting",
"type": "n8n-nodes-base.googleCalendar",
"position": [
160,
96
],
"parameters": {
"end": {
"dateTime": "={{ DateTime.now().plus({ days: 1, hours: 11 }).toISO() }}"
},
"start": {
"dateTime": "={{ DateTime.now().plus({ days: 1, hours: 10 }).toISO() }}"
},
"calendar": {
"__rl": true,
"mode": "list",
"value": "user@example.com",
"cachedResultName": "user@example.com"
},
"additionalFields": {}
},
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "86fcc9c5-ef3a-4f81-95ac-3b64670925ff",
"name": "Create Zoom Meeting",
"type": "n8n-nodes-base.zoom",
"position": [
384,
-16
],
"parameters": {
"topic": "=Sales Consultation - {{ $node['WordPress Form Trigger'].json.body.name }}",
"additionalFields": {}
},
"typeVersion": 1
},
{
"id": "a9c8ba7e-924c-440f-a0c4-e072c1735b09",
"name": "Qualified Lead Campaign",
"type": "n8n-nodes-base.mailchimp",
"notes": "Adds qualified lead to Mailchimp audience. Replace {{$env.MAILCHIMP_LIST_ID_QUALIFIED}} with your list ID.",
"position": [
608,
-16
],
"parameters": {
"list": "={{$env.MAILCHIMP_LIST_ID_QUALIFIED}}",
"email": "={{ $node['WordPress Form Trigger'].json.body.email }}",
"status": "subscribed",
"options": {}
},
"typeVersion": 1
},
{
"id": "3bd32626-5402-4860-9dba-663c8b60c35a",
"name": "Meeting Confirmation Email",
"type": "n8n-nodes-base.gmail",
"position": [
816,
96
],
"parameters": {
"sendTo": "user@example.com",
"message": "=Hi {{ $node['WordPress Form Trigger'].json.body.name ? $node['WordPress Form Trigger'].json.body.name.split(' ')[0] : 'there' }},\n\nThank you for your interest in our services! After our initial conversation, I've scheduled a detailed consultation call to discuss how we can help you achieve your goals.\n\n\ud83d\udcc5 **Meeting Details:**\n\u2022 Date: {{ DateTime.fromISO($node['Schedule Meeting'].json.start.dateTime).toFormat('EEEE, MMMM dd, yyyy') }}\n\u2022 Time: {{ DateTime.fromISO($node['Schedule Meeting'].json.start.dateTime).toFormat('h:mm a ZZZZ') }}\n\u2022 Duration: 60 minutes\n\n\ud83d\udd17 **Join the meeting:**\n{{ $node['Create Zoom Meeting'].json.join_url }}\n\n**Meeting ID:** {{ $node['Create Zoom Meeting'].json.id }}\n**Passcode:** {{ $node['Create Zoom Meeting'].json.password }}\n\nI'm looking forward to our detailed conversation!\n\nBest regards,\nAJ\nWeb Developer\nioVista",
"options": {},
"subject": "=Your Sales Consultation is Scheduled - {{ DateTime.now().plus({ days: 1 }).toFormat('MMM dd') }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "0b5b5445-391a-46ff-8f97-68066228d825",
"name": "Update CRM - Qualified",
"type": "n8n-nodes-base.hubspot",
"position": [
1040,
192
],
"parameters": {
"email": "={{ $node['WordPress Form Trigger'].json.body.email }}",
"options": {},
"authentication": "oAuth2",
"additionalFields": {}
},
"typeVersion": 2.2
},
{
"id": "68ed4aac-6d87-4cb1-9224-a9f4b45196f3",
"name": "VAPI AI Call - Not Qualified",
"type": "n8n-nodes-base.httpRequest",
"position": [
-288,
336
],
"parameters": {
"url": "https://api.vapi.ai/call/phone",
"options": {
"timeout": 30000,
"response": {
"response": {
"responseFormat": "json"
}
}
},
"sendBody": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{}
]
},
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $credentials.vapiApi.token }}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "bb6d047d-132b-4fcb-ae5a-9d6fec22bdb3",
"name": "Follow-up Campaign",
"type": "n8n-nodes-base.mailchimp",
"notes": "Adds not-qualified lead to Mailchimp audience. Replace {{$env.MAILCHIMP_LIST_ID_FOLLOWUP}} with your list ID.",
"position": [
-48,
448
],
"parameters": {
"list": "={{$env.MAILCHIMP_LIST_ID_FOLLOWUP}}",
"email": "={{ $node['WordPress Form Trigger'].json.body.email }}",
"status": "subscribed",
"options": {}
},
"typeVersion": 1
},
{
"id": "28dd177d-d322-448e-bb4b-5952ac2882b9",
"name": "Follow-up Email",
"type": "n8n-nodes-base.gmail",
"position": [
144,
448
],
"parameters": {
"message": "=Hi {{ $node['WordPress Form Trigger'].json.body.name ? $node['WordPress Form Trigger'].json.body.name.split(' ')[0] : 'there' }},\n\nThank you for taking the time to submit your information and for our recent conversation. While we may not be the perfect fit for your current needs, we appreciate your interest in our services.\n\nWe'll keep you updated with valuable content, industry insights, and new service offerings that might be helpful for your business in the future.\n\nIf your requirements change or you'd like to explore other ways we might be able to help, please don't hesitate to reach out.\n\nBest regards,\n[Your Name]\n[Company Name]\n\nP.S. Feel free to follow us on social media for regular updates and tips!",
"options": {},
"subject": "Thank you for your interest - Stay connected"
},
"typeVersion": 2.1
},
{
"id": "a5e20900-6d6b-4f97-af7d-b5946cc7a1c9",
"name": "Update CRM - Not Qualified",
"type": "n8n-nodes-base.hubspot",
"position": [
384,
448
],
"parameters": {
"email": "={{ $node['WordPress Form Trigger'].json.body.email }}",
"options": {},
"authentication": "oAuth2",
"additionalFields": {}
},
"typeVersion": 2.2
},
{
"id": "2207162d-03b8-4b62-8a07-3dcb2e16265a",
"name": "Schedule Follow-up Calendar",
"type": "n8n-nodes-base.googleCalendar",
"position": [
608,
528
],
"parameters": {
"end": {
"dateTime": "={{ DateTime.now().plus({ days: 30, hours: 14, minutes: 30 }).toISO() }}"
},
"start": {
"dateTime": "={{ DateTime.now().plus({ days: 30, hours: 14 }).toISO() }}"
},
"calendar": {
"__rl": true,
"mode": "list",
"value": ""
},
"additionalFields": {}
},
"typeVersion": 1.3
},
{
"id": "0898358a-02b7-4fd1-98fd-809946bd6670",
"name": "Get Qualified Call Results",
"type": "n8n-nodes-base.httpRequest",
"position": [
-64,
-48
],
"parameters": {
"url": "=https://api.vapi.ai/call/{{ $node['VAPI AI Call - Qualified'].json.id }}",
"options": {
"response": {
"response": {
"responseFormat": "json"
}
}
},
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $credentials.vapiApi.token }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "bccd8b9d-9b42-40ab-a46f-5a22eaf1cb86",
"name": "Get Follow-up Call Results",
"type": "n8n-nodes-base.httpRequest",
"position": [
-64,
272
],
"parameters": {
"url": "=https://api.vapi.ai/call/{{ $node['VAPI AI Call - Not Qualified'].json.id }}",
"options": {
"response": {
"response": {
"responseFormat": "json"
}
}
},
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $credentials.vapiApi.token }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "c39d5f9f-9d37-4d28-9c4e-9b17fecd7664",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-1424,
400
],
"parameters": {
"options": {},
"formTitle": "Contact us",
"formFields": {
"values": [
{
"fieldLabel": "Ajay"
},
{
"fieldLabel": "email"
},
{
"fieldLabel": "Phone Number"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "f2e0b3a1-7c4a-4a9e-9c7a-1b8b6b7a4d11",
"name": "Flow Documentation",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1728,
-384
],
"parameters": {
"height": 1760,
"content": "Flow Doc: Lead Qualification & Follow-up (Gemini)\n\nOverview:\n- Trigger via Webhook path \"wordpress-form\" or built-in Form Trigger\n- AI (Gemini models/gemini-2.5-flash) classifies lead: QUALIFIED or NOT QUALIFIED\n\nQualified path:\n- VAPI call to phone outreach\n- Create Google Calendar event and Zoom meeting\n- Add to Mailchimp audience: $env.MAILCHIMP_LIST_ID_QUALIFIED\n- Send meeting confirmation email via Gmail\n- Update contact in HubSpot CRM\n\nNot qualified path:\n- VAPI call to phone outreach\n- Add to Mailchimp audience: $env.MAILCHIMP_LIST_ID_FOLLOWUP\n- Send follow-up email via Gmail\n- Update contact in HubSpot CRM\n- Schedule 30\u2011day follow-up calendar reminder\n\nSetup requirements:\n- Credentials: Google Gemini, Gmail, HubSpot, Zoom, Google Calendar, VAPI\n- Env: MAILCHIMP_LIST_ID_QUALIFIED, MAILCHIMP_LIST_ID_FOLLOWUP\n- Use ONE trigger in production (Webhook OR Form)\n\nHow to test:\n1) Send test form/webhook with name, email, message\n2) Verify AI decision at \"Lead Decision\"\n3) If QUALIFIED: confirm VAPI call, Calendar event, Zoom link, Mailchimp add, Gmail send, HubSpot update\n4) If NOT QUALIFIED: confirm VAPI call, Mailchimp add, Gmail send, HubSpot update, 30\u2011day calendar event\n5) In HTTP nodes, check response codes and error messages\n\nGo\u2011live checklist:\n- All credentials connected (no red warnings)\n- Env vars set: MAILCHIMP_* values\n- Timezone/delays adjusted\n- Emails personalized\n- Workflow toggled Active after final test\n\nNotes:\n- Adjust copy/timings to your timezone\n- For errors, open the execution and expand each node\n\nOwner: Ajay Yadav (ackm04@gmail.com)\nLast updated: 2025-09-15"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "da82f9aa-149b-442d-bbea-8653d11d9ef3",
"connections": {
"Initial Delay": {
"main": [
[
{
"node": "AI Lead Qualification",
"type": "main",
"index": 0
}
]
]
},
"Lead Decision": {
"main": [
[
{
"node": "Qualified Lead Delay",
"type": "main",
"index": 0
}
],
[
{
"node": "VAPI AI Call - Not Qualified",
"type": "main",
"index": 0
}
]
]
},
"Follow-up Email": {
"main": [
[
{
"node": "Update CRM - Not Qualified",
"type": "main",
"index": 0
}
]
]
},
"Post-Call Delay": {
"main": [
[
{
"node": "Schedule Meeting",
"type": "main",
"index": 0
}
]
]
},
"Schedule Meeting": {
"main": [
[
{
"node": "Create Zoom Meeting",
"type": "main",
"index": 0
}
]
]
},
"Follow-up Campaign": {
"main": [
[
{
"node": "Follow-up Email",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Initial Delay",
"type": "main",
"index": 0
}
]
]
},
"Create Zoom Meeting": {
"main": [
[
{
"node": "Qualified Lead Campaign",
"type": "main",
"index": 0
}
]
]
},
"Qualified Lead Delay": {
"main": [
[
{
"node": "VAPI AI Call - Qualified",
"type": "main",
"index": 0
}
]
]
},
"AI Lead Qualification": {
"main": [
[
{
"node": "Lead Decision",
"type": "main",
"index": 0
}
]
]
},
"WordPress Form Trigger": {
"main": [
[
{
"node": "Initial Delay",
"type": "main",
"index": 0
}
]
]
},
"Qualified Lead Campaign": {
"main": [
[
{
"node": "Meeting Confirmation Email",
"type": "main",
"index": 0
}
]
]
},
"VAPI AI Call - Qualified": {
"main": [
[
{
"node": "Get Qualified Call Results",
"type": "main",
"index": 0
},
{
"node": "Post-Call Delay",
"type": "main",
"index": 0
}
]
]
},
"Meeting Confirmation Email": {
"main": [
[
{
"node": "Update CRM - Qualified",
"type": "main",
"index": 0
}
]
]
},
"Update CRM - Not Qualified": {
"main": [
[
{
"node": "Schedule Follow-up Calendar",
"type": "main",
"index": 0
}
]
]
},
"VAPI AI Call - Not Qualified": {
"main": [
[
{
"node": "Get Follow-up Call Results",
"type": "main",
"index": 0
},
{
"node": "Follow-up Campaign",
"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.
gmailOAuth2googleCalendarOAuth2ApigooglePalmApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automate lead intake, AI qualification, and next‑step outreach. Qualified leads get a scheduled meeting, Zoom details, an email confirmation, CRM update, and Mailchimp enrollment. Not‑qualified leads receive a follow‑up sequence, CRM update, and a 30‑day reminder.
Source: https://n8n.io/workflows/8590/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This template is perfect for: Marketing Teams looking to automatically qualify inbound leads from campaigns Sales Teams wanting to prioritize high-value prospects instantly Agencies offering lead qual
Stop wasting time on bad leads and manual research. This advanced n8n workflow automates your entire lead qualification and CRM entry process for HubSpot, ensuring you only sync high-quality, pre-rese
AI-Powered Lead Qualification & Routing System. Uses supabase, httpRequest, openAi, slack. Webhook trigger; 47 nodes.
AI Lead Qualifier. Uses httpRequest, openAi, salesforce, slack. Webhook trigger; 8 nodes.
Capture leads from your website, enrich them via Apollo, store them in HubSpot, send a personalized thank-you email, and notify your team—all automatically. Capture leads from website forms automatica