How job costing works in a residential contracting business
Job costing works when every material purchase and every crew hour is coded to a job at the moment it is recorded, not reallocated at month-end, because a contractor quoting from an assumed margin has no way to test whether that margin exists. This is an illustrative example set in a remodeler running six crews with twenty to thirty jobs open at a time.
Scenario — an illustrative example of how Salt approaches this problem. Not a description of a specific client engagement.
The business shape it describes: US residential contractor, 6 crews, 20–30 jobs live.
- Scenario covers
- Bookkeeping with job costing and per-job margin reporting
- Software it assumes
- QuickBooks Online · Dext
- Jurisdiction
- United States
- Sector
- Construction & trades
- The contractor runs six crews and has twenty to thirty jobs open at any point. New work is quoted off a standard gross margin assumption.
- Profitability is measured once a year, at company level, when the tax return is prepared.
- Cash is tight in a year the profit and loss statement calls good.
- Material purchases are coded to a cost of goods account but not to a job, so no individual job has a true cost.
- Crew time is captured for payroll and never against a job. Labor cost per job is an estimate made after the fact.
- Change orders get built and frequently never invoiced. The work is done, the cost lands, the revenue does not.
- Subcontractor invoices arrive weeks after the work and post to whichever month they are entered, which moves cost off the job it belongs to.
- Retainage held by the customer is treated as a collection problem rather than as a receivable with its own release terms.
- A job list would be set up in QuickBooks Online Projects, one project per contract, with approved change orders carried as their own lines rather than absorbed into the original job.
- Purchasing would change before reporting does. Every material receipt would be captured through Dext and coded to a job at entry, and a receipt with no job goes back to whoever bought it.
- Crew hours would be entered against a job daily and costed at a fully loaded rate that includes employer payroll taxes, workers' compensation and vehicle cost, so the labor figure on the job report is what the crew actually costs.
- A change-order log would be tied to invoicing: signed variation, cost, price, invoice number. Any entry with no invoice number against it becomes the weekly exception report.
- Committed cost would be tracked from open purchase orders and subcontract values, so a job's exposure is visible before the invoices arrive.
- Per-job margin would be reported weekly against the quoted margin, and the variance list rather than the total is what gets read.
- Job costing fails at data entry, not in the reporting. Every material purchase and every crew hour has to land on a job as it happens, or the per-job numbers are worth nothing.
- It also needs someone prepared to keep producing a margin figure that contradicts the quoting assumption the business has run on for years.
- The reporting is bookkeeping and controller work. Choosing a method of accounting for long-term contracts is a tax question and stays with the contractor's own tax preparer.
- The contractor would be able to price new work from the margin the last twenty jobs actually produced rather than from the assumption in the estimating template.
- Approved change orders would sit visibly unbilled until an invoice number is recorded against them.
- A job going wrong would show as a variance in the week it goes wrong, while there is still scope to act on it.
What we'd flag
Getting crews to log time against jobs is the part that fails. It changes how a foreman ends the day, and until it holds, the labor figures are not reliable enough to price from. Plan for weeks of reinforcement rather than a memo.
How job costing works in a residential contracting business
Recognise this shape in your own books?
Tell us where you trade and what shape the books are in. You get scope, price and a start date in writing within one business day — no obligation.