Construction Job Costing: How to Do It Right
Chris Sibley ·
Construction job costing is simple to describe and easy to do badly: give every job its own ledger, put every dollar the job causes into that ledger, and compare it to what you bid. The gap between the two is where your company gets better — or quietly bleeds. Here's the method that works on real jobs, from a guy who runs them.
Start with cost categories you'll actually use
The textbook answer is a 400-line cost-code library. The real answer for a small operation is five to eight buckets you can sort in your head: demo, framing/carpentry, plumbing, electrical, finishes, materials, subs, fees. If a category never changes a decision, it's clutter. You can always split a bucket later when a number in it starts surprising you.
Use loaded labor rates
A $28/hour carpenter doesn't cost you $28. With payroll taxes, comp, and the truck he rides in, he costs you closer to $35–$40 — and if you job-cost at $28, every labor-heavy job looks better than it is. Figure your real loaded rate once a year and use it everywhere. This one fix changes more bids than any software feature will.
Capture costs the day they happen
The single biggest failure in construction job costing isn't math — it's lag. Receipts pile up. Sub invoices arrive weeks late. Hours get reconstructed from memory on Friday. Every day of lag makes the job ledger less true. The fix is moving capture to the moment of spend: scan the receipt at the counter, log hours at the site with GPS clock-in, and photograph the sub's invoice the day it lands.
Compare against the bid, line by line
A total that says "the job made 18%" is a grade. Line-level comparison is a lesson: tile labor ran 30% over, materials came in under, the plumber's change order ate the cushion. Do this on every job and your next bid on the same scope stops being a guess — it's last job's actuals plus what changed.
Don't forget overhead
Insurance, fuel, software, the shop, the phone plan — none of it belongs to a single job, and all of it has to be paid by the jobs together. Simplest method that works: take last year's total overhead, divide by last year's revenue, and add that percentage to every job's cost. If overhead runs 10% and a job grossed 25%, the job really made 15%. Skip this step and every job looks more profitable than the company's bank account says it is.
Close every job with the same three questions
- What did we bid, and what did it actually cost — by category?
- Which category surprised us, and was it price, hours, or scope creep?
- What number changes on the next bid because of this?
Ten minutes per job. It's the cheapest consulting you'll ever get, and it comes from your own numbers.
The tooling
You can run this method on paper. What decides whether it survives August is how fast capture is. I built Job Cost Pro so the capture step takes seconds — snap or speak a cost, it lands on the right job, and the margin updates live. Free on the App Store, 3 projects, no credit card. Start with the job you're on right now.