Job costing
The Contractor Job Costing Spreadsheet: What You Bid vs. What It Cost
You know what you quoted on every job. The estimate went out, the number is on the invoice, it is in your accounting software. What most contractors do not know, with any precision, is what the job actually cost: the real labor hours at the real loaded rate, the real material invoices, the real sub bills including the change orders, the overhead share of that job.
Estimating is a prediction. Job costing is the comparison of the prediction to reality. Without it, every estimate is built on last year's guesses. With it, every estimate gets smarter.
Why most job costing attempts die in month two
The standard advice is one spreadsheet per job: open a new tab, log every cost, compare at the end. The spreadsheet itself is not the problem. The problem is that a tab per job does not aggregate. After six jobs you have six tabs and no answer to the question that matters: am I estimating labor light across the board, or did one job go sideways?
The other problem is data entry timing. If you log costs when the invoice arrives, three weeks after the work, you will stop doing it. The spreadsheet has to be fast enough to use on the tailgate and simple enough that it survives your busiest week. Complexity is the killer. A job costing system you abandon in February helps nothing.
The columns that matter
One row per job. That is the key design decision. One row, all the jobs, so patterns show up in a column you can scan. The columns:
- Job name and number
- Contract price (the final number, including approved change orders)
- Estimated labor hours and estimated labor cost
- Actual labor hours and actual labor cost (hours times your loaded rate)
- Estimated materials, actual materials (from supplier invoices, not from memory)
- Subcontractor costs, estimated and actual
- Overhead allocated to the job (your overhead rate per hour times actual hours)
- Total actual cost
- Gross profit: contract price minus total actual cost
- Gross margin: profit divided by contract price
Ten columns. Everything else is commentary. If a column does not change a bidding decision, it does not belong on the sheet.
What the pattern usually reveals
After eight to ten jobs, the sheet starts talking. The usual revelations, in order of frequency:
1. Labor estimates run light. Rough-in work takes longer than remembered. The jobs that looked like 40 hours were 48. Consistently. This is not a failure of effort; memory compresses the hard jobs and keeps the smooth ones. The sheet does not have that bias.
2. Material waste is real but small compared to labor variance. The 5% waste factor on the estimate covers most jobs. The labor overrun does not.
3. Change orders are half the margin story. Jobs with approved, priced change orders finish at or above target margin. Jobs where the extras were done on a handshake finish below it, every time.
4. One type of job subsidizes another. Service calls carry the shop; the big remodel that felt prestigious made less per hour than a Tuesday of drain calls. The sheet shows this in a way gut feel never will.
None of this is visible without the estimated-versus-actual comparison. Your accounting software knows revenue. Your bank knows cash. Only the job costing sheet knows whether the work was priced right.
The monthly review that makes it work
Fifteen minutes, once a month, before you bid anything new. Look at the completed jobs. For each one under your target margin, write one sentence about why: "underbid labor on rough-in," "material price moved between quote and purchase," "two days of weather delay." Then adjust one input for the next estimates: raise the labor factor on rough-in, add a materials validity window, whatever the sentence points at.
That is the entire system. Log the costs as they happen. Review monthly. Adjust the inputs. Your estimates stop being guesses dressed up as math and start being math built from your own history.
Where change orders fit
Every approved change order gets its own line tied to the job: description, labor hours, materials, price, signature date. Unapproved extras get logged too, marked unapproved, because that red column is the most honest part of the sheet. If you see unapproved work on three jobs in a row, the problem is not the sheet. The problem is the handshake habit on the job site, and now you can see it costing you actual dollars.
Keep it to one sheet
Resist the urge to add tabs for everything: equipment depreciation schedules, crew productivity rankings, subcontractor scorecards. All of that is useful, and all of it is month-six work. Month one is ten columns, every job, updated the same day costs happen. A simple sheet you actually use beats a beautiful system you abandoned.
We built this into the Contractor Business OS: a job-costing tab where every job is one row with estimated versus actual labor, materials, and subs, a profit dashboard that flags every job under your target margin, and a change order log that feeds straight into the invoice. $119 launch price (list $149). The first time the sheet tells you your rough-in estimates run 15% light, it pays for itself.
Put this thinking to work.
The Contractor Business OS turns these ideas into a linked spreadsheet system: estimator, pipeline, profit dashboard, CRM, and expense tracker. $119 launch price (list $149).
See what’s inside →Keep reading
More field notes.
Estimate Template vs. Estimating System: What Actually Wins Bids
A template makes one estimate look good. It does nothing for the next fifty. Here is the difference between a format and a system, and how to move from one to the other.
Business numbersThe 5 Numbers Every Electrical Contractor Should Track Weekly
Are you making money right now? Not last quarter. This week. Five numbers, checked in thirty minutes, tell you whether work is coming in, priced right, and actually getting paid.
The launch notes
Occasional, plain-spoken email.
New products, new playbooks, and practical notes on running a professional practice. No spam, no funnels, no daily drip. Unsubscribe anytime.