Profit & Grit CFOs

Table of Contents

Profit & Grit Podcast

The Home Service Podcast for Trades Entrepreneurs​

Share this article

HVAC Profit Margins: What Good Actually Looks Like

Tyler Martin, CPA and fractional CFO

Tyler Martin

Tyler Martin, CPA is a fractional CFO for home service companies and the founder of Profit & Grit CFOs.

He built and sold a CPA firm, then built an engineering services company to $25 million in annual revenue before selling it. He hosts Profit & Grit podcast.

More about Tyler →

20 min read

I sat in a board meeting this April with a client who had just recorded the best revenue month in company history. Blew past the prior record. Blew past budget. The room felt good.

Then we got to the bottom of the page. Net profit was 6 percent.

The general manager said it out loud before I had to: even with that giant number, the net was six percent. And when we pulled it apart by department, the answer was not mysterious. One department was carrying a margin problem big enough to swallow a record month, and nobody had been looking at it separately.

That is the spot most HVAC owners live in. A full schedule, a decent top line, and a number on the page that does not tell you whether the business is healthy.

I work as a fractional CFO for home service businesses, and I look at HVAC margins every week. My view is simple. If you are running a $3M to $15M HVAC company, a single blended margin number is not enough. You need to know what gross profit margin is doing, what net operating profit margin is doing, and which department is carrying the others.

What good looks like in your HVAC P&L

A lot of owners come to me with a P&L and one question. “Is 38% gross good?” My answer is usually the same. Maybe, but not if the labor is sitting in the wrong place, and not if install is propping up service or service is paying for bad dispatch.

For a company your size, here is the numbers the goal:

50, 30, 20. Fifty percent gross profit. Thirty percent to cover overhead. Twenty percent left over. That is the rule of thumb I give owners, and it is a target rather than a promise.


Many shops do not land there, and that is fine. What matters is knowing which of the three is off. A company at 40% gross with 30% overhead is a different problem from a company at 50% gross with 40% overhead, and the fixes have nothing in common.

For net operating profit, I push toward around 15 percent for a shop doing primarily residential work. That is what I told the client in that meeting. Keep an eye on efficiency and cost control as you grow, and 15 percent is reachable. They were at six. We are now at 11 percent.

Practical rule: if you cannot tell me the margin on service, maintenance and install separately, you do not really know your HVAC margins.

Gross margin and net operating profit margin explained

Gross profit margin is what is left after you subtract the direct cost of delivering the job from revenue. In HVAC that means labor, materials, subcontractors and other direct job costs tied to that work. If the work itself is not profitable, everything after that is patching a bad number.

Net operating profit margin is what is left after you subtract overhead: office payroll, trucks, software, insurance, rent and the rest of the operating machine.

A simple way to see it

If you brought in $10M in revenue, spent $6.5M on direct cost and had $2.5M in operating overhead, you would finish with about 35% gross margin and about 10% net operating profit margin.
That net margin only means something if a market-rate owner salary is in overhead, which I explain in HVAC business owner salary.

Line itemAmount
Revenue$10.0M
Direct cost of jobs$6.5M
Gross profit$3.5M
Operating overhead$2.5M
Operating profit$1.0M
Gross profit margin35%
Net operating profit margin10%

Here is why gross margin is the lever I want owners tied to. Every point of gross profit changes how much revenue you need just to keep the doors open. I ran this live with an owner earlier this year: at 50% gross profit, his breakeven was about $390,000 in sales. Drop him to 40% and that breakeven number climbs, because now every dollar of sales contributes less toward the same fixed overhead.

That is not an accounting curiosity. It means a shop that lets gross margin slide by ten points has to sell meaningfully more work to stand still. The more gross profit you keep, the less revenue you need to cover overhead and put something in your pocket.

Look at both margins on trend. One month can fool you. A quarter usually tells the truth.

Why your reported gross margin is probably wrong

Let me show you how wrong it can get.

One client’s books showed a gross margin of negative 7 percent in February and 51 percent in April. Same company, same work, same crews, two months apart. The true run rate was in the low thirties. The 51 percent included a $47,000 payroll clearing entry that had no business sitting in that period’s cost of goods.

Another client ran four consecutive months at 33, 26, 10 and 33 percent. June at 10 percent was not a bad month. June was a bad entry.

Neither of those numbers was a margin. They were bookkeeping artifacts that happened to be printed under a heading that said margin.

The most common cause is placement. Field technician wages, payroll taxes, workers comp and truck costs sit in overhead instead of cost of goods sold. That makes the gross margin line look cleaner than it is, because the labor that produces revenue is being treated like rent.

What moves where

This comes up on nearly every engagement, so here is the placement guide I actually use.

CostGoes to
Field technician wagesCOGS
Employer payroll tax on field wagesCOGS, follows the wages
Technician spiffs and incentivesCOGS
Sales commissionsCOGS
Workers compensation on field laborCOGS
Benefits, regardless of who receives themOverhead
Office payroll, rent, software, insuranceOverhead

The two that trip people up are commissions and payroll tax. Commissions are a direct cost of selling the job, so they belong with the job. Employer payroll tax follows whatever wages it was charged on, which means field payroll tax lands in COGS and office payroll tax lands in overhead. Benefits I treat as overhead no matter whose they are, because they do not scale with any individual job.

That is the short version of placement. How to set up HVAC accounting covers the whole chart of accounts, including how to keep it from turning into a list of vendors.

Technician spiffs belong in cost of goods sold and I do not think there is much to debate there. If you pay a technician extra for selling a system, that payment is part of what the system cost you to deliver.

Then there is the version of the problem where the departments do not exist at all. One company came to me averaging 19.3% gross profit against a 45 to 50 percent target. The fix was not pricing. It was turning on classes in QuickBooks and rebuilding the P&L so revenue and gross profit could be read by department. Another client had produced roughly $700,000 more revenue and only about $50,000 more net income, and nobody in the building could say which department had earned it.

If your field system and your books have never been reconciled, that is upstream of all of this. Getting ServiceTitan and QuickBooks to agree is the prerequisite, not an optional cleanup.

Once labor burden is booked correctly, a lot of good-looking gross margins stop looking good. That is the point. The reported gross margin line should be a decision tool. If labor sits in overhead, it is not a decision tool, it is accounting fiction.

Service versus install versus maintenance margins

A $3M to $15M HVAC business should not run as one blended bucket. Here is what that confusion sounds like in a meeting.

A sales manager was frustrated that his department report did not match the jobs he was selling. His words, near enough: if a salesperson sells a job at ten or twenty thousand and the job-level margin is correct at fifty or sixty percent, why does the department show nowhere near that?

The answer was that his department was also carrying hourly technicians flipping service calls. The job margins were right. The department margin was diluted by labor that never touched those jobs.

Both numbers were true. They were answering different questions, and until the departments were split, nobody could tell which one to act on.

It depends entirely on where you zoom in. Look at HVAC as a whole and the department gets penalized by the lower margin work inside it. Split it into install, repair and maintenance and the picture resolves. Every time I do this split, the size of the gap surprises the owner.

Service is the margin engine

Service is usually the highest-margin work in the building, because you are selling diagnostic labor, response time and parts markup on smaller tickets. One owner described his own book to me: about 40% gross margin in his install price book, 55 to 60 percent on residential service repair tickets, which should blend to around 45 percent.

That blend is the number to hold yourself to. If your blended figure is well under it, the mix is either wrong or the reporting is.

Maintenance smooths the calendar

Maintenance agreements behave like recurring work rather than one-off chaos, and carried correctly on the books they change what the business is worth.

The mechanics matter more than owners expect. Agreement revenue should sit in deferred revenue and release as each visit is completed, not when the customer pays. A plan sold with a heating visit, a cooling visit and an annual water heater flush is three separate recognition events, and if a visit never gets attached to a completed job, the deferral schedule quietly goes wrong. That is one of the ways a gross margin line becomes fiction without anyone touching a price. I go deeper on this in how to account for HVAC maintenance agreements.

If recurring revenue is how you steer, put membership on the P&L as its own line so the number is impossible to miss.

Install is where margin gets squeezed

Install is the hardest line to keep clean. Equipment cost is heavy, change orders get sloppy, warranty exposure shows up later and project overruns eat the ticket.

Equipment pricing is the live issue. After a nine percent equipment increase this year, one client’s team worked out that installs priced in the $15,000 to $16,000 range needed to move toward $22,000 to $24,000 to protect the margin they had built the price book around. That is not greed. That is what holding a margin looks like when your input cost moves and you decline to absorb it. Working out the number that actually protects the margin is its own exercise, and I walked through it in how to price HVAC jobs.

The targets I set with owners: residential install at 40 to 45 percent, with 45 being where I want to be. Commercial at 35 to 40 in a good world. I have seen commercial drop to 30, and it gets hard to make a living down there. One client was netting 25 to 30 percent on commercial projects after all the bills, which is a tough way to run.

What this looks like on one set of books

Here is a multi-trade shop I work with, year to date, same books, same month.

DepartmentYTD gross margin
Plumbing57%
Installs43%
Electrical41%
HVAC, blended30%

Service-heavy plumbing at 57. Install in the low forties. HVAC blended down at 30 because it was carrying the weaker mix. That is the pattern, and it is visible only because the departments exist in the reporting.

The electrical number is worth a note. It sat at 41 year to date but one month came in at 35, dragged down by recalls. Callbacks are a margin line item even when nobody records them as one.

Mix moves the number more than pricing does

An operations lead explained a strong month to me recently, and the reason had nothing to do with selling harder. They had been doing a lot of ductwork alongside systems, and ductwork carries a much lower material cost than equipment. The jobs he looked at were all coming in exceptionally well.

Mix, not heroics. Which cuts both ways: a favorable mix can flatter a month just as easily as it can save one. If you do not know why your margin moved, you do not yet know whether to celebrate.

Healthy margin ranges, and why your own trend matters more

Owners love benchmark hunting. I understand why. You want to know whether the number on your statement is normal.

Ellen Rohr put it better on the podcast than I have managed to:

“This isn’t gospel, kids. Your numbers will supersede mine. It’s a training wheel number.”

Ellen Rohr, on Profit & Grit

She went further, and this is the part worth pinning up. She is wary of comparing percentages at all, because you cannot know what the other company put in each bucket. Is labor measured the same way? Are payroll taxes in there? Benefits, or just gross wages? Without knowing that, a percentage comparison is two different calculations wearing the same name.

That is the same problem as the placement table earlier in this article. Your 45 percent and somebody else’s 45 percent may not be the same measurement.

Her own guardrail is a useful one: total gross wages at roughly 30 to 35 percent of total sales. And the five numbers she watches weekly are sales, gross margin percentage, gross profit dollars, net profit, and cash flow.

Use a benchmark range to decide whether you are broken. Use your own trend to decide whether you are getting better. If your gross margin moves from 36 to 42 percent over four quarters, that is a better story than a competitor sitting flat at 50 and slipping.

What about plumbing and electrical margins?

Owners ask me what the average profit per plumbing job should be, and it’s a fair question with an unsatisfying answer. Per-job averages hide more than they show. A $280 drain clear and a $9,000 repipe have nothing in common except the truck that showed up.

What you want instead is gross margin by department, measured the same way every month. If service plumbing, drain and sewer, and repipe work all sit in one bucket, the average tells you nothing you can act on. Split them and the picture sharpens fast.

When owners do want a per-job number, I’d rather they watch average ticket and gross margin percentage side by side than a single profit-per-job figure. A rising average ticket with a falling margin percentage is a pricing problem dressed up as a good month.

The same holds if you’re asking about electrical contractor profit margin. Service carries the department, project and new construction work drags it, and the mix moves your blended number more than your pricing does.

Everything else in this article applies whatever trade you run. Field labor and its burden belong in cost of goods sold. Overhead stays below the line. Departments get measured separately. What changes is where the healthy ranges sit, and those move enough by trade and by market that borrowing somebody else’s number is worse than measuring your own for three months.

The levers that actually move HVAC margins

Start with the true cost of labor

Most owners price off wages and a rough multiplier, which leaves labor underpriced on too many jobs. Published burden figures for the trades usually run 40 to 50 percent on top of the wage, covering payroll taxes, workers comp and benefits. Once you add the truck, fuel, insurance on it, the phone and the tools, 55 to 60 percent is closer to what I see.

If a technician hour is billed below its fully burdened cost, the job is losing on labor before parts and overhead show up.

Labor efficiency is the other half of that. Direct labor should land somewhere around 17 to 20 percent of revenue. I have had a client running 26 to 27 percent, and that gap was not a pricing problem. It was hours being paid for and not sold. Labor efficiency is my number one, because that is where the loss happens.

That question has its own answer. How to know if your technicians are actually profitable covers the four hour rule, fully burdened cost per tech, and why a truck below the line usually is not the technician.

Watch overhead before it eats the gain

I walked an owner through his P&L this spring and showed him he was averaging close to 39 percent operating overhead. He knew immediately that was high. I want to see 30 to 35.

Here is why those few points matter so much. If overhead runs near 40 percent but your jobs are priced off an assumption of 35, you are barely scraping by on work you believe is profitable. The pricing model and the operating reality have quietly separated, and the gap shows up as a thin net on a busy year.

Fleet cost is one of the quieter overhead lines. Renee Milum on reducing fleet costs in the trades gets specific about it.

Seasonality needs to be managed, not endured

Do not let busy months cover weak planning in the slow ones. Pre-sell maintenance in the fall, line up permits and equipment orders in spring, and stop letting change orders sit until the job is bleeding time.

On staffing through a slow stretch, the answer I gave a client this year: if this is a seasonal dip, you do not want to lose good people over it. Bake it into the numbers. Accept that for three months a year you carry the team, and require the other nine to perform at a level that pays for it. That is a budgeting decision made in advance, not a panic decision made in the slow month.

Dustin Marx runs a plumbing company that shares half its profits with the team, and his technicians forecast their own truck’s P&L every Friday. That habit does more for margin discipline than most incentive plans.

Mix is a margin product

Every extra service call or maintenance agreement shifts the mix in your favor when it replaces low-margin install work. That is why I treat service and maintenance as margin products rather than overhead. If you need a practical way to chase growth, start with growing without buying more leads.

Why weekly numbers beat tax time discoveries

I had a bookkeeper push back on me this year, and she had a point worth repeating. Why wait for a close? Every week you can have a timely, accurate financial discussion, and waiting for month-end is silly.

She is right about the direction and I will give you the honest counterweight. I have had something like a hundred firms over my career tell me they keep their books current and everything is clean throughout the month. I have seen fewer than five percent of them actually do it.

So here is the standard I hold clients to instead of the fantasy version. Categorize weekly. Close the books by the tenth. Review departments monthly against last year and budget. Josh Kelly runs live dashboards and daily huddles on top of a cadence like that, and his caution is the one worth keeping: do not overreact to one bad day.

The tenth matters. Once a company tells me the twentieth, what that usually means is they got busy, the close slipped, and now you are reviewing numbers so old that the month they describe is already gone.

Weekly numbers give you the score at halftime. If you are behind you still have time to push service revenue, tighten scheduling, chase the receivables or cut the waste before it becomes a bad month. A tax return tells you what already happened. It does not tell you what to change on Tuesday.

The same discipline applies to cash, which is why a 13-week cash flow forecast belongs in the same conversation rather than a separate one, along with how much cash to keep in the bank.

Three questions to test your margin numbers tonight

Take the latest P&L and a calculator. That is enough.

  • Are field technician wages, payroll taxes, workers comp and truck costs in COGS, or buried in overhead? If they are buried, your gross margin is inflated.
  • Can you pull separate margin numbers for residential service, maintenance agreements and install in under ten minutes? If not, your department reporting is too muddy to use.
  • Is the last twelve months of margin trend up, flat or down, and do you know which lever drove it? If you cannot answer that, you are looking at a score rather than a control panel.

If the answers are fuzzy, fix the reporting first. Do not build strategy on bad numbers.

That record month I opened with is the whole argument. A company can post its best revenue in history and keep six percent of it. The top line tells you how busy you were. The department margins tell you whether it was worth doing.

Questions owners ask about HVAC margins

What is a good profit margin for an HVAC business?

Aim for roughly 50 percent gross profit, 30 percent to cover overhead, and 20 percent left over. In practice most shops of this size land nearer 8 to 15 percent net once overhead is honest. The number matters less than knowing which of the three is off, because a company at 40 percent gross with 30 percent overhead has a completely different problem from one at 50 percent gross with 40 percent overhead.

What is a good net profit margin for an HVAC company?

Around 15 percent is what I push toward for a shop doing primarily residential work. Below 10 percent, the usual cause is overhead rather than pricing. I have watched a company post its best revenue month in history and keep 6 percent, because one department was carrying a margin problem nobody had looked at separately.

What is a good gross margin for an HVAC service department?

Residential service repair should run 55 to 60 percent once labor is loaded correctly. If yours reads higher, check whether technician wages, payroll taxes and workers comp are actually in cost of goods sold rather than sitting in overhead. That single misplacement is the most common reason a service margin looks better than it is.

What is a good gross margin on HVAC installation work?

Residential install at 40 to 45 percent, with 45 being the target. Commercial at 35 to 40 in a good world. I have seen commercial drop to 30, and it becomes hard to make a living down there. Install carries heavy equipment cost, change orders and warranty exposure, so it will never match service, and it should not be expected to.

What overhead recovery rate should a contractor use?

Use your own, and check it against what you actually spend. I want to see 30 to 35 percent. The trap is pricing jobs off an assumed 35 while operating at 40, which means work you believe is profitable is barely breaking even. I walked one owner through a P&L running close to 39 percent, and he knew immediately why a busy year had produced so little.

How do I price an HVAC service call so it covers overhead?

Start with fully burdened labor rather than the wage. Published burden figures run 40 to 50 percent on top of the wage for taxes, workers comp and benefits, and 55 to 60 percent once the truck, fuel, phone and tools are included. Then add your overhead recovery and your target margin. If a technician hour bills below its burdened cost, the job is losing money before parts.

My bookkeeper uses QuickBooks but I still cannot see job profit. Who fixes that?

Usually the chart of accounts, not the bookkeeper. If revenue and cost are not tracked by department, no report can tell you which work made money. One company came to me averaging 19.3 percent gross profit against a 45 to 50 percent target, and the fix was turning on classes in QuickBooks and rebuilding the P&L by department rather than changing a single price.

If you want help wiring this together, clean labor burden, department reporting and a cash view that matches the field, schedule a call.

HVAC Business Profit Margins

Real Talk.
Real Profits.

A weekly show built for blue-collar entrepreneurs in the trades who want to grow, profit, and build something that lasts.

You’ll only hear from us when new episodes drop.
No spam, ever!

GET STARTED

Want to see what your numbers are actually telling you?

 Two ways to start. Pick whichever fits.

No pressure either way. Let’s chat!

Latest Podcast Episodes:

More Great Articles: