Trades industry news, updated weekly
Business Tips

Your Service Agreements Are Priced on Hope, Not Data

Maria ChenMaria Chen··14 min read

Your Service Agreements Are Priced on Hope, Not Data

In 2019, I pulled the P&L on a 14-truck residential HVAC shop my firm was evaluating for acquisition. The revenue line looked healthy. The recurring revenue line looked great — about $340,000 in annual service agreement income, clean and predictable, the kind of number that makes a PE analyst smile before they read the next page. The owner had no idea his install division had been losing money for three years. The agreement program, he believed, was the one part of the business that was working.

He was wrong about that too. He just didn't have the data to know it yet.

I've seen the same structure in most of the shops I audit. The service agreement program looks profitable on paper. The revenue lands upfront, it smooths the cash curve through slow months, and it sits above the cost structure without a single uncomfortable cost item attached to it. It feels like found money. It is a prepaid obligation with an unquantified cost that you priced, in all likelihood, on a spreadsheet built from a vendor template.


The Number You're Missing: What Agreement Customers Actually Cost to Serve

Service agreement revenue has a seductive quality that most other revenue doesn't. The check clears before you do any work. The customer feels served. The income statement looks better in January than it has any right to.

The problem surfaces the moment you ask: what does it actually cost to deliver what you sold?

Shop owners price agreements on two tune-up visits — one fall, one spring — plus a modest parts allowance, plus a few hours of technician time. That's a real cost. It is also about half of the actual cost. Agreement customers are not average customers, and almost no pricing worksheet I've reviewed accounts for what makes them different.

What's missing:

They call more. Agreement customers call dispatch at a higher frequency than non-agreement customers. They have a relationship with the shop. They feel entitled to use it — and you sold them that relationship. But if your average non-agreement customer generates 1.1 service calls per year and your average agreement customer generates 1.7, you have a 55% higher call volume per customer that you never priced for.

They expect priority. Priority dispatch is not free. When an agreement customer calls on a 95-degree Tuesday in July, your promise — explicit or implicit — is that they move to the front of the line. That means you are holding capacity in your dispatch schedule that you cannot sell to a non-agreement caller at full rate. That held slot has a dollar value. The shops I work with almost never calculate it.

They expect a discount on everything that follows. The tune-up turns up a failing capacitor. The refrigerant charge is two pounds low. The agreement customer — who has a card in their wallet that says "15% off repairs" — is now your most margin-compressed repair ticket of the day. That discount has to be in the agreement price at the time of sale, not discovered afterward on the repair ticket's contribution line.

None of these costs appear as line items on the original pricing worksheet. They show up later, distributed across labor, vehicle expense, and the margin bleed on downstream repair tickets — invisible until you specifically go looking.


What "Recurring Revenue" Actually Means — and What You're Confusing It With

The phrase "recurring revenue" has a specific meaning in financial analysis. It means predictable income with a known cost structure and low churn. A residential HVAC shop with 200 service agreements has something different: prepaid service obligations with a redemption liability sitting off the balance sheet.

When a customer pays $199 upfront for an annual service agreement, that $199 is not income. It is a deposit against a promise. It becomes income as the obligation is fulfilled. Most shops book it as income on receipt. That single accounting decision makes the program look more profitable than it is — and makes the slow months look better than they should — right up until the obligations redeem all at once and the cash is already spent.

The accounting piece matters less for tax purposes and more for management decisions. If your internal P&L shows $340,000 in agreement revenue recognized in January and February, and you make staffing and purchasing decisions based on that number, you are making decisions on income you haven't earned yet against costs you haven't measured. (Whether your CPA is handling the deferred revenue correctly for tax purposes is a separate conversation — some are, some aren't, and I'd check.)

This creates a cash timing problem disguised as a product. The cash comes in January. The obligations redeem in April and October, when the shop is already strained and every priority call means a non-agreement customer waits an extra day. Shops that love agreement revenue for the upfront cash are often solving one timing problem while creating another.


The Three Costs Nobody Built Into the Price

Start with the truck.

I've written before about vehicle operating cost per billable hour. Most shops use a national average figure. The national average is a fiction — I came to that conclusion working inside Atlantic Comfort Partners, where I looked at per-truck cost data across shops in a dozen metros and watched the variance make the average meaningless. In the DC metro area, where I work with a number of shops, commercial auto insurance has been running materially higher than any national benchmark I've seen, and fuel, tolls, and urban drive-time all add cost that a suburban Sunbelt shop's number won't capture. If you're in a high-cost metro and pricing agreements from a template built to someone else's averages, you're starting in a hole.

Priority dispatch compounds this. When you promise agreement holders next-day service, you are structurally holding a portion of each day's dispatch capacity against potential agreement calls. In a 10-truck shop with 400 active agreements, a busy shoulder-season week may see two or three slots per day blocked for priority customers. Those slots cost you whether they're used or not. The opportunity cost is the full-rate call you didn't take — or took a day late and lost.

Parts consumption is the second underestimated cost. Agreement customers tend to have older equipment. That's often why they bought the agreement. Older equipment generates more findings at the maintenance visit: more parts, more time, more repair opportunities that immediately trigger the member discount. If your agreement price includes a $40 parts allowance based on your experience with newer equipment and your actual consumption is running $70 per agreement customer, that $30 gap shows up nowhere except a year-end inventory reconciliation that nobody connects back to the agreement program.

The repair discount is where the math bleeds out quietly. A 15% member discount on a $380 repair ticket is $57. If your average agreement customer generates 1.4 repair visits per year, that's nearly $80 in discount per agreement customer per year — not modeled into the original agreement price, not recoverable, just margin compression distributed across every repair ticket associated with an agreement account.


Why the Math Only Works If You Have Two Years of Data

The standard advice is to build a service agreement program, price it competitively, and grow the recurring revenue base. I don't disagree with the direction. The operational problem is executing it without 24 months of actual redemption data behind the pricing.

The major vendors sell agreement pricing templates alongside their flat-rate books. I've made my position on those flat-rate books clear elsewhere: they produce predictable revenue per ticket and unpredictable margin per ticket. The agreement templates from the same vendors produce predictable agreement count and unpredictable margin per agreement. Same structural problem, different product. The vendor's margin is in selling you the template. Your margin is in whether the number is right for your cost structure — and a shop in suburban Alexandria, Virginia with DC-area insurance rates and technician wages at the top of the regional band is not the shop that template was built for.

The shops I've worked with that run profitable agreement programs are not the ones that launched the biggest programs or followed the template most faithfully. They tracked redemption rates, average call frequency, and parts consumption per agreement customer for two years before repricing. One year isn't enough. You need a second October — a second shoulder season where the relationship is mature and the customer is comfortable calling for things they wouldn't have called about in year one.


What Two Years of Agreement Data Actually Revealed

When I worked at Caldera Heating and Cooling in Sunnyvale, I ran service calls. I was in a Sprinter doing tune-ups, making findings, writing tickets — not reading P&Ls. What I noticed from that seat was that maintenance-visit customers behaved differently. Older equipment more often. More repair findings per visit. Higher callback rates within the same season. I didn't have the numbers then to quantify any of it. I had the observation.

I have the numbers now.

A 10-truck shop I audited in the last few years had about 380 agreements in force at $179 per year for a single-system agreement. The original pricing worksheet put the cost basis at $110 per agreement: technician time for two visits, filter and basic consumables, and a $40 parts allowance. Stated margin was 38.5%. It looked like a product the shop should sell more of.

The two-year audit told a different story.

Actual parts consumption per agreement customer was running $71 against the $40 estimate. The overage was driven almost entirely by findings on equipment more than 10 years old, which made up the majority of the agreement base. The priority dispatch capacity hold, when I costed it against the shop's average full-rate dispatch revenue per slot, came to roughly $20 per agreement per year in foregone revenue. The repair discount pull-through — 15% off, applied to an average of just over one repair visit per agreement customer per year — was pulling another $60-plus per agreement out of what had been priced as profit.

Add it up: the agreement was priced at $179. The actual cost to deliver it, once you included what the original worksheet left out, was north of $220. The program showed healthy recurring revenue every January. It funded the slow months the way the owner intended. What it couldn't show — given how the numbers were booked — was that the shop was carrying a real loss per agreement into every renewal.

The owner repriced for new agreements and added an equipment-age surcharge for systems over 12 years old, which was simple to implement at point of sale. He narrowed the member discount and reframed it in customer communications as a specific benefit rather than a negotiating floor. That last piece matters more than it sounds — agreement customers who understand the value of the discount don't bargain with it. Customers who think it's the opening position do.

A year later the program's margin was positive on a fulfilled basis. For the first time he could actually document it.


Pull your last 24 months of service records and separate them by agreement customer versus non-agreement. Compare call frequency, average parts cost per visit, and the margin on every repair ticket associated with an agreement account — accounting for any member discount applied. If you don't have 24 months, start tracking now and do not reprice until you do. If you launched a program in the last 12 months based on a vendor template, treat the current pricing as a hypothesis. You haven't tested it yet.


FAQ

How do I know if my service agreements are actually profitable?

You need two numbers: actual revenue recognized per agreement over its lifetime, and actual cost to fulfill — not estimated cost, actual. Pull every service record associated with agreement customers for at least 12 months, preferably 24. Add up technician hours, parts consumed, and any discounts applied to downstream repair tickets. Divide total cost by number of active agreements. If that number exceeds what you charged minus your overhead allocation, the program is underwater. Most shop owners who run this exercise for the first time end up closer to breakeven than they expected — and some find they're losing money, specifically on the older agreements in year two and three, where redemption picks up and the discount is fully normalized.

Is it true that service agreements improve customer retention enough to justify lower margin?

Agreement customers do renew at higher rates — I've seen that consistently across the shops I work with. The question is whether the retention value offsets the margin compression, and that's a shop-specific calculation. If you're losing $40 per agreement per year but each retained customer generates $600 in annual repair revenue at a 40% margin, the math might still work. Run those numbers for your shop before you claim the retention premium covers the pricing gap. It might. It also might not, depending on how compressed the repair margins are.

Should I charge more for older equipment on a service agreement?

Yes. Equipment age is the largest driver of parts consumption variance I see in agreement portfolios — a 15-year-old heat pump generates meaningfully more findings per maintenance visit than a 4-year-old system. Most agreement programs price by system type and size and ignore age entirely. An age-based surcharge, or a hard cutoff where systems over a certain age require a pre-agreement inspection before enrollment, aligns your pricing with your actual cost exposure. It's also defensible to customers when you explain it plainly.

Can I fix the accounting problem without switching software?

Yes. The core fix is moving upfront agreement payments to a deferred revenue liability account and recognizing revenue as you perform the maintenance visits. In QuickBooks this is straightforward; in ServiceTitan it's doable but you'll want to confirm your implementation consultant set up the revenue recognition correctly, because I've seen it configured both ways. The more important fix is your management P&L — make sure you're looking at agreement margin on a fulfilled basis, not a cash-received basis, so your pricing decisions reflect what it actually cost to deliver the service.

What redemption rate should I plan around?

I won't give you a single number, because the variance I've seen across shops makes a benchmark actively misleading. What I will tell you: redemption rates in year two and year three consistently run higher than year one in every shop I've looked at closely. The customer is more comfortable with the relationship and more likely to call for smaller issues. Track your own shop's call frequency by agreement year — year one, year two, year three-plus — and price for the average of year two and beyond, not the honeymoon period.

What should I do if I've already sold agreements at prices that are probably too low?

Don't reprice mid-contract. Let the current agreements run to renewal. At renewal, price correctly based on your cost data. Customers who've had good service generally accept increases at renewal when you're direct about what the service actually costs to deliver. The ones who don't accept it were probably not generating margin anyway. Use the time between now and renewal to build the data infrastructure — call frequency by customer, parts cost per visit, repair ticket margin by account — so the next pricing decision is based on your numbers instead of a template.

Enjoyed this article?

Get articles like this in your inbox every Monday. Free, no spam.

More from The Backcharge