See llms.txt for all machine-readable content.

Back to Templates

Manage clinic reminders, no-shows, waitlist, and reports with Google Sheets, Gmail, Telegram, and OpenAI GPT-4o-mini

Missed appointments quietly cost a clinic a full day of bookings. This workflow runs the boring front desk loop on its own schedule: reminders for tomorrow's confirmed visits, a no-show sweep with rebooking emails, waitlist offers for cancelled slots, and a Monday report for the owner. Nobody has to remember it.

Last updated: November 2026.

Quick Overview

Three schedules drive the flow. Every morning at 07:00 it reads the Appointments tab, keeps tomorrow's confirmed visits and has an AI model write one short reminder per patient for Gmail to send. Every afternoon at 13:00 it compares yesterday's appointments with the NoShowLog, counts strikes per patient and either sends a rebooking email or flags a repeat no-show to the front desk on Telegram. The same run offers freshly cancelled slots to waiting patients. Monday at 09:00 it builds the weekly numbers and ships a report by email and Telegram.

How it works

  1. The daily trigger runs at 07:00 and reads the Appointments tab. A code step keeps only rows dated tomorrow with a confirmed status that are not already marked as filled.

  2. Appointments that carry a patient email go to the writer. The ones without an email are listed by name in a Telegram message so the front desk can fix the sheet.

  3. The prompt node packs the list into one JSON payload, and the model node writes a warm reminder under 45 words per patient.

  4. The parse step matches the answer back to each appointment id, falls back to a short template when the model returns something unreadable, Gmail sends each reminder, and a MessageLog row records the send.

  5. At 13:00 the no-show sweep reads the Appointments tab and the NoShowLog. Yesterday's rows that are not attended, cancelled or flagged as no_show, and that have no log entry yet, become candidates.

  6. Each candidate gets a strike count taken from the NoShowLog. At three strikes or more the row is appended as flagged, Telegram alerts the front desk and Gmail sends the details to the office for a call or a deposit rule.

  7. Everyone else gets a gentle AI-written rebooking email, a rebooked row in the log, and a Telegram count of the day's sends.

  8. Cancelled appointments without a filled flag that were never offered are matched to a waiting patient, first by visit type preference, otherwise the first waiting row. The model writes the offer, Gmail sends it, and the MessageLog stores the slot and waitlist ids so the slot is not offered twice.

  9. Monday at 09:00 reads Appointments, NoShowLog, Waitlist and Patients, computes the no-show rate, waiting count, rebook sends and patients past their recall date, and the model turns that into a short digest that goes out by Gmail and Telegram with a log row.

Setup

  1. Create a Google Sheet with five tabs named Appointments, Waitlist, NoShowLog, Patients and MessageLog, using the columns the nodes expect.

  2. Connect your Google Sheets credential on the read and append nodes and replace the spreadsheet id with your own file.

  3. Connect Gmail on the reminder, rebooking, hard strike and weekly report nodes.

  4. Connect Telegram and replace the placeholder chat id in the five alert nodes and the weekly report node.

  5. Add an OpenAI credential on Reminder Model, Rebook Model, Offer Model and Weekly Model.

  6. Replace the office address in Email Office Hard Strike and in Build Weekly Report Email.

  7. Move the three cron expressions if those times do not suit the clinic, and check the timezone in the workflow settings.

Quick Answers

How does a patient reach three strikes?

The strike count is the number of earlier NoShowLog rows for that patient id plus one for the current miss, so the third miss is flagged instead of rebooked.

Can a cancelled slot be offered twice?

No. Every offer writes the appointment id and the waitlist id into the MessageLog, and the slot finder skips any slot or waiting patient that already appears there. The Appointments row itself is not stamped, so the log is what stops the repeat.

What happens when a patient has no email on file?

The reminder branch stops for that row and Telegram lists the names, so the front desk can add the address and the next run picks it up.

Can the same no-show be processed twice?

The sweep skips any appointment id that already has a NoShowLog entry, so a second same-day run finds nothing new.

Additional info

Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/