If you run appointments at scale, manual confirmation calls become a bottleneck fast. This guide walks through building AI appointment confirmation phone calls — an automated v1 system that places 24-hour confirmation calls, handles outcomes (confirm, reschedule, can't make it), and updates your CRM so your team isn't chasing down no-shows.
What you’re building (v1)
A daily workflow that:
- Pulls tomorrow's appointments from Airtable
- Calls each person with an AI voice agent (ElevenLabs)
- Staggers calls every 5 minutes to avoid a “call blast”
- Records the outcome and updates Airtable
- If needed, reschedules in Calendly and keeps Airtable in sync
- Includes a safe fallback: if the caller asks questions, route them to a real phone number or email
Recommended stack
- Airtable as the source of truth for appointments and confirmation status
- Fillout (or your intake form tool) to collect signup details
- Calendly to schedule the appointment time
- Zapier to orchestrate scheduling, delays, and routing
- ElevenLabs to run the AI voice agent
Data model: the fields you need in Airtable
Create (or confirm) these fields in your Appointments table:
- Appointment datetime (the actual slot)
- First name
- Phone number
- Confirmation Status (single select)
- Confirmed phone
- Confirmed Calendly
- Confirmed text
- Not confirmed
- Phone call result (single select)
- Left message
- No answer
- Confirmed
- Rescheduled
- Can’t make it
- Other / unclear
- Had an issue
- Last confirmation call time (datetime)
- Confirmation call attempts (number)
Core rule: only call people who still need confirmation
In v1, keep the logic simple:
- Call only if Confirmation Status is empty or equals Not confirmed
- Skip anyone already confirmed via text, Calendly, or phone
This reduces unnecessary calls and prevents you from annoying people who already confirmed.
Step-by-step: build the daily 24-hour call scheduler
1) Decide your “call windows”
If your appointments run in fixed blocks (example: 9:30 AM and 2:00 PM), you can create two scheduled runs:
- Run A: around 9:15 AM today → calls for tomorrow’s 9:30 AM block
- Run B: around 1:30 PM today → calls for tomorrow’s 2:00 PM block
If your schedule is more dynamic, use a single run that queries “appointments happening 24 hours from now” within a time range.
2) Create a scheduled Zapier trigger
In Zapier, create a Zap with:
- Trigger: Schedule (daily)
- Action: Airtable — Find records
- Filter for appointments happening tomorrow in the relevant time window
- Filter for Confirmation Status empty or Not confirmed
3) Stagger calls every 5 minutes
After you get the list of records, loop through them and add a delay so calls don’t all fire at once:
- Use a loop step (Zapier Looping / “Create Loop From Line Items”)
- Add a Delay After Queue step of 5 minutes per record
This is especially important if you have 15–30 appointments in one block.
4) Hand off to the ElevenLabs voice agent
For each record, send:
- First name
- Appointment date/time
- Your company name (optional)
- A “fallback contact” phone/email
Then instruct the agent to return one of a few clean outcomes.
The call script (template)
Keep the first version short and outcome-driven.
System goals for the agent:
- Confirm attendance
- Offer rescheduling if they can’t make it
- If they ask operational questions, route them to a real person
Example script:
- Greeting: “Hi {first_name}, this is an automated confirmation call about your appointment tomorrow at {time}.”
- Confirm: “Can you still make it?”
- If yes: “Great — you’re confirmed. We’ll see you then.”
- If no / reschedule: “No problem. Would you like to reschedule for a different day?”
- If other questions: “I’m not able to answer questions — I’m just an appointment confirmation call. Please call {fallback_number} or email {fallback_email}.”
Handling outcomes (what happens after the call)
Create a second Zap (or a webhook handler) that processes the agent’s result and updates your systems.
Outcome: Confirmed
Update Airtable:
- Confirmation Status → Confirmed phone
- Phone call result → Confirmed
- Last confirmation call time → now
Outcome: Reschedule
- Use the Calendly API to reschedule to an available slot.
- Ensure Airtable updates too:
- If your Calendly → Airtable sync updates the record automatically on reschedule, great.
- If not, update Airtable directly with the new appointment datetime and a status like “Rescheduled”.
Update Airtable:
- Phone call result → Rescheduled
- Confirmation Status → (your preference: keep as Not confirmed until they accept, or mark as Rescheduled)
Outcome: Can’t make it
Update Airtable:
- Phone call result → Can’t make it
- Confirmation Status → (optional) Not attending / Cancelled
Outcome: Other / unclear
Update Airtable:
- Phone call result → Other / unclear
Then route to a human follow-up:
- Send an internal notification to your team
- Or create a task for your coordinator
Add a testing mode (required)
Before you go live, add a simple “test mode” switch so every call routes to the owner’s phone number.
Two common options:
- Airtable setting table with a checkbox Test mode + a Test phone number
- Zapier environment variable / storage value
When test mode is on:
- Replace the record’s phone number with the test phone number
- Still write results to Airtable so you can validate the full flow end-to-end
Optional: retry logic (later)
Once v1 is stable, add a second attempt rule:
- If no answer in the morning, try again late afternoon / early evening
- Cap attempts (example: 2)
Common pitfalls (and how to avoid them)
- Calling people who already confirmed: enforce the Confirmation Status filter.
- Calling 20 people at once: stagger calls every 5 minutes.
- Calendly and Airtable drifting out of sync: decide which is the source of truth and add explicit updates when needed.
- Agent getting stuck on questions: use the fallback response and route to a real phone/email.
Go-live checklist
Get help building this
Building AI appointment confirmation phone calls usually breaks at the outcome-handling step — when the agent's response doesn't map cleanly back to your Airtable fields or the Calendly reschedule doesn't stay in sync. If you've hit that wall, book a ZoomFlow session — one of our consultants can debug it with you live and ship the working version in the same call.