Run daily outbound calls from Google Sheets with Retell AI
Every weekday morning, Geni pulls pending leads from your Google Sheet, launches personalized Retell voice calls, and writes call IDs back.
Build a code workflow that runs my daily outbound call queue from a Google Sheet, using Retell AI to place the calls. Every step should be deterministic. This is a fixed pipeline with no LLM reasoning.
Trigger: cron, every weekday (Monday through Friday) at 9am America/New_York.
Step 1. Read the Call Queue tab from my Google Sheet using Google Sheets' Get Values operation. The columns are Name, Phone, Company, Talking Points, Status, and an optional Timezone column.
Step 2. Filter to rows where Status is exactly 'Pending'. Skip everything else so already-dialed rows never get called twice.
Step 3. Apply a configurable daily call cap (default 50) so we stay comfortably under Retell's workspace concurrency limit. Trim the pending queue to that cap.
Step 4. For each remaining row: if a Timezone column is present and set, skip the row when it is not yet 9am in that timezone (the row stays Pending and will be picked up on a later run). Otherwise, call Retell AI's Create Outbound Phone Call operation using a configured from_number and override_agent_id, passing the row's Phone as to_number and passing Name, Company, and Talking Points as dynamic variables (retell_llm_dynamic_variables) so the agent script personalizes per lead. Capture the call_id returned by the create-call response.
Step 5. Write the results back to the same row using Google Sheets' Batch Update Values operation: the returned call_id, the launch timestamp in ISO 8601, and Status set to 'In Progress'.
Configuration inputs I want to be able to tweak: the Google Sheet ID and tab name, the Retell from_number in E.164 format, the Retell override_agent_id, the daily call cap (default 50), and the cron time and timezone.
Additional information
What does this prompt do?
- Every weekday at 9am, reads the call queue tab in your Google Sheet and picks up rows marked as pending.
- Launches a personalized voice call with your Retell agent for each lead, passing name, company, and talking points into the script.
- Writes the call ID, launch time, and a new status back to the same row so you always know who was dialed and when.
- Caps the run at a configurable daily volume and honors an optional timezone column so west coast leads are dialed at 9am local.
What do I need to use this?
- A Google account with edit access to the sheet that holds your call queue.
- A Retell AI account with a configured voice agent and an outbound phone number.
- The tab name and column headers you use for name, phone, company, talking points, and status.
How can I customize it?
- Change the run time or add extra runs, for example 9am and 2pm.
- Set your own daily call cap to match your Retell plan and team capacity.
- Add or rename columns you want the voice agent to reference during the conversation.
Frequently asked questions
Does this work with any Retell voice agent?
How does the voice agent know what to say for each lead?
Will it stop dialing before I hit my Retell concurrency limit?
Can I run calls at 9am local time for each lead?
What happens to rows that already have a status?
Related templates
Stop dialing your outbound list by hand.
Connect Google Sheets and Retell AI once, and Geni runs your call queue every weekday at 9am.