Google Sheets + Twilio: lead calls logged and recapped
New lead comes in. You mean to call fast. Then the day gets noisy, the notes end up in three places, and the follow-up email is “I’ll do it later” (which usually means never). This is how lead pipelines quietly leak.
Sales managers feel it when reps forget to log outcomes. A marketing ops person sees it when “lead status” becomes a guessing game. And if you run a small team, you’re the one chasing updates. This Sheets Twilio calls automation keeps calls, summaries, and next steps consistent without extra admin.
You’ll see how the workflow triggers from Google Sheets, uses Twilio and RetellAI to handle calls, then sends Gmail recaps and updates the lead record so nothing falls through the cracks.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Twilio: lead calls logged and recapped
flowchart LR
subgraph sg0["OpenAI Call Review Flow"]
direction LR
n7["<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/>Post-Call RetellAI Webhook"]
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Analyzed Call Events", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Verify Outbound Direction", pos: "b", h: 48 }
n10@{ icon: "mdi:database", form: "rounded", label: "Modify Lead Sheet Record", pos: "b", h: 48 }
n11@{ icon: "mdi:message-outline", form: "rounded", label: "Email Call Summary", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "OpenAI Call Review", pos: "b", h: 48 }
n13@{ icon: "mdi:message-outline", form: "rounded", label: "Send Appointment Confirmation", pos: "b", h: 48 }
n9 --> n10
n9 --> n12
n8 --> n9
n12 --> n13
n10 --> n11
n7 --> n8
end
subgraph sg1["Track New Sheet Lead Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Track New Sheet Lead", pos: "b", h: 48 }
n1["<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/twilio.svg' width='40' height='40' /></div><br/>Dispatch SMS Call Reminder"]
n2@{ icon: "mdi:cog", form: "rounded", label: "Delay Before Outbound Call", 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/>Initiate RetellAI Lead Call"]
n0 --> n1
n2 --> n3
n1 --> n2
end
subgraph sg2["Flow 3"]
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/>Inbound RetellAI Webhook"]
n5@{ icon: "mdi:database", form: "rounded", label: "Lookup Number in Sheets", 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/webhook.dark.svg' width='40' height='40' /></div><br/>Return Inbound Webhook Reply"]
n4 --> n5
n5 --> n6
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 n12 ai
class n8,n9 decision
class n10,n5 database
class n7,n3,n4,n6 api
classDef customIcon fill:none,stroke:none
class n7,n1,n3,n4,n6 customIcon
The Problem: Lead calls happen, but the pipeline doesn’t update
Calling leads is rarely the hard part. The mess starts after. Someone calls from a saved list, scribbles notes in a notebook or a Slack DM to themselves, and later tries to remember what was said. Meanwhile, your Google Sheet still shows “New,” so marketing keeps sending nurture emails to someone who already booked a call. Or worse, nobody follows up because there’s no clear owner. Multiply that by a week of inbound calls and outbound follow-ups, and you get a pipeline that looks fine on paper but is inaccurate in real life.
It adds up fast. Here’s where it breaks down in day-to-day operations.
- Reps forget to log call outcomes, so the next touchpoint is based on memory instead of data.
- Inbound callers can’t be matched to the right lead record quickly, which means missed context and awkward conversations.
- Follow-up emails are inconsistent, and “quick recap” turns into 20 minutes of rewriting after every call.
- When the sheet is stale, reporting becomes a weekly cleanup job instead of a real-time view.
The Solution: Google Sheets-triggered calls with automatic Gmail recaps
This workflow turns your Google Sheet into the source of truth and keeps it updated automatically. When a new lead is added to Google Sheets, n8n triggers immediately and sends a Twilio SMS reminder to your rep so the first touch happens on time. After an optional short delay, the workflow can initiate an automated call through RetellAI, which is useful for initial qualification or for handling common questions when your team is slammed. When calls happen (inbound or outbound), RetellAI sends call events back into n8n. The workflow filters for analyzed call data, updates the lead record in Google Sheets, generates a clear call recap using OpenAI, and emails that summary through Gmail to the rep or team inbox. Notes get captured. Follow-ups get consistent. Your sheet stays current.
The workflow starts with a new row in Google Sheets or an inbound call webhook. Then RetellAI handles the call flow and sends post-call data back. Finally, Google Sheets and Gmail get updated automatically, so your team can move to the next lead instead of doing admin.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you add 15 new leads a day to Google Sheets. Manually, a rep might spend about 5 minutes per lead doing “extras” (set a reminder, log notes, write a recap), which is roughly an hour a day. With this workflow: the SMS reminder is instant, the call can run after a 5-minute delay, and the recap email plus sheet update happens automatically once RetellAI posts the analyzed call. You still review the outcome, but you’re not doing the busywork.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for your lead list and statuses
- Twilio to send SMS reminders to reps
- RetellAI API key (get it from your RetellAI dashboard)
- Gmail to email summaries and confirmations
- OpenAI API key (get it from the OpenAI API settings page)
Skill level: Intermediate. You’ll connect accounts, paste API keys, and map a few fields like phone number and email.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A new lead appears in Google Sheets. The Google Sheets trigger watches for new rows so the moment a lead is added, the workflow kicks off.
The rep gets nudged via Twilio. An SMS reminder goes out right away, and you can keep the optional wait enabled so the call happens after a short buffer (useful when leads are batch-imported).
RetellAI handles outbound and inbound call events. Outbound calls are initiated via HTTP request to RetellAI, while inbound calls hit a webhook. The workflow looks up the caller’s number in Google Sheets and responds back, so your phone agent can proceed with context (or gracefully fail when the number isn’t found).
OpenAI generates the recap, then Gmail sends it. Once post-call analyzed data arrives, the workflow updates the lead record in Sheets, generates a clean summary, and emails it to the right inbox. Appointment confirmation can be sent too.
You can easily modify the SMS copy to match your brand voice based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Google Sheets Trigger
Start by configuring the trigger that watches for new leads in your spreadsheet. This begins the outbound SMS and call sequence.
- Add and open Track New Sheet Lead.
- Set Event to
rowAdded. - Select the target spreadsheet in Document and the worksheet in Sheet (the current values are placeholders
=and must be set). - Credential Required: Connect your googleSheetsTriggerOAuth2Api credentials.
- Optionally keep Flowpast Branding as a visual label; it does not affect execution.
= placeholders. Update them to your actual spreadsheet and tab or the trigger won’t fire.Step 2: Connect the RetellAI Inbound Webhook Flow
Configure the inbound webhook response so RetellAI can retrieve lead details and personalize the call.
- Open Inbound RetellAI Webhook and confirm HTTP Method is
POSTwith Path set toebd11c9b-129c-4b59-8c27-9a4b567305f7. - In Lookup Number in Sheets, set a filter where Phone Number equals
{{ $json.body.call_inbound.from_number }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Lookup Number in Sheets.
- In Return Inbound Webhook Reply, keep Respond With as
jsonand set Response Body to{ "call_inbound": { "dynamic_variables": { "name": "{{ $json.Name }}" } } }.
Step 3: Set Up Outbound SMS and Call Initiation
Configure the outbound sequence that sends a reminder SMS, waits briefly, and triggers the RetellAI call.
- In Dispatch SMS Call Reminder, set To to
{{ $json['Phone Number'] }}, From to+1234567890, and Message toHello, thanks for your interest in our roofing services. We'll be calling you shortly to ask about your project!. - Credential Required: Connect your twilioApi credentials in Dispatch SMS Call Reminder.
- In Delay Before Outbound Call, set Unit to
minutesand Amount to1. - In Initiate RetellAI Lead Call, set URL to
https://api.retellai.com/v2/create-phone-calland Method toPOST. - Set JSON Body to
{ "from_number": "+33600000000", "to_number": "{{ $json['Phone Number'] }}", "retell_llm_dynamic_variables": { "uuid": "{{ $('Track New Sheet Lead').item.json.UUID }}" } }. - In Initiate RetellAI Lead Call headers, set Authorization to
Bearer [CONFIGURE_YOUR_TOKEN]and Content-Type toapplication/json.
[CONFIGURE_YOUR_TOKEN] in Initiate RetellAI Lead Call with your actual RetellAI API token, or the call will fail.Step 4: Configure Post-Call Filtering and Sheet Updates
After the call completes, RetellAI posts the call analysis. This section filters for analyzed calls, validates direction, updates the lead record, and emails a summary.
- In Post-Call RetellAI Webhook, confirm HTTP Method is
POSTand Path isf8878b78-43ea-4caa-b16c-cde9aaf2e9b1. - In Filter Analyzed Call Events, set the condition to Left Value
{{ $json.body.event }}equals Right Valuecall_analyzed. - In Verify Outbound Direction, set the condition to Left Value
{{ $json.body.call.direction }}equals Right Valueoutbound. - Verify Outbound Direction outputs to both Modify Lead Sheet Record and OpenAI Call Review in parallel.
- In Modify Lead Sheet Record, set Operation to
updateand map UUID to{{ $json.body.call.retell_llm_dynamic_variables.uuid }}and Qualification to{{ $json.body.call.call_analysis.custom_analysis_data.qualification }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Modify Lead Sheet Record.
- In Email Call Summary, set Send To to
[YOUR_EMAIL], Subject toNew Lead - Call Summary, and keep the Message template using the call analysis fields. - Credential Required: Connect your gmailOAuth2 credentials in Email Call Summary.
[YOUR_EMAIL] in Email Call Summary or you won’t receive the report.Step 5: Set Up AI Review and Appointment Confirmation
Analyze the call transcript with OpenAI and send the appointment summary email using both call analysis and AI feedback.
- In OpenAI Call Review, set Model to
gpt-4.1. - Set the message content to
Analyze this call transcript to identify how the call went and identify possible improvements to the voice prompt: {{ $json.body.call.transcript }}. - Credential Required: Connect your openAiApi credentials in OpenAI Call Review.
- In Send Appointment Confirmation, set Send To to
[YOUR_EMAIL]and Subject toRoofing Appointment Scheduled. - Keep the Message template so it pulls data from Verify Outbound Direction and includes
{{ $json.message.content }}from OpenAI Call Review. - Credential Required: Connect your gmailOAuth2 credentials in Send Appointment Confirmation.
[YOUR_EMAIL] in Send Appointment Confirmation to your real recipient address.Step 6: Test and Activate Your Workflow
Validate each path with a test lead and webhook payloads, then activate the workflow for production.
- Manually run Track New Sheet Lead with a new row in your sheet to verify Dispatch SMS Call Reminder and Initiate RetellAI Lead Call execute successfully.
- Send a test POST request to Inbound RetellAI Webhook and confirm Lookup Number in Sheets returns a name and Return Inbound Webhook Reply responds with the dynamic variable payload.
- Send a test POST request to Post-Call RetellAI Webhook with
call_analyzeddata and confirm the path runs through Filter Analyzed Call Events, Verify Outbound Direction, and into both Modify Lead Sheet Record and OpenAI Call Review. - Verify that Email Call Summary and Send Appointment Confirmation deliver emails with populated fields and AI feedback.
- Set the workflow to Active once tests pass.
Common Gotchas
- Twilio credentials can expire or need specific permissions. If things break, check your Twilio Console messaging logs first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About an hour if your API keys and Google Sheet are ready.
No. You’ll mostly connect accounts and map fields like phone number and email.
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 OpenAI API usage and your Twilio/RetellAI call and messaging costs.
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 tweaks you can make. Update the prompt in the “OpenAI Call Review” node to change the format (bullet points, MEDDICC, objections, next steps, or a short CRM-ready note). You can also make the Gmail recipients dynamic by pulling the rep’s email from the lead row in Google Sheets. And if you’d rather send recaps to Slack instead of Gmail, swap the “Email Call Summary” node for your messaging tool.
Usually it’s an auth issue or messaging permissions. Check the Twilio Console logs for the message SID and error details, then confirm your n8n Twilio credentials are still valid and the sending number is allowed to text your destination region.
It depends on your n8n plan and your call provider limits, but most small teams can run dozens of calls a day comfortably.
Often, yes, because this workflow isn’t just a two-step “new row → send message.” You’re dealing with webhooks, filtering analyzed call events, and updating records after asynchronous call processing, which is where simpler builders can get awkward or expensive. n8n also gives you a self-hosting option, which helps when volume grows. Zapier or Make can still be fine if you only need a basic SMS alert and a single email. If you’re on the fence, Talk to an automation expert and map it to your real call flow.
Once this is running, your sheet stops being “a place leads go to die” and starts acting like a live pipeline. The workflow takes care of the repeatable parts so your team can focus on the conversation.
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.