Equipment surcharges keep climbing, and the labor market is tight enough that the old three-times-parts shortcut no longer holds for a lot of residential HVAC shops. Homeowners are still price sensitive, but refrigerant and coil costs are not standing still. Nationally, we are seeing double-digit year-over-year pressure in several line items. That is less a blip than a reminder that service departments need to account for every unbilled minute if they want to hold something near 20% net.
I sat with Wesley a few weeks ago. He runs nine vans and had a busy season that did not show up in his bank account the way he expected. On paper his gross margin looked healthy, around 42%. When we opened the last 47 installs and reconciled burden, shop supplies, and the small stuff that never made it to a job packet, his real margin was closer to 29.4%. Sales were not the problem. The leak was labor burden and untracked consumables that quietly ate the ticket. We spent three days rebuilding the model so it matched the field, not the story the office wanted to tell.
Profit protection pillars
Build a fully burdened labor rate that includes taxes, benefits, and non-billable time so service pricing stops subsidizing the customer.
Audit miscellaneous materials monthly. Zip ties, whips, and small fittings can pull 3% to 5% out of a job if nobody assigns them.
Run a simple post-job review that compares sold hours to actual clock time so drift shows up while the ticket is still fresh.
Move from flat markup habits to margin-based pricing that carries the overhead of your real market, not a textbook multiplier.
Where margin quietly disappears
Profit rarely dies in one dramatic miss. It dissolves in small line items that never get challenged.
Month-end P&L questions usually start with, we were busy, so where is the cash? The honest answer is that margin erodes in fifteen and twenty dollar increments that look harmless until you multiply them across the board. Trade reporting from ACHR News has been tracking how regulatory pressure and refrigerant transitions push contractors toward pricier inventory. More cash sits on the shelf, and the carrying cost of each job goes up even when the ticket price feels familiar.
Without granular job costing, your break-even point is basically a guess. I have watched shops price a blower motor replacement, feel good about the spread on parts, then learn that drive time, paperwork, and fuel adjustments turned the call into pocket change or a small loss. When you want insulation from supply volatility, the boring work is line-item truth on labor, materials, and true capacity.
Think morning setup, supply-house detours, and windshield time that never lands on a billable code. If your rate card ignores it, your margin pays for it.
Fully burdened labor is never just the wage
If you stop at hourly pay, you will misprice service and wonder why gross looks fine while net does not.
The common mistake is treating a lead tech like a $32 an hour line item. After FICA, workers comp, health, and a modest retirement match, Wesley was closer to $54.10 an hour for that person before we even talked about vans, tools, or training. That is still not the full picture.
Unapplied labor is the rest of the story. Huddles, van cleanup, traffic, and callbacks that do not get coded all belong in the denominator. If payroll says forty hours and billing says twenty-eight, the burdened rate has to climb to cover those twelve hours. When the price book still says $85 or $100 an hour because that is what you used in 2019, you are often buying down the homeowner experience with your own margin.
The materials tail and the shop-supply black hole
Condensers and furnaces are easy to see. The slow bleed is tape, sealant, fasteners, and the top-off charge nobody logs.
Big-ticket equipment gets attention because the invoice is loud. The expensive pattern is the tail of the job. I audited a shop where the owner, Aria, found a little over twelve thousand dollars a year in miscellaneous supplies that never tied back to a job ID. That is not theft by default. It is usually habit, speed, and nobody owning the last ten feet of the BOM.
Strong ops teams kit replacements so the three-ton heat pump package leaves with a scanned list tied to the work order. When consumption is visible, you can see a crew that consistently runs heavy on fittings or charge before you blame the supplier. Precision here is how you catch training gaps early instead of arguing about it in November.
The flat-rate mirage
A flat-rate book is not a monument. If you have not refreshed labor burden and landed costs in more than one sales quarter, you are probably quoting yesterday's margin on today's refrigerant price.
Windshield time has to live in the model
National averages put a large share of technician time in the cab. Your routing reality might be worse.
In spread-out metros, drive time can dominate the day. If job costing treats every neighborhood the same, margin will swing by territory even when your price list does not. Good dispatch teams pair GPS review with ticket notes so unapplied time is visible, not smoothed away in a weekly average.
When I tighten routing with a shop, we look for simple batching wins first. Grouping calls by side of town beats heroic cross-town zigzags. Intake also matters. If dispatch is guessing, you burn billable hours on low-fit work. A tighter front door, including verified homeowner intent, cuts the number of trips that never should have hit the schedule.
The fifteen-minute cleanup buffer
"Add a fifteen-minute admin and cleanup buffer to sold labor on service calls so CRM notes, photos, and truck reset do not silently steal margin."
Let the data reset your price book
Once costing is honest, you can defend increases and stop carrying work that never paid you back.
Reporting from Contracting Business lines up with what I see in the field. The mechanical contractors who treat pricing as a living document outperform the ones who update once a year and hope for the best. Give yourself ninety days of clean job packets and patterns emerge. Water heaters might carry the shop while duct cleaning barely clears burden. That is not a moral judgment. It is a portfolio decision.
Wesley stopped chasing third-party home warranty volume after the audit showed those tickets at roughly 6.2% net, below his cost of carrying receivables and callbacks. He aimed his best techs at replacements that fit his margin guardrails and ran fewer total calls with a better bottom line. That only works when the numbers are boring and specific.
Action Plan
Four-step margin audit for HVAC owners
A practical sequence you can run without a full ERP swap. The goal is a price book that matches payroll, suppliers, and the map your vans actually drive.
Add annual field payroll, taxes, benefits, and uniforms, then divide by last year's true billable hours, not payroll hours.
Subtract billable hours from paid hours to solve unapplied time, then bake that gap into the burdened rate you quote.
Pick ten recent installs and compare estimated materials to supplier invoices on the same dates. Variance is either estimating, field discipline, or both.
Update flat-rate or proposal software with the refreshed costs and hold residential service near a 45% gross floor unless you can explain the exception.
Margin safety starts before the knock
When intake is noisy, acquisition cost climbs and pricing discipline breaks in the estimate.
The shops I like to benchmark still care about close rate, but they care more about fit. If your board is full of bids that were never going to clear burden, your sales team burns cycles and your techs burn hours. Cleaner demand makes it easier to hold a number that reflects real cost instead of racing to the bottom.
When costing is tight, you can explain the ticket without apologizing for staying in business. If you are scaling crews and want the phone to match the margin plan, a focused conversation can help align lead flow with the work you actually want. You can reach the LeadZik team here when you are ready to compare notes on territory fit and verification.
