Your Overhead Allocation Is Wrong — And It Costs You Every Job
Your Overhead Allocation Is Wrong — And It Costs You Every Job
In 2019, I pulled the P&L on a 14-truck residential HVAC shop my firm was considering acquiring. The owner knew his truck count, his service close rates, his equipment costs. He believed he was running at roughly 18% net margin and had been building toward that number for twelve years.
His service department was generating margins that would make most shops envious. His install department had been losing money — measurably, consistently — for three years. A flat overhead percentage applied to both masked the install losses inside the service revenue, and the blended number read fine. Nobody had disaggregated the two. Not his bookkeeper, not his CPA, not him.
That's the trap this piece is about.
Why the Flat-Percentage Method Breaks Down
You add up annual overhead, divide by projected revenue, get a number like 28%, and apply it to every job. The arithmetic is clean. The assumption underneath it is not.
The method assumes every dollar of revenue consumes overhead in equal proportion. A $400 diagnostic call and a $14,000 zoned system replacement both absorb 28%. Except they don't. The install uses eight to fourteen hours of truck time, multiple vehicles, a field supervisor, a load calc, a permit pull, and a commissioning visit. The diagnostic call uses one tech and a Sprinter for ninety minutes.
When you apply the same percentage to both, you systematically underprice the jobs that consume the most overhead. Your installs, your replacements — the highest revenue tickets — run at a quiet loss. The service calls carry them. The blended margin reads fine.
This is where confusing markup with margin does the most damage. A contractor who prices a $14,000 install at 30% markup believes he has made profit. He has made revenue. Whether he has made profit depends on what overhead actually cost him for that job, and the flat percentage is telling him the average, not the answer.
The single most underpriced cost in residential HVAC is truck operating cost per billable hour. Most shops compound the error by using a national average rather than calculating their own. A flat percentage treats truck hours on a 1.5-hour service call identically to truck hours on a 14-hour install — and the per-hour cost isn't static. It varies by vehicle age, insurance territory, and fuel consumption under load. Those differences matter at the job-type level even when they disappear in the aggregate.
What Overhead Allocation Actually Means
A brief definition, because this term means different things depending on whether your background is in psychrometrics or accounting.
Overhead allocation is the process of assigning indirect costs to individual jobs or job types so you can know what each one actually costs to produce. Direct costs attach to specific jobs: the equipment, the refrigerant, the labor hours on that call. Overhead is everything else — the office, the marketing spend, the dispatcher's salary, the commercial auto policy.
Consider two jobs. A straightforward single-stage replacement: standard 3-ton split system, existing line set is serviceable, attic air handler swap. Two techs, six hours, predictable materials. Then a zoned install with a Manual J, custom duct fabrication in an older house with a finished basement, two zones, a communicating thermostat, commissioning visit the following week. Two techs and a field supervisor, fourteen hours across two days, permit pull, return trip.
The second job doesn't just cost more in labor and materials. Your dispatcher touched it four times instead of once. Your field supervisor drove out twice. Your admin pulled a permit and scheduled an inspection. Apply the same 28% overhead to both and you have priced the zoned install as if it consumed overhead like the single-stage swap. It did not.
The Mix Problem: How a Healthy Blended Margin Conceals a Broken Job Portfolio
When I build a properly loaded management P&L for a shop — charging the owner's labor at market rate, allocating overhead by actual job-type consumption, accounting for warranty callbacks — the net margin number often looks nothing like what the owner believed. Some of that gap is owner compensation misclassified as profit. Some is warranty cost that never gets job-costed. A meaningful portion lives in overhead misallocation at the job-type level. It doesn't show up as a pricing error the owner can point to. It shows up as a blended margin that looks acceptable while specific job categories quietly drain the account.
When your service calls are subsidizing your installs, you don't have a profitable business. You have a service department and an install department that are sharing one P&L — and one of them is bleeding.
The 14-truck owner I audited in 2019 had been growing his install volume over those three years, believing scale was the answer. Scale was accelerating the loss. Every additional install meant more overhead misallocated to the category already running underwater. He was adding volume in exactly the wrong place, and the blended number never flagged it.
DSO compounds the problem for shops that also carry commercial maintenance accounts. If you are misallocating overhead and simultaneously financing slow-paying customers, the cash crunch that follows reads like a growth problem. It is a pricing problem that cash flow is reporting.
Activity-Based Costing Is Not the Answer for a 10-Truck Shop
If you have read any accounting-focused advice on this, you have probably encountered activity-based costing. ABC is the academically correct answer to overhead allocation. For most shops under 15 trucks, it is the wrong prescription.
ABC requires you to identify every activity that consumes overhead, assign costs to activity pools, and track driver data for each job — permits pulled, dispatcher touches, return trips, field supervisor hours. The concept is correct. The execution requires time-tracking discipline and reporting infrastructure that a 10-truck shop with one office admin and a working owner cannot maintain consistently. What actually happens is that you build the system, run it for two months, fall behind on the tracking, and return to the flat percentage.
The practical alternative requires one afternoon of setup, not a new platform.
Segment your overhead by job type: service calls, maintenance agreement visits, residential replacements, light commercial if you do it. For each segment, calculate hours-based overhead rates rather than revenue-based ones. Assign your annual overhead dollars across those categories based on how each one actually consumes them — truck hours, admin touches, dispatcher time, field supervision. It will not be precise. It will be significantly more accurate than the flat percentage, and you can maintain it without a consultant.
In the acquisitions I worked on at Atlantic Comfort Partners, we built job-type margin bridges as part of diligence. We could pull a shop's install tickets, cost them against a properly segmented overhead structure, and watch the margin move. The independent owner typically couldn't do that, not because the math was hard, but because nothing in the financial reporting was built to show it.
Three Numbers to Pull Before You Price Another Install
This does not require new software.
Pull your total annual overhead. Not equipment cost, not direct labor, not materials. Overhead is everything else: rent, utilities, commercial auto insurance, general liability, workers' comp, admin and dispatcher salaries, software subscriptions, marketing, vehicle payments for non-field trucks, owner's salary at market rate. If you are an S-corp taking draws, charge yourself what you would pay a journeyman with your skill set. That number belongs in your overhead, not your profit.
Separate your jobs by type and count the hours each consumed last year. You likely have this in your dispatch software without knowing it. Pull service calls, maintenance visits, and installs as separate buckets. Assign total truck hours to each. The fraction of annual truck hours that went to installs tells you how to split your truck-related overhead between job types. Installs that ran 60% of your truck hours should absorb 60% of your truck-related overhead — not whatever percentage of revenue they happened to represent.
Reprice one install category with the corrected rate. Don't rebuild the entire price book in week one. Take your most common residential replacement and run it through the corrected overhead rate. Compare that to what you have been charging. If the corrected number is higher, you have your answer about whether the flat percentage has been underpricing that work. In the shops where I have done this exercise, the gap on installs is usually significant enough to be uncomfortable.
FAQ
Is overhead allocation the same thing as markup?
No, and confusing them is where the damage starts. Markup is what you add to your cost to arrive at a selling price. Overhead allocation determines what portion of indirect costs should be in that cost figure in the first place. If you have not allocated overhead correctly, your markup is applied to an incomplete cost basis. You can hit your markup target on every job and still run at a loss.
What counts as overhead versus direct job cost?
Direct costs attach to a specific job: equipment, refrigerant, line set, labor hours on-site. Overhead is everything that keeps the business running regardless of whether any job runs that day — office rent, admin salary, commercial auto insurance, software subscriptions, truck payments on vehicles not billing hours. Fleet fuel blurs the line, which is why I recommend tracking vehicle operating cost per billable hour rather than burying it in a flat overhead pool.
My CPA does my books. Why isn't this showing up?
Because your CPA is producing a tax return, not a management P&L. A tax return minimizes taxable income within legal limits. A management P&L tells you whether the business is profitable at the job-type level, with owner labor at market and overhead properly assigned. Your CPA is not doing anything wrong. You are using a tax document to make operating decisions. A thermostat can tell you the room temperature; it cannot tell you whether the TXV is underfeeding. Wrong instrument for the question.
How often should I update my overhead rates?
At minimum, annually, before you set rates for the new season. In practice, revisit any time a significant cost category changes — if your commercial auto policy renews at a materially different premium, you add a truck, or you hire a dispatcher you were not paying for before. Commercial auto premiums in HVAC have moved 14-22% annually in many states since 2021 (NICB, 2024). A rate you set in 2021 is not describing a 2024 cost structure.
I only do about 30% installs. Does this matter at that volume?
It matters more at lower install volume. If installs are 30% of your job count and you are misallocating overhead to them, the loss on each install has fewer jobs across which to spread. Your service calls are doing more work to cover the gap, which means you are more exposed when service volume softens, a competitor cuts diagnostic fees, or your repair close rate drops. Higher install volume does not make the misallocation safer — it makes each bad install less visible.
What if my installs look profitable when I run this exercise?
Then you have been pricing correctly, or your current percentage happened to approximate the right rate for your job mix. Either outcome is worth knowing. What I find is that shops doing this exercise fall into a couple of groups: those who discover installs are underpriced, and those who discover service calls are underpriced. Occasionally the allocation is roughly correct but the shop has been undercharging on maintenance agreements. Run the numbers and find out where you actually are.
Enjoyed this article?
Get articles like this in your inbox every Monday. Free, no spam.
