bdevy.

Guide · 9 min read

HVAC Maintenance Agreement Software: Manage Plans, Visits and Renewals

What maintenance agreement software should manage, how to price a plan so it is actually profitable, and how to stop agreements lapsing. With a working demo.

Published 12 September 2026 · BDEVY

# 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

AreaWhat it holdsUsually missing
PlansYour tiers — visits, benefits, price, termsRarely editable in generic tools
AgreementsTerm, price, billing, payment, statusNo
Covered equipmentWhich specific systems, by serialAlmost always
Included visitsDue date, status, who delivered itOften
Visit findingsChecklist, diagnosis, recommendationsUsually
Customer reportsWhat the customer receives after each visitUsually
RenewalsExpiry dates, cadence, status per agreementOften
ProfitabilityWhat each plan costs to deliverAlmost never
RetentionCustomers without an agreementAlmost 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 margin37.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:

  1. 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.
  2. Add materials. Filters, treatment, consumables, per visit.
  3. Add travel. It is a real cost even on a short run.
  4. Add admin. Scheduling, billing, the reminder, the renewal call. Small per member, real across a few hundred.
  5. Add the discount you give up. Your repair discount multiplied by what a member spends on repairs in a year.
  6. 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.

The full pricing framework →


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:

WhenAction
90 days outIdentify. Create the task. Check every included visit was delivered.
60 daysEmail reminder, with the year's reports attached
30 daysSMS reminder
14 daysA person calls
7 daysFinal notice
RenewedSchedule the new term's visits immediately
DeclinedRecord 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.

See what improving your rate is worth →

The full renewal process →


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.

SpreadsheetDedicated software
Agreement listWorks fineWorks fine
Expiry datesManual checkSurfaced automatically
Included visitsManual trackingA record per visit with a status
Equipment coveredA text fieldAttached by serial number
Visit findingsNot reallyChecklist and report
Customer reportsSeparate documentGenerated from the visit
Renewal cadenceSomebody remembersTriggered
ProfitabilityPossible, rarely doneLive per plan
Multiple usersFragileFine
Field accessNoYes

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


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

Turn missed calls into booked jobs

Every unanswered call gets a text back within seconds, every lead gets followed up, and the schedule fills without another person in the office.