Job Costing for Contractors: How to Know Your Real Margin on Every Project
How small contractors track labor, materials, and subs against the contract to know true profit per project and phase — not a year-end guess.
Ask a small contractor what they made on their last job and you'll usually get one of two answers: a shrug, or a number that's really just "contract price minus the big receipts I remember." The honest answer for most shops is that margin per job is discovered once a year, at tax time, as a single blended number — by which point it's too late to do anything about the jobs that quietly lost money.
Job costing is the fix. It's not complicated in principle: track what each job actually costs — labor, materials, subs — against what you contracted it for, while the job is running. The hard part has always been the bookkeeping. This guide covers how to do it in practice, and where software (including our product, Mesh8) takes the manual work out of it.
Why year-end accounting can't save you
Your P&L tells you whether the company made money. It can't tell you that your bathroom remodels run 34% gross margin while your deck jobs run 9%, that Phase 2 of the Alvarez project ate three extra crew-days, or that one client's "small changes" turned a profitable job into a break-even one. Those are job-level facts, and they're precisely the facts that should drive what you bid, what you charge, and which work you chase.
The contractors who grow profitably aren't necessarily better builders — they know their numbers per job, per phase, while there's still time to react.
The three ingredients of true job cost
1. Labor — the biggest cost and the least tracked. Materials leave receipts. Labor evaporates. And small-crew labor is genuinely fiddly to cost: one person is salaried, another is on a daily rate, two are hourly, someone hits overtime in week three, and a crew member splits a day across two jobsites. Doing this in a spreadsheet means maintaining rate tables and re-deriving costs every week — which is why almost nobody does it.
This is the core of how Mesh8 approaches job costing: every workday becomes a cost, automatically. You set each person's pay — hourly, salary, or daily rate — and when time is logged against a project, Mesh8 costs it at the right rate, overtime-aware, and rolls it up by project, by phase, and by worker. Salaried workers get their time allocated across the jobs they actually worked. No rate lookups, no Friday math. Pay rates stay visible only to owners; crew leads just see schedules and tasks.
2. Materials and subs, logged when they happen. The discipline that matters: log the expense the week it occurs, tied to the job (ideally the phase). A receipt logged in thirty seconds on a phone beats a perfectly categorized receipt reconciled four months later — because only the first one can change your behavior mid-job.
3. Change orders, priced and captured. Scope creep is the silent margin killer. Every "while you're here, could you also…" is either a change order or a donation. Mesh8 versions change orders and tracks approvals, so the contract value your margin is measured against is the real current contract — not the number you signed in March.
Cost by phase, not just by job
Whole-job costing tells you that you lost money. Phase-level costing tells you where — and that's where the lessons live. If your finish phases consistently blow their labor budget while demo comes in under, that's not bad luck; that's a bidding correction worth thousands on every future job.
Because Mesh8 projects are phased from the start (that's also how progress invoicing works), job costs land in phases automatically. Profit per project and per phase is a report you open, not a spreadsheet you build.
A practical weekly rhythm
You don't need an accounting degree — you need fifteen minutes a week:
- Daily, in the field (a minute, tops): crew time gets logged against the job; site updates capture what happened.
- Weekly, in the office: glance at each active job's cost against its contract. Log any straggler expenses. Ask one question per job: is this job on track to make what I bid it to make?
- At every scope change: write the change order before the work happens. Approval first, work second.
- At job close: compare final margin to bid margin, per phase. Feed what you learn into the next estimate — Mesh8's estimating library (your cost catalog and assemblies) is where those corrections accumulate, so next quarter's bids carry this quarter's lessons.
What good looks like
A shop that job-costs properly knows, at any moment: the labor cost of every active job to date, margin by phase on finished work, which job types are winners, and what an extra crew-day actually costs them. When they bid, they bid from evidence.
That's the loop Mesh8 is built around — estimate → phased project → time and cost tracked as they happen → progress invoices → real profit per job and phase, with payroll export at the end of the week. One system, so the numbers agree with each other.
Try Mesh8 free for a month — full access, no credit card. Put one live job in it and see its real cost by next Friday.
Run your next job in Mesh8.
One month free with full Pro access — no credit card, flat price, never per-seat.
Start free trial