GenayaGenaya
Pricing
Support
Start for free
All postsOperations

Construction job costing: a worked example from bid to final margin

By the Genaya TeamApril 14, 20267 min read

Every guide to construction job costing explains the same theory: set up cost codes, track estimated versus actual, review regularly. What the guides never show you is a real job, so they never show the moment that matters - the week a code goes over budget and you either catch it or eat it.

So here is the whole loop run on one realistic job: an $85,000 kitchen and main-floor remodel, handled by a $2M-a-year remodeler with two crews. Real budgets, real loaded labor rates, and the exact week the framing code started leaking. Plug in your own numbers as you read - the math is the point.

Cost codes that mirror the bid

Job costing usually fails at setup, not in the field. A contractor downloads a cost code library built for a commercial GC - forty-plus codes - and the crew starts guessing. Is blocking for cabinets 'rough carpentry' or 'framing labor'? Three people make three different calls, and six weeks later the estimated-vs-actual report is fiction. Five codes used consistently beat forty used sporadically.

The rule that makes the whole system work: your construction cost codes must mirror your bid categories. You will compare estimated to actual per code, so if you estimate in five buckets, you track in five buckets. Here is the bid for our remodel, coded exactly as it will be tracked:

  • Demo and disposal: $6,000. Tear-out labor, dumpsters, haul-off.
  • Framing and carpentry: $14,500. 230 crew hours at a $44 loaded rate ($10,120) plus $4,380 in lumber and hardware.
  • Mechanicals: $17,250. Plumbing, electrical, and HVAC subcontracts, rough-in and trim.
  • Finishes: $21,500. Drywall, tile, paint, cabinets, and counters - materials and labor.
  • General conditions: $4,500. Permits, supervision hours, floor protection, final clean.

Direct costs total $63,750 against an $85,000 contract - a $21,250 gross margin, or 25%. That 25% is the number every weekly review on this job exists to defend.

Labor burden: the $32 carpenter who costs $44

Notice the framing budget was built on a $44 loaded rate, not the $32 wage the carpenter actually sees. The gap is labor burden, and skipping it is the most common way remodelers price a job underwater before demo starts. Labor is both the largest cost on a job like this and the most variable one, so a burden mistake compounds across every hour on every code.

  • Base wage: $32.00 per hour
  • Employer payroll taxes (FICA, FUTA, SUTA): about $3.20
  • Workers comp at carpentry class rates: $2.60 to $4.30, depending on your state and claims history
  • General liability tied to payroll: $1.00 to $1.40
  • Health contribution, PTO, phone, small tools: $3.20 to $5.10

Loaded cost: $42 to $46 an hour - call it $44. A contractor who bids those 230 framing hours at bare wages thinks the labor line is $7,360 when it is really $10,120. That is $2,760 of margin gone before the first wall opens, and nothing in the field will ever look wrong.

Weeks 1-3: where the leak showed up

The job runs on one discipline: every Friday, actual plus committed cost per code goes next to that code budget. Week 1 is demo: hours coded daily from phones, dumpster invoices coded on arrival. Friday review: demo closes at $5,720 against $6,000. Green. Fifteen minutes, done.

Week 2, framing starts, and the crew opens the load-bearing wall between the kitchen and dining room. There is rot in the rim joist, and the existing header is undersized for the new opening. The lead carpenter flags it on Tuesday - but the real story shows up in the hours.

Week 3, Friday review: framing actual plus committed sits at $17,110 against the $14,500 code budget. That is $2,610 over - an 18% overrun on the code, visible while the studs are exposed. The breakdown is exact because the time was coded daily: 46 unplanned carpentry hours at the $44 loaded rate ($2,024) plus $586 in LVL and hardware for the new header.

This is why paper timesheets quietly kill job costing for contractors. On paper, those 46 hours surface after payroll runs - a week or two after the work happened, sometimes after the crew has moved on. You learn about the overrun when it is history. Daily coded time is the only reason the week-3 number was visible in week 3.

+18%framing overrun visible at the week 3 review - $17,110 against a $14,500 code budget
46 hrsunplanned carpentry hours at the $44 loaded rate behind the overrun
$3,480change order signed the same week, recovering the cost plus the bid margin

The change order that put the margin back

Because the overrun surfaced while the framing was exposed, the homeowner conversation was straightforward: photos of the rot, the engineer's header spec, and a change order priced at cost plus the job's margin - $2,610 of cost divided by 0.75 comes to $3,480. Signed Thursday of week 3, before insulation went in. The contract moved to $88,480 and the target margin stayed intact.

Now run the monthly-review version of the same job. The overrun surfaces at the end-of-month costing meeting - week 6 or 7, drywall hung, crew on the next job. The rot is buried behind painted walls, the homeowner's memory is fuzzy, and the change order sits somewhere between awkward and uncollectible. Same job, same rot, same 46 hours - the only variable is when you looked. Weekly reviews catch overruns while the crew is still on site; monthly reviews just document them.

The rest of the job stayed boring, which is the goal. Mechanicals came in $340 over on a plumbing rough-in change, caught in week 5 and absorbed. Finishes ran $380 over on tile quantity. General conditions drifted $150. Boring is what a working job costing system feels like.

Overhead, and the margin that matches the bank

Final gross numbers: $88,480 of revenue against $66,950 of direct cost - demo $5,720, framing $17,110, mechanicals $17,590, finishes $21,880, general conditions $4,650. Gross profit of $21,530, a 24.3% margin against the 25% bid. On most P&Ls, that is where job costing stops. It should not, because gross margin is not what lands in the bank.

Insurance, the office, the trucks, software, and every estimating hour spent on jobs you did not win - none of it codes to a job, and all of it is real. Divide last year's overhead by last year's revenue to get your overhead rate: this remodeler carried $184,000 of overhead on $1.84M of revenue, a 10% rate. Applied to this job, that is $8,848 of allocated overhead. Net job profit: $12,682, or 14.3%.

That 14.3% is the number that should reconcile to your bank account. Skip the allocation and every job looks about ten points better than the company actually performs - the contractor who swears every job made money while the bank says otherwise.

One job, five codes, a Friday habit, a loaded labor rate, and one change order signed on time. That is the entire discipline. Run your last finished job through this loop with your own numbers - most contractors who do find their own week 3 in the framing code.

Frequently asked questions

Five to eight, mirroring your bid categories - for a remodeler, something like demo, framing, mechanicals, finishes, and general conditions. A forty-code library borrowed from a commercial GC produces miscoded hours and a meaningless report. Add a code only when you repeatedly need to split a bucket to make a decision.

More from the blog

View all
Genaya

Run your whole operation on one platform

Calls, scheduling, estimates, invoices, payments, and AI - one thread per client, across 36 connected products.