Skip to content
USUnited States

HVAC Contractor Markup: Price Labor, Equipment, Parts, and Overhead

Build an HVAC contractor markup policy that prices loaded labor, equipment, parts, subcontractors, overhead, and job risk without counting the same cost twice.

Yes Foreman · October 9, 2026 · Pricing and quoting

The replacement scope looks profitable until the crew hours, freight, fittings, startup time, and office costs hit the job. A sound HVAC contractor markup starts with complete costs, then prices each cost bucket by the work and risk attached to it.

Start with the HVAC scope, not the markup

You cannot price work that has not been described. Write the scope before entering labor hours or supplier costs.

For replacement work, record the system being removed and the system being supplied. Include the equipment, capacity, accessories, controls, connections, drainage, supports, protection, testing, startup, commissioning, and customer handover.

Use the site visit to answer practical questions:

  • What equipment is staying?
  • What must be removed and disposed of?
  • Can the crew reach the work area with the planned tools and equipment?
  • Do existing connections suit the replacement?
  • Who handles electrical, plumbing, roofing, structural, or control work?
  • What must happen before the system can be tested and handed over?

For a deeper replacement scope, use the HVAC replacement quote checklist before costing the job.

State the equipment and accessories

Do not write only a model number. Record the main equipment and every required accessory. Supplier substitutions can change connections, controls, dimensions, electrical needs, and commissioning work.

If the supplier changes the available model, stop the order. Recheck the current cost, accessories, dimensions, scope, labor, quote validity, and customer approval. Use the HVAC quote follow-up process to keep the accepted equipment tied to the quoted work.

Assign access, permits, inspections, and disposal

State who opens and closes the work area. State who moves stored items, protects finishes, arranges lifting equipment, removes old equipment, and disposes of waste.

Ask the local building department (opens in a new tab) whether the planned work needs permits or inspections. Add confirmed permit and inspection tasks to the scope before finalizing the quote. Do not guess the rules or bury an unknown cost in markup.

Write the exclusions

Name conditions you could not inspect or price. Concealed damage, unsuitable connections, structural work, hazardous materials, and work by others need clear boundaries.

An exclusion is not a way to avoid scoping the job. It records a real unknown. If that condition appears on site, stop and price it through a change order.

Build the cost before setting the price

Keep the cost buckets boring: labor, equipment, parts and consumables, subcontractors, and other direct costs. When everything sits in one materials line, you cannot see which estimate failed.

Calculate loaded labor by task

Start with tasks, not one lump of crew time. Break the job into removal, access, preparation, installation, connections, controls, testing, commissioning, cleanup, and handover. Add travel, loading, setup, and pickup when your accounting policy treats them as direct job labor.

Then assign estimated hours to each task and convert them to loaded labor cost:

Loaded labor cost = estimated job hours × loaded labor cost per hour

Loaded labor cost is broader than a technician's wage. Build your own figure from the labor-related costs your accounting policy assigns to employing and supporting that technician. Those may include payroll taxes, benefits, paid nonjob time, workers' compensation costs, and other labor burdens.

Do not enter wage cost in the estimate and expect markup to repair the missing burden. That hides the error inside every quote.

Use current equipment cost

Use the current supplier cost for the specified system. Match the equipment in the estimate to the equipment in the scope.

Add accessories required to make that system work. Keep freight, delivery, lifting, and return charges visible if they are direct costs. Record supplier quote validity so the office knows when to recheck the cost.

Equipment has work attached to it before the crew installs it. Someone specifies it, orders it, checks it, receives it, stores it, moves it, and handles damage or return problems. Your pricing policy must account for that work without pretending the equipment cost is the whole job.

Count parts and consumables

List the parts needed to install, connect, test, seal, support, protect, and label the system. Small fittings disappear when estimators focus only on the main unit.

Use a takeoff, standard installation list, or van issue record. The method matters less than consistency. If the crew uses it on the job, give it a cost bucket.

Keep subcontractors and other direct costs visible

Enter subcontractor quotes as their own costs. Check the subcontractor's scope against yours. A low figure with missing access, disposal, testing, or closeout work is not a saving.

Also show direct rentals, freight, disposal, permits, inspection charges, specialist testing, and job-specific protection. Do not move these costs into overhead just because they are inconvenient to estimate.

Set an HVAC contractor markup policy by cost bucket

One blanket percentage is simple, but it can distort the quote. Labor, equipment, parts, and subcontractors do not create the same handling work, cash exposure, warranty responsibility, or estimating risk.

A cost-bucket HVAC contractor markup policy lets you decide what each part of the job must recover. Write the policy once. Apply it the same way across estimates. Change it when completed jobs prove an assumption wrong.

Price labor from loaded cost

Apply labor markup to loaded labor cost, not wage cost. Decide first whether your labor cost already contains payroll burden, paid nonjob time, travel, supervision, or overhead recovery.

Write those decisions beside the rate calculation. Otherwise one estimator will include travel in labor, another will add it as a job charge, and a third will forget it.

Price equipment for the supply work attached to it

Set equipment markup from your own cost and policy. Account for specifying, ordering, receiving, checking, storing, delivering, financing, replacing, returning, and administering warranty work where your business carries those tasks.

Do not copy a markup from another cost bucket. A large unit and a small stocked part place different demands on the business. Use your completed job records to decide whether equipment pricing recovers what it should.

Price parts without losing consumables

Your labor and materials markup policy should say how stocked parts, special-order parts, fittings, and consumables are costed. Use current purchase cost, an approved inventory cost, or another documented method that your estimates and job-cost reports can both follow.

Do not use markup as a substitute for quantity. Count the connectors first. Price them second.

Decide how subcontractors contribute

A subcontractor cost may still create estimating, scheduling, supervision, payment, callback, and warranty administration work. Decide how the quoted price will recover that work.

Do not describe a subcontractor as a pure pass-through while your crew manages the site around them for free. If a contract or customer agreement restricts how a cost can be priced, follow that agreement and recover your management work through a permitted, clearly described method.

Recover overhead once

Overhead keeps the business running across many jobs. Office labor, rent, vehicles not charged directly, communications, accounting, training, and general business insurance are examples. Use your own accounts to build the list.

Direct costs belong to a specific job. Overhead supports several jobs. Draw that line before choosing a recovery method.

Choose one consistent recovery base

You can recover overhead through loaded labor pricing, a separate allocation, cost-bucket markups, a job charge, or another documented method. Pick a base your estimators can use and your completed-job reports can test.

The right method is the one that matches your accounts. If overhead rises when field labor rises, labor hours may be useful. If certain costs follow equipment purchasing, an equipment bucket may carry part of the recovery. Write down the reason.

Check for duplicated overhead

Read the estimate from the bottom up. Ask where each overhead cost is recovered.

If office support is already built into the labor selling price, do not add the same office support again as a separate allocation. If vehicle recovery sits in loaded labor, do not also add the same vehicle cost as a job charge.

Markup is not automatically profit. When markup must recover overhead that was excluded from direct job cost, only the amount left after that overhead is covered can become profit.

Use an HVAC pricing formula that exposes every step

A practical HVAC pricing formula works by bucket:

Markup amount for a bucket = bucket cost × chosen markup rate

Selling price for a bucket = bucket cost + markup amount

Quoted subtotal = labor selling price + equipment selling price + parts selling price + subcontractor selling price + other priced direct costs

Add any separately priced overhead recovery according to your written policy. Keep allowances, optional work, customer selections, and taxes separate from the core subtotal so the estimator can see what changed.

This formula does not prescribe a markup. Feed it your loaded labor, current supplier costs, overhead policy, scope risk, and required return. An HVAC contractor markup copied from a different business cannot tell you whether your own costs are covered.

Before sending the quote, check:

  • Scope against the site notes
  • Labor tasks against the crew-hour estimate
  • Equipment against the current supplier record
  • Accessories and parts against the takeoff
  • Direct costs against subcontractor and rental records
  • Overhead against the recovery policy
  • Exclusions against conditions that remain hidden

Keep markup versus margin straight

Markup and margin use the same cost and selling price but answer different questions.

Markup = profit ÷ cost

Margin = profit ÷ selling price

Markup tells you what was added relative to cost. Margin tells you what remains as a share of the selling price. They are not interchangeable.

Oak Street worked example

The house example is an electrical job, used here only to show the arithmetic. All figures are sample currency units, not a rate card.

R. Chen's quote Q-1847 at 14 Oak Street covered a bathroom exhaust fan and four LED downlights. The original quote was 1,105. Job cost was 850, so profit measured against that original quote was 255.

1,105 − 850 = 255 profit

Markup = 255 ÷ 850 = 30%

Margin = 255 ÷ 1,105 ≈ 23%

A 30% markup does not produce a 30% margin. Test your figures with the profit margin calculator, but keep the estimate's cost definition consistent with the final job cost.

Price hidden work through a change order

When the crew finds work outside the accepted scope, stop. Record the condition. Explain what must change. Cost the added labor, equipment, parts, subcontractors, and direct charges.

Apply the same pricing policy used for the original work. Then get customer approval before proceeding, unless immediate action is required to make the site safe and your agreement already covers that action.

The change order should identify:

  • The discovered condition
  • The original scope boundary or exclusion
  • The added work
  • The added price
  • Any schedule effect
  • Customer approval

On the Oak Street job, the ceiling was lined and the quote excluded chasing. Extra cable and chasing became an approved 160 change order. Invoice INV-1847 therefore totaled 1,265.

Do not compare that 1,265 invoice with the original 850 job cost and report a new profit. The costs of the 160 change order are not given. Record change-order costs separately if you want to measure whether the extra work made money.

Test the markup against the completed HVAC job

The quote is a plan. The completed job tells you whether the plan worked.

Compare estimated and actual costs using the same buckets and definitions. If estimated labor used loaded cost, actual labor must use the same loaded-cost method. Comparing loaded labor with wages alone produces a useless result.

For equipment and parts, compare the estimate with purchase costs, freight, credits, returns, replacement items, and stock issued to the job. Keep approved change orders away from original-scope costs.

Record callbacks, rework, and warranty work separately. A callback caused by workmanship is not an approved change. A supplier credit is not extra sales. Clean records show what actually happened.

Use the HVAC job-costing process to compare the quote, actual costs, changes, and invoice on the same job.

When a job misses, change one assumption at a time. Correct the labor hours if the task took longer. Correct loaded labor if the cost definition was incomplete. Correct the equipment policy if ordering and warranty work went unrecovered. Do not raise every markup blindly and lose the cause.

Common questions

Should customers see the markup on an HVAC quote?

Customers need a clear scope, price, options, exclusions, and payment terms. Your internal cost and markup worksheet does not need to become the customer quote unless your contract or customer agreement calls for that breakdown.

Keep enough detail in the quote to show what is supplied. Keep the cost policy in the estimate so your team can price the next job consistently.

What should I do when the supplier changes the equipment model?

Pause the order and compare the replacement model with the accepted scope. Check cost, accessories, connections, controls, dimensions, labor, commissioning, availability, and quote validity.

Get the required customer approval before ordering a different system. Do not treat a supplier substitution as a silent purchasing change.

Can service work and replacement work use the same markup policy?

They can share cost definitions, but they do not have to use identical bucket rules. A diagnostic visit, a stocked repair part, and a full replacement create different labor, purchasing, scheduling, and warranty work.

Build each policy from its own completed jobs. Keep the definitions consistent enough that the office can compare estimate with actual cost.

Build the next quote from a markup worksheet

Use a blank worksheet for every estimate. This makes HVAC contractor markup a written pricing rule rather than a percentage held in one estimator's head.

FieldWhat to enter
Customer and site[Customer name, address, job reference]
Scope[Equipment and work included]
Exclusions[Concealed conditions and work by others]
Labor tasks and hours[Task, crew, estimated hours]
Loaded labor cost[Hours × loaded labor cost]
Labor pricing[Cost, markup method, selling price]
Equipment pricing[Specified equipment, current cost, markup method, selling price]
Parts and consumables[Takeoff, cost, markup method, selling price]
Subcontractors[Scope, quoted cost, pricing method, selling price]
Other direct costs[Permits, rentals, freight, disposal, protection]
Overhead recovery[Method and amount, checked for duplication]
Options and allowances[Separate customer choices]
Quote subtotal[Sum of priced buckets]
Supplier validity[Date or condition to recheck]
Approval records[Quote acceptance and later change orders]
Final job-cost review[Estimated cost, actual cost, variance, action]

Keep the estimate, customer quote, supplier record, approved change order, invoice, and final job cost attached to the same job. Yes Foreman can hold those records together after you have set the pricing policy; it does not replace the cost decisions.

Open the next unsent quote. Separate its labor, equipment, parts, subcontractors, direct costs, and overhead now, then check each figure against the written scope.

Put the next job in one place

Yes Foreman connects quotes, schedules, crews, timesheets and invoices for small field-service teams.