Block 1 - Sticky Note - Start
- Type / Role
- n8n-nodes-base.stickyNote - stickyNote
- Config choices
- Version 1
This workflow is provided as-is. Please review and test before using in production.
AI Powered Cold Calling Automation with Vapi.ai, GPT 4o & Google Sheets Overview Transform your lead list into an AI powered calling machine. This workflow automates your entire cold calling proc...
n8n-nodes-base.stickynote, n8n-nodes-base.googlesheets, n8n-nodes-base.manualtrigger, n8n-nodes-base.if, n8n-nodes-base.httprequest, n8n-nodes-base.splitinbatches, n8n-nodes-base.set, n8n-nodes-base.merge
This workflow is cataloged by N8N Workflows and links back to its original n8n.io source page by Amit Mehta.
Original n8n.io sourceTransform your lead list into an AI-powered calling machine. This workflow automates your entire cold calling process using Vapi's conversational AI to initiate calls, qualify leads, capture detailed insights, and manage intelligent follow-ups - achieving 10x more calls than manual efforts while maintaining personalized, professional conversations.
Built for sales teams, recruiters, and customer success professionals who need to scale outreach without sacrificing quality or adding headcount.
The workflow operates through two parallel processes:
Create a Google Sheet with these exact columns (case-sensitive):
Customer_id | Name | Phone Number | Email | Status | Recording URL | Transcript | Summary | Interest | Call Duration | Retry count | Last attempt | Call ID
Initial Setup:
Customer_id: Unique identifier (e.g., LEAD001)Name: Full name for personalizationPhone Number: International format (+14155551234)Email: For follow-up campaignsStatus: Set to "Pending"Retry count: Set to 0Create Your AI Voice Agent
Assistant IDSet Up Phone Number
Phone Number IDImport to n8n
Cold_calling_loop.jsonConnect Credentials
AuthorizationBearer YOUR_API_KEYUpdate Configuration
assistantId and phoneNumberId[New Lead: Pending] β [Call Initiated] β [Completed/Failed]
β
[Retry Scheduled] β (if failed & retry < 5)
Retry Limit Check (If1 Node)
Retry count β€ 5Call Completion Check (If2 Node)
Status Routing (If4 Node)
| Node | Type | Purpose | Configuration |
|---|---|---|---|
| Get Leads from Sheet1 | Google Sheets | Fetches eligible leads | Filter: Status = "Pending" OR "Retry Scheduled" |
| HTTP Request | HTTP | Initiates Vapi call | POST to api.vapi.ai/call with assistant config |
| Loop Over Items | Split In Batches | Processes leads individually | Batch size: 1, ensures sequential processing |
| Get Call Data | HTTP | Retrieves call results | GET from api.vapi.ai/call?id={callId} |
| Edit Fields2 | Set | Formats result data | Maps Vapi response to sheet columns |
| Node | Updates | Trigger |
|---|---|---|
| Update Status - Calling1 | "Call Initiated" | After successful API call |
| Update Status - Calling | "Done" + results | When call completed successfully |
| Update Status - for Missed call | "Retry Scheduled" | When call failed/no answer |
| Update Status - Calling3 | "Retry Done" | After retry limit reached |
| Node | Function | Logic |
|---|---|---|
| If1 | Retry validation | Checks retry count β€ 5 |
| If2 | Result validation | Verifies call completion |
| Wait | Retry delay | Pauses before retry attempt |
| Merge | Path combination | Unifies success/retry flows |
// Add to Code node for progressive delays
const retryCount = $json["Retry count"];
const delays = {
1: 30, // 30 minutes
2: 120, // 2 hours
3: 1440, // Next day
4: 2880, // 2 days
5: 10080 // 1 week
};
return { waitMinutes: delays[retryCount] || 60 };
// Add before HTTP Request node
const now = new Date();
const hour = now.getHours();
const day = now.getDay();
const isWeekday = day >= 1 && day <= 5;
const isBusinessHours = hour >= 9 && hour <= 17;
if (!isWeekday || !isBusinessHours) {
throw new Error('Outside calling hours');
}
{
"assistantId": "your-assistant-id",
"phoneNumberId": "your-phone-id",
"customer": {
"number": "+{{ $json['Phone Number'] }}",
"name": "{{ $json.Name }}",
"customData": {
"company": "{{ $json.Company }}",
"lastPurchase": "{{ $json['Last Purchase Date'] }}",
"accountValue": "{{ $json['Account Value'] }}",
"preferredProduct": "{{ $json['Product Interest'] }}"
}
}
}
Location: Near Google Sheets nodes
π LEAD STATUS FLOW:
Pending β Call Initiated β Done/Retry Scheduled
Retry Scheduled β Call Initiated β Done/Failed
β οΈ Max retries: 5 attempts
β Failed = No answer after 5 tries
β
Done = Call completed with results
Location: Near HTTP Request nodes
π± PHONE NUMBER FORMAT:
β
Correct: +14155551234
β Wrong: (415) 555-1234
β Wrong: 415-555-1234
Must include:
- Plus sign (+)
- Country code
- No spaces or symbols
Location: At workflow start
π§ VAPI CONFIGURATION:
β‘ Assistant ID copied from Vapi
β‘ Phone Number ID from Vapi
β‘ API Key in credentials
β‘ Credits available
β‘ Assistant tested in playground
Location: Near Loop nodes
β‘ OPTIMIZATION TIPS:
β’ Batch size: 10-20 leads
β’ Call hours: 9 AM - 5 PM local
β’ Delay between calls: 5 seconds
β’ Monthly archive old records
β’ Monitor Vapi credit usage
Cause: Expired or invalid credentials Fix:
Cause: Invalid phone format or Vapi configuration Fix:
Cause: Call still processing or webhook failure Fix:
Cause: Status not updating correctly Fix:
Cause: Bot permissions or channel access Fix:
| File | Description | Location |
|---|---|---|
Cold_calling_loop.json |
Complete workflow configuration | Main workflow file |
lead_template.xlsx |
Google Sheets template with headers | Sample data file |
Sales & Marketing Automation
cold-calling vapi-ai voice-automation lead-generation ai-sales google-sheets outbound-calling sales-automation conversational-ai crm-automation
b2b-sales recruitment customer-success market-research appointment-setting lead-qualification follow-up-automation
vapi google-sheets slack voice-ai telephony
Support email : [email protected]
This catalog entry is organized from the workflow JSON. The node-level section below shows the executable blocks available for review before importing the template.
Showing the first 24 of 38 workflow blocks. Download the JSON for the full node graph.
| Workflow | AI-Powered Cold Calling Automation with Vapi.ai, GPT-4o & Google Sheets |
|---|---|
| Complexity | advanced |
| Nodes | 38 |
| Categories | Lead Nurturing, AI Chatbot |
| Author | Amit Mehta |
| Published | 17 Jun 2025 |
Use the JSON export at /data/workflows/5008/5008.json as the source template for this automation.
Open n8n, import the downloaded JSON, and review each node before activating the workflow.
Replace placeholder credentials, API keys, webhook URLs, account IDs, and environment-specific values with your own settings.
Run the workflow manually or in a staging workspace, inspect node output, and confirm downstream systems receive the expected data.
Enable the workflow only after testing, then monitor executions, errors, and rate limits during the first production runs.
Review imported nodes carefully before activation. This catalog entry is intended to help you inspect the workflow structure, understand required services, and find related templates faster.
Node names, credentials, schedules, webhook paths, and external service limits may need adjustment for your workspace.
AI Powered Cold Calling Automation with Vapi.ai, GPT 4o & Google Sheets Overview Transform your lead list into an AI powered calling machine. This workflow automates your entire cold calling proc...
Review the workflow JSON, configure any required credentials in n8n, and test the automation in a safe workspace before using it in production.
Yes. Use the block-by-block analysis and the downloadable JSON to inspect each node, then adjust credentials, prompts, schedules, filters, or destinations for your Lead Nurturing, AI Chatbot use case.