Most contractors know if they made money this year. Job costing tells you if you made money on this job.
There's a version of running a trade business where you stay busy all year, invoices go out, revenue comes in, and then January arrives and you look at your tax return and think: where did the money go? The business wasn't slow. You worked constantly. But the numbers don't add up the way you expected them to.
That gap is almost always a job costing problem. Not a revenue problem. Not an expense problem. A visibility problem. When you can't see what each job actually costs you, you can't tell the difference between a profitable job and one that's quietly losing money.
Job costing fixes that. Here's what it is, how it works for trade businesses specifically, and how to set it up in QuickBooks Online.
What Job Costing Actually Means
Job costing is the practice of tracking every dollar of revenue and cost against a specific job, rather than lumping everything into your general profit and loss statement. Instead of knowing that your business made $8,000 in profit last month, you know that the Hendersons' HVAC replacement made $1,400 in profit and the Coastal Dental buildout made $2,100, while the Ridgeline condo repair came in at a loss of $300.
That last number is the one that changes how you run your business. You bid the Ridgeline job using your standard formula. You finished it. You invoiced it. And you lost money on it. Without job costing, you never know that. With it, you can figure out why: was it a labor overrun? A materials cost that came in higher than estimated? A subcontractor who went over budget?
For trade businesses, this isn't a nice-to-have. It's the core financial system. Materials prices fluctuate. Crew hours run over. Job scope creeps. Job costing is the mechanism that catches all of that before it becomes a pattern.
Estimated vs. Actual: The Core Comparison
Every job costing system is built on one comparison: what you estimated versus what actually happened. You set up the estimate before the job starts, then track actual costs as they come in. At the end, you compare them.
Here's a simple example for a residential HVAC replacement estimated at $4,200:
| Line Item | Estimated | Actual | Variance |
|---|---|---|---|
| Labor (14 hrs est. / 16 hrs actual) | $910 | $1,040 | -$130 |
| Materials | $800 | $970 | -$170 |
| Subcontractor | $400 | $400 | $0 |
| Total Costs | $2,110 | $2,410 | -$300 |
| Revenue | $4,200 | $4,200 | $0 |
| Net Profit | $2,090 | $1,790 | -$300 |
Labor ran 2 hours over at $65/hour, adding $130 in unplanned cost. Materials came in $170 higher than estimated, which likely reflects a part that wasn't priced at the time of the bid. The result: a job that should have returned $2,090 returned $1,790. The job was still profitable, but the variance matters. If that same pattern repeats across 20 jobs, you're leaving $6,000 on the table annually from material cost assumptions alone.
This is the information that lets you adjust your bids, change suppliers, tighten your labor estimates, or have a direct conversation with your crew about job timelines.
Markup vs. Margin: Not the Same Number
While we're here, a quick detour that trips up a lot of trade business owners: markup and margin are not the same thing, and confusing them is one of the most common sources of underpricing.
Markup is calculated on cost. If your cost on a job is $1,000 and you apply a 25% markup, you add $250 and charge $1,250.
Margin is calculated on revenue. On that same $1,250 invoice, your $250 profit represents a 20% margin ($250 ÷ $1,250 = 20%), not 25%.
If you're targeting a 25% profit margin but pricing with a 25% markup, you're actually running at 20%. On a $500,000 revenue year, that's a $25,000 gap between what you think you're making and what you're actually making. The formula to hit a 25% margin is a markup of roughly 33%: $1,000 cost ÷ (1 − 0.25) = $1,333 price.
Job costing makes this concrete. When you can see actual margin per job, the markup math stops being theoretical.
What a Job Cost Report Looks Like in QuickBooks Online
QuickBooks Online has job costing built in through its Projects feature, which is available on the Plus and Advanced subscription tiers. Here's how the system works in practice.
Set up a project for each job. In QBO, go to Projects and create a new project for the customer. This becomes the container that all revenue and costs attach to. Every estimate, invoice, time entry, and expense gets tagged to the project.
Create an estimate before the job starts. Build your estimate in QBO using specific line items for labor, materials, and subcontractors. This becomes your baseline for comparison. When you later run the Estimates vs. Actuals report, QBO pulls the estimate and compares it to what was actually billed and spent.
Tag every cost to the project as it comes in. This is the step most businesses miss. When you buy materials, the expense has to be coded to the right project in QBO. When your crew logs hours, the time entries have to be linked to the project. If costs hit your general ledger without a project tag, they disappear from your job cost analysis and your data is incomplete.
Run the Project Profitability report. This report shows revenue, costs, and profit for each project, side by side. You can also run Estimates vs. Actuals to see specifically where each job diverged from the plan.
QBO tip: If you're on Simple Start or Essentials, the Projects feature isn't available. You can approximate job costing using Classes or Locations, but it's less streamlined. Upgrading to Plus is often worth it for trade businesses specifically because of this feature.
Why Most Trade Businesses Don't Do This
Job costing isn't complicated in concept, but it requires discipline in execution. The three places it breaks down:
Costs don't get tagged. A materials purchase comes in, gets categorized as "Cost of Goods Sold," and never gets linked to a project. The job's cost data is now incomplete. This is usually a training issue, not a software issue. Whoever is entering bills and expenses has to understand that the project tag is not optional.
Estimates are built outside QBO. If your estimates live in a spreadsheet, a separate estimating tool, or your head, QBO can't compare them to actuals automatically. You end up with a manual reconciliation process that's too slow to be useful, and it stops happening. The fix is to build estimates in QBO, or to have a workflow that imports estimate data so the comparison is automatic.
There's no review process. Even if the data is clean, job costing only works if someone looks at it. The report needs to be part of your monthly close: which jobs came in over budget, which came in under, what does the pattern look like across job types. Without a regular review, the data just sits there.
None of these are insurmountable. They're systems problems, and systems problems are fixable.
A Practical Starting Point
If you're not doing job costing at all right now, here's how to start without overhauling everything at once.
Pick two or three upcoming jobs that are representative of your typical work. Turn on the Projects feature in QBO, create a project for each one, and build your estimates in QBO before the work starts. Then make sure every bill, expense, and time entry associated with those jobs gets tagged to the right project.
Run the Estimates vs. Actuals report when each job closes. Look at where the variances are. Don't worry about drawing conclusions from two jobs. The first goal is just to get comfortable with the process and see whether the data you're capturing is clean.
After a few months, you'll have enough data to start asking real questions: which job types consistently run over on labor, which materials categories are hardest to estimate, whether your markup on specific scopes of work is actually producing the margins you expect.
That's the foundation. From there, your bookkeeper can help you build the reporting structure and review rhythm that makes job costing a regular part of running the business rather than an occasional exercise.
Take our free Bookkeeping Health Score to see where your current financial systems stand, including whether your books are set up to support job costing.
Trade businesses are what we do. HVAC, plumbing, electrical, landscaping, general contracting. We understand the seasonal cash patterns, the complexity of job-level profitability, and the QuickBooks setup that actually supports how you work. If your books aren't giving you visibility into what each job makes, that's something we can fix. Reach us at info@saltandsandbookkeeping.com or (888) 282-SALT.
Ready to see what your jobs are actually making?
Schedule a Free Consultation