Google Sheets + Google Calendar for faster lead bookings
Leads come in. Then they sit. Someone meant to call, someone forgot, and now you are sending that awkward “just checking in” email two days too late.
This is where lead booking automation pays off fast. Restaurant managers feel it during service. Marketing leads feel it when campaigns “work” but nobody follows up. And small business owners get stuck being the entire sales team.
This workflow turns new rows in Google Sheets into voice outreach (via Vapi), logs the outcome, and creates a Google Calendar booking when the lead says yes. You will see exactly what it automates, what results to expect, and what you need to run it.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Google Calendar for faster lead bookings
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n4["<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/webhook.dark.svg' width='40' height='40' /></div><br/>VAPI Call Response Webhook"]
n5@{ icon: "mdi:database", form: "rounded", label: "Store User Response (Sheet)", pos: "b", h: 48 }
n6["<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/>Extract Booking/Order Info"]
n7@{ icon: "mdi:location-exit", form: "rounded", label: "Schedule Delivery/Table Book..", 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/webhook.dark.svg' width='40' height='40' /></div><br/>Send Response to VAPI"]
n6 --> n7
n4 --> n5
n5 --> n6
n7 --> n8
end
subgraph sg1["New Lead Trigger (Excel) Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "New Lead Trigger (Excel)", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Lead Data", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Through Leads", pos: "b", h: 48 }
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/>Start Marketing Call (VAPI)"]
n1 --> n2
n2 --> n3
n2 --> n2
n0 --> n1
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 n0 trigger
class n5 database
class n4,n8,n3 api
class n6 code
classDef customIcon fill:none,stroke:none
class n4,n6,n8,n3 customIcon
The Problem: Leads fall through the cracks before they book
Google Sheets is a surprisingly common “CRM,” especially for small teams. It’s quick to start, easy to share, and flexible enough to track names, phone numbers, preferences, and follow-up notes. The problem shows up right after the spreadsheet fills up. Someone has to notice the new row, decide what to say, make the call, write down what happened, and then schedule a booking if the lead is ready. That is a lot of context switching. And when you’re busy, “later” becomes “never,” so leads go cold and your calendar stays emptier than it should.
It adds up fast. Here’s where it breaks down in real life.
- New leads get buried because nobody is watching the sheet all day.
- Calls happen inconsistently, so your outreach depends on who remembers and when.
- Even when a call connects, results are rarely logged cleanly, which makes campaigns impossible to measure.
- Bookings get delayed because scheduling is a separate task, and separate tasks are where momentum dies.
The Solution: Sheets-triggered voice outreach that books the calendar
This n8n workflow watches your Google Sheets lead list for new entries and reacts immediately. When a new lead appears, it formats the lead details (name, phone, preferences, typical party size, and more) so the outreach message is consistent. Then it processes leads in batches, which is useful when you import a list or run a campaign to a segment. For each lead, n8n sends a request to Vapi to launch a voice call with your tailored offer and booking invitation. When the call ends or the customer responds, Vapi calls back into n8n through a webhook, and the workflow logs the full outcome back into Google Sheets. If the response includes booking intent, the workflow extracts details (date, time, party size, special requests) and creates the event in Google Calendar automatically.
The flow starts in Google Sheets and moves to Vapi for voice outreach. The webhook captures the response, then Google Sheets becomes your system of record. When booking details are present, Google Calendar is updated right away, so there’s no “someone still needs to schedule it” gap.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you add 30 new leads a week to Google Sheets from a promo or loyalty program. Manually, even a quick process is something like 10 minutes to call, 5 minutes to log notes, and 5 minutes to schedule if they book, which is roughly 20 minutes per lead. That’s about 10 hours weekly. With this workflow, adding the row is the only “work,” and the rest runs in the background: calls launch automatically, outcomes are written back, and bookings appear in Google Calendar when the lead confirms. You still review edge cases, but most teams get several hours back immediately.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store leads, responses, and tracking.
- Google Calendar to create bookings automatically.
- Vapi credentials (get them from your Vapi dashboard).
Skill level: Intermediate. You’ll connect accounts, map fields, and test a webhook callback end-to-end.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A new lead hits your sheet. The workflow starts with a Google Sheets trigger that fires when a new lead is added to your lead management spreadsheet.
The lead is cleaned up and prepared. n8n standardizes fields like customer name, phone number, typical party size, and time preferences so the next steps don’t depend on messy, inconsistent data.
Vapi runs the outreach and sends the result back. n8n launches a voice call via an HTTP request to Vapi, then listens for the callback through a webhook so it can capture what the customer actually said.
Bookings get scheduled automatically. The workflow logs outcomes to Google Sheets, extracts booking details from natural language, and creates the event in Google Calendar. A response is returned to the webhook so the voice flow can continue cleanly.
You can easily modify the call script and qualification rules to fit your business, then route “not ready” leads into a follow-up sequence. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Google Sheets Trigger
Set up the workflow to start when a new lead is added to your intake sheet. The execution flow begins with Sheet Lead Intake Trigger → Format Lead Details.
- Add and open Sheet Lead Intake Trigger.
- Set Event to
rowAdded. - Select the Document as
Vapi_real-estateand the Sheet ascall_list. - Credential Required: Connect your
googleSheetsTriggerOAuth2Apicredentials.
[YOUR_ID] with your actual Google Sheet ID to avoid trigger failures.Step 2: Connect Google Sheets for Logging
Configure the logging sheet to store outreach responses. The flow continues from Voice Callback Webhook → Log Response to Sheet → Parse Booking Details.
- Add and open Log Response to Sheet.
- Set Operation to
appendOrUpdateand Authentication toserviceAccount. - Set Document to
Vapi_real-estateand Sheet toSheet1. - Map column values using the provided expressions, for example prospect_name →
{{ $json.body.message.toolCalls[0].function.arguments.prospect_name }}and appointment_datetime →{{ $json.body.message.toolCalls[0].function.arguments.appointment_datetime }}. - Credential Required: Connect your
googleApicredentials.
prospect_name so updates correctly merge with existing rows.Step 3: Set Up Lead Processing
Normalize incoming lead data and prepare batch processing and booking details parsing.
- In Format Lead Details, set the Phone field value to
=+{{ $json.Phone }}to standardize phone numbers. - Open Iterate Lead Batches and keep default settings to process one lead at a time.
- In Parse Booking Details, keep the provided JavaScript to parse
date_inputandtime_inputintoappointment_datetime_parsedandappointment_end_datetimein IST. - Optionally keep Flowpast Branding as a documentation note inside the workflow canvas.
date_input and time_input for accurate scheduling.Step 4: Configure Outreach, Webhook Callback, and Booking Actions
This step covers the outbound call, inbound webhook response, and calendar booking creation. The execution path is Iterate Lead Batches → Launch Voice Outreach and later Parse Booking Details → Create Booking Calendar → Return Voice Response.
- Open Launch Voice Outreach and set URL to
https://api.vapi.ai/callwith MethodPOST. - Set JSON Body to
{ "assistantId": "add_id_here", "phoneNumberId": "add_id_here", "customers": [ { "number":"{{ $json.Phone }}" } ]}and keep Authentication aspredefinedCredentialType. - Credential Required: Connect your
httpBearerAuthcredentials. - Open Voice Callback Webhook and set HTTP Method to
POSTwith Response ModeresponseNode. - Copy the webhook Path
a34ac7ac-7ea4-4942-8dbf-f9ce3f0986e4and configure it in your voice platform callback settings. - Open Create Booking Calendar and set Start to
{{ $json.appointment_datetime_parsed }}and End to{{ $json.appointment_end_datetime }}. - Select the Calendar as
[YOUR_EMAIL]. - Credential Required: Connect your
googleCalendarOAuth2Apicredentials. - Open Return Voice Response and keep default settings to send the webhook response.
add_id_here, [YOUR_ID], and [YOUR_EMAIL] with real values before testing, or the call and calendar creation will fail.Step 5: Test and Activate Your Workflow
Validate the end-to-end flow from sheet intake through voice outreach and calendar creation.
- Manually add a new row to the
call_listsheet with a valid Phone value. - Run the workflow once to confirm Sheet Lead Intake Trigger starts and Launch Voice Outreach fires.
- Send a sample webhook payload to Voice Callback Webhook and confirm Log Response to Sheet appends data and Create Booking Calendar creates an event.
- Successful execution should end at Return Voice Response without errors.
- Toggle the workflow to Active for production use.
Common Gotchas
- Google Sheets permissions can be weird with shared drives. If rows aren’t logging, check the n8n Google Sheets credential scope and confirm the exact spreadsheet ID is accessible.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Vapi webhooks fail most often because the callback URL changed or is blocked. Confirm the webhook URL in Vapi matches n8n, then check the n8n execution logs for rejected requests.
Frequently Asked Questions
About 45 minutes if your sheets and accounts are ready.
No. You’ll mostly map fields and connect credentials. The only “code-like” part is adjusting the booking detail extraction if your wording is unique.
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 (per-minute billing for voice calls).
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 a common tweak. You can route calls based on a “location” or “preferred_time_slot” column in Google Sheets, then adjust what gets written into the Google Calendar event title, description, and timezone. If you want different scripts per segment, change the payload in the “Launch Voice Outreach” HTTP Request step and store variants in the sheet. You can also expand the “Parse Booking Details” logic to require a minimum party size or block off specific days.
Usually it’s a permissions or spreadsheet ID issue. Reconnect the Google Sheets credential in n8n, then verify the spreadsheet is accessible to that Google account and that the trigger is watching the correct tab. If it still fails, check the execution log for “insufficient permissions” or “not found,” because those two messages point to different fixes.
It depends more on your Vapi call capacity than n8n. On n8n Cloud Starter, you can run up to 2,500 workflow executions per month, and higher plans handle more. If you self-host, there’s no execution cap, but your server and Google API limits still matter. Practically, most small teams run dozens to a few hundred leads per day without issue as long as batching is configured and calls aren’t all launched at the exact same second.
Often, yes, because this workflow needs webhooks, branching logic, and reliable logging back into Google Sheets. n8n also gives you more control over how you parse booking details and when you create Google Calendar events, and it doesn’t penalize you as much when workflows get complex. Zapier or Make can still work if you want a very simple “new row → send email” style flow, but voice calls plus callbacks tend to get messy there. If you’re unsure, Talk to an automation expert and you’ll get a straight recommendation. No pressure.
The workflow handles the repetitive follow-up and scheduling so leads don’t drift away. Set it up once, then spend your time on the conversations that actually need a human.
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.