By Ryan Kramer, founder of Wisegrid. Last updated July 2026.
Ask a small contractor which of last year’s jobs made money and most of us will tell you about the year. “The year was okay.” The year is not the point. The job is.
QuickBooks tells you about the year. Job costing tells you about the job: the kitchen that quietly ran $6,000 over on materials, the deck that was actually your best margin all summer, the addition where labor ate everything. Without a per-job number, you re-quote next season on vibes, and the money-losing jobs come back.
Job costing is not accounting
It sounds like a bookkeeping chore. It is not. Job costing is one sheet per job that answers one question: where did the money go? Three categories cover a small crew:
- Materials: the lumber package, the shingles, the HVAC unit.
- Labor: hours times rate, yours and your crew’s, subs included or split out.
- Permits and fees: the line everyone forgets and the county never does.
Here is what a real one looks like for a kitchen remodel:
| Line item | Category | Qty | Unit cost | Total |
|---|---|---|---|---|
| Framing lumber package | Materials | 1 | $38,500 | $38,500 |
| Framing crew | Labor | 240 | $85 | $20,400 |
| Roofing shingles + underlayment | Materials | 32 | $410 | $13,120 |
| Roofing crew | Labor | 80 | $78 | $6,240 |
| Electrical rough-in labor | Labor | 120 | $92 | $11,040 |
| HVAC system + install | Materials | 1 | $21,400 | $21,400 |
| Building permits | Permits | 1 | $4,850 | $4,850 |
Every line is quantity times unit cost. In a live sheet the Total column is a formula, so it computes as you type, and there is no re-adding a column at midnight before an invoice goes out.
The three-step routine
- Start the cost sheet the day you quote. Copy your estimate lines in. The estimate IS the first draft of the job cost.
- Add actuals as they happen. The lumber delivery invoice goes in the day it arrives, not at the end of the job from a shoebox. Thirty seconds per line.
- Stack the total against the quote when you close. Quote minus total cost is the job’s real profit. Write it down where you will see it when you quote the next similar job.
Do this for one season and two things happen: your quotes get sharper, because they are built on real numbers, and you start declining the job types that never pencil out. That second one is where the money is.
Where the leaks hide
- Un-logged extras. The “while you’re here” requests that never became change orders show up in job costing as materials and hours with no revenue against them. If a job’s costs look mysteriously high, this is usually why.
- Your own hours. Small-crew owners chronically cost their own labor at zero. Put yourself in at a real rate; a job that only works when you work free is not a working job.
- Category drift. If everything lands in one “misc” bucket, you learn nothing. Materials, labor, permits: three buckets is enough to see the shape of the job.
The fast setup
Grab the free construction job costing template: a live sheet with the categories, the qty and unit cost columns, and the total formula already wired. It is literally just like Excel to use, so there is nothing to learn, and the same sheet lives next to your change order log and draw schedule for the job.
For the two-minute version of the question, run your numbers through the free job profit calculator: contract amount in, materials, labor, and subs in, profit and margin out. If the margin surprises you, the cost sheet will tell you why.