Construction job costing dashboard showing project costs, budget tracking, and profit analysis to help contractors determine project profitability.

Job Costing for Contractors: How to Know If a Project Actually Made Money

Home Accounting Job Costing for Contractors: How to Know If a Project Actually Made Money

You invoice $90,000 for a roofing job. Payment arrives. But after materials, labor, permits, equipment rental, and two overtime days, the actual margin lands around 4%.

The job was quoted at 14%.

Ten points of margin went somewhere. If you can’t trace where, the same thing happens on the next job — and the one after that.

That gap between what a project was supposed to earn and what it actually earned is what job costing closes.

Job costing tracks every dollar of cost against a specific project: labor, materials, subcontractors, equipment, and overhead. It lets you compare what a job was supposed to cost against what it actually cost. Done right, it shows you which job types generate your best margins and where your estimates keep missing. It also shows which projects are worth pursuing at the price the market will pay.

This article breaks down how job costing works and why most contractors undercount their real costs. It also covers what the numbers should look like once the system is set up correctly.

What Job Costing Tells You That Your P&L Won’t

Take a business running 10 active projects at once. The overall margin might look healthy, even while two or three of those jobs quietly run below breakeven. That’s the exact blind spot contractor accounting is built to catch. Without job-level cost tracking, those underperformers stay invisible until they’ve already done damage to your cash position.

Your income statement tells you whether the business made money this month. Job costing tells you which jobs made money. That’s a different question — and the answer changes how you run the business.

Consider a contractor running four projects in a quarter: total revenue of $320,000, total gross profit of $63,900, a margin of roughly 20% overall. That looks solid. Break the costs out by job, though, and the picture shifts.

JobRevenueCostGross ProfitMargin
Roofing (commercial)$110,000$77,000$33,00030%
HVAC installation$80,000$72,000$8,00010%
Electrical fit-out$75,000$67,500$7,50010%
Plumbing rough-in$55,000$39,600$15,40028%
Total$320,000$256,100$63,900~20%

The HVAC and electrical jobs consume crew time and overhead at 10% margins, while the roofing and plumbing jobs carry the portfolio. Without this breakdown, you’d keep bidding the same way on all four job types, and keep earning 10% on two of them.

Job costing makes that pattern visible, so you can do something about it.

The Four Cost Categories Every Contractor Needs to Track

Tracking job costs requires capturing costs across four distinct buckets, and this is exactly where sound small business bookkeeping earns its keep. Miss one of these buckets, and your job margin comes out understated — sometimes by a wide margin.

Direct Labor

Direct labor is the most consistently undercounted cost in contractor job costing. It isn’t just the hourly wage. It’s every dollar the business spends to put that worker on the job: payroll taxes, workers’ comp premiums, health insurance contributions, paid time off.

A field technician earning $28 an hour might actually cost the business $38 to $42 an hour once burden costs are folded in. Estimate with $28, and you’ve built a labor gap into the job from its first hour.

This total cost above base wage has a name: the labor burden rate. Calculate it by dividing total annual employment costs — wages, taxes, and benefits — by total annual hours worked. That gives you your true cost per hour to put that person on a job.

Materials and Subcontractors

Record material costs against the job at the time of purchase, not when the invoice gets paid. The same goes for subcontractor bills. Timing matters here: a $14,000 sub invoice landing the month after a project closes will make that job look more profitable mid-stream than it actually was.

Equipment and Rental

Rented equipment is simple — the invoice amount goes to the job on the day you incur it. Owned equipment takes more discipline. Every hour you run owned machinery carries real cost: depreciation, maintenance, insurance, fuel. Skip allocating those costs, and you’ll systematically undercost any project that uses owned equipment.

Overhead

Overhead is the cost category most estimates skip or underallocate. It’s significant enough to earn its own section next, since it’s where contractors quietly lose the most margin.

Overhead Allocation — The Number Most Contractors Skip

An outsourced accounting setup often surfaces just how much contractors are leaving out of their job cost math — overhead is usually where it starts.

That category covers every cost the business carries that isn’t tied directly to one project. Think office rent, accounting software, shared vehicle payments, business insurance, admin salaries, marketing, and equipment maintenance. These are real operating costs, and the work you bill needs to recover them.

Build that recovery into every job through an overhead rate.

HOW TO CALCULATE YOUR OVERHEAD RATE
Take your total annual overhead and divide it by your total annual direct labor hours. That gives you an overhead cost per labor hour. Add that rate to your cost calculation for every hour of labor you estimate on a job. Example: $180,000 in annual overhead ÷ 6,000 direct labor hours = $30 per hour. A project requiring 200 hours of labor carries $6,000 in overhead, regardless of contract value.

Skip this allocation, and larger projects look more profitable than they are. They absorb overhead in the background that never shows up in the estimate — so the margin looks healthy on paper while the business quietly underprices its own capacity.

The Change Order Problem

Unapproved scope changes rank among the highest financial risks on any active job. A solid accounting for contractors workflow treats them that way from day one.

Change orders are where contractor margin disappears fastest when documentation habits aren’t tight.

A COMMON SCENARIO
A plumbing contractor bids a job at $42,000. During the project, scope expands: an additional bathroom rough-in, a relocated cleanout, a pressure booster installation. None of this was in the original bid. The crew does the work anyway. The invoice goes out at $44,500, because someone estimated the additions loosely and the contractor didn’t push back mid-job. True cost of the additional scope: $6,200. Amount recovered: $2,500. The rest came out of the original margin.

That pattern — added scope, underdocumented change orders, partial recovery — is one of the most consistent margin drains in contracting, and it compounds across jobs.

The fix is a firm process: no scope change proceeds without a written change order, a revised cost estimate, and client sign-off before work starts. Job costing shows you the cost of scope drift after the fact. A change order process stops the drift before it happens. You need both — one without the other still leaves money on the table.

Work in Progress (WIP) Accounting — Why Your P&L Can Mislead You Mid-Project

Long-form jobs create a timing mismatch that basic cash accounting can’t handle well. Getting it right is exactly the kind of thing bookkeeping services for contractors need to build in from day one.

On longer jobs — anything running across multiple months — revenue and costs don’t land at the same time. Picture an electrical contractor spending $40,000 on labor and materials in Month 1, on a job that bills at completion in Month 3. Cash accounting shows a painful Month 1 and a standout Month 3. Neither month reflects what’s actually happening on the job.

WIP accounting fixes that mismatch. It matches revenue to the percentage of the project actually completed at any point in time. This is the standard approach in construction accounting, and the correct one for any job spanning multiple billing periods.

TWO WIP CONDITIONS EVERY CONTRACTOR SHOULD UNDERSTAND
Under-billing: you’ve completed more work than you’ve invoiced. The unbilled amount sits as an asset on the balance sheet — revenue earned but not yet billed. Persistent under-billing usually means your invoicing is lagging behind production. Over-billing: you’ve invoiced more than the percentage of work completed. This shows up as a liability — cash collected for work not yet done. Over-billing can smooth short-term cash flow, but it distorts true project margin and creates a future obligation to complete the work.

Both conditions matter if you’re making decisions about hiring, bidding, or cash reserves based on monthly financials. Skip WIP adjustments, and your P&L can significantly overstate or understate profitability on any multi-month project.

How to Read a Job Cost Report in QuickBooks Online

Get QuickBooks bookkeeping set up correctly for job costing from the start — it matters more than most contractors expect, since retroactive cleanup is slow and often incomplete.

QuickBooks Online tracks job costs through its Projects feature, which acts as a cost center for each active job. Tag every expense to a project at the time of entry. Run payroll through time tracking so labor hours land in the right place. Assign supplier and subcontractor bills to the project when you create the bill.

A PLAN NOTE WORTH CHECKING FIRST
Projects and basic project profitability are available on QuickBooks Online Plus. The Estimate vs. Actual report specifically — the one this section walks through — requires QuickBooks Online Advanced. If you’re on Plus, you’ll get solid job-level profit and loss, but not this exact report without upgrading. Worth confirming your plan before you build a workflow around it.

Once your data is in, and you’re on a plan that includes it, the Estimate vs. Actual report in the Projects section is the one to use. It compares budgeted costs and revenue against what’s been recorded to date. Here’s what to focus on when you review it.

Labor Hour Variance

Compare estimated labor hours against hours logged. A job running 20% over on labor is telling you something: underestimation, scope additions, crew performance, or rework. Each has a different cause and a different fix, but all of them surface in this number first.

Materials Variance

This is the gap between estimated material costs and what you actually purchased. Overruns usually trace back to waste, delivery errors, spec changes, or pricing that moved between estimate and purchase.

Overall Job Margin vs. Estimate

A job bid at 22% gross margin but tracking at 13% at 70% completion is very likely to land below target at close. Catch that signal while the job is still active, and you have options: accelerate the schedule, adjust crew allocation, or address scope changes directly with the client.

Use the Estimate vs. Actual report as a live management tool. It’s worth far less as a post-mortem.

What Changes When You Cost Every Job

Contractor accounting at this level shifts pricing from instinct to evidence. Instead of estimating from memory or matching a competitor’s number, you price from your own cost history on similar job types. That changes which jobs you pursue and which ones you let pass.

Job type mix improves over time, too. A painting contractor who tracks costs might discover that interior repaint work generates 27% gross margins, while commercial exterior bids consistently land at 11%. That’s a business strategy insight, built entirely on accounting data.

Overhead recovery becomes intentional as well. Instead of hoping revenue covers the fixed cost base, you build recovery into every estimate at a calculated rate, so every job contributes to it.

And when something goes wrong mid-job — a labor spike, a materials cost increase, an undocumented scope change — the numbers surface early enough to respond. That’s the real difference between managing job profitability actively and discovering the damage on your year-end P&L.

Get the Cost Picture Right From the First Job

Accurate job costing isn’t complicated. It does require consistent data entry habits, the right chart of accounts structure, and a system for allocating overhead and tracking change orders across every active project.

If your books are already clean and QBO is set up correctly, building job costing into your workflow is straightforward. In other cases, the chart of accounts isn’t structured for job-level reporting, or costs have been going in at the business level instead of the project level. Either way, the first step is fixing that accounting foundation.

At Datastub, we work directly with contractors — roofing, HVAC, plumbing, electrical, and painting businesses. We help them set up job costing systems that produce real numbers on every project. That means a chart of accounts structure, Projects configuration in QuickBooks Online, overhead rate calculation, WIP adjustments, and an Estimate vs. Actual report you can read and act on while jobs are still running.

Reach out, and we’ll look at how your books are set up now. Then we’ll find the gaps and tell you what it takes to get full visibility on every job you run, and tell you straight what’s working and what isn’t.