
GoHighLevel Service Reminder Workflow: Setup Guide (2026)
GoHighLevel Service Reminder Workflow: Setup Guide (2026)
By Dr Priya Jaganathan, GoHighLevel Certified Admin · HL Growth Partner, Australia · Updated 8 September 2026 · 9 min read
A GoHighLevel service reminder workflow is a single automation that reads a date custom field such as "Next Service Due", fires a short SMS and email sequence around that date, and stops the moment the customer books. If your customers need to come back on a cycle, this one workflow is usually worth more than any lead-generation campaign. Car servicing, air-con and HVAC servicing, quarterly pest control treatments, dental recalls, annual hot water system checks, pool servicing, termite inspections and optometry reviews all share the same shape: a known interval, a known customer, and a job that quietly does not happen unless someone prompts it.
I have built this pattern across dozens of Australian sub-accounts. Below is the exact build: the custom field, how it gets populated, the Contact Date Reminder trigger, a 30-day, 7-day, due-day and 14-days-overdue sequence, the exit logic, the re-set after rebooking, a monthly fallback, AU SMS compliance, what it costs to send, and how to measure whether it is paying for itself.
Why a GoHighLevel service reminder workflow is different from an appointment reminder
Do not confuse this with the "you have an appointment tomorrow" automation. Those are GoHighLevel appointment reminder workflows, and they hang off a calendar booking that already exists. A service reminder is the opposite problem: there is no booking yet, and the workflow's entire job is to create one. That changes the trigger (a date field, not an appointment), the tone (an invitation, not a confirmation) and the exit condition (a booking). It also changes the maths: appointment reminders protect revenue already won, while service reminders recover revenue that would otherwise leak silently.
Step 1: create the date custom field
Go to Settings, then Custom Fields, and create Next Service Due with the type set to Date. Do not use a text field; the Contact Date Reminder trigger only reads proper date fields. If you have several service lines, create one date field per line, otherwise reminders will overwrite each other. Naming, folders and field types are covered in my guide to GoHighLevel custom fields. Also add Last Service Date (date) and Service Interval (Months) (number) so the due date can be calculated in a workflow rather than typed.
Step 2: populate the date after a job is completed
The reminder is only as good as the date behind it. There are three reliable ways to set it.
From the pipeline
Most trade businesses run a "Jobs" pipeline in Opportunities with a final "Job Complete" stage. Build a small workflow triggered by Pipeline Stage Changed where the stage equals Job Complete. Add the action Update Contact Field, set Last Service Date to the current date, and set Next Service Due using the date-offset option (for example, plus 6 months). Add a tag such as service-cycle-active.
From a form or survey
If your team completes a job sheet on their phone, build a GoHighLevel Form with a date picker mapped to Next Service Due; the Form Submitted trigger writes the date straight onto the contact. This suits pest control and pool servicing, where the next visit is decided on site.
From Xero, Tradify or ServiceM8
If invoicing happens in Tradify, ServiceM8, simPRO or Xero, use an Inbound Webhook trigger (or Zapier/Make in between) to receive the "invoice paid" event and map the due date onto the field. For everything that can start a workflow, see the GoHighLevel workflow triggers reference.
Step 3: the Contact Date Reminder trigger
Create a new workflow and choose the trigger Contact Date Reminder. Select Next Service Due as the date field and set the offset: "before", "on" or "after" the date, measured in days, plus a time of day. It is the same trigger family used in GoHighLevel birthday and anniversary automations; the only difference is the field it reads.
You could build one workflow per offset (30 days before, 7 days before, on the day, 14 days after), but I prefer a single workflow fired at 30 days before with Wait steps carrying the contact through the rest. It keeps the exit logic in one place and shows at a glance where every contact is sitting. Set the trigger time to 9:00 am in the sub-account's timezone.
Step 4: the reminder sequence
Here is the sequence I deploy as a starting point; adjust the copy to your trade but keep the cadence.
| Timing | Channel | Message purpose | Exit condition |
|---|---|---|---|
| 30 days before due | Heads-up that service is coming up, with a booking link and a reason it matters | Appointment booked | |
| 7 days before due | SMS | Short, personal nudge with the booking link | Appointment booked |
| Due day | SMS + email | "Due today" with a two-tap booking path and a phone number | Appointment booked |
| 14 days overdue | SMS | Overdue notice with a soft consequence (warranty, health, compliance) | Appointment booked or reply |
| Monthly thereafter | Low-pressure re-engagement until they book or opt out | Appointment booked, opt-out or six sends |
Building it in the workflow editor
After the trigger, the action order is: Send Email (30-day) → Wait 23 days → Send SMS (7-day) → Wait 7 days → Send SMS and Send Email (due day) → Wait 14 days → Send SMS (overdue) → Add Tag service-overdue → Wait 30 days → Send Email (monthly) → loop via a Go To step. Wait steps can honour a fixed time window so messages land mid-morning; my guide to GoHighLevel wait steps and goal events covers the timing options.
Example copy
7-day SMS: "Hi {{contact.first_name}}, it's Mel from Bayside Air. Your air-con service is due next week. Book here: {{trigger_link}} or reply BOOK. Reply STOP to opt out."
Due-day email subject: "{{contact.first_name}}, your termite inspection is due today". Body: "Your last inspection was {{contact.last_service_date}}. Most insurers and builders require an annual inspection to keep your warranty valid. Pick a slot here, or reply and we'll find one."
14-day overdue SMS: "Hi {{contact.first_name}}, Sam from Coastal Pools. Your pool service is a fortnight overdue and the water will turn as it warms up. Reply YES and I'll call you. Reply STOP to opt out."
Step 5: exit the moment they book
This is the part most people get wrong. Every message must stop the instant an appointment exists, and I use two mechanisms together.
Goal event inside the workflow
Add a Goal Event step at the top of the sequence with the goal set to Appointment Status is Confirmed on your service calendar, and the goal action set to "End this workflow". When a contact books at any point, GoHighLevel jumps them to the goal and ends the run.
If/Else before each send
As a belt-and-braces measure, place an If/Else branch before each send checking whether the tag service-booked exists: the "yes" branch removes the contact, the "no" branch sends. That tag is applied by a separate two-step workflow triggered by Appointment Status (Confirmed) on the service calendar. The condition options are the standard tag and field comparisons.
The booking workflow should also remove the service-overdue tag and, critically, leave Next Service Due alone. The date only rolls forward once the job is actually completed: when the card hits Job Complete, Step 2 re-sets it and the cycle starts again. That closed loop is what makes this a HighLevel service reminder automation rather than a one-off campaign.
Step 6: the monthly re-engagement fallback
Some customers will ignore four messages; usually life got in the way rather than a competitor. After the overdue SMS, drop them into a gentle monthly email loop with a different angle each time: a seasonal reason (pre-summer for air-con, pre-winter for hot water), a short customer story, or a bundle offer. Cap it at six sends, then tag them service-lapsed and hand them to your quarterly database reactivation campaign instead of emailing them forever.
AU SMS compliance and cost
Spam Act and ACMA requirements
Every SMS you send from LeadConnector in Australia falls under the Spam Act 2003, which the ACMA enforces. Three rules matter. Consent: an existing customer relationship gives inferred consent for messages about the service they bought, not for unrelated promotions. Identification: the message must clearly name your business, as every example above does. Opt-out: "Reply STOP to opt out" must be present and must work, and GoHighLevel's built-in STOP handling marks the contact DND automatically. Beyond the legal rules, keep sends between 9:00 am and 6:00 pm local time.
LeadConnector SMS cost
Australian SMS through LeadConnector or Twilio currently sits around 7 to 8 cents per segment, and a segment is 160 GSM characters. Emoji or curly apostrophes switch the message to UCS-2 encoding with a 70-character limit, so keep copy plain and under one segment. For 400 customers receiving three SMS per cycle, budget roughly $85 to $100 per cycle. Email through Mailgun is effectively free at this volume. The GoHighLevel help centre lists current per-country rates.
Measuring rebooking rate and revenue recovered
Before switching the workflow on, record your baseline: count how many customers due in the last full cycle rebooked unprompted. Run the workflow for one cycle and count again.
Worked example. A mobile mechanic has 400 customers on a six-month cycle at an average job value of $180. Before reminders, 22 per cent rebooked unprompted: 88 jobs, or $15,840 per cycle. With the sequence running, 55 per cent rebooked: 220 jobs, or $39,600 per cycle. That is $23,760 recovered per cycle, or $47,520 per year, against an SMS bill under $200 per cycle. Even at half that lift, the workflow pays for the GoHighLevel subscription many times over.
Track it with three tags: service-reminder-sent, service-booked and service-lapsed. A Smart List filtered by tag and Next Service Due date range gives you the numbers, and filtering won opportunities by the service-booked tag gives a dollar figure. Agencies should save the finished build as a snapshot so every new client account starts with it. For a pest control client I built this alongside their jobs pipeline, and rebooking rate is now the first number on their weekly dashboard.
Common mistakes to avoid
- Using a text field instead of a Date field for Next Service Due, which means the Contact Date Reminder trigger never fires.
- Rolling the due date forward when the appointment is booked rather than when the job is completed, so cancelled or rescheduled jobs fall out of the cycle.
- Skipping the goal event or If/Else exit, so customers who have already booked keep receiving "you're overdue" messages.
- Sending SMS outside 9:00 am to 6:00 pm local time, or omitting the business name and STOP instruction required under the Spam Act.
- Writing SMS copy over 160 characters or with emoji, which doubles or triples segment cost across the whole list.
- Never recording a baseline rebooking rate, so nobody can prove the workflow is recovering revenue.
If you want a service reminder system built and tested in your GoHighLevel account, book a strategy call with the HL Growth Partner team.
Frequently asked questions
What trigger does a GoHighLevel service reminder workflow use?
It uses the Contact Date Reminder trigger, pointed at a Date custom field such as Next Service Due. You set an offset in days before, on or after that date, plus a time of day, and the workflow fires for every contact whose field value matches.
How do I set the Next Service Due date automatically?
Trigger a small workflow on Pipeline Stage Changed when the job card reaches Job Complete, then use the Update Contact Field action with a date offset equal to your service interval. Alternatively, populate it from a form date picker or an inbound webhook from Tradify, ServiceM8 or Xero.
How do I stop reminders once the customer books?
Add a Goal Event at the top of the workflow set to Appointment Status Confirmed on your service calendar with the action End Workflow, and place an If/Else check for a service-booked tag before each send. Either mechanism removes the contact before the next message.
Is it legal to send service reminder SMS in Australia?
Yes, provided you follow the Spam Act. An existing customer relationship gives inferred consent for messages about the service they purchased, but each SMS must identify your business and include a working opt-out such as Reply STOP. Send during business hours and respect DND status.
How many customers do I need for this to be worth building?
Even 100 customers on an annual cycle at $180 per job justifies it. Lifting rebooking from 22 per cent to 55 per cent on that list adds 33 jobs, or roughly $5,940 per year, for a build that takes an afternoon and costs a few dollars in SMS.
