Construction cost codes for small contractors: a short list that actually gets used

Why the 800-code CSI approach fails a small crew, the 12-code starter list we recommend, and the rules that keep codes honest when nobody's an estimator.

7 min read

Search for "construction cost codes" and you'll land on CSI MasterFormat: fifty divisions, hundreds of sections, a numbering scheme built for commercial general contractors with an estimating department. If you run a crew of three, that page has probably convinced you cost codes are big-company bureaucracy you can skip.

You can skip MasterFormat. You can't skip the question it exists to answer: where did the money go on this job? A small shop answers it with ten or twelve codes, not eight hundred — and this guide is that list, plus the handful of rules that keep it working when nobody on the team is an estimator.

What a cost code actually is

A cost code is nothing more than a shared answer to "what kind of cost is this," used the same way on every job. "Lumber run for the Henderson deck" describes one purchase; Materials is its code. The description tells you what happened; the code is what lets you add things up — this job's materials against its labor, this job's materials against the last job's.

That second comparison is the whole payoff, so hold onto it: codes exist so that finished jobs can teach you something about the next bid. Any list that serves that goal is right; any list too fiddly to be used consistently serves nothing.

Why the big-company lists fail small crews

MasterFormat granularity assumes someone whose job is coding costs. On a small crew, costs get coded by whoever is entering receipts at 8pm, and a list with three plausible homes for a tub of joint compound gets guessed at — differently each week. A guessed code is worse than a broad one, because it looks precise. Sixty codes used sloppily tell you less than ten used honestly, for the same reason twenty spreadsheet categories tell you less than seven: half of every week ends up somewhere arbitrary, and the totals stop meaning anything.

So the design rule for a small shop's list is blunt: every code must be pickable in five seconds, by anyone on the team, without asking you. Everything below follows from that.

The starter list

Twelve codes, numbered so they sort and abbreviate cleanly:

Code Name What lands here
01 Materials Everything that becomes part of the work — lumber, pipe, wire, fixtures, paint
02 Labor Your crew's wages and payroll costs for hours on this job
03 Subcontractors Anyone who invoices you for work on the job
04 Equipment rental The lift, the excavator, the scaffold — rented, per job
05 Tools & consumables Blades, bits, tape, gloves — bought for the job but not part of the work
06 Permits & fees Permits, inspections, utility connection fees
07 Disposal Dumpsters, dump runs, hauling debris off site
08 Fuel & travel Fuel, mileage, parking, tolls attributable to the job
09 Professional services Engineering, architecture, surveys, testing
10 Insurance & bonds Job-specific policies and bonds — not your general annual premium
11 Rework & warranty Callbacks and fixing what didn't pass — on your dime
12 Other The holding pen — see the rule below

Two codes deserve a word. 11 Rework feels unpleasant to track, which is exactly why it earns a line: rework buried inside materials and labor is invisible, and invisible rework repeats. And 12 Other is a holding pen, not a home — once a month, look at what's in it. Three costs with the same shape mean the list is missing a code; promote them. An "Other" that stays small is the sign the rest of the list is honest.

Adapt the list to your trade by splitting only where the money is. A remodeler whose materials run half the job might split 01 into rough and finish materials. A landscaper adds plants and aggregate. An electrician may barely use 03. Split a code when it regularly holds a large share of job cost and the split would change a decision — never because more detail feels rigorous.

The cost code list builder starts from this table, adds the splits for your trade, and hands you the list as a CSV.

The rules that keep it working

  1. Five seconds, no asking. If two codes both feel right for a common purchase, the list is wrong — merge them or sharpen the names.
  2. Codes match how you bid. If your estimates are built from materials, labor, and subs, those must be your top codes, or you'll never line a bid up against reality. Don't code at a detail level you don't estimate at.
  3. Keep the list stable. Renaming and renumbering mid-year quietly breaks every comparison with older jobs. Add rarely, at month boundaries, and resist reorganizing.
  4. One person confirms the code. The crew describes what they bought; whoever runs the books assigns the code. Consistency comes from one judgment, not five.

What the codes buy you: bid versus actual

After a few finished jobs, the payoff shows up. Line up what you bid against what each code actually cost — say the Westlake remodel:

Code Bid Actual
01 Materials $18,000 $19,750
02 Labor $12,000 $15,300
03 Subcontractors $9,000 $8,600
04 Equipment rental $1,500 $2,100

Materials ran 10% over — annoying, survivable. Labor ran 27% over, and if the last three jobs say the same thing, that's not bad luck; it's a systematic underestimate, and your next bid can correct it. This is the entire reason cost codes exist. Without them, all Westlake could tell you was "we made less than we hoped." With them, it tells you which line of your next estimate to fix — feedback worth real money, from arithmetic a spreadsheet does for free.

The budget vs. actual tracker keeps that comparison for one job in your browser — the twelve codes already in, variances worked out as you type.

None of it works, though, unless every cost actually lands in a code — which brings back the unglamorous plumbing from our companion guides: a job costing sheet with a category column, and receipts that reach it the same week they're paid.

Where the hand-coded list starts to slip

A twelve-code list and a careful bookkeeper hold up well — until the volume does what volume does. Three jobs running, receipts arriving as photos from four phones, and the coding happens in a tired batch where "close enough" starts winning. The list didn't fail; the evening did.

That's the point where a purpose-built tool earns its keep. Obra runs this exact loop with the tedium removed: your crew sends each receipt as they already would — a photo, a WhatsApp message, or an email — Obra reads it and drafts the entry, and you confirm each one to its job and category. The one-person-confirms rule survives the growth, every job shows where its money went, and nobody codes costs at 8pm. Start free whenever the batch nights stop being worth it.

Get the template

The starter list needs a sheet to live in. The template below is our free job costing spreadsheet — one sheet per job, with a category column ready for the twelve codes above and the totals already wired up. Enter your email below and the download starts right away.

Free download

Not ready for an app? Start with our free Excel template.

A ready-made spreadsheet to track costs and income per project — with categories and the totals already set up.

The download starts right away. We'll also follow up by email with more job-costing help — no spam, unsubscribe anytime.