
GoHighLevel Appointment Reminder Workflows: Cut No-Shows Without Annoying Clients (2026)
GoHighLevel Appointment Reminder Workflows: Cut No-Shows Without Annoying Clients (2026)
A no-show is rarely a client deciding your service isn't worth their time. In my experience auditing GoHighLevel sub-accounts for Australian clinics, coaches and trade businesses, most missed appointments come down to something far less dramatic: the booking happened five days ago, life got busy, and nobody nudged the client at the right moment through the right channel. The fix isn't more reminders — it's a properly sequenced Workflow that confirms, reminds, and makes it trivially easy to reschedule, without crossing the line into nagging.
I build these reminder systems weekly across client sub-accounts, and the pattern that works is remarkably consistent: a booking confirmation within minutes, a 24-hour reminder with a confirmation request, a short 2-hour SMS, and a post-appointment follow-up that branches on appointment status. In this post I'll walk through the exact architecture, the GHL Workflow steps to build it, the ACMA compliance details Australian senders can't skip, and how to actually measure whether your no-show rate is improving. Everything here uses native GHL features — Workflows, wait steps, trigger links, appointment statuses — no third-party reminder tools required.
Why no-shows happen, and what they actually cost
The three biggest causes I see in client data are distance between booking and appointment (anything beyond 48 hours sharply increases forgetting), bookings made on mobile while distracted (the client never added it to their own calendar), and friction in rescheduling (it felt easier to just not turn up than to call and cancel). None of these are solved by a single generic reminder email, which is what most sub-accounts ship with by default.
The cost is easy to underestimate because it hides in the gaps of your calendar. Take an allied health clinic billing $180 AUD per consult, running 40 appointments a week with a 15% no-show rate. That's six empty slots — $1,080 a week, or roughly $56,000 a year in revenue that walked out the door before it walked in. For a coaching business selling $3,500 AUD packages off a free strategy call, every no-show on that call is a lost shot at the sale, and if your call-booking cost via ads is $80–$150 per booked call, you're paying real money for empty Zoom rooms. Getting no-shows from 15% down to 5% is usually worth more than any new lead-generation campaign you could run this quarter.
The reminder sequence architecture
Before opening the Workflow builder, settle the architecture. The sequence I deploy as a snapshot across client sub-accounts has four touchpoints:
1. Booking confirmation (immediate)
Sent within two minutes of booking, via both email and SMS. The email carries the detail — date, time, location or video link, what to bring, an add-to-calendar link. The SMS is short and exists mostly to verify the mobile number is live and to set the expectation that you'll text them.
2. 24-hour reminder with confirmation request
This is the workhorse. An SMS asking the client to reply YES or tap a trigger link to confirm. The point isn't just reminding — it's getting a commitment signal, and surfacing the people who need to reschedule while there's still time to refill the slot.
3. 2-hour reminder
A short SMS only. No confirmation request, no links beyond the address or meeting link. "See you at 2:30pm at our Parramatta clinic — reply if you're running late." This one catches the day-of forgetters.
4. Post-appointment follow-up
The Workflow branches on appointment status. Showed gets a thank-you and a review request or next-booking prompt. No-show gets a no-guilt rebooking message within the hour, while the appointment is still fresh and slightly awkward for them — that's exactly when rebooking rates are highest.
Building it step-by-step in GHL Workflows
Choose the right trigger
Create a new Workflow and add the Customer Booked Appointment trigger (you'll also see it referred to as Appointment Booked in older builds). Filter it to the specific calendar — if you run multiple calendars across services or use round-robin calendars for lead distribution across a team, build one reminder Workflow per calendar group so the messaging can reference the right service and location. If you're unsure which trigger fires when, my complete reference of GoHighLevel Workflow triggers covers the distinctions, including how rescheduled appointments re-enter Workflows.
Confirmation steps
First action: an email step with the full appointment detail using custom values like {{appointment.start_time}} and the calendar's location field. Second action: an SMS step, kept under 160 characters where possible to avoid multi-segment charges on Twilio or LeadConnector numbers. Then add a tag — I use appt-reminder-active — so other Workflows know this contact is in a live reminder sequence and don't message over the top of it.
Wait steps that anchor to the appointment, not the booking
This is the step people get wrong. Don't use "wait 1 day". Use a wait step configured to wait until a specific time relative to the appointment start time — 24 hours before, then another wait until 2 hours before. GHL's Event/Appointment Time wait condition handles this natively, and it means a booking made three weeks out and a booking made tomorrow morning both get correctly timed reminders. Add a safeguard: if the appointment is less than 24 hours away at booking, the Workflow should skip straight past the 24-hour branch rather than firing two messages in quick succession.
Channel choice: SMS does the heavy lifting
In my client builds, SMS reminders consistently outperform email for show rates — open rates north of 90% versus 25–35% for email. The split I use: email for the confirmation detail and any pre-appointment prep, SMS for the 24-hour and 2-hour touchpoints. If a contact has no valid mobile, use an If/Else branch to fall back to email for those touchpoints, and flag the record with a tag so your team can chase a phone number. For higher-value appointments, some of my clients add Conversation AI on the SMS channel so replies like "can we do 3pm instead?" get handled automatically rather than sitting unread; if you'd rather keep a human in the loop, route those replies into Manual Actions for your front desk to clear each morning.
Australian SMS compliance: ACMA, sender IDs and opt-outs
Australian businesses sending appointment SMS through GHL need to get three things right. First, identification: the Spam Act requires your messages to clearly identify your business — put your business name in the message body, because Twilio and LeadConnector numbers in Australia typically present as a mobile number, and alphanumeric sender IDs now sit under ACMA's sender ID register rules. Second, consent: appointment reminders to someone who booked with you are generally fine as transactional messages, but the moment your "follow-up" drifts into promotion ("book again and get 10% off"), you need consent and a functional opt-out. Third, opt-out handling: include "Reply STOP to opt out" on anything promotional, and make sure GHL's DND settings are respected in every SMS step — a Workflow that ignores DND is a complaint waiting to happen. Note that A2P 10DLC registration is a US requirement; Australian senders deal with ACMA's framework instead, and I've written up the full detail in my guide to GoHighLevel SMS compliance for Australian businesses under ACMA.
Handling confirmations and reschedules
The 24-hour SMS should carry a trigger link — when tapped, it fires a Trigger Link Clicked event that you catch in a Workflow to set the appointment status to confirmed, apply a confirmed-24h tag, and optionally suppress the 2-hour reminder for people who've already confirmed (I usually leave the 2-hour one on regardless; it's short and it helps). Alternatively, use a reply-based confirmation: a Customer Replied trigger filtered on "YES" works, though trigger links are more reliable because they don't depend on exact reply wording.
For reschedules, include your calendar's reschedule link in both the confirmation email and the 24-hour SMS. When a client reschedules, GHL fires the appointment status change — your Workflow should remove the contact from the current reminder sequence (use the "remove from workflow" action or let the Appointment Status filter handle it) and the new booking time re-enters the sequence cleanly. Test this specifically: the most common bug I find in audits is a rescheduled client receiving reminders for both the old and new times.
Reminder timing schedule at a glance
| Touchpoint | Timing | Channel | Message purpose |
|---|---|---|---|
| Booking confirmation | Within 2 minutes of booking | Email + SMS | Confirm details, add-to-calendar link, set expectation of SMS contact |
| Confirmation reminder | 24 hours before appointment | SMS (email fallback) | Get a YES or trigger-link confirmation; surface reschedules early |
| Final reminder | 2 hours before appointment | SMS | Short nudge with location or meeting link; catch day-of forgetters |
| Showed follow-up | 1–2 hours after appointment | Email or SMS | Thank you, review request, prompt next booking |
| No-show recovery | Within 1 hour of missed slot | SMS | No-guilt rebooking link while the miss is fresh |
Measuring your no-show rate
You can't improve what you don't mark. Train your team (or your Workflow) to set appointment status to showed or no-show after every slot — not just cancel-or-leave-blank. With statuses maintained, GHL's appointment reports give you no-show rate per calendar and per user. I track three numbers monthly in client sub-accounts: no-show rate (no-shows ÷ booked appointments), 24-hour confirmation rate (how many tapped the trigger link or replied YES), and no-show recovery rate (how many no-shows rebooked within 7 days). Benchmarks from my builds: a healthy service business sits at 3–7% no-shows with this sequence running, confirmation rates of 60–75% on the 24-hour SMS, and recovery rates of 30–50% when the rebooking message goes out within the hour. If you're agency-side, bake the whole thing into a snapshot with the custom fields, tags and Workflows included, so every new sub-account inherits it on day one.
Common mistakes to avoid
- Anchoring wait steps to the booking time instead of the appointment time — a "wait 1 day" step sends the 24-hour reminder at the wrong moment for any booking made more than a day out.
- Sending every reminder on every channel — four emails plus four SMS for one appointment feels like harassment and trains clients to ignore you. Match the channel to the touchpoint.
- Forgetting the reschedule path — if rescheduling requires a phone call, a chunk of would-be reschedulers become no-shows. Put the reschedule link in the confirmation and the 24-hour message.
- Not removing contacts from the old sequence on reschedule — double reminders for two different times is the fastest way to make your system look broken.
- Ignoring DND and opt-out status in SMS steps — beyond annoying clients, messaging a contact who opted out is an ACMA compliance risk in Australia.
- Never marking showed/no-show statuses — without status data you have no no-show rate, no recovery Workflow trigger, and no way to know whether any of this is working.
If you want a reminder system that fills your calendar with clients who actually show up, book a strategy call with the HL Growth Partner team.
Frequently asked questions
How many appointment reminders should I send in GoHighLevel?
Three pre-appointment touchpoints is the sweet spot for most Australian service businesses: an immediate booking confirmation, a 24-hour reminder with a confirmation request, and a short 2-hour SMS. Add a fourth message only after the appointment, branched on showed or no-show status. More than three reminders before the appointment usually increases opt-outs without improving show rates.
Which GoHighLevel trigger should I use for appointment reminders?
Use the Customer Booked Appointment trigger (labelled Appointment Booked in some builds), filtered to the specific calendar. Then use wait steps configured relative to the appointment start time — not fixed delays from the booking moment — so reminders land at exactly 24 hours and 2 hours before the slot regardless of how far out the booking was made.
Are SMS appointment reminders legal in Australia?
Yes. Reminders for an appointment the client booked are generally transactional under the Spam Act, so they don't require marketing consent. You still must identify your business clearly in the message, respect DND and opt-out requests, and add a "Reply STOP" opt-out the moment any message includes promotional content. ACMA's sender ID rules apply if you use alphanumeric sender IDs.
Do SMS reminders work better than email reminders?
For show rates, yes — SMS open rates typically exceed 90% versus 25–35% for email, and they're read within minutes. The best results come from combining them: email carries the full confirmation detail and calendar attachment, while SMS handles the time-critical 24-hour and 2-hour reminders. Always build an email fallback branch for contacts without a valid mobile number.
How do I stop reminders going out after a client reschedules?
Build your Workflow so a reschedule or appointment status change removes the contact from the active reminder sequence — either with a remove-from-workflow action triggered on the status change, or by filtering each message step on current appointment status. The new booking then re-enters the sequence with correctly timed reminders. Always test the reschedule path before going live; duplicate reminders for old times are the most common fault I find in audits.
