If you run an HVAC company, you’re really running two businesses inside one. Service techs running tickets all day, and install crews dropping in $14,000 systems. Same shop, same QuickBooks file, completely different cost structures. And most HVAC contractors I meet are trying to track both with one report and wondering why their margins look fuzzy.
I’m Erin Andrews, owner of Level Accounting & Advisory. We’re a construction-only firm and HVAC is one of the trades we see most often. This post is the short version of what makes job costing for HVAC contractors different from every other trade — and how to set it up in QuickBooks Online and JobTread so the numbers actually mean something.
For the full framework, start with our pillar guide on job costing for contractors.

What’s different about job costing for HVAC contractors?
HVAC job costing is harder than most trades because you have two distinct business models running side by side. Service work is short-cycle, ticket-based, with high labor margin and a few hundred dollars of parts. Installation work is long-cycle, project-based, with the equipment cost dominating everything else. If you cost both the same way in QBO, you’ll never see what’s actually making money.
Service vs. install — the two business models
Here’s what the split usually looks like inside one shop:
- Service ticket: 2 hours on site, $89 diagnostic, $340 capacitor and labor. Material is maybe 15% of revenue. Labor and the truck roll are everything.
- Install: 4-ton heat pump system, $9,200 in equipment, $1,800 in copper / lineset / pad / disconnect, 16 hours of labor. The unit is 60–70% of the job cost.
You need separate cost code structures for these. Service tickets get a slim cost code set — diagnostic, repair labor, parts, refrigerant, warranty parts. Installs get the full project breakdown — equipment, lineset and electrical materials, install labor, startup labor, crane or lift rental if applicable.
Run them through the same buckets in QBO and you’ll see one blended gross margin number that lies to you. Split them and you can see that your service department is doing 60% gross while your install department is doing 22% — or the other way around.
Equipment as COGS — when the unit IS the cost
On an install, the condensing unit, air handler, and coil aren’t “materials” the way 2x4s are for a framer. The equipment is the job. A $9,200 unit on a $14,000 install is 66% of the cost.
How to set this up:
- Build a separate COGS account called “COGS — Equipment” in QBO (don’t dump it in with copper and disconnects under “Materials”)
- Create cost codes for equipment by type: 50-100 Equipment — Condenser, 50-110 Equipment — Air Handler, 50-120 Equipment — Coil, 50-200 Equipment — Mini-Split System
- Map each one to the equipment COGS account
Why it matters: equipment cost moves with manufacturer pricing. When Carrier or Trane raises prices 8% mid-year, you need to see it on a report — not find out at year-end that your install margin dropped 4 points and you don’t know why.
Refrigerant tracking and the EPA compliance overhead
This is the one HVAC accountants who don’t know construction always miss. R-410A purchases, R-454B transitions, and recovered refrigerant aren’t just material costs — they’re a regulated compliance line.
What we set up for HVAC clients:
- A dedicated cost code for refrigerant by type (R-410A, R-454B, R-32 as the A2L transition rolls in)
- A separate sub-bucket for EPA Section 608 compliance — recovery equipment maintenance, certification renewals, leak detection
- Refrigerant assigned to the specific service ticket or install job, not dumped into a shop overhead bucket
If the EPA shows up and asks for a refrigerant log, you want it tied to a job — not a “Refrigerant” expense account with no detail.

Cost code structure for HVAC — service tickets vs. installation projects
Two parallel structures inside one JobTread file. Here’s the version we use as a starting point for HVAC clients in the $1M–$15M range:
Service ticket cost codes (10 codes is plenty):
- 10-100 Service — Diagnostic Labor
- 10-110 Service — Repair Labor
- 10-120 Service — Maintenance Labor
- 10-200 Service — Parts
- 10-210 Service — Refrigerant
- 10-220 Service — Warranty Parts (no charge)
- 10-300 Service — Truck Roll / Trip Charge
- 10-400 Service — Sub-Contracted Repair
Install project cost codes (30–40 codes):
- 50-100 Equipment — Condenser / Heat Pump
- 50-110 Equipment — Air Handler / Furnace
- 50-120 Equipment — Coil
- 50-200 Equipment — Mini-Split System
- 60-100 Materials — Copper / Lineset
- 60-110 Materials — Electrical (disconnect, whip, breaker)
- 60-120 Materials — Pad / Bracket / Crane Rental
- 60-130 Materials — Ductwork
- 60-200 Materials — Refrigerant (install charge)
- 70-100 Labor — Install Crew
- 70-110 Labor — Startup / Commissioning
- 70-200 Sub — Electrical (if you sub the disconnect work)
- 70-300 Permits & Inspections
That structure lets you run an estimate vs. actual report on installs by phase — and a separate service margin report by tech. For the full breakdown on building cost codes that work for the field AND for QBO, read our guide to construction cost codes.
Workers comp class 5183 — the labor burden math
HVAC work mostly falls under workers comp class 5183 (Plumbing — also covers HVAC in most states). It’s a middle-tier rate — not as brutal as concrete or roofing, but not cheap either. Premium typically runs $5–$11 per $100 of payroll depending on your state and your loss history.
Total fully burdened labor rate for an HVAC tech making $28/hour usually lands somewhere between $38 and $43/hour after you add:
- FICA / Medicare (7.65%)
- FUTA / SUTA (varies, typically 0.6%–6%)
- Workers comp class 5183 ($5–$11 per $100 of wages)
- General liability allocation
- Health insurance contribution (if you offer it)
- Vehicle and fuel (the truck the tech drives every day)
- Phone, tablet, EPA cert, ongoing training
HVAC labor burden tends to run 35–55% on top of base wage. If you’re bidding installs at “$28/hour times 16 hours = $448 in labor,” you’re underbidding by $200+ per job. Walk through the full math in our labor burden calculation guide.

HVAC-specific QBO + JobTread setup notes
Three things to do differently if you’re an HVAC contractor setting this up:
- Two job templates in JobTread. One for “Service Ticket” with the slim cost code list. One for “Install Project” with the full list. Set defaults so techs and install crews aren’t picking from a 60-item dropdown they don’t need.
- Equipment as a tracked asset on big installs. If you’re bidding multi-system commercial work where the equipment alone is $40K+, set the equipment as a tracked inventory item in QBO so you can match purchase to specific job and see margin clean.
- Tech utilization report monthly. Service techs should be 65–75% billable. If you’re not running this report, you’re carrying labor burden on guys who aren’t producing — and you won’t see it until tax season.
Frequently asked questions
Should service tickets and installs be on the same QBO file?
Yes — same QBO file, same JobTread file. Different cost code structures, different job templates, different reporting. Splitting them into two QBO files is more work than it solves and creates tax filing complications.
How do I handle warranty repair labor in job costing?
Create a “Warranty Labor — No Charge” cost code that posts to a separate warranty expense account, not COGS. You’re not earning revenue on it but you ARE incurring labor cost. Tracking it separately tells you whether warranty work is eating 3% of your tech hours or 15%.
What’s the right gross margin target for an HVAC contractor?
Service: 50–65% gross margin is healthy. Install: 25–35% is realistic for residential, lower for new construction install work where you’re competing on price. If your blended is below 30%, dig into the split — usually one side is dragging the other down.
Do I need to track refrigerant by tech for EPA compliance?
Yes. EPA Section 608 requires recordkeeping by certified technician. Your QBO setup should let you pull a report by tech and by job — not just a single annual purchase total.
The bottom line for HVAC contractors

HVAC is two businesses in one shop. Cost them the same way and you can’t see which one is actually paying the rent. Build a service-side cost code structure and an install-side cost code structure, separate equipment from materials, track refrigerant by job, and burden your labor honestly. That’s what makes job costing actually work for HVAC.
If you’re running $1M–$15M in HVAC revenue and your QBO file isn’t telling you what your install margin is by job, that’s the cleanup we do.
Want us to set up your HVAC job costing in JobTread + QBO?
Run a different trade? Read our companion guide on job costing for plumbing contractors — same firm, same family of problems, slightly different math.
Erin Andrews is the owner of Level Accounting & Advisory, a construction-only accounting firm based in Vero Beach, FL serving contractors nationwide. Level has 20 years of experience in construction accounting and serves specialty trades — including HVAC, plumbing, electrical, concrete, pool, and hardscape — doing $1M–$15M in annual revenue.
Related Posts

Effective Job Costing for Concrete Contractors: QBO + JobTread Setup

Job Costing for Plumbing Contractors: QBO + JobTread Setup

Strong Job Costing for Electrical Contractors: QBO + JobTread Setup

Effective Job Costing for Pool Contractors: QBO + JobTread Setup

Job Costing for Fencing, Deck, and Hardscape Contractors
