Most HVAC Shops Bill Below Their Own Break-Even Rate
Ask an HVAC owner what they charge per hour. Most answer without hesitating. Seventy-five, maybe a hundred.
Ask what an hour costs them and the room goes quiet. That gap is where the money goes.
Here is the uncomfortable arithmetic. A technician paid $25 an hour costs closer to $78 once you finish adding things up. Plenty of shops bill $75 and believe they are making fifty dollars an hour.
They are not. They are losing money on every ticket and calling it a busy season. The full build-up sits in this HVAC Pricing Guide, but the short version is worth walking through now.
The wage is about two thirds of the real cost
Start with the pay rate and add what employment actually costs you. Nothing here is exotic. Every one of these lines appears in your own accounts.
Most owners know these costs exist. Very few carry them into the rate card. That is the whole problem in one sentence.
- Payroll taxes at roughly 7.65% of the wage.
- Workers’ compensation, commonly around 3%.
- Health insurance and benefits, often $8 an hour or more.
- Vehicle, tools, phone and uniform costs per head.
On a $25 wage, the first three alone push the figure to about $35.66. Your technician now costs you nearly 43% more than the payslip says. And you have not yet paid rent, insurance, software, or the person answering the phone. None of that is unusual. It is just rarely written down.
Billable hours are the line that does the damage
Now comes the number that hurts most, and it is the one almost nobody tracks. A technician working forty hours does not produce forty billable hours.
Think about a normal day. Driving between calls. Loading the van. Paperwork. The supply house run that takes twenty minutes longer than it should.
Billable efficiency rarely tops 70%, even in a well-run shop. Most run lower.
- Travel time between jobs is paid, not billed.
- Morning loading and end-of-day unloading vanish quietly.
- Paperwork and photos after each call add up fast.
- Training, safety meetings and vehicle maintenance take whole mornings.
Say each technician produces 140 billable hours a month. With two technicians that gives 280. Now divide your monthly overhead, say $12,000, across those 280 hours. Every billable hour has to carry $42.86 before you earn anything.
That divisor is the most sensitive figure in your whole business. Drop from 140 billable hours to 120 and the overhead recovery rate jumps to $50. Your break-even rate moves by seven dollars without anything else changing.
Adding it up gives a number most shops undercut
Put the two halves together. True labour cost of $35.66, plus overhead recovery of $42.86.
That is $78.52 an hour to break even. Not to profit. To finish the day no worse off than you started.
A shop quoting $75 an hour is below that line. They are not undercharging slightly. They are paying for the privilege of doing the work.
- $78.52 covers costs and produces nothing.
- At a 20% target margin the rate becomes $98.15.
- Every ticket below break-even needs another ticket to fund it.
- Volume makes the loss bigger, not smaller.
That last point is the one to sit with. If your rate is below break-even, growth is the enemy. Another van doubles the problem. Plenty of shops have grown revenue for three straight years while the bank balance got worse, and nobody could explain why.
Markup and margin are not the same number
There is a second leak, and it sits on the parts side. Markup and margin get used as if they mean the same thing. They do not.
A 50% markup produces a 33% margin. A 100% markup produces a 50% margin. If you set a 25% markup while thinking you have a 25% margin, you actually have 20%.
That error runs through every line item on every invoice you send.
- Small parts usually need 75 to 150% markup.
- Thermostats and controls sit around 40 to 60%.
- Motors and compressors run 25 to 40%.
- Full systems and condensing units take only 15 to 25%.
Warranty parts are the row most shops get wrong. The component arrives free, so it gets billed at nothing, and the visit loses money. The manufacturer covered the part. They did not cover your technician’s hour or the van that brought it. Bill the diagnostic and the labour at full rate.
Why nobody catches this
You might wonder how an entire trade misses something this basic. The answer is that the feedback is slow and indirect.
An underpriced job does not fail. It completes, the customer pays, and the technician goes home. Nothing looks wrong on the day.
The signal only appears in aggregate, months later, as a margin that will not move.
- Revenue grows but profit does not follow.
- Busy seasons leave you tired rather than richer.
- You cannot say which job types actually make money.
- Cash is tight despite a full schedule.
That last pattern is diagnostic. If your technicians are booked solid and revenue per technician is flat, you do not have a scheduling problem. You have a price problem, and no amount of operational tinkering will fix it.
What to do about it this quarter
None of this needs a consultant. It needs an afternoon with your own numbers and the willingness to act on what they say.
Work through it in order, because each step depends on the one before it.
- Calculate the loaded cost of one technician, benefits and taxes included.
- Pull three months of real billable hours from your job records.
- Divide monthly overhead by those actual billable hours.
- Add the two figures to find your true break-even rate.
- Divide by one minus your target margin to get your billing rate.
Then compare that number with what you are currently quoting. Most owners find a gap of fifteen to twenty dollars an hour. Some find more.
Raising a rate feels risky, and it is worth being honest that you may lose a few price-sensitive customers. Those tend to be the jobs losing you money anyway. The shops that make this change usually find their close rate barely moves, because customers were never comparing on hourly rate in the first place.
Price the work at what it costs you. Everything after that is a business decision rather than an accident.




Leave a Reply
Want to join the discussion?Feel free to contribute!