Bookkeeping for small businesses and real estate investors across Garden Grove & Orange County. Call or Text: (714) 253-4647

Job costing for contractors: how to actually know if a job made money

Not "is the business doing okay overall" — whether this specific job, the one you bid three months ago, actually made what you thought it would.

By Elbert Ballo · QuickBooks Certified ProAdvisor

Here's the pattern I see constantly with contractor clients before we start working together: the business looks fine at the P&L level, revenue is up, but nobody can say with confidence whether last month's kitchen remodel actually made money once materials, labor, and the callback to fix the tile ran their course. That's not a bookkeeping failure exactly — it's what happens when a business tracks itself as one big number instead of job by job. Job costing is the fix, and it's less complicated to set up than it sounds.

Why the P&L alone can't tell you

A general profit and loss statement tells you the business made money this quarter. It can't tell you which job carried that number and which one quietly lost money and got buried in the average. A contractor running five jobs a month with one badly underbid job is still probably profitable overall — which is exactly how that same underbid mistake gets repeated on the next five jobs, because nothing in the P&L flagged it.

Set up a job code for every job, before it starts

This is the entire foundation: every job gets its own code or project in QuickBooks Online before the first dollar moves, and every invoice, bill, and expense tied to that job gets tagged to it. Skip this step and there's no way to reconstruct it later — you'll have a pile of materials receipts and no way to say which job they belonged to.

Track direct costs against the job, not a general expense account

Allocate overhead instead of ignoring it

Insurance, fuel, office rent, and other overhead don't belong to any single job, but they're real costs of doing the work and a job that looks profitable before overhead can turn unprofitable after it's allocated a fair share. A simple, consistent method — splitting overhead proportionally by revenue or by labor hours across active jobs — beats leaving it out entirely, which is what happens by default if nobody sets it up on purpose.

Track billed vs. spent while the job is still running

This is work-in-progress (WIP) visibility, and it's the piece that actually changes outcomes instead of just explaining them after the fact. Every active job should show what's been billed against what's actually been spent so far — if a job is 60% complete but you've already spent 80% of the budgeted cost, that's a problem you can still act on: adjust scope, have a change-order conversation, or at minimum stop the bleeding on the next similar bid.

Found at year-end, it's a lesson. Found mid-job, it's a save.

Compare the bid to the actuals, every single job

Once a job closes, the real value of job costing shows up: a clean comparison of what you bid against what it actually cost. Do this consistently and patterns emerge fast — a specific type of job you consistently underbid, a material cost you're not padding enough for, a crew that runs long on a particular kind of work. Skip it and every bid stays a guess dressed up as a number.

Review weekly or biweekly, not just at tax time

A job costing report you look at once a year is a history lesson. One you look at every week or two, while jobs are still active, is a management tool. That's the real difference between a contractor who finds out a job lost money and one who catches it while there's still a next invoice, a next change order, or a next crew decision that can fix it.

This is exactly what I set up for contractor clients — job codes, WIP visibility, retainage tracked separately, and subcontractor 1099s handled cleanly all year instead of chased down in January. See the full contractor bookkeeping service, or if your books are already behind on this, how cleanup works before getting job costing set up properly.

Find out where your books really stand

Free 30-minute call. Bring your last bank statement or don't — either way you'll leave knowing what's actually going on.

Book a call with Elbert