HVAC profit margin is where small shops borrow a number from a manufacturer seminar and then wonder why payroll feels tight. The seminar number is usually a gross margin on equipment, or a company net from a firm with a dispatcher and a warehouse. Your number has to survive a no-cool call, a maintenance agreement, and a change-out, counted separately.
This page uses those three, on the same formula as the job calculator. Cross-trade ranges stay on good profit margin for contractors. Service-call keystrokes stay on how to job cost an HVAC service call.
Rates in every table here. Labor is $45 an hour, the truck is $0.65 a mile, and overhead is $12 an hour. That $12 is a $1,920 monthly shop cost spread across 160 hours on the job. Lead cost is $0 unless the table says otherwise. These are the public calculator's starter numbers, so you can rerun every ticket. On the phone, overhead is the monthly shop cost split across hours you actually log that month, and the month stays a draft until it closes.
The three layers
Gross margin on a job is revenue minus labor, truck, parts, permits, and other direct costs such as a helper paid by the day. Overhead and leads are still in.
Job net takes overhead and the lead out too. That is the percentage on the result screen. Solid is 35% or better. Thin is under 20%. Between them is OK, filler you can live with if the dollars are real.
Company net is the year. HVAC shops that pay the owner a wage often describe something like 8% to 15%. Gross on the work is often described around 40% to 50%. If your job nets are solid and the year is not, the rate or the shop cost is missing pieces. If the year looks fine and the tune-ups are thin, the year is being carried by installs and will hurt you in a slow shoulder season.
Service
No-cool repair
| Line | Math | Amount |
|---|---|---|
| What they paid | $385.00 | |
| Onsite labor | 1.25 h × $45.00 | $56.25 |
| Travel labor | 0.5 h × $45.00 | $22.50 |
| Vehicle | 16 mi × $0.65 | $10.40 |
| Materials, your cost | $64.00 | |
| Overhead | 1.75 h × $12.00 | $21.00 |
| Lead | $0.00 | |
| Total job cost | $174.15 | |
| Net profit | $385.00 − $174.15 | $210.85 |
| Net margin | $210.85 ÷ $385.00 | 54.8% |
| Profit per hour | $210.85 ÷ 1.75 h | $120.49 / h |
Open this ticket in the calculator. Change one number and the margin moves with it.
Job net 54.8%. Gross 60.2%. Profit $210.85. The verdict is solid — 35%+ net. Do more of this work. This invoice is $117.08 over the 35% price. This is the margin a service department is for. Protect it by keeping drive time on the ticket. A flat rate that assumes the customer is next door will not survive your actual radius.
Maintenance
Agreement visit, dedicated drive
| Line | Math | Amount |
|---|---|---|
| What they paid | $129.00 | |
| Onsite labor | 0.75 h × $45.00 | $33.75 |
| Travel labor | 0.5 h × $45.00 | $22.50 |
| Vehicle | 12 mi × $0.65 | $7.80 |
| Materials, your cost | $8.00 | |
| Overhead | 1.25 h × $12.00 | $15.00 |
| Lead | $0.00 | |
| Total job cost | $87.05 | |
| Net profit | $129.00 − $87.05 | $41.95 |
| Net margin | $41.95 ÷ $129.00 | 32.5% |
| Profit per hour | $41.95 ÷ 1.25 h | $33.56 / h |
Open this ticket in the calculator. Change one number and the margin moves with it.
The verdict is OK, not a winner. Fine if this is filler between high-margin installs. To hit 35% net with this cost stack, the invoice needed to be $133.92 (you charged $129.00). Job net 32.5% is inside the OK band, not the solid one. Profit is $41.95 for 1.25 hours, $33.56 an hour.
Agreement visit, next door
| Line | Math | Amount |
|---|---|---|
| What they paid | $129.00 | |
| Onsite labor | 0.75 h × $45.00 | $33.75 |
| Travel labor | 0.25 h × $45.00 | $11.25 |
| Vehicle | 6 mi × $0.65 | $3.90 |
| Materials, your cost | $8.00 | |
| Overhead | 1 h × $12.00 | $12.00 |
| Lead | $0.00 | |
| Total job cost | $68.90 | |
| Net profit | $129.00 − $68.90 | $60.10 |
| Net margin | $60.10 ÷ $129.00 | 46.6% |
| Profit per hour | $60.10 ÷ 1 h | $60.10 / h |
Open this ticket in the calculator. Change one number and the margin moves with it.
The verdict is solid — 35%+ net. Do more of this work. This invoice is $23.00 over the 35% price. Same $129. Job net 46.6%. The plan is not one margin. It is a price that works when the route is tight and gets ordinary when every visit is a trip. Selling more agreements without clustering them scales the first table.
The install
Eight hours on site, one hour and 28 miles of driving, equipment at your cost $4,100.00, permit $125.00, helper $220.00 in other direct costs. One labor rate, so the helper is cash, not a second clock. Profit per hour describes the nine hours on the lead and the drive.
Change-out
| Line | Math | Amount |
|---|---|---|
| What they paid | $8,200.00 | |
| Onsite labor | 8 h × $45.00 | $360.00 |
| Travel labor | 1 h × $45.00 | $45.00 |
| Vehicle | 28 mi × $0.65 | $18.20 |
| Materials, your cost | $4,100.00 | |
| Permits and fees | $125.00 | |
| Other direct | $220.00 | |
| Overhead | 9 h × $12.00 | $108.00 |
| Lead | $0.00 | |
| Total job cost | $4,976.20 | |
| Net profit | $8,200.00 − $4,976.20 | $3,223.80 |
| Net margin | $3,223.80 ÷ $8,200.00 | 39.3% |
| Profit per hour | $3,223.80 ÷ 9 h | $358.20 / h |
Open this ticket in the calculator. Change one number and the margin moves with it.
The verdict is solid — 35%+ net. Do more of this work. This invoice is $544.31 over the 35% price. Profit $3,223.80 at 39.3% job net. Gross is 40.6%. The dollars dwarf the repair. The percentage does not. A shop that manages to "50% on installs" without the condenser at true cost is managing a wish. Put the supplier invoice in materials the day it arrives, not a budget number from the proposal.
A service week, before the install saves the story
Two repairs, two far tune-ups, two close tune-ups. Revenue $1,286.00. Profit $625.80. Blended job net 48.7%. No install in that mix. If that week is unacceptable, the department is being subsidized by change-outs, and a mild winter will expose it. If it is acceptable, you can sell service on purpose.
Add one install like the table above and the week's dollars change personality. That is fine. Label it Install so it does not rewrite your opinion of Tune-up. Most profitable HVAC services is the argument for which label to chase. The percentages here are how you check the argument against your rates.
Aim at these, in this order
- Solid job net on repairs that are mostly labor and a small part.
- Tune-ups that are solid when clustered and at least out of the thin band when they are not. If the far ones are thin, change the radius or the price, not the definition.
- Installs in the OK band or better after true equipment cost, permit, and helper. A thin install is a equipment-markup problem or a labor problem, and the table shows which.
- A company year that still pays you. When job nets and the year disagree, fix the labor rate and the monthly shop cost before you blame the technicians.
Cost five tickets from the last pay period before you publish a margin target in a meeting. The target is a description of tickets you have already seen, at rates you would pay someone else to work for.
Frequently asked questions
What is a good HVAC profit margin for a small shop?
On a fully costed job, 35% net is a solid ticket, 20% to 35% is acceptable, and under 20% is thin. Gross margin on HVAC work is often described around 40% to 50%, and company net around 8% to 15% when the owner is paid. Price from the job bands. Use the company range to see whether the year matches the tickets.
Are installs or service calls more profitable?
Service calls often keep a higher percentage. Installs often keep more dollars and a lower percentage, because the equipment is most of the cost. A maintenance visit can land in either place depending on the drive. You want all three, labeled, not one HVAC margin.
How should a helper affect install margin?
Put the helper's pay in other direct costs if the log has one labor rate. Profit per hour then refers to the hours you entered for the lead and the drive. Do not read it as if two people were free.
Why does my accountant's net look lower than these job margins?
Job net has only the costs you assigned: labor at the rate you typed, truck, parts, permits, overhead you configured, and leads. Tax, interest, and an owner draw that was never in the hourly rate still sit in the profit and loss.
Test a repair at your overhead
The no-cool ticket is loaded. Raise overhead if your shop costs more than $12 an hour.