An HVAC contractor can warn a property manager 90 days before a maintenance contract ends by storing each contract's end date in GoHighLevel and firing a Custom Date Reminder workflow at 90, 60, and 30 days. The first message arrives before the property manager's own cancellation window opens, because many commercial service contracts renew automatically unless the customer gives written notice, often 60 to 90 days ahead. The bottom line: your renewal offer has to land before their notice deadline, not after it.
Why 90 days is the safe starting point
Two sources describe the buyer side. A guide written for facility buyers warns that many contracts lock in a new term unless written notice is given, often 60 to 90 days before the current term ends. A maintenance software vendor says a typical minimum notice period for non renewal is 60 to 90 days. If your customer's notice window is 90 days, a renewal offer sent at 60 days arrives after they could have left.
A service contract tracking guide from a maintenance software vendor lays out a sequence: internal review at 90 days, first customer outreach with a value summary at 60, a second touch at 30, an urgency reminder at 15, a 30 day grace period after expiration, and a win back campaign after that. Treat the numbers as one vendor's suggestion and check your own contracts for the notice clause.
The timeline
| Days before contract end | What the workflow does | Who acts |
|---|---|---|
| 90 | Creates a task to review the account: visits completed, repair calls, and open issues. Emails the property manager a value summary and the renewal options. | Service manager |
| 60 | Sends the renewal agreement through a documents and contracts action. Sends a short text that it is in their inbox. | Account manager |
| 30 | Creates a call task if the agreement is unsigned. | Account manager |
| Day of expiration | Notifies the service manager that the contract ends today and starts the grace period follow up. | Service manager |
How this was handled before
Many contractors start with a spreadsheet of contract end dates. A vendor blog puts the limit of that method at roughly 50 to 75 agreements, after which missed visits and renewal lapses become predictable. Treat that as one vendor's estimate, but the failure it describes is familiar: the list exists, and nobody opens it in the weeks that matter.
Build it in GoHighLevel
- Create a date field on the contact called Maintenance contract end date and a text field for the notice period.
- Add tags for the notice window, such as notice 60 and notice 90, taken from each contract.
- In Automation, create a new workflow from scratch and add the Custom Date Reminder trigger.
- Select the contract end date field and add Before Number of Days set to 90.
- Add a Has Tag filter for notice 90, and build a second workflow at 120 days for contracts tagged notice 90 so the offer lands ahead of that window.
- Add Add Task, Send Email, and Send Documents and Contracts actions as shown in the table.
- Publish the workflow and repeat for the 60 and 30 day steps.
- If the property manager is a management company with many buildings, GoHighLevel also supports company based workflows that use date fields on the Company record.
Email to send at 90 days
Subject: Your maintenance agreement for [building name] ends on [end date]. Hi [first name], this year we completed [number] scheduled visits and [number] repair calls at [building name]. Your agreement ends on [end date] and asks for [notice period] days written notice, so we are sending the renewal options now. Reply here and we will walk through them.
What the workload looks like
A contractor with 120 commercial agreements ending on different dates has about 10 agreements reaching the 90 day mark every month (120 divided by 12). Each needs a value summary that names visits completed and repairs made. The workflow can create the task and pull the numbers you store in custom fields, so the service manager spends time on the accounts that need a conversation instead of building 10 summaries by hand.
Mistakes to avoid
- One timeline for every contract. A contract with a 90 day notice clause needs an offer earlier than one with a 60 day clause. Tag each contract with its notice period.
- Sending only a text. A renewal agreement needs a document. Use email or the documents action, and use text as the nudge.
- Treating a signed renewal as the end. Update the end date and start the next cycle, or the account falls out of the system.
- Skipping the win back step. If a contract expires unsigned, keep a 30 day follow up so the account is not lost quietly.
Check before you switch it on
US text messages sent from a standard 10 digit number need A2P 10DLC registration. The HighLevel support portal says registration is required for texts to US recipients from 10 digit long code numbers and that toll free numbers do not require it. HighLevel's opt in guidelines also say a person cannot be forced to agree to text messages in order to submit a form, so keep the consent box optional. One compliance guide separates informational texts, which need documented consent, from marketing texts, which need prior express written consent. Ask your attorney which category your reminders fall into. Property managers are business contacts, but text messages still need consent. Use email for the renewal packet and text only as a nudge. This is general information, not legal advice.
Questions people ask
How do I set the timing if contracts have different notice periods?
Tag each contract with its notice period and run a separate workflow for each tag, starting at least 30 days before that window opens.
Should the contract auto renew?
That is a business decision. Sources describing customer side risk say auto renewal clauses often require written notice 60 to 90 days ahead, so tell customers where that date is.
Can I send the agreement from GoHighLevel?
GoHighLevel's action list includes Send Documents and Contracts, which sends a document or contract from a template.
Ready to try it yourself? Start a GoHighLevel account here.
You can also see this in action in our GoHighLevel capabilities demo.
