TL;DR
- This piece costs three real contract types, line by line, from bid through closeout: a fixed-price job, a time-and-materials job, and a small commercial job with retainage. The math is shown, not summarized.
- In all three, the number the office reported on day one was wrong in the same direction. The gap came from burden, unbilled hours, or retainage timing, never from bad work in the field.
- The job costing template used to build these three examples is yours to take, along with an answer to the question of when a spreadsheet is no longer enough.
Job costing sounds straightforward on paper. Track budget against actual, watch the variance, and adjust as you go. What is harder to find is a finished job worked out step by step, with real job costing examples you can check your own numbers against. That is what this piece does.
Below are three contractor jobs: a fixed-price remodel, a time-and-materials service call, and a small commercial build-out. Each one is costed from the budget through closeout, with the same five columns tracked every time.
We will walk through what happened on each job, what the numbers showed once everything was counted, and what that means for how you cost your own jobs.
How to Read These Examples
Every table below tracks the same five columns. Those are budget, committed, actual to date, forecast final cost, and variance.
Budget is what the job was priced to cost. Committed is money already spoken for through a signed subcontract or purchase order, even before it has been invoiced. Actual to date is what has actually been posted through your books.
The forecasted final cost is your best estimate of the total cost once the job wraps up. That figure is also the number that anchors percentage-of-completion accounting under federal tax law.
That method compares the cost incurred so far against your total estimated cost, rather than waiting for the job to close. Variance is the gap between the budget and the forecast. Every dollar figure in the three examples below is a hypothetical, not a benchmark to match against your own numbers.
Example One: A Fixed-Price Residential Remodel
This is the shape most residential contractors know best, a set price for a defined scope, so it is the right one to lead with.
| Cost Code | Budget | Committed | Actual to Date | Forecast Final Cost | Variance |
| Labor (burdened) | $55,000 | $0 | $54,200 | $55,000 | $0 |
| Materials | $62,000 | $3,500 | $58,900 | $62,400 | -$400 |
| Subcontractors | $38,000 | $2,000 | $36,000 | $38,000 | $0 |
| Approved change order (framing repair) | $9,500 | $0 | $9,500 | $9,500 | $0 |
| Equipment and other | $6,000 | $0 | $5,800 | $6,000 | $0 |
| Total cost | $170,500 | $5,500 | $164,400 | $170,900 | -$400 |
The original bid was $185,000, priced against base wages before burden was added. That put the estimated cost at $154,000 and the target margin at $31,000, or about 17%. Once labor is restated at the fully burdened rate rather than the base wage, that same job’s true cost comes closer to $170,500.
Midway through the job, the crew opened a wall and found a framing issue nobody could have priced up front. That $9,500 change order got costed and approved before the work started. That meant it moved into the contract value and the cost columns together, instead of quietly eating margin later.
The verdict? Add the approved change order to the contract, and the job is now worth $194,500 against a forecast cost of $170,900. That leaves a margin of about $23,600, or roughly 12%, not the 17% implied by the original bid.
Nothing went wrong on this job. The number just got honest once the burden and the change order were counted correctly. That is exactly the kind of gap cost codes, and burden walks through in more depth.
Example Two: Time and Materials Service Work
Contractors doing time-and-materials work often assume job costing does not apply, since the client is billed for the labor and materials that actually go into the job. That assumption is where the money leaks.
Under a time-and-materials contract, the client pays only for the hours and materials logged. Anything that does not get logged is a cost the contractor absorbs for free.
| Cost Code | Budget (Est. Cost) | Committed | Actual to Date | Forecast Final Cost | Variance |
| Labor (burdened, 40 hrs est.) | $2,720 | $0 | $3,264 (48 hrs) | $3,264 | -$544 |
| Materials (billed at cost) | $708 | $0 | $708 | $708 | $0 |
| Materials (truck stock, unbilled) | $0 | $0 | $210 | $210 | -$210 |
| Total true cost | $3,428 | $0 | $4,182 | $4,182 | -$754 |
The table above tracks materials at cost, not at the marked-up price the client sees on the invoice. The technician logged 42 billable hours and invoiced the client $4,620 for labor at the contract’s $110 loaded hourly rate. On top of that, the invoice included $850 for materials billed at cost plus a standard markup.
On paper, that invoice looks like it clears a 37% margin against the estimated cost of doing the job. But the technician was actually on site for 48 hours, not 42. The six hours nobody logged were travel time and a short callback. A small pile of fittings pulled straight from the truck’s stock never appeared on the invoice as a separate line item.
The verdict? Once those six unbilled hours and the unlogged parts get counted as real cost, the job’s true margin drops to about 24%. That is still profitable, but nowhere near what the invoice implied. The client paid exactly what the contract said they should. The gap lived entirely in what never got tracked.
Example Three: Small Commercial With Retainage and Progress Billing
This is the example that shows up as a cash problem long before anyone calls it a job costing problem.
| Cost Code | Budget | Committed | Actual to Date | Forecast Final Cost | Variance |
| Labor | $95,000 | $0 | $71,000 | $94,000 | $1,000 |
| Materials | $110,000 | $8,000 | $92,000 | $109,000 | $1,000 |
| Subcontractors | $150,000 | $25,000 | $110,000 | $148,000 | $2,000 |
| Equipment and other | $27,000 | $0 | $28,000 | $28,000 | -$1,000 |
| Overhead and fee | $10,000 | $0 | $0 | $13,000 | -$3,000 |
| Total cost | $392,000 | $33,000 | $301,000 | $392,000 | $0 |
The contract is worth $420,000. Job cost reports show the job is 75% complete, with $315,000 billed on progress applications to date. The owner withholds 10% retainage on every draw, which New York State’s Comptroller lists as the typical retainage range for publicly bonded work. That leaves $31,500 of this billing sitting uncollected until closeout.
Meanwhile, the electrical subcontractor has a signed contract for $85,000, and only $60,000 of that has actually been invoiced. That leaves $25,000 committed but not yet reflected in actual costs.
The verdict? The job cost report says this job is healthy, with a forecast margin of $28,000, or about 7%. But collected cash tells a different story.
Against $301,000 in actual costs to date, the job has only brought in $283,500 net of retainage. That leaves it about $17,500 short in real cash at this exact moment. The job is profitable on paper. The shortfall is a cash flow forecast question tied to retainage timing, and it closes the moment retainage is released at closeout.
What the Three Jobs Have in Common
All three jobs looked better, or worse, than reality for reasons that had nothing to do with the actual work getting done. The remodel’s number improved once the burden landed correctly.
The service call’s number got worse once unlogged hours and parts were counted. The commercial build-out’s cost report stayed healthy while its bank balance told a tighter story. None of these gaps resulted from a poorly performing crew or a client disputing an invoice.
They came from the same root cause in different clothes, a coding and capture problem rather than a performance problem. A framing crew pulling extra lumber without logging it is one symptom. A technician forgetting to code six hours of drive time is another. A purchasing process in which subcontracts are signed before anyone updates the job cost report is a third. All three point at the same weak spot.
Nimbl’s Shannon Facteau, who has managed billing, purchasing, and job costing inside electrical construction businesses, puts the field side of that problem plainly. “We’re supposed to be giving them this visibility, but I wonder how much we’re actually giving them if on their side, they don’t even realize it.”
Our construction accounting guide covers this pattern across a full back office. The short version is that these errors are structural and repeatable, which means they are fixable once, not on a job-by-job basis.
Fixing the pattern once, rather than chasing each job’s version of it, is what gives an office enhanced financial visibility. That visibility covers every job running at the same time, not just the one someone happens to be reviewing that week.
Take the Spreadsheet
The template behind these three examples tracks the same five columns shown above for every cost code on a job. It also includes a job summary that rolls those lines into a single bid, forecast, and variance. Use it to check your own numbers against the pattern in these three examples, not as a substitute for a real chart of accounts.
Being honest about where a spreadsheet stops working is what makes it worth using in the first place. This kind of construction job-costing spreadsheet works well for one job at a time, tracked by one person who remembers to update it. It starts to break the moment you are running several jobs at once, or more than one person is logging costs into it.
It really breaks when you need the numbers to be current today, rather than whatever was true when someone last opened the file. If your answer to that gap is a proper system rather than a better spreadsheet, job costing in QuickBooks is the next stop. It walks you through setting one up without dragging your whole chart of accounts along.
When the Spreadsheet Stops Being Enough
A spreadsheet is a snapshot maintained by whoever remembers to maintain it. The moment coding and cadence stop depending on memory is the moment your financial reporting starts matching what actually happened on the job.
In my experience, the jobs hardest to cost accurately are rarely the ones with the most moving parts on paper. They are the ones where the material cost is not known at the outset. They are the ones where a project manager ends up buying on their own card instead of through a purchase order.
And they are the ones where a job runs long enough that a price swing on lumber or another commodity can undo months of otherwise sound estimating. That pattern appears in all three examples above.
It is exactly what an integrated accounting system is built to catch before it reaches your financial reporting, rather than after. Job costing is one piece of a contractor’s broader financial operations. Pairing it with bookkeeping services that consistently code costs each time prevents the pattern from repeating on the next job.
If your own numbers look more like Example Two or Example Three than Example One, a free construction accounting assessment from Nimbl is the next step. It checks your job costing setup against the same pattern shown in these three examples, as well as your revenue recognition method and spend controls. Then it hands you a plain answer on where the gap actually is.
Dylan Dean, CMA, is Nimbl’s Construction Accounting Lead and works with construction business owners across the U.S.
Connect with Dylan on LinkedIn
FAQs
What Should a Job Costing Spreadsheet Include at a Minimum?
At a minimum, track budget, committed costs, actual costs to date, forecast final cost, and variance for every cost code on the job. Add a summary that rolls those lines into a single bid, forecast, and margin.
Anything less leaves you guessing whether a job is healthy until it closes. A job costing template built around those five columns captures burden, committed costs, and retainage before they catch you by surprise at closeout.
How Do You Cost a Time-and-Materials Job Differently From a Fixed-Price Job?
A firm-fixed-price contract puts the full risk of cost overruns squarely on the contractor, so job costing tracks budget against actual to catch overruns early. A time-and-materials job shifts the risk onto whatever actually gets logged during the work. The job costing question becomes whether every hour and every material pulled actually made it onto the invoice, not whether the job stayed under budget.
Where Does Retainage Appear in a Job Cost Example?
Retainage appears as a gap between your job cost report and your bank balance, not as a line item on the cost side at all. A job can carry a healthy forecast margin on paper, while 5% to 10% of every progress billing sits uncollected until the work reaches substantial completion. That is why a profitable job can still leave a contractor short on cash mid-project.
How Do Change Orders Get Costed Once a Job Is Already Underway?
A change order should be priced and approved before the added work starts, and then added to both the contract value and the cost budget simultaneously. Costed this way, an approved change order moves the job’s total value and total cost together. That keeps it from quietly distorting the margin the way an unpriced scope addition can.
At What Point Does a Job Costing Spreadsheet Stop Being Enough?
A spreadsheet stops working once you are running more than one job at a time, or once more than one person needs to log costs into it. It also stops working once you need current numbers, rather than whatever was true when someone last updated the file. Past that point, a shared file cannot enforce who updates what, or when, and that gap breaks the system before the math ever does.
