Construction Job Costing: Track What Each Job Really Cost
Your estimate is a guess and job costing is the answer key. How to track labor, materials and subs against the estimate, read the variance, and price the next job right.

Construction job costing means tracking what each job actually cost, line by line, and comparing it to what you estimated. You keep the same cost lines as your estimate (labor, materials, subs, everything else), log real costs against them while the job runs, and check the gap before the final invoice goes out.
Variance = actual cost − estimated cost, per line. Actual margin = (price − actual cost) ÷ price.
Hypothetical: a bathroom estimated at $9,400 cost $10,640. Same $13,429 price, so the margin fell from 30.0% to 20.8%. Worked below.
Why bother: your estimate is a guess. Job costing is the answer key. Without it, the same mistake shows up on every bid and you never find out which line is leaking.
Scope: US contractors and remodelers running small crews. All dollar figures are hypothetical. If you haven't built the estimate yet, start with how to estimate construction costs.
1. What counts as a job cost
A job cost is anything you spend because this job exists. If the job got cancelled tomorrow and the cost would disappear, it's a job cost.
| Cost | Job cost or overhead? |
|---|---|
| Crew hours on site, including setup and cleanup | Job cost (labor) |
| Payroll taxes and workers' comp on those hours | Job cost (part of labor) |
| Tile, lumber, fixtures, fasteners, returns you didn't get credit for | Job cost (materials) |
| Plumber, electrician, other subs | Job cost (subcontractors) |
| Dumpster, permit, rentals, dump fees | Job cost (other) |
| Truck payment, insurance, phone, bookkeeping | Overhead, not a job cost |
Two traps. First, labor at the bare wage looks cheaper than it is. Load it with taxes and comp, the way labor burden explains. Second, the site costs every job has, like the dumpster and the porta-john, are job costs too. They're your general conditions, not overhead.
Company costs like the truck and the office belong in your overhead rate. Don't spread them into job costs or you'll count them twice.
2. Use the same cost lines as your estimate
Job costing only works if the actuals land in the same buckets as the estimate. If you estimated "materials" as one number, you can only compare one number.
For a small crew, four or five lines are enough:
- Labor: hours × your loaded rate. Track hours, not just dollars, so you can see if the rate or the time was off.
- Materials: every receipt for the job, minus returns.
- Subcontractors: each sub's invoice against their quote.
- Other job costs: dumpster, permit, rentals, dump fees.
- Change orders: their own line, so extra work the customer paid for doesn't hide an overrun on the original scope.
Bigger outfits often use dozens of cost codes. You don't need them. You need enough lines to answer one question: where did the money go?
3. Track costs while the job runs, not after
Procore puts it simply: "Job costing is the process of tracking costs and allocating them to their associated project" (Procore). The hard part is the allocating. A receipt in the truck's door pocket isn't allocated to anything.
- Receipts the same day. Snap it before you leave the supply house and tag it to the job. In WinPal you can scan a receipt with your phone and it saves the details as an expense.
- Hours every day. Each person, each job. Friday-afternoon memory turns 9 hours into "about 8."
- Sub invoices against the quote. If a sub bills more than they quoted, you want to know before you pay, not at tax time.
- Change orders in writing. Price and sign them before the work, per construction change orders, and log them on their own line.
Check the running total at least weekly on any job longer than a week. A labor overrun you catch on day 3 is a conversation with the crew. One you catch on day 15 is a lesson.
4. Worked example: a bathroom that ran long
Hypothetical hall bath remodel. Loaded labor rate $45 an hour (an assumption). Priced at a 30% margin with the formula price = cost ÷ (1 − margin): $9,400 ÷ 0.70 = $13,429.
| Cost line | Estimated | Actual | Variance |
|---|---|---|---|
| Labor | $2,880 (64 h) | $3,690 (82 h) | +$810 (+28%) |
| Materials | $3,400 | $3,710 | +$310 (+9%) |
| Subcontractors | $2,600 | $2,600 | $0 |
| Dumpster, permit, rentals | $520 | $640 | +$120 (+23%) |
| Total job cost | $9,400 | $10,640 | +$1,240 |
| Price | $13,429 | $13,429 | |
| Gross profit | $4,029 (30.0%) | $2,789 (20.8%) | −$1,240 |
The job cost $1,240 more than planned. The customer paid the same. So $1,240 came straight out of profit: that's 31% of the gross profit you planned to make. Your margin noticed.
5. Read the variance before you blame the crew
A variance tells you where to look, not who to yell at. Ask why each line moved.
- Labor over: was it more hours or a higher rate? Here it's 18 extra hours at the same rate. Was the tile pattern slower than you priced, or did you lose a day waiting on a sub?
- Materials over: waste, price increases since you quoted, or a second trip for the thing you forgot? Tile overage is a classic.
- Other over: a second dump run, a permit fee that changed, a rental kept two extra days.
- Under on a line: good news, but check it isn't a missing receipt.
One overrun is a bad week. The same overrun on three jobs in a row is your estimate being wrong.
6. Feed it back into the next estimate
This is the whole point. If tiled bathrooms keep taking you about 80 hours, stop estimating 64.
Next similar bathroom, same everything except labor at 80 hours: $3,600 + $3,400 + $2,600 + $520 = $10,120 direct cost. At a 30% margin: $10,120 ÷ 0.70 = $14,457.
That's $1,028 more than the last price. It's not a markup grab. It's the price of the job you actually do. If you're worried about losing the bid, read contractor markup before you cut margin to win it.
Want to check a whole year instead of one job? Run your totals through the profit margin calculator and compare against general contractor profit margin benchmarks.
7. Job costing vs job cost accounting
What's above is job costing for running jobs and pricing better. Job cost accounting is your bookkeeper or accountant carrying those costs in your books: work in progress, revenue recognition, the reports a bank or bonding company asks for.
Small residential crews can start with the first and add the second when the jobs get bigger. Either way, the inputs are the same: every receipt, every hour, every sub invoice, tagged to a job. For the books side, see construction bookkeeping.
Common job costing questions
What is job costing in construction?
Job costing is tracking the real cost of each job (labor, materials, subcontractors and other site costs) and comparing it to the estimate, line by line. It shows which jobs made money, which line ran over, and what to change on the next bid. A spreadsheet works if every cost is tagged to a job.
How often should I check job costs?
Weekly on any job longer than a week, and once more before you send the final invoice. Weekly checks catch a labor overrun while you can still do something about it. The final check gives you the actual margin and the numbers to fix on your next estimate. Small one-day jobs can be checked in batches at month end.
Should I count my own hours in job costing?
Yes, the hours you spend working on the job. Log them at the same loaded rate you'd pay someone else, or the job looks more profitable than it is. Time spent running the business, like quoting other jobs or doing invoices, is overhead, not a job cost. That part belongs in your overhead rate.
What's an acceptable job cost variance?
There's no industry standard number. Pick a trigger and stick to it, for example any line more than 10% over, or the job's margin more than 5 points under plan. When a line trips the trigger, find out why. When it trips on several jobs in a row, change your estimate for that kind of work.
Do I need job costing software?
Not to start. A spreadsheet with your estimate lines and an actual column works. What matters is capturing costs the day they happen and tagging them to the job. An app helps because receipts and hours go in from your phone on site, instead of piling up in the truck until the weekend.
What to do on your next job
Copy your estimate lines into an actual column. Log hours daily, snap every receipt, and check the totals weekly. When the job's done, write down the one line that ran over and fix it on the next estimate.
Not sure the estimate you just sent is priced right? Upload it to the estimate checker and see if it's priced too low.


