Google Sheets to Vapi, AI calls queued and logged
Your leads don’t go cold because you’re bad at follow-up. They go cold because your day fills up, the spreadsheet grows, and “I’ll call them after this” turns into next week.
This Vapi call automation hits sales ops teams first, but founders and marketers running inbound funnels feel it too. You end up with missed first-touch windows, duplicate dials, and no clean record of what happened.
This workflow turns Google Sheets into a simple calling queue, triggers AI outbound calls in Vapi, then logs what happened so you can keep every lead moving without babysitting a pipeline.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets to Vapi, AI calls queued and logged
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Code"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>HTTP Request"]
n4@{ icon: "mdi:database", form: "rounded", label: "Log call status ", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Google Sheets", pos: "b", h: 48 }
n6@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Wait1", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>append call status"]
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n2 --> n9
n7 --> n8
n0 --> n1
n1 --> n2
n3 --> n7
n5 --> n0
n9 --> n3
n4 --> n9
n6 --> n5
n8 --> n4
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n6 trigger
class n4,n5 database
class n3 api
class n2,n8 code
classDef customIcon fill:none,stroke:none
class n2,n3,n8 customIcon
The Problem: Your “Call List” Isn’t a Real Queue
Google Sheets is a great place to collect leads. It’s a not-so-great place to run follow-up operations. Someone has to scan rows, decide who’s next, copy a phone number, trigger the call, then remember to update the sheet. Multiply that by dozens of leads a day and it turns into a quiet time sink. Worse, the mistakes are subtle: the same lead gets called twice, a hot lead gets skipped, or the outcome never gets logged, which means your team keeps guessing.
None of these alone is the problem. Together, they are.
- You waste about 1–2 hours a day just moving between the sheet, your dialer, and your notes.
- Status fields drift because people update them late, or not at all, so the next person can’t trust the queue.
- Duplicate follow-ups happen when multiple teammates work the same sheet and “NO/YES” isn’t enforced consistently.
- Call outcomes end up in random places (DMs, CRMs, someone’s memory), which makes reporting and handoffs messy.
The Solution: Google Sheets → Vapi Calls, Automatically
This n8n workflow turns one column in Google Sheets into a dependable calling queue. On a schedule, it reads your spreadsheet and looks for leads where the “AI call status” is marked “NO.” It then processes those leads one at a time (batch size = 1), pulls out the phone number and the row details, and triggers an outbound AI call via a Vapi API request. Once the call is initiated, the workflow updates that same row so the lead is marked “YES,” which blocks duplicates. Finally, it appends the call outcome back into Google Sheets, creating a neat audit trail you can sort, filter, and share.
The workflow starts with a scheduled run, so it works even when nobody is online. Then it reads and maps the lead data, calls Vapi through an HTTP request, waits briefly for processing, and writes the outcome back to the correct spreadsheet row. Simple loop, clean record.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you collect 40 qualified leads a day in a Google Sheet. Manually, even a quick flow (open row, copy number, trigger the call, update status, add notes) is maybe 3 minutes per lead, which is about 2 hours of admin work daily. With this workflow, you spend roughly 5 minutes setting leads to “NO” (or importing them that way), and the scheduled run handles the rest while you do real work. Calls queue, outcomes land back in the sheet, and you’re not chasing updates.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for your lead queue and logging
- Vapi to place AI-powered outbound calls
- Vapi API key (get it from your Vapi dashboard)
Skill level: Intermediate. You’ll connect credentials and confirm the right spreadsheet columns, but you don’t need to write code.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A scheduled run checks your sheet. A Cron-style trigger starts the workflow on a cadence you choose (every few minutes, hourly, daily). n8n then reads your Google Sheet and looks specifically for leads that should be called next.
Leads are filtered and prepared. The workflow splits the sheet into items, maps the important fields (like phone number and row index), and applies a small amount of custom logic so the right data reaches Vapi cleanly.
Vapi is called through the API. n8n sends an authenticated HTTP request to Vapi to initiate the outbound AI call. Processing is intentionally single-file to keep the queue orderly and reduce weird edge cases.
Results go back to Google Sheets. After a short wait, the workflow appends the call outcome and updates “AI call status” to “YES,” so that same row won’t be called again on the next run.
You can easily modify the “AI call status” rules to use different labels (like “Queued,” “Called,” “Needs human follow-up”) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
This workflow starts on a schedule using Scheduled Run Start, then pulls data from your spreadsheet.
- Add or open Scheduled Run Start and set your desired schedule (e.g., hourly or daily) in the node’s schedule fields.
- Confirm Scheduled Run Start is connected to Read Spreadsheet Data as shown in the flow.
Step 2: Connect Google Sheets
Two Google Sheets nodes handle input and output: Read Spreadsheet Data for fetching records and Record Call Result for writing outcomes.
- Open Read Spreadsheet Data and select your spreadsheet and sheet/range that contains call records.
- Open Record Call Result and select the destination spreadsheet and sheet/range where results should be recorded.
- Credential Required: Connect your Google Sheets credentials in both Read Spreadsheet Data and Record Call Result.
Step 3: Set Up Processing and Iteration
Records are distributed and transformed before custom logic runs and batches are iterated.
- Verify Distribute Items receives data from Read Spreadsheet Data and outputs to Map Field Values.
- In Map Field Values, add or adjust fields to map the spreadsheet columns into the structure expected by Custom Logic.
- Open Custom Logic and implement the business rules you need for call processing before batching.
- Confirm Custom Logic outputs to Iterate Records to process calls in batches.
Step 4: Configure the External Call and Result Capture
This section triggers the external call, applies a delay, and appends the call outcome before recording results.
- Open External API Call and configure the request details (URL, method, headers, body) required by your call provider.
- Review Delay Step to ensure the wait time matches the expected response window from the external service.
- In Append Call Outcome, add the code to merge API results with the current record.
- Ensure Append Call Outcome outputs to Record Call Result so results are written back to Google Sheets.
Step 5: Test and Activate Your Workflow
Run a manual test to verify the full loop from sheet input to call outcome recording.
- Click Execute Workflow and confirm Scheduled Run Start triggers the run.
- Check that Read Spreadsheet Data pulls rows and that Record Call Result writes outcomes back to your sheet.
- Verify External API Call responds and that Append Call Outcome outputs the expected fields.
- When results look correct, toggle the workflow to Active for scheduled production runs.
Common Gotchas
- Google Sheets OAuth credentials can expire or lose access to a spreadsheet. If things break, check the credential status in n8n and confirm the sheet is still shared with the same Google account.
- If you’re using Wait nodes or external processing, timing can drift. Bump up the wait duration if downstream nodes fail because the call outcome hasn’t arrived yet.
- Vapi API calls can fail quietly when headers or permissions are off. Check the HTTP Request node response and your Vapi dashboard logs before you assume the workflow logic is wrong.
Frequently Asked Questions
About 30 minutes if your Google Sheets and Vapi accounts are ready.
No. You will connect credentials and match your sheet columns to the workflow fields.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Vapi usage costs based on your call volume.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s one of the best reasons to use n8n. You can change the field mapping so the workflow looks for “Ready” instead of “NO,” and writes back “Called,” “No answer,” or “Needs human follow-up” as separate values. Most customizations happen in the Map Field Values (Set) step and the Append Call Outcome logic, since that’s where the sheet columns are interpreted and updated. If you later move your queue to Airtable or Notion, you can swap the Google Sheets read/write steps without changing the Vapi call step.
Usually it’s an invalid or expired API key in the HTTP Header Auth credentials, so regenerate the Vapi token and update it in n8n. Also check the HTTP Request node’s last response for permission errors or a malformed payload, because Vapi will reject requests that don’t match the expected format. If you’re triggering lots of calls in a short window, rate limits can show up too, which looks like random failures until you check the logs.
Practically, as many as your n8n plan and Vapi account can support, but this specific workflow processes one lead at a time to keep the queue clean. On n8n Cloud, higher tiers handle more monthly executions; if you self-host, the limit is mostly your server resources and how frequently you run the schedule. If you need more throughput, you can raise the batch size, but test carefully so you don’t accidentally trigger a burst of calls.
Often, yes. This workflow uses batching, waits, and custom logic that’s awkward (or pricey) in simpler automation tools, and n8n’s self-hosting option matters when you’re running lots of leads. Zapier or Make can still be fine for a basic “new row → call” flow, especially if you never need branching or outcome logging. The bigger issue is reliability: once you care about duplicate prevention and writing results back to the exact row, n8n tends to feel steadier. If you’re on the fence, Talk to an automation expert and you’ll get a clear recommendation for your setup.
Once this is running, your sheet becomes a real queue, not a shared guessing game. Set it up once, and the workflow keeps the follow-up pressure off your team.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.