AI-Powered Cold Calling Automation with Vapi.ai, GPT-4o & Google Sheets

Go to Workflow
719 views
Built by Amit Mehta Amit Mehta
Created on June 05, 2026

Description

📞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 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.

🎯 Use Cases

Sales & Business Development
Lead Qualification**: Auto-dial new leads to assess interest and budget
Demo Scheduling**: Book meetings with qualified prospects automatically
Re-engagement**: Win back cold leads with personalized outreach
Product Launches**: Announce new features to your entire customer base

Recruitment & HR
Candidate Screening**: Conduct first-round interviews at scale
Interview Scheduling**: Coordinate availability without back-and-forth
Reference Checks**: Automate reference verification calls
Offer Follow-ups**: Ensure candidates received and understood offers

Customer Success
Onboarding Calls**: Welcome new customers with consistent messaging
Renewal Reminders**: Proactively reach out before contract expiration
Upsell Campaigns**: Identify expansion opportunities through conversations
NPS Surveys**: Gather voice feedback for authentic insights

Market Research
Customer Interviews**: Collect qualitative feedback at scale
Product Validation**: Test new concepts with target audiences
Competitive Intelligence**: Understand why customers chose competitors
Industry Surveys**: Gather market trends through conversational data

⚙️ How it Works

The workflow operates through two parallel processes:

Process 1: Call Initiation (Manual/On-Demand)
Trigger: Manual start or scheduled batch processing
Lead Retrieval: Fetches leads marked "Pending" or "Retry Scheduled" from Google Sheets
Validation: Checks retry count (max 5 attempts) and routes accordingly
API Call: Sends request to Vapi with lead details and AI assistant configuration
Status Update: Marks lead as "Call Initiated" with unique call ID
Batch Processing: Loops through all eligible leads with controlled pacing

Process 2: Result Collection (Every 10 Minutes)
Schedule Trigger: Automatic execution every 10 minutes
Active Call Check: Identifies all "Call Initiated" records
Result Fetching: Retrieves call outcomes from Vapi API
Data Processing: Extracts recordings, transcripts, summaries, and interest scores
Sheet Update: Writes complete results or schedules retry for missed calls
Team Notification: Sends Slack alerts on batch completion

📋 Setup Instructions

Prerequisites
n8n Instance**: Version 1.0.0+ (self-hosted or cloud)
Google Account**: With Sheets API enabled
Vapi Account**: Active subscription with API access
Slack Workspace**: Optional, for notifications

Step 1: Prepare Your Lead Database

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 personalization
Phone Number: International format (+14155551234)
Email: For follow-up campaigns
Status: Set to "Pending"
Retry count: Set to 0
Other fields: Leave empty (auto-populated)

Step 2: Configure Vapi AI Assistant

Create Your AI Voice Agent
Log into vapi.ai
Navigate to Assistants → Create New
Design your conversation flow
Configure voice settings (gender, accent, speed)
Set up objection handling
Save and copy the Assistant ID

Set Up Phone Number
Go to Phone Numbers → Purchase/Import
Select local or toll-free number
Configure caller ID settings
Copy the Phone Number ID

Step 3: Import & Configure Workflow

Import to n8n
Download Cold_calling_loop.json
In n8n: Import → From File
Select the JSON file

Connect Credentials
Google Sheets: OAuth2 authentication
Vapi API: HTTP Header Auth
Name: Authorization
Value: Bearer YOUR_API_KEY
Slack: OAuth2 (optional)

Update Configuration
All Google Sheets nodes: Select your spreadsheet
HTTP Request nodes: Update assistantId and phoneNumberId
Slack nodes: Choose notification channels

Step 4: Test & Deploy

Add test lead with your phone number
Execute workflow manually
Answer call and complete conversation
Verify results in Google Sheet
Activate workflow for production

🔄 Workflow Logic Explained

Status Flow Diagram
[New Lead: Pending] → [Call Initiated] → [Completed/Failed]

[Retry Scheduled] ← (if failed & retry < 5)

Key Decision Points

Retry Limit Check (If1 Node)
Condition: Retry count ≤ 5
True: Proceed with call
False: Mark as "Max Retries Reached"

Call Completion Check (If2 Node)
Validates: Recording exists, transcript available, analysis complete
Success: Update with full results
Failure: Schedule retry with incremented counter

Status Routing (If4 Node)
"Pending": Direct to call queue
"Retry Scheduled": Add wait period before calling

📊 Node Reference Guide

Core Processing Nodes

| 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 |

Status Management Nodes

| 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 |

Control Flow Nodes

| 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 |

🛠️ Customization Guide

1. Modify Retry Strategy
// 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 };

2. Add Business Hours Check
// 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');
}

3. Enhance Lead Context
{
"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'] }}"
}
}
}

💡 Sticky Notes Configuration

Note 1: Status Progression
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

Note 2: Phone Format Requirements
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

Note 3: Vapi Setup Checklist
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

Note 4: Performance Guidelines
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

Common Issues & Solutions

🔴 "Authentication Failed"
Cause: Expired or invalid credentials
Fix:
Re-authenticate Google Sheets OAuth
Verify Vapi API key is active
Check credential permissions

🔴 "Call Not Initiating"
Cause: Invalid phone format or Vapi configuration
Fix:
Ensure phone includes country code
Verify Vapi account has credits
Test assistant in Vapi playground
Check assistant and phone IDs

🔴 "Missing Results"
Cause: Call still processing or webhook failure
Fix:
Wait 3-5 minutes for processing
Check Vapi dashboard directly
Verify Get Call Data node query
Review If2 conditions

🔴 "Infinite Loop"
Cause: Status not updating correctly
Fix:
Check retry count increment logic
Verify status update mappings
Clear test data and restart

🔴 "No Slack Notifications"
Cause: Bot permissions or channel access
Fix:
Invite bot to channel
Verify OAuth scopes
Test Slack node individually

📁 Required Files & Resources

| File | Description | Location |
|------|-------------|----------|
| Cold_calling_loop.json | Complete workflow configuration | Main workflow file |
| lead_template.xlsx | Google Sheets template with headers | Sample data file |

🏷️ Tags & Categories

Primary Category
Sales & Marketing Automation

Workflow Tags
cold-calling vapi-ai voice-automation lead-generation ai-sales google-sheets outbound-calling sales-automation conversational-ai crm-automation

Use Case Tags
b2b-sales recruitment customer-success market-research appointment-setting lead-qualification follow-up-automation

Integration Tags
vapi google-sheets slack voice-ai telephony

🚀 Future Enhancements

Planned Features
CRM Integration**: Direct sync with Salesforce/HubSpot
Multi-language**: Support for 10+ languages
SMS Follow-up**: Automated text after calls
Analytics Dashboard**: Real-time performance metrics
Sentiment Analysis**: Emotional intelligence scoring

Community Roadmap
Webhook support for real-time updates
Custom voice training options
A/B testing for scripts
Predictive best time to call
Integration with calendar systems

📞 Support & Resources

Support email : [email protected]

Nodes Used (3)

Google Sheets
n8n-nodes-base.googleSheets
HTTP Request
n8n-nodes-base.httpRequest
Slack
n8n-nodes-base.slack