Design and sell recurring maintenance agreements for service businesses: build the visit from a task checklist, price the plan from the shop's own visit cost, expected discount cost, and target margin with a bundled calculator, write terms that cover skips, unused visits, renewal, and cancellation, sell the plan at the end of a finished job without pressure, and run renewals as a review of the year's record. Use when a service business (HVAC, plumbing, electrical, pest control, pool, generator, appliance) wants to start a maintenance plan, reprice an existing one, fix low renewal or missed visits, or give technicians a clean way to offer the plan.
name: maintenance_agreement_programs description: Design and sell recurring maintenance agreements for service businesses: build the visit from a task checklist, price the plan from the shop's own visit cost, expected discount cost, and target margin with a bundled calculator, write terms that cover skips, unused visits, renewal, and cancellation, sell the plan at the end of a finished job without pressure, and run renewals as a review of the year's record. Use when a service business (HVAC, plumbing, electrical, pest control, pool, generator, appliance) wants to start a maintenance plan, reprice an existing one, fix low renewal or missed visits, or give technicians a clean way to offer the plan.
Maintenance Agreement Programs
Purpose
Give an owner, a service manager, or an agent setting up the program a complete way to build a maintenance agreement that makes money on its own numbers and survives renewal: a visit defined by tasks and readings, a price computed from the cost of delivering those visits, terms written before the first sale, an offer that takes under a minute at the end of a job, and a renewal that shows the customer the year's record instead of asking them to trust a brochure.
The failure this prevents is the common one: a plan priced by copying a competitor, sold on vague promises like priority service with no hours attached, that owes visits nobody tracks. That plan loses money quietly, misses visits loudly, and dies at the first renewal.
Workflow
- Define the visit before pricing anything. Write the visit as a numbered task list with the readings recorded and the exclusions named, built from a recognised standard where one exists (ANSI/ACCA 4 QM 2019 for residential HVAC, ANSI/ASHRAE/ACCA 180 2018 for commercial HVAC) or from the equipment maker's service manual. Full checklists, per-trade patterns, and the extras list are in
references/visit-checklists-and-terms.md. Time the visit on real jobs. The timed minutes are a pricing input, not a guess.
- Cost the visit with the shop's own numbers. Gather the loaded labour rate (pay plus taxes, benefits, and burden, per hour), minutes on site per visit, consumables per visit, travel and vehicle cost per visit, a per-visit overhead share, yearly admin and billing cost per agreement, the repair spend a typical member runs up in a year, the discount percentage the plan promises, and any fees the plan waives. Pull repair spend from the shop's own invoices for comparable customers. If the shop has no member history yet, use non-member repair customers of the same equipment age and say the figure is provisional.
- Run the price, do not copy one. Price with the calculator:
python3 scripts/agreement_pricing.py price assets/example-hvac.json for the worked HVAC file, or pass the shop's numbers as flags. The model is cost per visit times visits per year, plus the expected yearly cost of the promised discount and waived fees, plus admin, divided by one minus the target margin. Read the worked examples below before setting the margin. If the resulting price is far from what local competitors charge, treat that as a question about scope or cost, not as permission to match their price and lose the difference.
- Check capacity before selling. Agreements create owed visits, and owed visits land in the shoulder seasons. Multiply active agreements by visits per year and compare against the weeks available before peak season times the visits a crew can actually complete per week. Run it with
python3 scripts/agreement_pricing.py health --active 240 --visits-per-agreement 2 --shoulder-weeks 20 --visits-per-week-capacity 30. If the program does not fit, sell fewer agreements, add capacity, or spread visit windows. Selling past capacity converts directly into missed visits and refunds.
- Write the terms before the first sale. Cover equipment covered, visits and who books them, task list, price and billing cadence, what the discount covers, priority defined in hours the shop can hold in its busiest week, term, renewal and price change notice, cancellation route and what happens to prepaid unused visits, the unused visit rule, skips and pauses, and transfer. The checklist and the recurring billing consent floor are in
references/visit-checklists-and-terms.md. Have a local lawyer review the terms, especially auto-renewal and cancellation, before selling.
- Set up booking and proof from day one. The business books the visits and reminds the customer, not the other way round. Every visit produces a written report with tasks done, readings, and findings marked fixed, quoted, or watch. File reports against the agreement. The report file is what the renewal is built from and what settles a dispute about whether a visit happened.
- Sell at the end of a finished job, once, in under a minute. Report the job first, name the specific reason this house fits, state visits, price with its billing cadence, and the two benefits that matter here, then stop and let yes or no land equally well. Scripts, objection replies, and the clean selling rules are in
references/selling-and-renewals.md. Record offered, accepted, declined, or sheet left on every eligible job, or the attach rate is fiction.
- Handle skips, pauses, and failed payments the way the terms say. Customer skip reschedules inside the term, a business miss is owed and extends or completes late at the customer's choice, a seasonal pause stops visits and billing together, and a failed payment pauses visits after the stated grace period. The full handling table is in
references/selling-and-renewals.md. Never bill a visit that was not offered, and never deliver a visit the customer believes is cancelled.
- Run renewal as a review. Send the renewal pack 60 days before renewal: visits completed with dates, readings that changed, findings fixed and still open, and the discount the customer actually received, plus the new price if it changes and how to stop renewal. Repeat at 30 days, final plain notice at 7 days. One save offer is allowed only after cancellation is already in motion and cannot delay it. Details and the legal floor are in
references/selling-and-renewals.md.
- Review program health monthly. Pull active agreements, completion rate, attach rate, renewal rate, and visits owed versus capacity, all from the shop's own records, using the health command in the renewals reference. Diagnose by which number is falling: completion is operations, attach is the offer, renewal is proof of value. Fix that one thing and check it next month.
Worked examples
Both files ship in assets/ and run as written. The dollars are the example shop's stated inputs, not market advice.
Residential HVAC, two visits a year. A 75 minute visit, loaded labour $48 an hour ($60 of labour), $8 consumables, $12 travel, $10 overhead: cost per visit $90, two visits $180 a year. The plan promises 10% off repairs on expected member repair spend of $400 a year ($40) and waives about $20 of fees, plus $12 admin: total annual cost $252. At a 30% target margin the price is $360 a year, clean as $30 a month, with $108 gross profit per agreement before fixed program costs. Run it: python3 scripts/agreement_pricing.py price assets/example-hvac.json.
Pest control, quarterly. A 40 minute visit, loaded labour $45 an hour ($30 of labour), $10 consumables, $10 travel, $5 overhead: cost per visit $55, four visits $220 a year. The plan promises 10% off extra work on expected spend of $250 ($25) and no waived fees, plus $15 admin: total annual cost $260. At a 35% target margin the price is $400 a year, billed $100 a quarter, with $140 gross profit per agreement. Run it: python3 scripts/agreement_pricing.py price assets/example-pest-quarterly.json.
Note what the two examples teach: the pest plan visits cost less but happen twice as often, so the yearly prices land close. Price follows visit count times visit cost, not the trade's habits. A plan priced by gut feel usually gets exactly this wrong.
Output Contract
Deliver, for a new or repriced program:
- The visit definition: numbered task list per visit type, readings recorded, consumables included, exclusions and priced extras named, with the standard or maker manual it was built from.
- The pricing sheet: every cost input with its source (payroll, timed jobs, invoice history), the calculator output, the chosen annual and per-billing-period price, and the rounding taken.
- The capacity check: visits owed per year at the target agreement count against shoulder season capacity, and the sales cap or staffing change if it does not fit.
- The terms: the one to two page agreement covering every item in the terms checklist, marked as needing local legal review before use if it has not had it.
- The offer pack: the end of job script fitted to the trade, the sheet left with customers who decline, and the job record fields for offered and outcome.
- The operations setup: who books visits, the reminder flow, the report template, and the skip, pause, and failed payment handling written to match the terms.
- The renewal pack template and cadence: the 60, 30, and 7 day touches with the year's record format.
- The monthly health sheet: the five numbers, the calculator output, and the one fix chosen.
Operating Rules
- Price comes from cost, never from a competitor's brochure. Market prices are a sanity check on scope only. A price the calculator cannot support at the stated margin does not ship: narrow the scope, cut a benefit, or raise the price, and say which.
- Priority and discounts are defined in numbers or they are not promised. Priority means a booking window in hours that holds in the busiest week. A discount names labour, parts, or both, and whether emergency work counts.
- The business books the visits. A plan that waits for the customer to remember is a plan that owes refunds. Booking, reminders, and the visit report are part of the product being sold.
- A missed visit is owed, visibly. Track visits due, completed, and owed per agreement. Completion rate is a health number the owner sees monthly, not a surprise at renewal.
- One offer per visit, no pressure mechanics. No fake deadlines, no scare lines the findings do not support, no tying maker warranty coverage to the plan beyond what the maker's written terms actually say. A clean no ends the subject for that visit.
- Cancelling is no harder than joining. Disclose price, frequency, renewal, and the cancellation route before taking payment details, keep the consent record, remind before renewal, and complete a cancellation before making any save offer. In the US the FTC click-to-cancel amendments were vacated on July 8, 2025, and ROSCA plus state auto-renewal laws still apply, so verify current state law with counsel and treat easy exit as the floor everywhere.
- Quote the total with the cadence. Monthly figures are always stated with the annual or full term total in the same breath. No price is presented in a way that lets the total surprise the customer later.
- Measure the shop's own rates, quote no borrowed benchmarks. This skill sets no standard attach rate, renewal rate, or plan price for any trade. The health formulas are given so the shop builds its own baseline in the first two quarters and judges itself against that.
- Unused prepaid money is never quietly kept. The terms pick one rule (carry forward, complete paid visits, or refund) and operations follow it exactly. Disputes about unused visits are the most common way these programs get reported and refunded under pressure.
- This skill is operations and sales method, not legal or tax advice. Agreement terms, auto-renewal, recurring billing, and any licence or certification the visit work requires get checked against the law where the work is done, by a qualified local professional, before the program launches.
No ratings yet — be the first to rate it.