Blog · · 6 min read
How to reduce appointment no-shows with n8n and AI
Step-by-step guide so n8n confirms today's appointments, frees the slot if the customer doesn't show, notifies your waitlist and sends a short AI email to reschedule. No coding.

A no-show is more than an empty slot: it's lost time, a customer who didn't get the service, and often someone else who would have come if you'd freed the hour in time. In clinics, salons, physio practices and consultancies, a 10–20 % no-show rate is common when there's no same-day confirmation.
In this guide you'll build an n8n workflow that confirms the appointment in the morning, flags who didn't reply or didn't arrive, frees the slot, pings one or two people on your waitlist and leaves a short AI-written email so the customer can rebook. It pairs well with 24-hour appointment reminders (the day before) and with Google Calendar bookings.
What you're going to build
Three small pieces that share Google Calendar and a "Appointments" sheet:
- Confirmation: a morning Schedule Trigger finds today's appointments, sends an email (or WhatsApp) asking for "reply YES / NO" and records the status.
- No-show detection: when the appointment window ends, if the status is still "unconfirmed" or "confirmed" and you mark "didn't show", the workflow frees the slot and notifies the waitlist.
- Rebook: a Basic LLM Chain writes a short email to the customer who missed, with a link to book again.
What you need
- An n8n instance (cloud or self-hosted).
- Google Calendar and Gmail (or another SMTP) connected to n8n with OAuth2.
- An API key from an AI provider with a spend limit set.
- An "Appointments" sheet with columns
event_id,date,time,name,email,service,status(pending,confirmed,cancelled,no_show,rebooked),confirmed_atandwaitlist_notified. - Optional: a "Waitlist" sheet with
name,email,service,priorityandlast_notified. - The same contact format in the event description you use for reminders (
Email:andTel:).
If you don't store the email on the event yet, start there: without a contact, confirmation is impossible.
Step 1: confirm in the morning, not only the day before
The 24-hour reminder cuts forgetfulness. Same-day confirmation cuts no-shows for real, because it forces a yes or a no when the day is already here.
Create a workflow with a Schedule Trigger at 08:00. Add Google Calendar (Get Many) filtered to events that start today (from {{ $now.startOf('day').toISO() }} to {{ $now.endOf('day').toISO() }}). Expand recurring events.
For each event, a Code node (or Edit Fields) pulls email and phone from the description, same as in the reminders guide. Filter out rows that already have status = cancelled or no_show in your sheet (read it with Google Sheets and match on event_id).
Send with Gmail a short fixed message, no AI yet:
Hi {{ name }}, just confirming your appointment today at {{ time }} ({{ service }}). Reply to this email with YES if you're coming or NO if you can't. If you cancel in time, we can offer the slot to someone else. Thanks.
Save or update the row in "Appointments" with status = pending and the send time in confirmed_at.
Why AI doesn't write the confirmation: it's an operational message; you want the same wording every day. AI comes later, in the rebook email, where a human tone actually helps.
Step 2: collect the YES / NO
Second workflow with a Gmail Trigger (or Email Trigger) watching replies to those subjects. An IF or Switch:
- Body or subject contains
YES/Y→ Google Sheets (Update) setsstatus=confirmed. - Contains
NO/cancel→status=cancelled, and optionally Google Calendar (Update) prefixes the title with[CANCELLED]or deletes the event if that's your policy. - Anything else → leave
pendingand, if you want, ping yourself on Telegram to read it by hand.
You don't need a chatbot: one word is enough and almost everyone understands it on a phone.
If you prefer WhatsApp, send the confirmation with an approved Meta template and read the inbound reply. The setup is in connecting WhatsApp Cloud API to n8n. Start with email if you don't have templates yet; it's simpler to run.
Step 3: detect the no-show and free the slot
Third workflow, Schedule Trigger every hour. From Google Calendar (or the sheet), read appointments whose end time fell in the last hour and whose status is still pending or confirmed.
Pick one mode and stick to it:
- Manual mode (recommended at first): the workflow emails or Telegrams you a summary ("3 appointments in the last hour still unmarked"). You set
no_showorconfirmed(if they came) on the sheet in a minute. You avoid falsely accusing someone who arrived but never replied YES. - Automatic mode: if 15 minutes after the start it's still
pendingand you didn't mark "arrived", setno_show. Use this only once reception already logs attendance somewhere else.
When status becomes no_show or a last-minute cancelled:
- Update the Calendar event (title or colour) so the team sees it.
- If you keep a waitlist, filter 1–2 people with the same
servicewhoselast_notifiedis empty or old, email them a short "A slot opened today at X — want it? Reply NOW", and setwaitlist_notified. - Don't offer the same slot to ten people at once: the first yes gets it; everyone else gets a "taken, we'll ping you another day".
Step 4: AI writes the rebook email
Right after marking no_show, connect a Basic LLM Chain with a prompt like this:
You work at a small business called [NAME], a [TYPE OF BUSINESS]. Write a short email to a customer who missed their appointment. Data: name {{ $json.name }}, service {{ $json.service }}, date {{ $json.date }}, time {{ $json.time }}. Rules: warm tone, no blame; max 70 words; assume good faith (something came up); one clear call to action: rebook at [BOOKING LINK]; do not invent prices, discounts or culprits. Reply with JSON only: {"subject": max 6 words, "body": email text}.
Turn on Require Specific Output Format with a Structured Output Parser. Send with Gmail (start with Create Draft, switch to Send once the tone feels right).
If the customer replies and wants a new date, your Google Calendar bookings workflow can close the loop. When they come back, a satisfaction survey the next day tells you whether rebooking felt smooth.
Step 5: measure your no-show rate
Once a week, a Monday Schedule Trigger reads the "Appointments" sheet for the last 7 days and calculates:
- total appointments (exclude cancellations with more than 24 h notice)
- how many
no_show - how many
confirmed/pending - how many waitlist pings turned into a booking
Ask the AI for a three-sentence summary and email it to yourself. In a month you'll know whether same-day confirmation is missing, whether one weekday or service is the problem, and whether the waitlist pays off. Without that number, every change is a guess.
Try it without bothering real customers
- Create three test events for today on a separate calendar, with your own email in the description.
- Run the confirmation workflow by hand: you should get three emails and three
pendingrows. - Reply YES to one, NO to another and leave the third unanswered.
- Mark the third as
no_showand check: rebook email (draft), waitlist ping if you have one, and updated status. - When it looks right, point the workflows at the real calendar, keep Gmail in draft mode for a week, then activate them.
Cost and limits
- Cost: confirmation is fixed text (almost free). AI only runs on the rebook email, one short call per no-show. Check current pricing for your AI provider and n8n.
- WhatsApp: starting the conversation yourself needs an approved template; customer replies can use the 24-hour window. If you don't have a template, stick to email.
- Don't falsely accuse: someone may have arrived without replying YES. That's why manual no-show marking is safer at first.
- Privacy: you store name, email and attendance. Mention it in your privacy policy and respect anyone who asks to stop receiving messages.
- AI writes, you set the policy: how many hours' notice you accept for cancellations, whether you take a deposit, whether you offer the slot to the waitlist — that's your call, not the model's.
Start with ready-made templates
If you'd rather skip the basic n8n, Calendar and AI setup, download the WhatsApp agent for free or check out the AgentKiosk pack: 8 ready-to-import agents, including bookings with Google Calendar. You build this no-show workflow next to it with the steps above, and they fit together: the agent books, reminders cover the day before, and this guide confirms on the day and recovers the slot when someone doesn't show.


