QuickBooks
Why your QuickBooks is lying to you about job profitability
April 18, 2026 · K
Most grading and site work contractors I talk to run QuickBooks. Most of those run QuickBooks Desktop, specifically Enterprise. And most of them tell me the same thing when I ask which of their jobs were most profitable last year:
"I'm not totally sure."
The follow-up usually clarifies why. They can pull a job-costed P&L from QuickBooks. The numbers technically exist. But when they look at the report, half the jobs show artificially fat margins, the other half show losses they don't actually believe, and there's a roughly $400K bucket called "Job. Other" that nobody can fully explain.
The problem isn't QuickBooks. The problem is how cost coding and job assignment got set up. Here's what actually breaks job profitability reporting, and how to fix it without switching software.
The three failure modes
Job profitability reports go wrong in three predictable ways:
- Costs are recorded but not assigned to a job. Fuel cards, equipment maintenance, shop supplies, indirect labor. All real costs of doing business, but if they hit the GL without a Customer:Job tag, they end up in "Other" and disappear from the per-job number.
- Costs are assigned but to the wrong cost code. Concrete material billed under a labor cost code makes the labor line look bloated and the material line look thin. The job total is right; the diagnostics are wrong.
- Labor burden is excluded. Most contractors record gross wages against jobs and put the burden (workers' comp, payroll taxes, benefits, vacation accrual) in overhead. That makes labor-heavy jobs look more profitable than they are by 25–35%.
If any one of these is happening, your job-costed P&L is misleading. If all three are happening, the report is fiction.
Fix #1: Lock down the cost code structure
A clean cost code structure for site work has roughly five top-level groupings:
- 01. Mobilization and general conditions
- 02. Earthwork (with sub-codes for clearing, mass excavation, structural fill, fine grade, import/export)
- 03. Drainage (storm pipe, catch basins, infiltration)
- 04. SWPPP and erosion control
- 05. Hardscape supports (retaining walls, curb prep)
Within each, you want sub-codes that distinguish labor, material, equipment, subcontractor, and other: So a single line in your job-costed P&L might be 02-040-L (earthwork. Fine grade. Labor) rather than just "earthwork."
This level of granularity feels like overkill until the first time you run a year-end review and ask "are we losing money on retaining walls?" With a flat code structure, you can't answer. With a five-by-five structure, you can answer in 30 seconds.
Fix #2: Assign labor burden to jobs, not overhead
This is the single highest-impact change for most contractors. Burden is real and it's job-specific. A job that ran 200 hours of crew labor doesn't just consume $7,000 of wages; it consumes $9,000–$10,000 once you load workers' comp, FICA, FUI/SUI, vacation accrual, and benefits.
In QuickBooks Desktop, the cleanest way to do this:
- Set up a Burden Recovery payroll item that's a flat percentage of gross wages
- Configure it to post to a Burden Recovery GL account (a contra to overhead)
- When payroll posts, the gross wages hit the job; the burden recovery amount also hits the job, with the offset cleared from the overhead burden pool
Most bookkeepers can configure this in an afternoon. The result: every job shows true loaded labor cost, and your overhead pool is no longer hiding 30% of your real labor expense.
Like this? Subscribe.
One email every two weeks on bidding, estimating, and running a site-work shop. No fluff.
Fix #3: Track equipment cost per hour, by piece
Equipment is the second-biggest cost category most contractors get wrong. The two common mistakes:
Mistake A: All equipment cost goes to a single overhead line. Now you can't see whether your CAT D6 is actually paying for itself or whether the rental skid steer you've kept on for three months is bleeding money.
Mistake B: Equipment is charged to jobs but at a rate that hasn't been updated since 2021. Diesel doubled, parts went up 25%, replacement values are 40% higher. Charging the same hourly rate to jobs makes recent jobs look profitable when they're actually losing money on equipment.
Build an equipment hourly rate table that includes ownership cost, fuel, lube, repair allowance, and a tire/track allowance amortized to hourly. Update it annually at minimum, quarterly if diesel has moved 15%+. Charge equipment hours to jobs at this rate using a Time-and-Materials-style internal billing.
QuickBooks Enterprise handles this with the Vehicle/Equipment list and item-based equipment charges. It's not pretty, but it works.
Fix #4: Reconcile the "Other" bucket monthly
Even with a clean cost code structure, you'll have leakage. Indirect costs that should have been allocated, AP entries that hit the GL without a job tag, recurring bills posted to overhead instead of a specific job.
The discipline that fixes this: at month-end close, run the unassigned cost report. Anything in the "no job" or "Other" bucket gets reviewed line by line. Either it's truly overhead (and stays there) or it's a missed job allocation (and gets re-coded).
This is 30–60 minutes per month for most shops. It's the difference between a job-costed P&L you can trust and one that's directionally wrong.
Why QuickBooks Desktop, specifically
For site work, QuickBooks Enterprise Desktop is still the most capable cost accounting tool in the price range. Online lacks several features Desktop has. Most notably Item-based job costing for equipment, multi-location inventory, and the depth of the customizable report builder.
The trade-off: Desktop is harder to integrate with. Most modern construction tools assume you're on QuickBooks Online and treat Desktop as a second-class citizen. The good ones. And there aren't many. Use the qbXML protocol to sync directly with Desktop.
If you're considering moving off Desktop because your other software doesn't support it, push back on the software, not the accounting platform. Desktop's job costing capabilities are worth fighting for.
What the cleaned-up report tells you
Once these four fixes are in place, the job-costed P&L starts answering useful questions:
- Which trades are most profitable for us. And is that consistent quarter to quarter?
- Which GCs consistently produce profitable jobs versus margin-eaters?
- Which job sizes hit our target margin? (Most shops have a sweet spot. Too small loses money on G&A overhead, too large gets squeezed by GC pressure.)
- Which crews consistently hit budget on labor hours, and which need more oversight?
That's the kind of operating insight that should drive bidding strategy and crew assignments. Without clean job costing, those decisions are gut-feel. With clean job costing, they're evidence-based.
The work to clean this up is one engagement, not a recurring expense. Most shops can complete the cost code restructure, burden allocation, and equipment rate update in 4–6 weeks of part-time bookkeeping work. The payoff is a job profitability report you can actually use.
If you want a starting checklist for the cleanup, the same one we walk new ERP customers through is on our contact form. Ask for "the QB cleanup checklist" and we'll send it.