The healthcare no-show problem
No-shows cost the healthcare industry billions of dollars annually. For a clinic, every no-show is lost revenue and wasted staff time. When MediCare Health Group approached me, their no-show rate was 30% — meaning nearly one in three appointments resulted in a patient not showing up.
After building an automated appointment system, we reduced that rate to 9%. Here’s how.
Understanding the root causes
Before building anything, I spent time understanding why patients were missing appointments:
- Forgetting: The most common reason — patients simply forgot
- Scheduling conflicts: Work or family obligations came up
- Feeling better: Symptoms resolved, so the patient didn’t see the need
- Transportation: No way to get to the clinic
- Cost concerns: Worried about the bill
The first three are addressable with automation. The last two require different solutions.
The system architecture
Online booking
The first piece was a web-based booking portal. Patients can:
- See real-time availability across all 3 clinic locations
- Book by provider, specialty, or earliest available
- Choose in-person or telehealth appointments
- Receive instant confirmation via SMS and email
- Add the appointment to their calendar with one click
The booking system is built on Odoo with a custom patient portal. It integrates with the clinics’ existing schedule, so there’s no double-booking.
Automated reminders
This was the highest-impact feature. We send reminders at three points:
48 hours before: SMS with appointment details and a link to reschedule or cancel
Hi [Name], this is a reminder for your appointment at MediCare [Location] on [Date] at [Time] with Dr. [Name]. Reply R to reschedule, C to cancel, or Y to confirm. Book: [link]
24 hours before: Email with preparation instructions (fasting, bring documents, etc.)
Subject: Tomorrow's appointment at MediCare
Hi [Name],
Your appointment is tomorrow at [Time]. Please remember to:
- Bring your insurance card
- Arrive 15 minutes early
- [Special instructions if applicable]
Need to reschedule? Click here: [link]
2 hours before: SMS for same-day appointments only
Your appointment at MediCare [Location] is in 2 hours. We look forward to seeing you. Reply C to cancel.
Rescheduling via WhatsApp
Patients can reschedule without calling the clinic. A WhatsApp bot handles the conversation:
Patient: I need to reschedule
Bot: No problem! Your appointment is on [Date] at [Time]. Would you like to:
1. Choose a new date/time
2. Cancel the appointment
3. Talk to a receptionist
Patient: 1
Bot: Here are the next available slots:
- [Date/Time 1]
- [Date/Time 2]
- [Date/Time 3]
Reply with the number of your preferred slot.
Patient: 2
Bot: Your appointment has been rescheduled to [Date/Time 2]. You'll receive a confirmation shortly.
Waitlist automation
When a patient cancels, the slot becomes available. The system automatically:
- Checks the waitlist for patients who need that type of appointment
- Sends an SMS to the top 3 patients on the waitlist
- The first patient to confirm gets the slot
- The slot is removed from availability
This recovered approximately 15% of cancelled appointments.
Post-visit follow-up
After each appointment, the system sends:
Same day: A check-in message
Hi [Name], thank you for visiting MediCare today. How are you feeling? Reply with any questions or concerns.
3 days later: A review request (for satisfied patients)
Hi [Name], we hope you're feeling better. If you had a good experience, would you mind leaving a review? [link]
7 days later: A follow-up appointment reminder (if needed)
Hi [Name], it's time to schedule your follow-up appointment. Book online: [link] or call us at [phone].
Technical implementation
Stack
- Odoo 17: Core platform with custom healthcare modules
- Twilio: SMS and WhatsApp messaging
- SendGrid: Email notifications
- PostgreSQL: Patient data and appointment records
- Node.js: WhatsApp bot
- Docker: Containerization
Compliance considerations
Healthcare automation requires careful attention to privacy:
- HIPAA compliance: All patient data is encrypted at rest and in transit
- Access controls: Role-based access to patient information
- Audit logs: Every access to patient data is logged
- Data retention: Automated data retention policies
- Consent management: Patients can opt out of automated messages at any time
The reminder engine
The reminder system runs as a scheduled task:
class AppointmentReminder(models.Model):
_name = 'clinic.appointment.reminder'
@api.model
def _send_reminders(self):
now = fields.Datetime.now()
# 48-hour reminders
appointments_48h = self.env['clinic.appointment'].search([
('datetime', '>=', now + timedelta(hours=47)),
('datetime', '<', now + timedelta(hours=49)),
('reminder_48h_sent', '=', False),
('state', '=', 'confirmed'),
])
for appt in appointments_48h:
self._send_sms_reminder(appt, '48h')
appt.reminder_48h_sent = True
# 24-hour reminders
appointments_24h = self.env['clinic.appointment'].search([
('datetime', '>=', now + timedelta(hours=23)),
('datetime', '<', now + timedelta(hours=25)),
('reminder_24h_sent', '=', False),
('state', '=', 'confirmed'),
])
for appt in appointments_24h:
self._send_email_reminder(appt)
appt.reminder_24h_sent = True
Results
After 3 months of operation:
- No-show rate: Dropped from 30% to 9% (70% reduction)
- Booking calls: Reduced by 60% (patients book online)
- Rescheduling calls: Reduced by 40% (WhatsApp bot handles it)
- Patient satisfaction: 95% rated the booking experience as “excellent” or “very good”
- Recovered appointments: 15% of cancelled slots filled from waitlist
Lessons learned
- Reminders are the highest-ROI feature: The 48-hour reminder alone reduced no-shows by 40%. Start there.
- Make rescheduling easy: Many no-shows happen because rescheduling is harder than just not showing up. Make it frictionless.
- WhatsApp is preferred: In our patient demographic, WhatsApp was the preferred communication channel. SMS was second, email was third.
- Privacy is non-negotiable: In healthcare, you cannot cut corners on data privacy. Build it in from the start.
- Train the staff: Receptionists were initially worried the system would replace them. In reality, it freed them to handle complex cases that needed human attention.
Conclusion
Healthcare automation can dramatically improve both operational efficiency and patient experience. The key is to focus on the patient’s needs — make booking easy, send helpful reminders, and make rescheduling frictionless. When you reduce friction for patients, no-shows drop, and everyone benefits.