Field Service Software

Job Costing for HVAC and Field Service Contractors

You close out a job, invoice the customer, and the money comes in. But three weeks later your accountant tells you the crew lost money on it. That's what happens without job costing.

Illustration showing Contractors You, for an article on Job Costing for HVAC and Field Service Contractors.

You close out a job, invoice the customer, and the money comes in. But three weeks later your accountant tells you the crew lost money on it. That’s what happens without job costing.

Job costing is the practice of tracking labor, materials, equipment and overhead against every single job so you know your real margin, not a guess. Contractors who skip it usually find out they’re underpriced only after cash flow gets tight.

What Job Costing Actually Tracks

Job costing breaks a job into four cost buckets: labor, materials, subcontractor or equipment costs, and allocated overhead. Then it compares that total against what you billed.

Say a residential AC install runs a two-tech crew for 6 hours. At a $45/hour fully-burdened labor rate, that’s $540 in labor. Add $2,100 in equipment and refrigerant, a $60 permit fee, and $180 in allocated overhead (trucks, insurance, office staff). Total job cost: $2,880. If you billed $3,900, your gross margin is 26%. Without tracking it that way, you just see “$3,900 job, felt fine.”

The mistake most shops make is lumping payroll into one bucket at the end of the month instead of tagging hours to job numbers as they happen. QuickBooks and most field service platforms let techs log time against a job ID from their phone. If your dispatch software doesn’t force a job number before clocking in, techs will forget, and you’ll be estimating instead of costing.

Overhead allocation trips people up too. A flat percentage of revenue works for simple shops. Larger operations split overhead by labor hours or by truck, since a job that ties up a truck for two days should absorb more overhead than a 90-minute service call.

Why Flat-Rate Pricing Hides Bad Jobs

Flat-rate books like the ones from Nexstar Network price a job the same whether it takes your best tech 45 minutes or your new hire 2 hours. That’s fine for pricing consistency with the customer. It’s a trap if you never check actual cost against the flat-rate ticket.

Picture a drain cleaning call priced at $285 flat rate. Your senior tech does it in 40 minutes including drive time. Your apprentice, on the same job type three days later, takes 2.5 hours because he fought a root intrusion and had to run back for a different cable head. Same invoice, wildly different cost.

If you never job-cost that second call, you’ll assume drain cleaning is a 70% margin service line. It isn’t, not consistently. Job costing catches the spread between your best and worst execution on the same price point.

This is also where first-time fix rate becomes a costing metric, not just a customer-satisfaction number. A callback isn’t free. It’s a second dispatch, more labor, sometimes a part you already used once. Shops running under an 85% first-time fix rate are quietly bleeding margin on every service line, and flat-rate pricing won’t show you that unless you’re tracking hours against the job.

Choosing a Job Costing Method: Two Real Options

Contractors generally land on one of two approaches, depending on how much admin time they can spare.

Option A: Job Costing Inside Your Field Service Software

Platforms like ServiceTitan, Housecall Pro, and FieldEdge build job costing into dispatch. Labor hours clock against the job automatically, material costs pull from your price book, and margin shows up on a report the same day the job closes.

The upside is speed. You see margin per job, per tech, per service line without exporting anything. The downside is setup discipline. If your price book has stale material costs or your techs aren’t logging arrival and departure times accurately, the margin number is fiction dressed up as data. Pricing tiers on these platforms run from a flat monthly fee for smaller shops up to enterprise pricing with per-user costs, so check current quotes directly since they change.

Option B: Spreadsheet or QuickBooks-Based Costing

Smaller shops, especially under 10 trucks, often run job costing through QuickBooks Online job/customer tracking plus a spreadsheet for labor allocation. You assign a job number, tag every bill and timesheet entry to it, and pull a profit-and-loss by job at month-end.

It’s cheaper and more flexible than a full field service suite, but it’s manual. Someone has to reconcile timesheets to jobs every week, or the data goes stale fast. This method works fine if you’re doing under 15-20 jobs a week and have an office manager who actually does the reconciliation. Past that volume, the manual entry becomes the bottleneck, not the insight.

Neither option fixes bad estimating on its own. Job costing tells you where you lost money. It doesn’t stop the next estimate from being wrong unless someone reviews the reports and adjusts pricing.

Five Numbers to Pull From Every Job Costing Report

Run these five checks weekly, not monthly. Waiting for month-end means you’ve already sold the same underpriced job a dozen more times.

  1. Gross margin by job type. Compare install margin to service margin to maintenance agreement margin. Most shops find installs run 20-35% and maintenance agreements run higher once renewal labor is factored in.
  2. Labor variance against the estimate. If a job was bid at 4 hours and consistently runs 6, your estimator is wrong, not your tech.
  3. Material cost drift. Refrigerant, copper, and board prices move. A price book updated quarterly instead of monthly will quietly erode margin on every job that uses that part.
  4. Callback cost per tech. Track which techs generate repeat visits. It’s usually a training gap, not bad luck.
  5. Overhead absorption rate. Confirm your allocated overhead per job still matches your actual monthly overhead. Shops that grow fast often keep using last year’s allocation rate and undercharge every job as a result.

Pull these from whatever system holds your job costing data, whether that’s ServiceTitan reporting or a QuickBooks job profitability report. The report matters less than the habit of actually reading it.

Where Job Costing Breaks Down in the Field

The theory is clean. Execution is where it falls apart, usually in one of three spots.

First, techs don’t log time against the right job. A tech runs two service calls back to back and clocks the second call’s drive time under the first job because he forgot to switch the app. Small error, but multiply it across 15 techs and 20 jobs a day, and your costing data is noise.

Second, materials get pulled from stock without a job tag. A tech grabs a contactor off the truck to fix a no-cool call and never logs it against that job number. The part cost disappears into “shop supplies,” and the job looks more profitable than it was.

Third, change orders don’t get re-costed. A commercial rooftop unit job scopes for 8 hours but turns into a 14-hour job after the crew finds rotted ductwork. If nobody updates the job cost record, you’ll compare actual cost to the original estimate. You will then think you’re wildly over budget. Really the scope changed, and the customer should’ve been billed for it.

The fix for all three is the same: build job costing into the daily workflow, not the month-end cleanup. Techs tag time and materials in real time through mobile app, dispatchers verify job numbers before closing tickets, and change orders get a new cost estimate the moment scope changes.

A Simple Job Costing Checklist You Can Use This Week

Use this on your next 10 jobs to see where your actual process breaks down.

  1. Assign a job number before the crew is dispatched, not after.
  2. Confirm every tech logs clock-in/clock-out against that specific job number.
  3. Tag every material pulled from stock or ordered for the job, including small parts.
  4. Apply your standard overhead allocation rate (per labor hour or flat percentage).
  5. Compare total job cost against invoiced amount the same day the job closes.
  6. Flag any job with a margin more than 10 points below your target for manager review.
  7. Review flagged jobs weekly and adjust future pricing or scheduling based on what you find.

Run this checklist consistently for a month and you’ll have a real baseline margin by service line instead of a gut feeling.

Making Job Costing Part of How You Bid

Job costing only earns its keep when it feeds back into your estimates. Pull actual labor hours from your last ten similar jobs before you bid the next one, not the number your price book assumed five years ago. If installs are consistently running longer than bid, raise the labor hours in your estimating template, not just your hourly rate.

The contractors who get the most out of job costing treat it as a pricing tool, not an accounting chore. They review margin by job type every week, catch labor and material drift before it compounds, and adjust flat-rate books or bid templates accordingly. The ones who skip it usually find out their maintenance agreements have been underpriced for two years, right around the time they’re trying to figure out why revenue is up but profit isn’t.

Whether you run job costing through ServiceTitan, Housecall Pro, or a QuickBooks spreadsheet, the tool matters less than the discipline of tagging every hour and every part to a job number. Start there, and the margin picture gets honest fast.

Frequently asked questions

What’s the difference between job costing and estimating?

Estimating happens before the job, predicting labor, materials and overhead to set a price. Job costing happens during and after the job, tracking what actually got spent. Comparing the two tells you whether your estimating process is accurate or needs adjustment.

How often should contractors review job costing reports?

Weekly is the practical minimum for active shops. Monthly reviews mean you’ve already run the same underpriced job type a dozen more times before catching the problem, which compounds the loss.

Can small HVAC shops do job costing without expensive software?

Yes. QuickBooks Online job tracking combined with a labor allocation spreadsheet works fine for shops under 15-20 jobs a week, as long as someone reconciles timesheets and material tags weekly. Past that volume, manual reconciliation usually becomes the bottleneck.

Does job costing work for flat-rate pricing models?

It works better with flat-rate pricing, not worse, because flat-rate hides cost variance between techs and jobs. Job costing shows you the actual hours and material spend behind each flat-rate ticket so you can spot which service lines are underpriced.

What’s a healthy gross margin target for HVAC install jobs?

Most well-run shops target 20-35% gross margin on installs after labor, materials and allocated overhead, though the right number depends on your overhead structure and market. Job costing reports are how you find your actual number instead of guessing from an industry average.