GoHighLevel Guide

Appointment Reminder Workflows in GoHighLevel

Knowing what a good reminder cadence looks like is one problem; actually wiring it up inside GoHighLevel's workflow builder is another. This is the implementation guide — the exact trigger, Wait steps, and branching logic I use to build appointment reminders in GHL, including the part most tutorials skip: what happens to an already-scheduled reminder when the appointment gets cancelled or rebooked out from under it.

Step by Step

How to Build It in GHL's Workflow Builder

Six steps, using GHL's native calendar trigger and workflow actions — no third-party middleware required for the reminder itself.

Appointment BookedTrigger
Reminder OffsetWait
Send ReminderAction
Confirm or RescheduleBranch
ShowedOutcome
Step 1

Start from the Appointment Status trigger

GHL's native "Appointment Status" workflow trigger fires when an appointment is booked or its status changes, with a built-in Status filter — New, Confirmed, Cancelled, Showed, No-show, or Invalid — plus filters for which calendar or calendar group it applies to. Set the trigger's status filter to New and scope it to the specific calendar the reminders are for. That single trigger, filtered correctly, is the entry point for the whole workflow — don't build a separate trigger per reminder.

Step 2

Time each reminder with an appointment-based Wait step

The Wait action has a dedicated "an upcoming appointment or booking" wait type, separate from a plain fixed-time delay. Pick "Appointment / Calendar Event" as the reference point, then set the offset — Before the appointment, by however many days, hours, or minutes you want. A cadence of a Wait step for 24 hours before, followed later in the workflow by a second Wait step for 1 hour before, is what actually produces the two-touch cadence — each Wait step resolves relative to that specific contact's booked time, not a fixed clock time.

Step 3

Drop in the SMS, WhatsApp, or Email action after each Wait

After each Wait step resolves, add the send action for that touch — an SMS action, a WhatsApp action, or an Email action, depending on the channel. Pull the appointment date, time, and service into the message with GHL's merge fields so the same workflow serves every contact without hand-editing text per booking. For what the reminder message itself should actually say — length, tone, what to include per channel — that's cadence-and-copy territory covered in the platform-agnostic companion guide on how to automate appointment reminders; this page stays focused on the GHL build.

Step 4

Add the two-way confirm-or-reschedule branch

After the reminder send action, add a Wait step set to "the contact to reply," scoped to the channel you just sent on, with a timeout. When a reply comes in (or the timeout hits), route it through an If/Else action: one branch checks whether the reply contains something like "C" or "confirm," the other checks for "R" or "reschedule." The confirm branch can simply exit the contact from the reminder workflow with a Confirmed tag; the reschedule branch should route to your rebooking link or hand the contact to a person, not loop back into the same reminder sequence.

Step 5

Guard every send with a live status check, not just the trigger filter

A contact can sit inside a Wait step for 24 hours — plenty of time for the appointment to get cancelled while they're waiting. The trigger's status filter only checks status once, at enrollment; it doesn't re-check it 24 hours later. Put an If/Else action in front of each send step that checks the appointment's current status isn't Cancelled before it fires. Without that guard, a contact who cancelled six hours after booking still gets a reminder for a slot that no longer exists.

Step 6

Test the full sequence against a real booking

Book a real test appointment on your own number far enough out to actually watch both Wait steps resolve, then confirm each stage in order: the 24-hour reminder fires, replying "C" exits the workflow correctly, and a fresh test booking that you cancel mid-Wait does not receive the reminder that follows. A workflow that looks correct in the builder's canvas can still misfire on the exact status value or reply text a real contact sends, so watch it run end to end before pointing it at live bookings.

For the cadence-design thinking behind why 24-hour-plus-1-hour works, what the reminder messages should actually say per channel, and the research on how much reminders reduce no-shows, see the platform-agnostic companion guide on how to automate appointment reminders. You can also run your own numbers on what no-shows are currently costing with the no-show cost calculator.

What Happens on Cancellation, Reschedule, and No-Show

This is the part that separates a reminder workflow that works in a demo from one that actually holds up once real clients start cancelling and rebooking on it.

A cancellation needs its own trigger, not just an exit condition

Build a second, small workflow on the same Appointment Status trigger, filtered to Cancelled, whose only job is to remove the contact from the reminder workflow (GHL's "Remove From Workflow" action) and clear any pending reminder actions. Relying only on the send-step status guard from the build steps above catches most cases, but a dedicated Cancelled-triggered exit is the more reliable backstop for stopping every in-flight reminder tied to that slot.

GHL doesn't fire a distinct "rescheduled" event yet — plan around it

As of now, GoHighLevel handles a reschedule by deleting the original appointment and creating a new one, which re-fires the New status (and the reminder workflow) without ever firing Cancelled for the original slot. A native, distinct "Appointment Rescheduled" trigger is an open feature request on GoHighLevel's own ideas board, not something currently shipped. Until it lands, the practical workaround is deduping on the contact plus appointment/calendar combination — e.g. a workflow step that checks for an existing "reminder sent" tag before re-enrolling — so a reschedule doesn't stack a second full reminder cadence on top of the first.

Let the No-show status hand off to a separate workflow

Filter a third, small workflow to the No-show status and have it enroll the contact into whatever comes next — a rebooking message, a call from the front desk, or a broader re-engagement sequence — rather than bolting that logic onto the reminder workflow itself. Keeping "remind before" and "follow up after a no-show" as separate workflows, each triggered off its own status, keeps either one easy to edit without touching the other's logic.

A Showed or Confirmed status is your signal to stay quiet

The same trigger that starts everything else — Appointment Status — also tells you when to do nothing. A contact whose status has already moved to Confirmed or Showed shouldn't receive a later reminder in the cadence; the send-guard from the build steps (checking status isn't Cancelled) can be extended to check it also isn't already Confirmed, so a contact who replied "C" to the first reminder doesn't get asked to confirm again by the second.

Frequently Asked Questions

The native "Appointment Status" workflow trigger, filtered to the New status and scoped to the calendar or calendars the reminders apply to. It's the same trigger you'll reuse, filtered differently, for the cancellation and no-show workflows described above — one trigger type, three separate small workflows, each filtered to the status it cares about.

From DIY to Done-For-You

Want This Built and Guarded Against Edge Cases Instead?

Everything above is buildable inside GHL's own workflow builder with no extra tooling — I'd rather you ship it yourself than not have it at all. Where clients usually bring me in is the part that doesn't show up until real bookings start flowing through it: the status guards, the reschedule dedupe logic, and connecting the reminder, cancellation, and no-show workflows into one system that doesn't misfire. That's the same build I do as part of GoHighLevel automation in Dubai.

  • 7+ years building GoHighLevel workflows, including calendar and reminder automation
  • 100,000+ leads delivered through systems built the same way this guide describes
  • One real estate automation system alone responsible for 50,000+ of those leads

Have a GHL Workflow Question?

Fastest way to get an answer: message me directly on WhatsApp with what your workflow is doing (or not doing). Or send the details below and I'll get back to you.

© 2026 Nabeel Aman. All rights reserved.