All posts

How to Price an HVAC Job: Parts, Labor, and Margin

10 min read

The short answer: Price an HVAC job by costing it from the bottom up: the equipment and parts at what they actually cost you, the labor at a loaded rate times the hours the crew really works, plus a share of overhead, then a margin on top. The formula is Price = (parts + loaded labor + overhead) ÷ (1 − target margin). The number most shops get wrong is labor hours, because the callback trip and the extra tech never make it into the estimate. CRMb pulls those hours from your crew's punch-ins and prices the parts at real average cost, so the quote you send is built on measured numbers, not a hunch.

HVAC pricing is harder than it looks because a single job blends three cost types that behave differently. Equipment is a big, visible number. Parts are a long list of small ones. Labor hides in memory. Get any one of them wrong and a job that felt profitable settles at break-even. This guide walks the full build-up, install and service, and shows where the margin actually leaks.


Start with the four things every HVAC job costs

Whether you are quoting a full system changeout or a Saturday no-cool call, the price rests on the same four layers:

  • Equipment, the condenser, air handler, furnace, or mini-split head, at your real landed cost including freight.
  • Parts and materials, line sets, whips, disconnects, thermostats, refrigerant, fittings, drain line, sheet metal.
  • Labor, the loaded hourly cost of everyone on the job for the hours they actually work.
  • Overhead, the slice of trucks, tools, insurance, dispatch, and office that this job has to carry.

Miss a layer and you are not discounting, you are working for free on that part of the job. The two layers that leak most are parts, because the small items go untracked, and labor, because the hours are guessed.

Step 1: cost the equipment and parts at what they really cost you

Equipment is the easy part to look up and the easy part to misprice. The trap is quoting from an old invoice. Compressor and refrigerant prices move, and a system you costed at last spring's number can be several hundred dollars light by summer.

Parts are the quieter problem. A changeout might pull thirty small items from the truck, and each one costed from "about ten bucks" instead of its real price adds up to a line item nobody sees. The fix is to value materials at average cost, the running average of what you actually paid across recent purchases, so price swings smooth out and every part pulled to a job carries its true number.

CRMb tracks inventory at average cost across your warehouse and truck stock. When a tech pulls a thermostat or a length of line set to a job, its real cost lands on that job automatically. No end-of-week reconstruction of what went where.

Step 2: build the loaded labor rate, then use real hours

Labor is where HVAC margins live or die, and it fails in two ways at once: the rate is too low and the hours are too few.

The rate is too low when you cost at the bare wage. Every installer costs more than their paycheck, payroll taxes, workers' comp (steep in a trade with ladders, refrigerant, and rooftop work), benefits, and paid time off add roughly 25% to 35% on top. A $28 wage is really a $36 to $38 loaded rate. Cost at $28 and you understate labor on every job. The full build-up is in how to calculate labor cost per job.

The hours are too few when you cost from the estimate instead of the clock. Real HVAC hours include the parts you never bid: the second trip because the line set was short, the extra apprentice pulled in to finish before dark, the hour of diagnostic time before the actual repair began, the travel between the supply house and the site. Those are exactly the hours that flip a healthy bid to a thin one, and they are invisible unless the crew captures them.

The reliable way to capture them is to have the crew punch in against the specific job. With Punch, each punch-in is tagged to the job, and the hours flow into CRMb as labor cost with the loaded rate already applied. You cost the job from what happened, not what you hoped.

Step 3: add overhead so the job carries its share

Overhead is every cost that keeps the doors open but does not belong to one job: truck payments and fuel, tools, general liability, software, the phone that gets answered, the pay of anyone not turning a wrench on this job. It is real money, and if no job carries it, it comes straight out of profit.

The common method is an overhead rate, your annual overhead divided by the billable labor hours you expect to sell in a year, applied per labor hour. If overhead runs $180,000 a year and you sell 6,000 billable hours, that is $30 of overhead per labor hour on top of the loaded wage. The mechanics are in how to calculate an overhead rate.

Step 4: set the price from the cost, not the other way around

With parts, labor, and overhead totaled, you have the job's true cost. Price is that cost divided by one minus your target margin:

Price = total cost ÷ (1 − target margin)

For a 30% margin, divide by 0.70. Note the difference from markup, dividing by 0.70 is not the same as adding 30%, and confusing the two quietly costs you points of margin on every job. The distinction is spelled out in markup vs margin.

A worked example: a residential system changeout

A 3-ton changeout, priced from the ground up. Loaded installer rate $37.00, overhead $30.00 per labor hour, target margin 35%.

Cost layerDetailAmount
EquipmentCondenser + air handler, landed$3,400
Parts and materialsLine set, whip, disconnect, thermostat, refrigerant, misc$650
Labor2 techs × 8 hrs = 16 hrs × $37.00$592
Overhead16 hrs × $30.00$480
Total cost$5,122
Price at 35% margin$5,122 ÷ 0.65$7,880

Now the leak. Suppose the crew actually worked 21 hours, not 16, an extra trip for a longer line set and an hour of duct adaptation nobody bid. At $37 loaded plus $30 overhead, those 5 hours cost $335 the estimate never saw. Cost the job at the 16 bid hours and you would book it at $5,122 and believe the margin held; cost it at the real 21 hours and the true cost is $5,457, quietly turning a 35% job into roughly 31%. On one changeout it is a rounding error. Across a summer of them it is real money walking out the door.

Flat rate or time and materials?

Most established HVAC shops quote installs and common repairs at flat rate, a fixed price the customer sees up front, rather than billing hours as they go. Flat rate is easier for the customer to say yes to and it rewards a crew that works efficiently, since faster work does not lower the price. It only works, though, if the flat price was built from real cost history. Price a flat rate from a guess and you have locked in the guess.

That is the case for costing every job from real hours even when you bill flat: the punched hours are not what you invoice, they are what tells you whether next season's flat price is high enough. See time and materials vs fixed price for how the two models trade off.

Send a quote the customer can approve on the spot

A price is only useful once the customer accepts it. CRMb turns the costed job into a professional quote with a public share link: the homeowner opens it on their phone, sees the scope and the price, and signs to approve. When the work is done, the quote converts to an invoice, pulling the same materials and labor through, so nothing is re-keyed and nothing is forgotten. As the crew punches in, the reports view shows the job's margin trending live and flags it if it drifts toward the red while the job is still open.

Frequently Asked Questions

How do you price an HVAC job?

Cost it from the bottom up: equipment and parts at their real cost, labor at a loaded rate times the hours the crew actually works, plus a share of overhead. Total those, then divide by one minus your target margin to get the price. The formula is Price = (parts + loaded labor + overhead) ÷ (1 − target margin). Building the price from measured cost, rather than copying a competitor or marking up equipment alone, is what keeps the margin real.

What is a good profit margin on an HVAC job?

Many HVAC shops target a gross margin in the 30% to 50% range on installs, with service and repair work often carrying higher margins than large equipment changeouts. The right number depends on your overhead and market, but the discipline matters more than the target: a 40% margin calculated from bare wages and estimated hours is fiction. Cost every job from loaded labor and real hours first, then judge the margin.

Should HVAC work be flat rate or hourly?

Most established shops use flat rate for installs and common repairs because it is easier for customers to approve and it rewards an efficient crew. Time and materials fits open-ended diagnostic or unusual jobs where the scope genuinely is not known up front. Either way, cost the job from real hours behind the scenes, so a flat price is built on history rather than a guess.

How do I account for parts and refrigerant in an HVAC quote?

Value materials at average cost, the running average of what you actually paid, so price swings on refrigerant and equipment smooth out instead of blindsiding you. Track parts as they leave the truck or warehouse against the specific job, rather than reconstructing them at week's end. CRMb costs each part pulled to a job at its real average cost automatically, so the materials line on the quote matches what the job actually consumed.

Why do HVAC jobs lose money even when the quote looked profitable?

Almost always because the labor hours ran over the bid and were never re-costed, or the labor was costed at the bare wage instead of the loaded rate. The extra trip, the second tech, and the diagnostic hour are invisible unless the crew captures them. Cost jobs from punched hours at a loaded rate and the overruns show up while you can still learn from them, instead of at year end.


Getting started with CRMb

Price your next HVAC job from measured numbers. Total the equipment and parts at real cost, add loaded labor for the hours the crew actually works, layer in overhead, then set the margin, and send the customer a quote they can approve from their phone.

CRMb brings the CRM, scheduling, average-cost inventory, quotes and invoices, and job costing on real punched hours into one app, on Mac, iPad, and the web. Start your 14-day free trial and quote your next job on numbers you can trust.

More from the blog