What a “healthy” gross margin looks like in HVAC.
The HVAC trade does not run on a single gross-margin number — it runs on a band, and the band shifts with shop size and the cost of the local market. As a rule of thumb:
- Small shop ($500K–$1M). Typically lands between 25% and 35%.
- Mid-market ($1M–$5M). Usually pulls 28%–40%, with the upper end reserved for shops that combine disciplined service-mix and tight pricing.
- Large shop ($5M–$10M). Frequently runs 32%–45%, the lift coming from procurement scale and a heavier commercial mix.
Those ranges come straight from the benchmarks Bleedwise uses to interpret every diagnostic, and they adjust by region: high-cost markets tend to compress them, lower-cost markets tend to expand them. The right way to read them is “good for you” — the band your own revenue, your own region, and your own service-mix put you inside — rather than a single number that has to be the same for every shop in every market.
The three things that drag HVAC gross margin down.
Three problems recur in shop after shop, and most contractors we’ve worked with are leaking margin to at least two of them. They are not subtle — the numbers are visible in the P&L — but they hide in plain sight because the reporting most accounting software generates rolls them up into one line.
1. Parts-heavy installs at flat pricing.
A new system is mostly equipment cost. When the price is set by what the last competitor quoted rather than by a markup applied to the current parts cost, every install in that shape eats margin in a way the technician never sees on the work order. The fix is straightforward — refresh unit pricing regularly, and stop quoting against competitors whose costs you do not know.
2. Warranty and callback cost buried in labor.
A failed startup, an extra trip for a refrigerant top-off, or a return visit to diagnose an airflow complaint shows up on the schedule as productive hours. It is the opposite — those hours were eaten recovering margin that was already booked. Track every warranty-related call separately, and you see the leak rather than absorbing it into next month’s labor line.
3. Under-utilized crews on small-ticket residential visits.
Sending two techs and a truck to a $175 service call that takes ninety minutes produces hours of paper revenue. Once direct labor and travel are subtracted, most of those calls either break even or quietly lose money. Either ticket those visits at a price that supports the crew, or cluster small-ticket work into routes that protect margin on the truck-hour.
How to find your own number.
The math itself runs in five minutes once you have the right export. Pull the last full month from your accounting system or field-service software — QuickBooks, ServiceTitan, Housecall Pro, or any other export that gives you monthly revenue and a job-level breakdown of materials and direct labor. Subtract materials and direct labor from revenue. Divide by revenue. That percentage is your gross margin for the month, and the trend across the last six to twelve months is the figure you actually want to be reading.
Bleedwise reads the same CSV your accountant opens and runs that calculation across every job, then benchmarks the result against the size and region of your shop. The output is a plain-English diagnostic that ranks what is leaking and what to do about it first. There is no consultant engagement and no sales call — you upload the file, and minutes later you see your number next to the band it should be in.