Key Takeaways
- A maintenance plan renews, or lapses, based on whether a human remembered. Put the renewal date on the contact record and let the system remember.
- HighLevel's Custom Date Reminder trigger reads that date field and starts a workflow 90 days before it. A Has Tag filter keeps non-members out.
- The renewal ask should be an invoice she can pay from her phone, not a text that says call us. The Send Invoice action does that in one step.
- A second workflow on the Paid invoice status takes her off the reminders, tags her renewed, and moves the date forward.
- The trigger ignores contacts with an empty date field. Backfill every existing plan member once, or the build fires for nobody.
Two customers bought the same maintenance plan from the same heating and air company last year. One got a text 90 days before her renewal with a link, paid it from her kitchen, and is booked for spring. The other heard nothing. Her plan lapsed in March, her system quit in August, and she typed heating and air near me into her phone. Somebody else got that replacement. In this episode of The Trade Stack from On Point Tech Solutions in Los Gatos, we build the renewal that runs itself. It is a Go High Level San Jose build for HVAC contractors: one date field, one trigger, one invoice, and one stop.
The plan is the relationship, not the revenue
This is for the heating and air contractor who already sells a plan and is losing it one customer at a time. HomeAdvisor puts a regular maintenance visit at about $250, with most jobs landing between $175 and $350. That is what walks out the door every time a plan quietly ends.
The bigger number sits behind it. Angi puts a new heating and cooling system somewhere between $5,000 and $14,000. The plan is why you are still the company she calls when the system dies. Lose the plan and you lose your spot in that decision. Right now, for most shops, that renewal happens or does not happen depending on whether somebody looked at a wall calendar.
Chapter one: the renewal date lives on the record
The reminder does not live in your head. It lives as a date on the customer's contact record. Add one custom field and call it renewal date.
Then HighLevel reads it for you. The trigger is called Custom Date Reminder. Its help page says it starts a workflow before, on, or after a date field you select. Point it at the renewal date field and use the filter called Before Number of Days. Set it to 90. Ninety days out from her date, she walks into the workflow, and nobody typed anything.
Add one more filter while you are in there: Has Tag. The page says it narrows the trigger to contacts carrying a specific tag, so only plan members ever enter. Tag every plan member the same way and the guard is built.

Your check: make a contact with your own name and mobile, put a renewal date 90 days out, and publish the workflow. A draft with a perfect trigger does nothing. Then open the enrollment list and find yourself. Not there? Confirm the trigger points at the date field you typed into, and that your test contact carries the plan member tag.
Chapter two: the message carries the thing she can pay
This is where most shops lose it. They send a text that says your plan is due, give us a call. Now she has a chore. Give her a thing she can pay instead.
HighLevel has one workflow action for this: Send Invoice. The page says it creates and delivers a one-time invoice to the contact when the workflow reaches that step. You pick the From User, the invoice template, and the channel: email, text, or both. The bill itself lands on her phone, ready to pay.
Ours reads like this: Hi Dana, your plan is up in 90 days. Same as last year, here is the link, and I will book your spring visit when it goes through. That is a written example, not a customer message.
Your check: the same action carries a Payment Mode. Live is real money. Test is a dry run that validates the link without charging anybody. Set it to Test, put yourself in as the contact, and read what lands. Does the link open, does it show the right amount, does it sound like your business. Two warnings off the page: gateway test behavior can vary, and if the contact has no phone number, only the email goes out.
Chapter three: the stop is a second workflow
She pays on day 90 and the reminders keep coming, because nothing told them she paid. Billing your best customer for money she already sent is worse than never asking.
HighLevel answers this on its own page. The Invoice trigger fires whenever an invoice changes status, and Paid is one of those statuses. Build a second workflow on Paid, and its documentation tells you what goes inside: remove the contact from the reminder workflow. Then add two steps. Tag her renewed. Move the renewal date forward a year, which is what makes the whole thing come back around next season without you.

Your check: send yourself the renewal and pay it with your own card. Then open your record. The renewed tag landed, the date moved, and you are off the reminder workflow. If one did not happen, the second workflow is not running, and you would otherwise find out in 90 days when a customer asks why you are still billing her.
A caveat on moving the date. HighLevel's Update Contact Field page writes a date three ways: a custom date, today's date, or a specific date. Add a year is not one of them, and the trigger page describes its year-matching option two different ways. Do not guess. Set the new date when the money lands, and test that on your own record too.
The gotcha: a perfect build that fires for nobody
You can build every piece correctly and have it fire for no one. The trigger page says it plainly: the trigger will not activate for contacts without a value in the custom date field.
Every customer you sold a plan to before today has nothing in that field. The automation is perfect and the list is empty, and nothing shows up red. So before you switch anything on, open Contacts, filter to your plan members, and backfill that renewal date by hand. About an hour, once. It is the whole difference between a build and a build that works.
Why a Go High Level San Jose HVAC shop needs this
A Bay Area replacement is a big ticket, and the homeowner who searches heating and air near me in August is choosing from a long list. The plan member never searches. She has your number, and a renewal date on file keeps the relationship warm until the day the system gives out.
Most shops we talk to in San Jose and the South Bay track renewals in a spreadsheet or the owner's memory, and the owner is on a roof when the date comes up. This build puts the date on the record, the ask on her phone, and the stop in the system, inside an account you own. Not rented from an agency. Built for you, or taught with an SOP so your office manager runs it.
Practical Steps
- Add a custom date field on contacts named renewal date, and a tag for plan members.
- Build workflow one: Custom Date Reminder on that field, Before Number of Days set to 90, Has Tag filter for plan members.
- Add the Send Invoice action with your From User, a renewal invoice template, and both channels.
- Test it on yourself in Test payment mode. Confirm the link opens and the amount is right.
- Build workflow two: Invoice trigger on Paid. Remove from the reminder workflow, add the renewed tag, set next year's renewal date.
- Pay your own test invoice and read your own record for the tag, the date, and the removal.
- Backfill the renewal date on every existing plan member before you publish.
Watch the Trade Stack episode
Final thoughts
Five pieces: a date on the contact, a trigger reading it 90 days early, one invoice she can pay, a second workflow on Paid, and a backfill. After that first hour, none of them need you. On Point Tech Solutions is a Go High Level San Jose consultant based in Los Gatos, serving the whole Bay Area. We build the website, the booking, and the follow-up so no renewal goes cold, and you own all of it. Done for you, or taught with an SOP.
Want to build this yourself? Join the On Point Tech Academy. It's free, and we build live every Tuesday and Thursday.
The On Point Tech Academy costs nothing and never asks for a card. We build live every Tuesday and Thursday, 12:30 to 1:30 PT.
Join the Academy free ← Back to all Field Notes