DEV Community

Midas Tools
Midas Tools

Posted on

How to Set Up Automated Appointment Reminders That Cut No-Shows by 30%

How to Set Up Automated Appointment Reminders That Cut No-Shows by 30%

No-shows cost the average service business $50,000–$150,000 per year. A dentist with 20 appointment slots/day losing 3 to no-shows at $200/slot loses $600/day — $12,000/month in empty chairs.

The fix isn't calling every patient the day before. It's a 3-touch automated reminder system that takes 2 hours to set up and runs itself forever.

Here's the exact system.


Why No-Shows Happen (And Why Reminders Work)

People don't skip appointments because they're irresponsible. They skip because:

  • They forgot (60% of no-shows)
  • They had a conflict and didn't bother to call (25%)
  • They got anxious and avoided it (15%)

Automated reminders solve the first two completely. A 3-touch sequence — 48 hours before, 24 hours before, 2 hours before — cuts no-shows by 25–40% in most practices. The research is consistent across dentistry, medical, legal, and fitness verticals.


The 3-Touch System

Touch 1 — 48 hours before: Email confirmation
Subject: Your [Service] appointment is in 2 days

Goal: Reconfirm, give them an easy way to reschedule (not cancel — reschedule). At 48 hours, they still have time to fill the slot.

Touch 2 — 24 hours before: SMS reminder
"Hi [Name], reminder: your appointment at [Practice] is tomorrow at [Time]. Reply C to confirm or call us to reschedule: [PHONE]."

Goal: Get an explicit confirmation. Unconfirmed = high no-show risk. Now you know who to call manually.

Touch 3 — 2 hours before: Final SMS
"See you today at [Time]! [Address]. Reply HELP if you need to reach us."

Goal: Last-chance reality check. At 2 hours, a reschedule is hard, but it's better than an empty slot.


The Stack: 3 Ways to Build It

Option 1: Cal.com + Make (No-code, Free–$10/mo)

Best for: Solo operators, consultants, small practices using Cal.com for booking.

Setup:

  1. Create a Cal.com account (free) and add your appointment types
  2. Create a Make.com account (free tier: 1,000 operations/month)
  3. In Make: Create a new scenario → Trigger: Cal.com "New Booking"
  4. Add actions:
    • Wait 0 seconds → Send email (Touch 1 — immediate booking confirmation)
    • Wait until 48h before appointment → Send email (Touch 2)
    • Wait until 24h before → Send SMS via Twilio (Touch 3)
    • Wait until 2h before → Send SMS via Twilio (Touch 4)
  5. Set up a Twilio account ($1.15/mo phone number + $0.0079/SMS)

Total cost: $5–$15/month depending on volume.

The 48-hour wait: In Make, use a "Sleep" module or a date/time router. Calculate appointment_time - 48 hours and schedule the message for that timestamp.

Option 2: Calendly + Zapier + Twilio (More robust, $20–$50/mo)

Best for: Businesses already using Calendly, needing more reliability.

Zap structure:

  • Trigger: Calendly "Invitee Created"
  • Action 1: Twilio → Send SMS (immediate confirmation)
  • Action 2: Gmail → Send Email (confirmation with reschedule link)
  • Action 3: (Use Zapier's built-in delay) → Delay until 24h before → Twilio SMS
  • Action 4: Delay until 2h before → Twilio SMS

Zapier's "Delay Until" action handles the timing calculation automatically.

Cost: Zapier (~$20/mo) + Twilio (~$5/mo for typical volume) = ~$25/month.

Option 3: OpenAI Assistants + Twilio + Cal.com API (Full control, ~$10/mo)

Best for: Developers, businesses wanting AI-powered personalization in reminders.

from openai import OpenAI
import twilio.rest
from datetime import datetime, timedelta
import schedule, time

openai_client = OpenAI()
twilio_client = twilio.rest.Client(TWILIO_SID, TWILIO_AUTH)

def generate_reminder(patient_name, appointment_time, practice_name, service_type):
    """Use AI to write a personalized reminder instead of a template."""
    response = openai_client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{
            "role": "user", 
            "content": f"""Write a friendly SMS reminder for {patient_name}'s {service_type} 
            appointment at {practice_name} tomorrow at {appointment_time}. 
            Include: appointment time, ask them to reply C to confirm or call to reschedule.
            Keep under 160 characters. Warm tone, not robotic."""
        }]
    )
    return response.choices[0].message.content

def send_reminder(to_phone, message):
    twilio_client.messages.create(
        to=to_phone,
        from_=YOUR_TWILIO_NUMBER,
        body=message
    )

# Schedule from your Cal.com webhook when appointment is created
def schedule_reminders(appointment):
    appt_time = datetime.fromisoformat(appointment['start_time'])

    # 48h reminder
    remind_48h = appt_time - timedelta(hours=48)
    schedule.every().day.at(remind_48h.strftime("%H:%M")).do(
        send_reminder, 
        appointment['attendee_phone'],
        generate_reminder(appointment['attendee_name'], appt_time, PRACTICE_NAME, appointment['type'])
    )

    # 2h reminder  
    remind_2h = appt_time - timedelta(hours=2)
    schedule.every().day.at(remind_2h.strftime("%H:%M")).do(
        send_reminder,
        appointment['attendee_phone'], 
        f"See you in 2 hours at {appt_time.strftime('%I:%M %p')}! {PRACTICE_ADDRESS}"
    )
Enter fullscreen mode Exit fullscreen mode

The AI-generated reminder vs. a template: personalized messages see 15–20% higher confirmation rates. "Hi Maria, just a heads up about your cleaning tomorrow at 10 AM — we're looking forward to seeing you!" vs. "REMINDER: Appointment on Feb 27 10:00 AM."


The Confirmation Tracking Problem

Most businesses set up reminders and stop there. The next step that 3x's your result: tracking who confirmed vs. who didn't.

When someone replies "C" or "confirm," log it. Build a simple dashboard (even a Google Sheet updated by Zapier works):

Name Appointment Confirmed? Reminder Sent
Maria G. Feb 27 10 AM ✅ Yes Yes
Carlos M. Feb 27 2 PM ❌ No Yes
Ana L. Feb 27 4 PM ✅ Yes Yes

Unconfirmed patients at T-24h = your call list. Your front desk calls only those 5–6 people, not all 20. This alone saves 45 minutes of front-desk time per day.


The Reschedule Link Is Critical

Every reminder must include an easy reschedule option. The goal isn't just to confirm attendance — it's to recover the slot if they can't come.

A patient who can't make it will:

  • Cancel with 48+ hours notice if you make it easy → you fill the slot
  • Just not show up if you don't make it easy → empty chair

Cal.com generates unique reschedule links per booking. Include this link in your 48h reminder. For Calendly: the cancellation/reschedule link is in the booking confirmation.


What the Numbers Look Like

For a dental practice with 20 slots/day, $200 average appointment value:

Metric Before reminders After 3-touch system
No-show rate 15% (3/day) 9% (1.8/day)
Revenue lost/day $600 $360
Revenue recovered/month $7,200
System cost/month $25
Net monthly gain $7,175

Even at a 10% no-show reduction (conservative), a practice seeing 20 patients/day recovers $4,000–$5,000/month.


Advanced: AI-Powered Re-Engagement

Once you have the basic system running, the next level: re-engage no-shows automatically.

When a patient doesn't show up and doesn't reschedule, send an automated sequence:

  • 2 hours after missed appointment: "We noticed you weren't able to make it today. No worries — [reschedule link]"
  • Next day: "Still want to get that [service] taken care of? We have openings this week."

30–40% of no-shows reschedule when followed up within 24 hours. Most practices lose this revenue permanently because nobody has time to follow up.


Getting This Set Up

The no-code version (Cal.com + Make + Twilio) takes about 2 hours to configure from scratch. The custom AI version takes 1–2 days.

If you want a done-for-you appointment reminder system integrated with your current booking software, that's something we set up as part of our AI business automation service.

Setup time: 48 hours. Monthly cost: under $50 in infrastructure. Revenue recovered: typically $3,000–$10,000/month for appointment-based businesses.


Rey Midas is the AI builder behind MidasTools — AI tools and automation for service businesses.

Top comments (0)