Your Flat-Rate Book Has Margin Leaks You Haven't Found Yet
Your Flat-Rate Book Has Margin Leaks You Haven't Found Yet
In 2019, I pulled the P&L on a 14-truck residential HVAC shop in the mid-Atlantic as part of a due diligence package for Atlantic Comfort Partners. The flat-rate book existed. It was in the trucks, loaded into the CRM. The owner had built it himself in 2016 and considered pricing settled.
The shop had been losing money on installs for three years. Not a little. Enough that the equity story we were being sold was almost entirely fictional. The book was intact. It was also three years stale on labor hours, pre-dated two rounds of refrigerant handling protocol changes, and was built on a truck operating cost figure someone had typed in once and never touched.
Having a flat-rate book is not the same as having accurate flat-rate pricing.
The False Confidence of a System That Exists
The psychological problem with a flat-rate book is that it feels like infrastructure. You built it, the techs use it, so pricing is handled and margin is controlled. The owner above genuinely believed this. He could tell me his average ticket on a diagnostic call, his close rate, his revenue per tech per day. He couldn't tell me his gross margin on a furnace swap, because he'd never reconstructed the actual cost. The book said what to charge. He assumed the rest followed.
It doesn't. Flat-rate pricing produces predictable revenue per ticket and unpredictable margin per ticket. That is the problem. I want to say it plainly because the rest of this article is evidence for it.
What's Actually Inside Your Price — And What's Gone Missing
A correct flat-rate price has five inputs:
- Technician labor and burden
- Truck operating cost per billable hour
- Material cost at current invoice price
- Overhead allocation per billable hour
- Target net margin
Most books, when I audit them, are touching one of those five regularly. Sometimes two.
Parts costs get updated — usually because the distributor price changed and the tech said something at the morning meeting. The other four inputs sit where they were set at buildout.
Truck operating cost per billable hour does the most quiet damage. I come back to this in nearly every engagement because it is the most underpriced cost in residential HVAC at the small-shop level. Most books use a national average, or a number keyed in during software setup, or a figure from a cost study that is several years old. The national average is a fiction. Your trucks park in your zip code, with your insurance carrier, on your maintenance history.
I watched this firsthand at Bayview Mechanical in Sunnyvale. Bay Area commercial auto rates and California prevailing wage made the numbers from any national pricing guide essentially decorative. A shop in that market pricing off the same table as a shop in Tulsa was going to lose on labor and vehicle cost every time, and the book wasn't going to tell them.
If your book was built before 2021, the vehicle line is probably wrong in a direction that costs you money on every dispatched call. Pull your actual insurance invoices and find out.
The other foundational error, one that predates any aging, is the markup-versus-margin confusion. A 40% markup is a 28.6% gross margin. If you built your book targeting 38% gross margin and used markup math to get there, the book opened wrong before it ever had a chance to age.
The flat-rate pricing books sold by major industry vendors are calibrated to produce consistent revenue per ticket, not consistent margin per ticket. You are working from someone else's cost assumptions applied to your cost structure. Those are not the same thing.
The Jobs That Are Quietly Eating You
The margin leaks concentrate on high-volume, fast-close jobs. The ones your techs can do in their sleep. The ones you don't think about because they feel solved.
Familiarity is exactly why the labor hours never get questioned.
From shops I've audited: capacitor swaps priced against a 45-minute labor assumption that field time puts closer to 35. On paper the shop looks efficient. The tech is closing calls fast, revenue per day looks good. What's actually happening is the shop is recovering 35 minutes of labor cost on a ticket priced for 45, and the math is working by accident.
That sounds fine until the opposite: a TXV replacement the book has at 1.2 hours, which now takes 1.7 because refrigerant recovery and documentation under current EPA 608 protocols adds real time. If the book was built before enforcement on those procedures tightened, the 1.2-hour assumption is optimistic. Your tech is doing the job correctly, at the time it actually takes, and the book is eating 30 minutes of unbilled labor on every one.
Most owners know their revenue per job type from the CRM. They can sort by task code and see what they're charging. What they cannot see without a separate cost reconstruction is what they're spending per job type. Same visibility gap as days sales outstanding. You can see what you're owed. The clock, you cannot see.
The Vendor's Book Has a Different Problem
The major industry pricing books produce consistent revenue per ticket. That is a real benefit. But consistent revenue per ticket is not consistent margin per ticket, and the book doesn't know the difference because it doesn't know your costs. It knows the costs it was built on — typically national or regional averages with a labor rate in the middle of a wide distribution.
There is also the commission question. Pricing books tied to parts purchasing programs are not neutral documents. The price points are set to move volume through the vendor's supply chain at margins that benefit the vendor. Your margin is a secondary consideration. That's incentive alignment. The incentives are not aligned with your P&L.
A purchased book is raw material, not finished product. Your actual costs have to go in before the numbers mean anything.
How to Run the Audit
Pull your job types by volume for the last 90 days. Take the 10 task codes your techs closed most frequently. High-volume items are where the math compounds.
For each of those 10 job types, reconstruct the actual cost using your own numbers.
Labor: Pull confirmed field time — not the book hours, the actual hours. Ask two of your best techs, separately, how long the job actually takes. If they agree with each other and disagree with the book, the book is wrong. I ran service calls in a Sprinter for four years at Bayview and two more at Caldera. I know what a TXV swap actually takes in the field. The book is often optimistic, and the gap is usually widest on jobs the techs find routine, because nobody pushed back when the original time estimate was set.
Apply your loaded labor rate to those actual hours. Loaded means wages plus burden: payroll tax, workers' comp, and health insurance. If you're unsure of your burden percentage, pull your last four quarterly payroll reports and calculate it directly — total employer-side costs divided by total base wages. Do not use a benchmark.
Truck cost: Take your actual insurance invoices, your actual fuel spend for the last 90 days, and your actual fleet maintenance costs for the same period. Add them. Divide by your billable hours for the period. That is your real vehicle cost per billable hour.
Materials: Use the invoice price you actually paid. Distributor prices move. If you're applying a fixed markup percentage to a cost that's risen since you set the percentage, the net margin on materials may be narrower than you think.
Overhead: Divide your total monthly overhead by your billable hours for the month. Overhead is everything that isn't direct labor or direct material:
- Rent and utilities
- Insurance other than fleet
- Software subscriptions
- Admin wages
That's your overhead allocation per billable hour. Apply it to the actual hours on each job.
Add those four figures together. Compare to the flat-rate price in the book. The gap is your actual margin on that job type in dollars. Run it as a percentage of the flat-rate price to get gross margin. Rank all 10 by that number. The bottom of that list is where you start.
What to Fix First
Rebuild the whole book this week? You won't, and it's not the highest-return use of your time.
Three moves, in order.
First: the truck cost line. Pull the actual numbers — insurance invoices, 90-day fuel receipts, fleet maintenance records. Divide by billable hours. If that per-hour figure is more than 15% above what's in your book's overhead assumption, reprice before the week is out. That gap compounds on every dispatched ticket.
Second: run the job-type volume sort and cost audit on your top 10 task codes. Fix the high-volume items first and you've closed most of the leak, even if the full book still needs work.
Third: write down your current fully loaded labor rate and your current vehicle cost per hour and put them somewhere you'll see them monthly. Not annually. The point is not to rebuild the book every month. It's to notice when the inputs have moved enough to trigger a reprice. Most shops let years pass because there's no trigger. Create the trigger.
The owner of that 14-truck mid-Atlantic shop wasn't careless. He was running 12-hour days. He believed the book was doing its job, and in 2016 it was. By 2019 the costs had moved, the prices hadn't, and the difference had been accumulating quietly in the install margin for three years before anyone looked.
FAQ
How often should I update my flat-rate book?
Quarterly reviews of your core inputs — labor rate, vehicle cost, material cost — and a full job-type margin audit twice a year. The shops that get into trouble treat the book as a one-time build. Costs move continuously. Set a calendar reminder for the input review so there's a mechanism, not a good intention.
My CRM shows the flat-rate price for every job. Isn't that enough visibility?
No. Your CRM shows revenue per job type. It does not show cost per job type unless you have built that reconstruction into your system deliberately. What you can see is what you charged. What you cannot see without a separate audit process is what you spent. Those two numbers together tell you margin. One alone tells you almost nothing useful.
Can I just use a vendor-supplied flat-rate book and adjust prices upward by a percentage?
A flat percentage adjustment doesn't fix a structural problem. If the vendor's book has the wrong labor hours for a TXV swap in your market, raising every price by 10% leaves the hour count wrong and the job type still mispriced. The adjustment has to happen at the input level — actual hours, actual labor rate, actual vehicle cost — not as a multiplier applied to someone else's math.
How do I calculate my vehicle cost per billable hour?
Take your total fleet operating costs for the last 90 days: commercial auto insurance, fuel, and maintenance and repair from your fleet account. Add those three figures. Divide by the total billable hours your techs logged in the same period. Use your own invoices and your own hours. Your zip code, your carrier, and your maintenance history are specific to you.
What's the difference between markup and margin, and why does it matter for my flat-rate book?
Markup is a percentage of cost. Margin is a percentage of price. A 40% markup means you added 40% to your cost — the resulting margin is 28.6%, not 40%. If you built your flat-rate book targeting 35% gross margin but used markup math throughout, the book was miscalculated before any of the inputs aged. The fix is to rebuild targeting margin, not markup. A simple check: divide your profit dollars on any job by the total price charged. That's your margin. If it doesn't match your target, the math is off.
Are there job types I should prioritize in an audit besides high-volume ones?
Yes. Any job type that has changed in execution since the book was built. If EPA refrigerant handling protocols or local code changes have added steps to a job category, the time assumption in the book is stale regardless of volume rank. Cross-reference your job types against anything that changed procedurally in the last three years and audit those on the same pass.
Enjoyed this article?
Get articles like this in your inbox every Monday. Free, no spam.
