Job costing software for HVAC contractors
HVAC jobs buy rooftop units and split systems weeks before the GC can take them, then wait on startup and balance to close. CFOS for QuickBooks costs equipment, duct and labor by phase on each job.
We email you when CFOS for QuickBooks opens, plus a few updates before then. Your address stays with Run On CFOS. One click unsubscribes.
30 days free, a 90-day money-back guarantee, and cancel anytime. It opens January 2027. We email you the day it opens.
How HVAC bills and where the money leaks
Commercial HVAC bills progress on a schedule of values, usually split into equipment, ductwork, refrigerant piping, controls and startup, with retainage on every line. Light commercial and new homes often bill by phase instead: a draw at rough-in, one when the units are set and one at startup. Most HVAC shops also have a service side that bills by the call or on a maintenance agreement, and that money moves on a different clock than the contract work.
Equipment is the first leak. Rooftop units, condensers and furnaces are ordered on long lead times, priced off a quote that can change before the PO is cut, and delivered to your yard because the roof or the slab isn't ready. You pay the distributor on their terms while the unit waits, and you can only bill it as stored material if the contract allows.
The rest of the leaks are labor. Duct gets reworked when ceiling heights or framing change, a crane day gets rescheduled because the roof deck isn't done, and the GC asks you to turn the units on for temporary heat while drywall goes up. Then come the startup trips, the balance report punch, and warranty callbacks on units another crew damaged, and none of it was in the bid unless someone wrote a ticket.
How HVAC costs split and what CFOS tracks
HVAC costs split into equipment, duct and fittings, refrigerant piping, controls, labor by phase, cranes and lifts, and subcontracted test and balance. Equipment is a large share of the contract and it's bought in big pieces, so one unit charged to the wrong job can make two jobs look wrong at once. Labor is where the bid is won or lost, and duct install, setting units and startup don't move at the same pace.
CFOS imports your estimate as the job budget by cost code and compares it to actual cost from QuickBooks Online every hour. Seven cost types and three levels of cost code let you put each system or floor on its own line with labor and material under it. Field and shop time comes in approved, with labor burden set by class, so an installer hour and a service tech hour cost what they really cost.
Bills emailed to your bills inbox are read, coded to the job and checked against the PO. When the distributor bills a unit above the PO price, the office sees it before it's paid. Service work can live on its own jobs and cost codes, so a busy summer of service calls doesn't hide a losing construction job, and the other way around.
Workflow from the field to the office
The foreman files a daily with the crew, the equipment and photos, which gives you a record of the crane day, the units set and the duct hung. If the GC asks for extra work, like added returns or a relocated unit, the T&M ticket rides on the daily and the GC signs it on site. It becomes a change order draft for the next pay app instead of a favor that never gets billed.
Time is entered in the field, approved and sent to QuickBooks Payroll with the job and cost code. Shop time on fabricated duct goes to the job it's built for, so it's job cost and not overhead. Equipment daily rates charge lifts and the crane truck to the job on the days they're on a daily.
The PM builds the pay app from the schedule of values, with stored materials where the contract allows and retainage by line. Equipment submittals, RFIs about ceiling space and punch items from the balance report are tracked on the job. When startup and the balance report are all that's left before retainage, the PM can see which items are open and who owes them.
What the owner sees every month
Each month the PM enters cost to complete on every open job and it gets approved. The WIP schedule shows over and under billing, which is where you see equipment you've paid for and can't bill yet. The master WIP puts every construction job on one page.
Your CEO Report grades gross margin, overhead and net profit before taxes against the published average and CFOS target for HVAC at your size. If service is part of the business, keeping its jobs separate tells you whether service or construction is paying the overhead. The CEO Report grades the whole company, and the job costing tells you which side earned it.
The 13 week cash forecast reads your QuickBooks Online data and your pay apps and marks the lowest week. A summer of equipment bought for fall jobs is the kind of week you want to see early. You can ask Claude or ChatGPT about any job, and the answer stays within what your sign in allows.
HVAC cost codes, matched to QuickBooks
Each group below is one set of cost codes in CFOS. Bills, time and equipment post to them. QuickBooks keeps the books underneath, so your bookkeeper sees the same numbers.
| Cost code group | What goes on it |
|---|---|
| Equipment | Rooftop units, condensers, furnaces, air handlers and mini splits, at the PO price, with stored material billing. |
| Duct and fittings | Purchased duct, fittings, flex, hangers and sealant. |
| Duct fabrication | Shop labor and material for duct built in your shop and charged to the job it's for. |
| Refrigerant and condensate piping | Line sets, refrigerant, condensate lines and pumps. |
| Grilles, registers and diffusers | Air devices and the labor to set them at trim. |
| Controls and thermostats | Thermostats, sensors, controls wiring and programming time. |
| Cranes and rigging | Crane days, rigging, curb adapters and lifts for setting units. |
| Startup, test and balance | Startup labor, the balance contractor and corrections from the balance report. |
| Warranty and callbacks | Return trips after startup, kept on the job so warranty cost is visible. |
| Change orders and T&M | Added scope tied to the signed ticket, coded apart from the base contract. |
How HVAC contractors do, by revenue
Each row shows the all-trade average, this trade's average and the CFOS target where one is published. These are the numbers your own job costing gets graded against. Net profit is before taxes in every row.
| Revenue | Overhead | Gross margin | Net profit, before taxes |
|---|---|---|---|
| $1M to $5M | 15.1% all-trade average 16% HVAC 14.1% CFOS target | 22.1% all-trade average 24% HVAC 25% CFOS target | 7% all-trade average 8% HVAC 11% CFOS target |
| $5M to $10M | 14.1% all-trade average 15% HVAC 13.1% CFOS target | 23.4% all-trade average 25% HVAC 26% CFOS target | 9.4% all-trade average 10% HVAC 12.9% CFOS target |
| $10M to $25M | 13.1% all-trade average 14% HVAC 12.1% CFOS target | 24.6% all-trade average 26% HVAC 27.1% CFOS target | 11.5% all-trade average 12% HVAC 15% CFOS target |
| $25M to $50M | 12.1% all-trade average 13% HVAC | 25.7% all-trade average 27% HVAC | 13.7% all-trade average 14% HVAC |
Gross margin and overhead come from figures CFMA, Jones Maresca and other sources publish by trade and size. Net profit is computed, not surveyed: net profit = gross margin minus overhead. Nothing comes out for taxes, interest or other income and expense, so it is a before tax figure, on the same basis as CFMA's net income before taxes.
CFMA's 2025 medians are 7.1 percent before interest and taxes and 6.7 percent net income before taxes. Gross margin minus overhead leaves out interest and other income and expense, so a figure here can come in a little above or below a reported net income on the same business.
Above the $10M to $25M band the gross margin and overhead rows are a modeled extension of the same curves. They have not been reconciled against the licensed CFMA Benchmarker, so read those bands as a model and not as a survey result.
Problems HVAC contractors write to us about
Get on the list for the day it opens
30 days free, a 90-day money-back guarantee, and cancel anytime.
We email you when CFOS for QuickBooks opens, plus a few updates before then. Your address stays with Run On CFOS. One click unsubscribes.
30 days free, a 90-day money-back guarantee, and cancel anytime. It opens January 2027. We email you the day it opens.
What HVAC contractors ask
Can I keep HVAC service work separate from construction jobs?
Yes. Set up service on its own jobs or cost codes, and construction jobs keep their own budgets. Each side gets its own actual cost from QuickBooks Online, so you can see which one is paying for the trucks.
How do I handle units I've paid for but can't install yet?
Put them on the schedule of values as stored materials where the contract allows it. The WIP schedule shows over and under billing each month. If a unit is in your yard and not on a pay app, you'll see that you're funding it.
What if the distributor bills more than the quote?
Bills emailed to your bills inbox are checked against the PO before they're paid. A unit billed above the PO price is something the office sees first. You can take it up with the distributor, or price it into a change order if the GC changed the unit.
Can I track what temporary heat and early startup cost me?
Yes, if you give it its own cost code. The foreman's daily records the visits and the time goes on that code. If the GC asked for it, the T&M ticket gets signed on site and becomes a change order draft.
Does CFOS replace QuickBooks Online for an HVAC shop?
No. CFOS works on top of QuickBooks Online and reads from and writes to it. QuickBooks keeps your books, and you still pay Intuit for it separately.
- Job costing software that runs on QuickBooks
- One price. Every module. Priced by your revenue.
- Use all of it, or just the part you need
- Job costing software that runs on QuickBooks
- One price. Every module. Priced by your revenue.
- Use all of it, or just the part you need
- HVAC benchmarks
QuickBooks is a trademark of Intuit Inc. Run On CFOS isn't affiliated with Intuit.