bdevy.

Guide · 5 min read

HVAC Job Costing: How to Calculate the True Cost of a Service Call

What a service call actually costs once the drive, the burdened hour and the vehicle are counted — with three worked jobs and the arithmetic shown.

Published 12 September 2026 · BDEVY

# HVAC Job Costing: How to Calculate the True Cost of a Service Call

Most contractors know their revenue precisely and their costs approximately, and the approximation is always in the same direction.

Job costing is the correction. It asks one question — what did this job cost to deliver — and answers it with enough precision that the answer is useful. The surprises are usually not where people expect.

HVAC job costing calculator →


The formula


Revenue
  − Labour cost
  − Parts and equipment cost
  − Vehicle cost
  − Other direct costs
  ─────────────────────
  = Gross profit

Gross profit ÷ Revenue × 100 = Gross margin

Simple. Every term in it is routinely got wrong.


Term 1 — Revenue is not the invoice total

Revenue is the invoice before sales tax and after any discount.

Sales tax is collected on behalf of a taxing authority and passed straight through. It was never yours. Counting it as revenue inflates the top line and understates the margin on everything.


Invoice total                    $398.75
  Less sales tax                  −$7.70
                                 -------
Revenue                          $391.05

The discount is already out, because it came off before the total.


Term 2 — Labour cost is burdened, and includes the drive

Two errors live here, and together they are the biggest single distortion in contractor job costing.

Error one: costing labour at the wage. A technician paid $28/hour does not cost $28/hour. Add employer payroll taxes, workers' compensation, liability insurance, paid time off, and the fact that not every paid hour is billable. The burdened figure is usually well above the wage — where exactly depends on your own insurance rates, your benefit structure and your billable ratio, so work it out rather than adopting somebody else's multiplier.

Error two: excluding drive time. The technician is paid for the drive and the van is running during it. It is a cost of delivering that job whether or not the customer is charged for it.


On site      1.5 hrs
Drive        0.75 hrs (both ways)
             ────────
Paid hours   2.25 hrs × $45 burdened = $101.25

Leaving out the drive would have costed that labour at $67.50 — understating it by a third.


Term 3 — Parts at cost

What you paid the supplier, not what you charged. If a part was pulled from van stock, it still cost what it cost.


Term 4 — The vehicle

Fuel, maintenance, insurance, tyres and depreciation, divided across the hours the van is actually out earning. Say $12/hour on these numbers:


2.25 hrs × $12 = $27.00

Small per job. Across a year across five vans it is not small, and leaving it out is what makes short jobs across town look better than they were.


Three worked jobs

Same company, same rates, three different shapes.

Job A — capacitor replacement, 12 minutes from the shop


Revenue (pre-tax, after discount)              $391.05

  Labour   2.25 hrs × $45                      −$101.25
  Parts    capacitor at cost                    −$22.00
  Vehicle  2.25 hrs × $12                       −$27.00
  Other                                          −$0.00
                                               --------
  Total cost                                   $150.25

Gross profit                                   $240.80
Gross margin   $240.80 ÷ $391.05  =              61.6%
Markup         $240.80 ÷ $150.25  =             160.3%
Profit per on-site hour                        $160.53

Job B — the same repair, 40 minutes each way

Identical work. Identical invoice. The drive goes from 0.75 to 1.33 hours.


Revenue                                        $391.05

  Labour   2.83 hrs × $45                      −$127.35
  Parts                                         −$22.00
  Vehicle  2.83 hrs × $12                       −$33.96
                                               --------
  Total cost                                   $183.31

Gross profit                                   $207.74
Gross margin                                     53.1%
Profit per on-site hour                        $138.49

The same job earned $33 less because of where it was. That is an 8.5 percentage point swing in margin caused by nothing except geography — and it is completely invisible unless drive time is costed.

This is the argument for routing rather than an argument about pricing. More on that in HVAC dispatch software.

Job C — a changeout


Revenue (pre-tax)                            $7,485.00

  Labour   2 techs × 9 hrs × $48              −$864.00
  Equipment and materials at cost           −$3,148.00
  Vehicle  9 hrs × $12                        −$108.00
  Permit at cost                               −$95.00
  Disposal                                     −$40.00
                                             ----------
  Total cost                                 $4,255.00

Gross profit                                 $3,230.00
Gross margin                                     43.2%
Markup                                           75.9%
Profit per on-site hour (18 tech-hours)        $179.44

What the three jobs say

Job AJob BJob C
Revenue$391.05$391.05$7,485.00
Gross profit$240.80$207.74$3,230.00
Gross margin61.6%53.1%43.2%
Profit per on-site hour$160.53$138.49$179.44

Three things fall out of this table, and none of them is obvious from revenue alone.

The changeout has the worst margin and the best hourly profit. Margin alone would tell you to stop doing changeouts. Hourly profit says the opposite. Both are true, which is why one number is never enough.

The two identical repairs differ by 8.5 points. Not because of pricing. Because of driving.

The small job has the best margin and the smallest dollars. $240.80 does not pay for much overhead. Margin percentages are seductive and you cannot bank a percentage.


Gross profit is not profit

Everything above is gross — before overhead. Rent, office wages, advertising, software, insurance, the owner's salary and every non-billable hour still come out of it.

A rough sanity check on your own numbers:


Annual overhead ÷ Annual revenue = Overhead as a share of revenue

If overhead runs at 35% of revenue, a job at a 43% gross margin is contributing 8 points of net. A job at 30% gross margin is losing money no matter how busy it looks.

There is no industry number for what your overhead should be. Run it on your own P&L.


Making it routine

Job costing done once is an interesting afternoon. Done on every job it changes what you price and where you send people.

That requires exactly one thing: cost recorded alongside price at the moment the invoice is built. Not reconstructed later from supplier statements and timesheets — nobody does that twice.

An invoicing system that holds two numbers per line gives you this for free, on every job, for ever. One that holds only the price cannot give it to you at all.

See job costing on every invoice →

Related: HVAC markup vs margin · job profit calculator · labour rate calculator

hvac business management software hvac business software hvac job profitability

Turn missed calls into booked jobs

Every unanswered call gets a text back within seconds, every lead gets followed up, and the schedule fills without another person in the office.