The Contractor's Guide to Job Costing: Stop Guessing Your Margins
You finished the job. The bank account says you made money. But did you actually make money on that job, or did the profit from your last project quietly cover a loss on this one? If you can’t answer that with confidence, you’re guessing. And in construction, guessing is how profitable-looking companies go broke.
Contractor job costing is the practice of tracking every dollar a project spends, materials, labor, subcontractors, equipment, and overhead, against what you estimated, so you know your real profit on every job instead of just hoping the numbers work out. This guide walks through the formula, a real worked example, the cost-code system that makes it manageable, the mistakes that quietly erode margins, and how to set it up this week.
What Is Job Costing in Construction?
Job costing, in one sentence
Job costing is the process of assigning every cost on a project to that specific job, then comparing those costs to your estimate to measure true profit, job by job, not just company-wide.
Most contractors run their finances off a profit-and-loss statement: total revenue in, total costs out, profit at the bottom. That tells you whether the business made money last quarter. It does not tell you whether the kitchen remodel you just closed made money, or whether you’re consistently underpricing additions while overpricing baths.
Construction job costing fixes that blind spot. Instead of one company-wide bucket, every cost is tagged to a job and a category. The result is a per-project P&L: you can see that the Davis remodel hit 28% gross margin while the Nguyen addition came in at 11%, and, more importantly, why. That visibility is what lets you bid smarter, catch overruns while you can still fix them, and stop letting winners subsidize losers.
The Job Costing Formula Every Contractor Should Know
At its core, job costing rests on one formula. Everything else is just tracking the inputs accurately.
The Total Job Cost formula
Total Job Cost = Direct Materials + Direct Labor + Subcontractors + Equipment + Allocated Overhead Gross Profit = Contract Price − Total Job Cost Gross Margin (%) = Gross Profit ÷ Contract Price
Each input is a category you’ll track separately so you can see where money actually goes:
- Direct materials, lumber, fixtures, finishes, and anything physically installed on the job.
- Direct labor, your field crew’s wages plus burden (payroll taxes, workers’ comp, benefits). Burden is the part most contractors forget, and it can add 25 to 40% on top of base wages.
- Subcontractors, electrical, plumbing, HVAC, and other trades you contract out.
- Equipment, rentals, fuel, and an allocation for owned equipment used on the job.
- Allocated overhead, a share of the costs that keep your business running (office, insurance, software, your truck) spread across active jobs.
Markup is not margin, and the difference costs thousands
A 25% markup is NOT a 25% margin. If a job costs $80,000 and you add 25% markup, you charge $100,000, but your margin is only 20% ($20,000 ÷ $100,000). To actually keep a 25% margin on $80,000 of cost, you need to charge $106,667. Bidding markup while thinking margin is one of the most expensive math mistakes in construction.
The Three Layers of Cost Tracking: Estimated, Committed, Actual
Here’s where most job-costing advice stops short. Tracking “budget vs actual” is only two-thirds of the picture, and it’s the missing third, committed cost, that catches problems early enough to do something about them.
| Layer | What it is | The question it answers |
|---|---|---|
| Estimated | What you planned to spend, straight from the approved estimate | What should this job cost? |
| Committed | Purchase orders issued and subcontracts signed, money you’re now obligated to spend, even if the bill hasn’t arrived | What am I already on the hook for? |
| Actual | What you’ve actually paid to date | What have I really spent so far? |
The committed layer is the early-warning system. The moment you issue a $42,000 cabinetry PO against a $36,000 cabinetry budget, you know you’re over, in week three, not at closeout when the invoice lands. Budget-vs-actual alone hides that gap until it’s too late to recover. Kaliun’s three-layer job costing tracks all three side by side so the variance shows up the day a commitment is made.
A Real Example: Job Costing an $85,000 Kitchen Remodel
Numbers make this concrete. Here’s a mid-project snapshot of an $85,000 kitchen remodel, broken out by cost code. The job is about 60% complete, so “committed” includes signed POs not yet fully billed, and “actual” is what’s been paid so far.
| Cost code | Estimated | Committed | Actual | Variance vs est. |
|---|---|---|---|---|
| 3000 to Framing & structural | $9,000 | $8,800 | $8,800 | +$200 |
| 6000 to Cabinetry & millwork | $22,000 | $24,400 | $14,000 | −$2,400 |
| 9000 to Finishes (tile, paint) | $11,500 | $11,200 | $6,500 | +$300 |
| 15000 to Plumbing (sub) | $8,000 | $8,000 | $8,000 | $0 |
| 16000 to Electrical (sub) | $7,500 | $7,500 | $7,500 | $0 |
| Direct labor (burdened) | $14,000 | , | $9,200 | on track |
| Allocated overhead | $6,000 | , | $3,600 | on track |
| Totals | $78,000 | , | $57,600 | −$1,900 |
The story the table tells: framing, finishes, and the trades are tracking to plan. But cabinetry is the problem, the signed PO ($24,400) is $2,400 over the $22,000 estimate. Because that overage showed up as a committed cost the day the PO was issued, the contractor caught it mid-project. Options were still on the table: value-engineer the island, push for a vendor credit, or write a change order if the upgrade was client-driven. Spotted at closeout instead, it’s just a $2,400 hole in the margin with no recourse.
On the contract side, this job was sold for $96,000 against an estimated $78,000 cost, a planned 18.75% margin. The current $1,900 net favorable variance means the job is trending slightly better than estimate, even with the cabinetry overage absorbed elsewhere. When milestones are billed through milestone-based invoicing, those payments flow straight into the actual column, keeping the picture current without double entry.
Construction Cost Codes: How to Organize Your Job Costs
You can’t job-cost without cost codes. A cost code is a standardized label for a type of work, framing, plumbing, cabinetry, so that every estimate, PO, bill, and labor hour rolls up the same way across every job. Without them, each project becomes a one-off spreadsheet nobody can compare.
The construction industry already has a standard worth adopting: the NAHB cost code structure, organized by division. Using a recognized framework means your historical data is consistent, your estimates get sharper over time, and a new estimator can read any job without a translation guide. Here’s a starter set to build from:
| Division | Code | Covers |
|---|---|---|
| Preparation | 1000 | Site work, demolition, permits, dumpsters |
| Foundation | 2000 | Excavation, footings, slab, waterproofing |
| Framing | 3000 | Rough carpentry, structural, sheathing |
| Exterior | 4000 | Roofing, siding, windows, exterior doors |
| Mechanical | 5000 | HVAC equipment and ductwork |
| Cabinetry & millwork | 6000 | Cabinets, countertops, trim, built-ins |
| Insulation & drywall | 7000 | Insulation, drywall, taping |
| Plumbing | 15000 | Rough and finish plumbing, fixtures |
| Electrical | 16000 | Rough and finish electrical, fixtures |
Start with a library like this, then adjust the codes to match how you actually bid and buy. The goal isn’t a perfect taxonomy, it’s consistency. Reuse the same library on every project so this year’s actuals become next year’s smarter estimate. Kaliun ships with a construction cost-code library you can adopt or customize in job costing, so you’re not building it from a blank sheet.
5 Job Costing Mistakes That Quietly Kill Contractor Profits
These are the patterns that turn a profitable-looking year into a break-even one, ranked by how much they typically cost.
- Not tracking committed costs. If you only watch budget vs actual, every overrun surfaces at closeout when it’s too late to recover. Tracking POs and subcontracts as committed cost is the single biggest catch-it-early upgrade.
- Lumping all labor into one bucket. “Labor: $30,000” tells you nothing. Without per-phase or per-cost-code labor, you can’t see that your framing crew is fast and your finish carpentry is bleeding hours, so you keep underbidding the same phase forever.
- Forgetting overhead and labor burden. Bidding off raw wages and ignoring payroll taxes, comp, and a share of office costs makes every job look more profitable than it is. You win the bid and lose the margin.
- Confusing markup with margin. Covered above, a 25% markup is a 20% margin. Bid enough jobs on that mistake and you’re working for free.
- Reconciling only at job close. If you job-cost once, after the project ends, it’s a post-mortem, not a steering wheel. Update actuals weekly so you can act while the job is still open.
Spreadsheets vs Job Costing Software: When to Switch
Plenty of contractors start job costing in a spreadsheet, and for a one-or-two-job operation that’s a fine place to begin. The trouble is what a spreadsheet can’t do: update in real time, pull committed costs from your POs automatically, or connect field labor to the office without re-keying.
| Spreadsheet | Job costing software | |
|---|---|---|
| Cost | Free | Monthly subscription |
| Real-time committed costs | Manual, often skipped | Automatic from POs |
| Field-to-office data | Re-keyed by hand | Time & expenses flow in |
| Error risk | High (broken formulas, versions) | Low |
| Budget alerts | None | Threshold alerts per cost code |
| Cross-job reporting | Painful | Built in |
The practical switch trigger: once you’re running more than a handful of active jobs, or you keep finding out about overruns after they happen, the spreadsheet is costing you more than software would. Kaliun runs three-layer job costing on a flat $279/month plan with unlimited users, see pricing, and if you’re comparing options, here’s how Kaliun compares to Buildertrend.
How to Start Job Costing This Week
You don’t need to overhaul everything. Start with your next job and these five steps:
- Set up a cost-code library. Adopt a standard set (like the NAHB structure above) so every job rolls up the same way.
- Cost-load your next estimate. Break the bid into cost codes with estimated amounts, that’s your “estimated” layer.
- Record POs and subcontracts as committed. The moment you commit to a purchase, log it against its cost code.
- Log actuals weekly. Enter bills, payments, and field labor every week, not at the end.
- Review variance every Friday. Spend ten minutes comparing committed and actual to estimate. Act on anything trending over before it closes out.
Frequently Asked Questions
What is job costing in construction?
Job costing in construction is the practice of tracking all costs, materials, labor, subcontractors, equipment, and overhead, against the estimate for one specific project. It produces a per-job profit picture so contractors know which jobs actually make money rather than relying on a company-wide profit-and-loss statement.
How do you calculate job cost for a contractor?
Add up Direct Materials + Direct Labor (including burden) + Subcontractors + Equipment + Allocated Overhead to get Total Job Cost. Subtract that from the contract price for gross profit, then divide gross profit by the contract price for gross margin.
What’s the difference between estimated, committed, and actual costs?
Estimated is what you planned to spend from the approved estimate. Committed is money you’re already obligated to spend through issued POs and signed subcontracts, even before the bill arrives. Actual is what you’ve physically paid so far. Tracking all three catches overruns early, while the job is still open.
Do change orders update the job budget automatically?
In a connected job-costing system they should. When a change order is approved, it adjusts both the contract price and the affected cost-code budget, so your margin reflects the new scope instead of comparing actuals to an outdated estimate.
What software do contractors use for job costing?
Contractors use construction-specific platforms that combine estimating, POs, and accounting so committed and actual costs update automatically. Kaliun is one option built for remodelers and home builders, with three-layer job costing, cost-code libraries, and budget alerts on a flat per-month plan with unlimited users.
Stop Guessing Your Margins
Job costing isn’t accounting busywork, it’s the difference between knowing your numbers and hoping they work out. Set up cost codes, track all three layers, and review variance weekly, and you’ll catch the problems while you can still fix them. Do it on every job, and your estimates get sharper every quarter.
Want to see what three-layer job costing looks like on your projects? Estimate your savings with the ROI calculator, or start a free trial below.