In this post
- What an HVAC maintenance agreement actually is
- What the software should manage
- The lifecycle
- Recurring revenue is not recurring profit
- How to price a plan
- Delivering the visits
- Documenting what was found
- Renewals
- The customers without an agreement
- Software or spreadsheet?
- Where this fits with everything else
- Try it
- Keep reading
# HVAC Maintenance Agreement Software: Manage Plans, Visits and Renewals
Maintenance agreements get sold as recurring revenue and then quietly become a filing problem.
Nobody is certain how many are live. The included visits slip, because a customer who has already paid is the customer least likely to chase you. A term runs out in March because nobody looked at a date in January. And when someone finally calls about renewing, the customer remembers paying for two visits and receiving one.
None of that is a sales problem. All of it is a tracking problem, and it is what this category of software exists to fix.
What an HVAC maintenance agreement actually is
A customer pays for a defined package of maintenance and service benefits across a defined period — usually twelve months.
What sits inside that package varies enormously between contractors, and there is no standard structure. One company includes one visit and priority booking. Another includes two visits, a 15% repair discount and no overtime charges. A third covers specific rooftop units on a quarterly cycle with belts and filters included.
Anyone telling you what a maintenance agreement "normally" contains is describing their own, not an industry standard.
The parts that are common to all of them:
- A term — a start and an end date
- Included visits — how many, and within what period
- Covered equipment — which systems, specifically
- Benefits — priority, discounts, inclusions
- A price, and a billing frequency
- Terms — what happens on cancellation, transfer and renewal
Maintenance agreement vs service agreement →
What the software should manage
| Area | What it holds | Usually missing |
|---|---|---|
| Plans | Your tiers — visits, benefits, price, terms | Rarely editable in generic tools |
| Agreements | Term, price, billing, payment, status | No |
| Covered equipment | Which specific systems, by serial | Almost always |
| Included visits | Due date, status, who delivered it | Often |
| Visit findings | Checklist, diagnosis, recommendations | Usually |
| Customer reports | What the customer receives after each visit | Usually |
| Renewals | Expiry dates, cadence, status per agreement | Often |
| Profitability | What each plan costs to deliver | Almost never |
| Retention | Customers without an agreement | Almost never |
The four in bold are where a maintenance agreement product differs from a calendar with reminders on it.
Open the interactive demo → Plans, agreements, covered equipment, visit checklists, customer reports and a renewal list — running against a fictional contractor's book. No signup.
The lifecycle
Create the plan
↓
Sell the agreement
↓
Activate — payment, first visit scheduled
↓
Deliver the included visits
↓
Document what was found
↓
Report to the customer
↓
Renew
Each step has a failure mode, and they are not evenly distributed.
Create fails when the plan is priced without knowing what it costs to deliver.
Sell fails when nobody asks — most agreements are sold at the end of a repair visit by a technician, not by a salesperson.
Activate fails when the first visit is left to be booked later.
Deliver is where most agreements actually fail. An included visit that nobody schedules is revenue you took for work you did not do.
Document fails when the visit happened but produced nothing the customer can remember eleven months later.
Renew fails when nobody looked at the date.
Deliver and renew account for most lapsed agreements, and both are tracking problems.
Recurring revenue is not recurring profit
This is the section worth reading twice.
An agreement is revenue with a cost attached. The cash arrives up front and the cost arrives across the year in visits, which is exactly what makes an unprofitable plan hard to notice.
Work one through. A $299 plan with two visits:
| Labour — 2 visits × 1.25 hr × $38 burdened | $95.00 |
| Parts and materials — 2 × $14 | $28.00 |
| Travel — 2 × $9 | $18.00 |
| Admin — scheduling, billing, reminders, the renewal call | $18.00 |
| Repair discount given up — 15% of $180 | $27.00 |
| Cost to deliver | $186.00 |
| Gross profit | $113.00 |
| Gross margin | 37.8% |
Two things fall out of that table.
The discount is a real cost. A 15% repair discount on $180 of member work is $27 you have agreed to give away. Leaving it out of the plan's economics overstates the margin.
Margin is not markup. That plan is running a 60.8% markup and a 37.8% margin — profit over cost versus profit over price. Pricing by markup while budgeting by margin is the same mistake contractors make on installation work, and it is worth twenty-three points here. The full markup vs margin maths →
Price your own plan → Enter visits, labour, parts, travel, admin and the discount, then set a target margin and it solves for price.
The unused visit trap
A tempting piece of arithmetic: customers who never book their visits make the plan more profitable.
In one year, yes. Across the relationship it is the most expensive way to book a short-term gain, because a customer who paid for two visits and received one has a reason to decline the renewal that has nothing to do with price — and they are right.
Treat unused visits as a liability, not a windfall.
How to price a plan
There is no universal number, and any article giving you one has not seen your cost structure. The method:
- Cost the visit properly. Technician hours at a burdened rate — wage plus payroll taxes, workers' comp, insurance and PTO. A $28/hr technician costs $35–38.
- Add materials. Filters, treatment, consumables, per visit.
- Add travel. It is a real cost even on a short run.
- Add admin. Scheduling, billing, the reminder, the renewal call. Small per member, real across a few hundred.
- Add the discount you give up. Your repair discount multiplied by what a member spends on repairs in a year.
- Choose a target margin and solve for price — do not apply a markup and hope.
Then sanity-check against your market. If the number is far above what customers will pay, the answer is usually to change what is included rather than to sell below cost.
Delivering the visits
The single highest-leverage operational habit: every included visit is a record with a due date and a status, and overdue ones are visible without anyone going to look.
That is it. Not a campaign, not a new hire — a list somebody sees every morning.
What makes visits slip:
- They are scheduled "when the customer calls", and the customer never calls
- The office does not know which agreements have visits outstanding
- Seasonal crunch pushes maintenance behind emergency work, and it never comes back
- Nobody owns the list
The fix for the last one is a name against it. How scheduling fits around this →
Documenting what was found
The visit report is what the customer remembers when the renewal notice arrives.
A visit with no report is, from the customer's side, indistinguishable from a visit that did not happen. They were at work. Somebody came, did something, left a card.
A good report contains: what was checked, what passed, what needed attention, what the technician actually found, what is recommended, and when the next visit is due. It goes out the same day.
It also does a second job. A technician who flags a failing heat exchanger during a maintenance visit has created a repair or replacement opportunity backed by documented evidence — and that evidence is far more persuasive than a cold call. Turning service history into replacement opportunities →
Complete a visit in the demo → Work the twelve-point checklist, flag something, and read the customer report it generates.
Renewals
Most lapsed agreements were never declined. They ran out.
A workable cadence — and the exact timing should be yours:
| When | Action |
|---|---|
| 90 days out | Identify. Create the task. Check every included visit was delivered. |
| 60 days | Email reminder, with the year's reports attached |
| 30 days | SMS reminder |
| 14 days | A person calls |
| 7 days | Final notice |
| Renewed | Schedule the new term's visits immediately |
| Declined | Record the reason |
The check at 90 days matters more than the reminders. If a customer has an undelivered visit, deliver it before you ask them to renew. Asking someone to pay again for something you did not finish is how a renewal becomes a complaint.
The customers without an agreement
The list most contractors cannot produce, and the most valuable one in the system.
A customer with real lifetime spend, eleven-year-old equipment and no agreement is the cheapest plan you will ever sell. They already trust you. You already know their systems. Nobody has asked.
Worth sorting by:
- Lifetime revenue — who is already worth something
- Equipment age — who needs maintenance most
- Last service date — who is drifting away
- Previously had an agreement — who lapsed and can be won back
Software or spreadsheet?
An honest comparison.
| Spreadsheet | Dedicated software | |
|---|---|---|
| Agreement list | Works fine | Works fine |
| Expiry dates | Manual check | Surfaced automatically |
| Included visits | Manual tracking | A record per visit with a status |
| Equipment covered | A text field | Attached by serial number |
| Visit findings | Not really | Checklist and report |
| Customer reports | Separate document | Generated from the visit |
| Renewal cadence | Somebody remembers | Triggered |
| Profitability | Possible, rarely done | Live per plan |
| Multiple users | Fragile | Fine |
| Field access | No | Yes |
A spreadsheet genuinely works below a few dozen agreements, and starting there is sensible. It stops working at the point where nobody can say with confidence which visits are outstanding. The structure that works → · The full comparison →
Where this fits with everything else
Agreements sit in the middle of the chain, not at the end of it:
Customer record → Agreement → Scheduled visit → Technician finds something
↑ ↓
Renewal ← Report ← Visit completed Estimate for the repair
The customer and equipment records belong in a CRM. The visits get scheduled through dispatch. Recommended work becomes an estimate. If those are separate systems with manual handoffs, the handoffs are where the agreements leak.
Try it
Open the maintenance agreement demo →
Open a plan and watch the margin move as you change what it costs to deliver. Complete a maintenance visit on the technician checklist. Read the report it generates. Work the renewal list and renew an agreement into a new term.
And on your own numbers first:
Keep reading
- Maintenance Agreement vs Service Agreement →
- How to Create an HVAC Maintenance Agreement →
- How Much Should a Maintenance Agreement Cost? →
- Selling Agreements Without Being Pushy →
- Increasing Renewal Rates →
- The Contractor's Agreement Checklist →
- Tracking Agreements in a Spreadsheet →
- Software vs Spreadsheet →
Want the agreement lifecycle automated around the billing and scheduling you already run? Talk to BDEVY →
hvac service agreement software hvac maintenance software hvac business management software