HVAC Job Costing in QuickBooks Online

If you're running an HVAC business and your QuickBooks shows total revenue and total expenses but cannot tell you what gross profit you made on last week's install, your job costing is not set up. This is the most common gap we see in HVAC books, and it is the single biggest reason owners cannot tell which work makes money and which work bleeds.

This post is a step-by-step walkthrough of how to set up job costing in QuickBooks Online for an HVAC business. By the end of it, you will be able to track material, labor, equipment, and overhead against specific jobs, and pull a report that shows gross profit per job at the click of a button.

For the broader picture of why HVAC bookkeeping needs structure beyond what generic QuickBooks gives you, see HVAC Bookkeeping: What Every HVAC Contractor Needs to Know. For the foundational cross-trade view, see Bookkeeping for Contractors: What You Need to Know.

What you need before starting

A few things need to be in place before job costing will work cleanly.

QuickBooks Online Plus or Advanced. Job costing requires the Projects feature, which is only in Plus and Advanced. Simple Start and Essentials cannot do this.

A clean chart of accounts. Your revenue should be split between service revenue and install revenue at minimum. Materials should be in cost of goods sold, not lumped into operating expenses. If your chart of accounts is generic, fix that first using the structure outlined in our contractor chart of accounts post.

Time tracking by job. This is the part most HVAC contractors skip and then wonder why their labor numbers are wrong. You need every technician logging hours against a specific job. QuickBooks Time, ClockShark, and Busybusy are the most common tools. Without time tracking by job, your labor allocation will be guesses.

A job numbering system. Decide how you'll name and number jobs before you start. Most HVAC contractors use a system like "Smith_INSTALL_0426" or "Jones_SERVICE_0426" so jobs are sortable by customer, type, and date.

Step one: turn on Projects in QuickBooks Online

In QuickBooks Online, go to the gear icon in the upper right and click "Account and Settings." Click "Advanced" in the left menu. Scroll to "Projects" and toggle it on. Save.

You'll now see "Projects" in the left sidebar of QuickBooks Online. This is where every job will live.

Step two: create a project for each job

When a new job comes in, create a project before you start any work or buy any material.

Click "Projects" in the left sidebar. Click "New project" in the upper right. Name the project using your job numbering system. Assign it to the customer. Add the start date and save.

From this point forward, every transaction tied to that job (material purchases, labor hours, equipment time, subcontractor invoices) gets tagged to this project.

Step three: tag material purchases to the job

When you buy material for a specific job, tag the purchase to the project at the time of entry.

If you're using a supplier credit card (Carrier, Trane, ABC Supply, Ferguson, Johnstone), set the expense up in QuickBooks. In the expense entry, there's a "Project" field. Select the project you created.

If you're buying from a job-account supplier that already tags purchases by job number at the supplier level, the integration usually carries that tag into QuickBooks automatically. Verify it's flowing correctly by checking the project's transactions tab after the next purchase.

For warehouse stock that gets pulled for specific jobs, use a journal entry to transfer the material cost from your inventory or "Material on Hand" account to the project at the time the material leaves the warehouse.

The discipline is: every material expense that touches a job gets tagged to that job. No exceptions. Material that does not get tagged correctly will show up in your overall cost of goods sold but will not show up in the project's job costing report, which means the job's gross profit will look better than it actually is.

Step four: allocate labor to the job

This is the part most HVAC contractors get wrong. Three things need to happen.

Time gets tracked by job. Every technician logs their hours against a specific project, daily. Whether you're using QuickBooks Time, ClockShark, or another tool, the integration needs to push hours into QuickBooks tagged to the right project.

Hours convert to dollars using burdened rates. A technician earning $30 per hour costs you closer to $40 per hour once payroll taxes, workers comp, and benefits are factored in. In your time tracking tool or in QuickBooks payroll settings, set the labor cost rate to the burdened amount, not base wage. If your job costing uses base wage, every job will look more profitable than it actually is.

Salaried staff get allocated too. If your foreman or service manager is salaried and works across multiple jobs each week, their cost still needs to be allocated to the jobs they touched. Either build this into your payroll setup using time tracking against projects, or do a weekly journal entry to allocate their pay across the jobs they worked.

When this is set up correctly, every project's job costing report shows total labor cost based on actual hours worked at burdened rates.

Step five: tag equipment, dumpster, and subcontractor costs

A few cost categories are commonly missed.

Equipment rental tagged to the job. If you rented a crane or boom for a rooftop unit install, that rental goes to the project, not to a generic equipment expense account.

Dumpster and disposal costs. On reroofs and major installs that produce waste, the dumpster bill arrives a week or two later. Tag it to the project when you enter it.

Subcontractor invoices. If you brought in a sheet metal shop to fabricate custom ductwork, tag their invoice to the project when you enter it for payment.

Permit fees and inspection costs. These are job-specific overhead that should be tagged to the project, not buried in generic expense accounts.

Step six: pull the job profitability report

Once a job is complete and all costs are tagged, you can see the gross profit instantly.

Go to Projects. Click into the project. Click the "Project profitability" tab. QuickBooks shows total income (from invoices tagged to the project), total costs (from all the expenses tagged to the project), and gross profit, plus gross margin percent.

This is the number that matters. For HVAC, healthy gross margin on residential installs typically runs 30 to 45 percent. Below 25 percent means either you're underpricing or your job costs are higher than estimated. Service calls usually run higher margins, often 50 to 60 percent on small jobs because the labor-to-revenue ratio is more favorable on quick work.

What to do with the data

Job costing data is useful only if you actually look at it and act on it.

Run the report monthly on completed jobs and compare gross margin across job types. Which install types are most profitable? Which service categories are most profitable? Which crew leads consistently deliver the strongest margins?

Use the data to refine estimates. If your install bids are coming in at 35 percent gross margin estimated but actuals are running at 22 percent, your estimating is off. Either your material estimates are too tight, your labor estimates are too low, or you're missing overhead allocation.

Use the data to fire unprofitable customers. Some customer types or job types consistently lose money. Without job costing, you cannot see which ones. With job costing, the bad customers become obvious within 90 days.

Common mistakes to avoid

The first is starting job costing partway through a job. If you create the project after material is already purchased and tagged to other accounts, your job costing report will be incomplete and unreliable. Create the project before any work begins.

The second is using base wage instead of burdened wage for labor. Already covered above, but it's the single most common error and it makes every job look more profitable than it actually is.

The third is not tagging overhead-allocated jobs consistently. If your foreman's time gets allocated to some jobs but not others, your job costing reports become inconsistent and not comparable.

The fourth is treating job costing as a setup task instead of an ongoing discipline. Job costing only works if every transaction is tagged correctly, every week, on every job. One sloppy month and your reports become unreliable.

When to bring in a specialist

If your HVAC business is doing $1M or more in revenue and you cannot answer "what was my gross profit on the last 10 installs," your job costing is broken and the fix is worth professional help.

A specialist who has set up HVAC job costing before can usually have you running cleanly in two to three weeks. They will fix the chart of accounts first, then set up Projects correctly, then train you and your office staff on tagging discipline. The investment pays for itself within a few months because you start seeing which jobs are actually making you money and stop running unprofitable work blind.

At Prophet Accounting, we work with HVAC contractors and other home service trades across Port St. Lucie, the Treasure Coast, and nationwide. We set up job costing in QuickBooks Online, train your team on the tagging discipline that keeps the data clean, and deliver monthly reports that show gross profit by job, by crew, and by service type. If your books aren't telling you which jobs make money, schedule a consultation at prophetaccounting.com/contractors. For a quick read on monthly bookkeeping costs, our pricing calculator gives you a ballpark in about two minutes.

Previous
Previous

Retainer vs. Project Revenue: How to Track Both in QuickBooks

Next
Next

Why Your Agency P&L Is Lying to You