Why GoHighLevel sends duplicate text messages, and how to stop it
Contacts getting the same text twice, texts from two different numbers, or a whole list blasted at once. The four causes and the fix for each.
Learn morePatients or customers getting reminders for the old appointment, the wrong day, or after they cancelled. What causes it and how to build reminders that cancel themselves.
Short answer: GoHighLevel reminders go out for the wrong time, twice, or after a cancellation because the reminder workflow was started by the original booking and was never told the appointment changed. Rebuild reminders on appointment status triggers (confirmed, rescheduled, cancelled, no-show) with an exit rule, verify the three time zones involved, and if appointments come from an EMR, LOS or job system, make sure the integration sends update and cancel events, not only create.
A booking happens. A workflow starts: wait until 24 hours before, send text; wait until one hour before, send text. The patient reschedules. GoHighLevel now has a new appointment, and often a new workflow run, but the first run is still waiting to fire for the old time. Result: a reminder for the wrong day, then a second reminder for the right one, and a confused, sometimes upset, patient.
Use the appointment status trigger and build one workflow per outcome. The reminder workflow should include a condition at each step that checks the appointment is still confirmed and still at the expected time, and an exit path when status becomes rescheduled or cancelled. A separate cancellation workflow sends the "we have cancelled your appointment" message so the customer is never left guessing.
If you offer phone and video appointments, a dropdown or custom field for appointment type should select the confirmation and reminder templates. Otherwise a Zoom booking gets a phone script and the client calls to ask which it is.
Calendar time zone, sub-account time zone and contact time zone all affect when a reminder fires and what time it displays. Align them, and if you serve multiple zones, store the contact's zone and use it in the message merge fields.
Clinics on Cerbo or another EMR, mortgage teams on an LOS, contractors on Jobber or Housecall Pro: GoHighLevel only knows what the integration tells it. Many integrations send a create event and nothing else, so a reschedule in the EMR never reaches GHL and the old reminder fires. The integration must send update and cancel events, and the GHL side must act on them. This is exactly the kind of "it broke all the time and no one could fix it" integration we rebuild in our integration work.
Staff will occasionally drag a card to the wrong stage. A five to ten minute delay before any no-show or cancellation text gives them time to fix the mistake before the customer sees it.
If your account has several of these symptoms at once, a GoHighLevel audit maps the reminder workflows and fixes them as a set rather than one complaint at a time.
The reminder workflow was triggered at booking and is still running its wait steps. Deleting the appointment does not remove the contact from the workflow unless the workflow listens for a cancelled status and exits. Rebuild reminders on appointment status triggers with an exit on cancel or reschedule.
The original reminder sequence keeps running for the old time while a new booking starts a second sequence. The fix is an exit condition on reschedule, or a single workflow that re-evaluates the appointment time at each step.
Check three time zones: the calendar, the sub-account, and the contact record. If the appointment is pushed from an EMR or LOS through an integration, check that the integration sends the appointment time in the correct zone and format.
Book a 30-minute call. We look at the account live and tell you what is broken, what we would fix first and what it would cost.
No pitch deck. We look at your current setup and tell you what we would do and what it would cost.Need more than GoHighLevel? Yotomations, our parent company, also builds AI agents, custom software and websites.