top of page

Job Costing for Contractors: How to Know What Every Job Really Made

Jul 13
11 min read

The short answer: Job costing for contractors means tracking the labor, materials, subcontractors and equipment on each job against that job's budget, using job numbers and cost codes, so you can see whether a job is making money while it's still running. To do it well, you need three things that most setups skip: a fully burdened labor rate, open commitments (POs and subcontracts) in the report, and a forecast of the cost to finish that gets updated every week or two.

If your company-wide P&L looks fine but you can't say which jobs paid for the year and which ones ate the profit, this guide is for you. It's written for owners of construction and trade businesses doing roughly $500K to $20M a year. You're busy, so it's step by step, with a fully worked example.

What job costing is (and what it isn't)

Your regular P&L answers one question: did the company make money this period? Job costing answers a more useful one: which jobs made money, which didn't, and why.

A job cost system has three parts:

  1. A budget for each job, built from the estimate you won the work with.

  2. Actual costs recorded against that job, coded so you can see where the money went.

  3. A forecast of the cost to finish, so you can see where the job will end up, not just where it is today.

Most guides stop at the first two. The third one is what turns job costing from a history lesson into a management tool. It's also the foundation of your WIP schedule. If your job costs are wrong, your percent complete, earned revenue and over/underbillings are wrong too.

Job costs vs. overhead

  • Direct job costs are costs you wouldn't have if you didn't do this job. They include field labor, materials, subcontractors, equipment rentals, permits, dumpsters and job-specific insurance or bonds.

  • Overhead is the cost of being in business: the office, estimators, admin staff, owner's salary, trucks that aren't assigned to a job, software and marketing.

Pick a policy for gray areas (a superintendent who covers three jobs, a shop truck, small tools) and apply it the same way on every job. Consistency matters more than which choice you make, because a policy that changes job to job makes jobs impossible to compare.

Step 1: Turn the winning estimate into a job budget

Before the first hour is worked, every job should get:

  • A job number. Use a simple, sequential format such as 26-014.

  • A budget by cost code, copied from the estimate, with labor shown in both hours and dollars.

  • The contract value, with change orders tracked as separate lines and never typed over the original.

Keep the original budget frozen. When scope changes, add an approved budget revision next to it. That way, at the end of the job you can tell the difference between "we estimated it wrong" and "the owner added work."

Step 2: Build a cost code list your crew can actually use

The most common mistake is a cost code list with 200 codes. Nobody in the field will use it correctly, so you get guesses instead of data.

A good structure has three layers:

Layer

Question it answers

Example

Job number

Which job?

26-014

Cost code (phase)

Which part of the work?

200 Rough-in

Cost type

What kind of cost?

L = labor, M = material, S = sub, E = equipment, O = other

Start with 8 to 15 phases that match how you estimate. An electrical contractor might use permits and mobilization, rough-in, gear and fixtures, trim, low voltage, and testing and closeout. A remodeler might use demo, framing, MEP, drywall, finishes and punch.

The rule: use the same codes in your estimate, your timecards, your POs and your accounting system. If the estimate says "Rough-in" and the timecard says "Wiring," you can't compare them.

Step 3: Calculate a fully burdened labor rate

This is where most small contractors lose money without knowing it. If you cost labor at the hourly wage, every job looks more profitable than it is.

A burdened labor rate includes what you pay on top of wages, spread over the hours that can actually be charged to jobs:

  • Employer Social Security (6.2%) and Medicare (1.45%), per the IRS

  • Federal unemployment tax (FUTA): 6.0% on the first $7,000 of each employee's wages, usually reduced to 0.6% after the state credit, per the IRS

  • State unemployment tax, at your state's rate and wage base

  • Workers' compensation premiums

  • Employer-paid health, retirement or union benefits

  • Paid time off and holidays

  • Non-billable time: shop time, training, weather days

The formula:

Burdened hourly rate = total annual cost of the employee ÷ annual hours chargeable to jobs

Worked example: burdened rate for one electrician (hypothetical numbers)

Every number below is made up for illustration. Use your own payroll, insurance and state rates.

Item

Calculation

Annual cost

Wages

$32.00 × 2,080 paid hours

$66,560.00

Employer Social Security + Medicare

7.65% × $66,560

$5,091.84

FUTA (after full state credit)

0.6% × $7,000

$42.00

State unemployment (hypothetical 2.7% on a $9,500 wage base)

2.7% × $9,500

$256.50

Workers' comp (hypothetical $6.00 per $100 of payroll)

$66,560 × 6%

$3,993.60

Health insurance (employer share, hypothetical)

—

$6,000.00

Total annual cost


$81,943.94

Now look at the hours. Of 2,080 paid hours, this electrician has 80 hours of paid holidays and PTO, plus about 120 hours of shop, training and weather time that can't be charged to a job. That leaves 1,880 chargeable hours.

$81,943.94 ÷ 1,880 = $43.59 per chargeable hour

That's 36% higher than the $32 wage. If your estimates and job cost reports use $32, every labor-heavy job is overstating its margin.

Two cautions:

  • Don't double count. If PTO is already inside the total cost and taken out of the chargeable hours, don't add another PTO percentage on top.

  • Update it when wages, comp rates or benefits change, and at least once a year.

Step 4: Capture costs at the source, every day

Job costing breaks down when costs are coded weeks later from memory. Set up a short routine:

  1. Crew: log hours daily by job and cost code, using your time app or paper, whichever gets done.

  2. Foreman: approve hours, note quantities installed, and flag any work outside the original scope.

  3. Purchasing: every PO and every receipt gets a job number and cost code when it's ordered.

  4. Office: match vendor bills to POs, chase missing codes, and make sure payroll and the job cost report agree.

Tools like Procore, Buildertrend or Foundation can handle much of the field capture. QuickBooks and Sage Intacct can carry job and cost code detail on the accounting side. The software matters less than having one person own the process.

Step 5: Track commitments, not just bills

A vendor bill shows up weeks after you order the material. A subcontractor bills monthly. If your job cost report only shows bills you've paid or entered, a job can look under budget right up until the invoices land.

Commitments are the unbilled balance of POs and subcontracts you've already signed. Add them to the report the day you sign them. When the bill arrives, it reduces the commitment, so nothing gets counted twice.

Step 6: Forecast the cost to finish

This is the step that separates a useful job cost report from a pile of numbers.

Forecast final cost = actual cost to date + open commitments + uncommitted cost to complete

The "uncommitted cost to complete" is the project manager's best estimate of everything still to come that isn't under a PO or subcontract yet: remaining labor hours, rentals, small materials, punch list and closeout.

Ask the PM to forecast remaining hours by cost code, not a percent complete. "We need about 130 more hours to finish rough-in" is a number you can check. "We're about 80% done" usually turns out to be optimistic.

Step 7: Review every active job on a fixed rhythm

Every week or two, sit down with each PM and the person who keeps the numbers. Ask three questions per job:

  1. What changed since last time? Look for labor overruns, price increases, rental extensions, rework and scope creep.

  2. What will it really take to finish? Update remaining hours and costs.

  3. Who's doing what about it, and by when? That might mean writing up a change order, adjusting the crew, or calling the supplier.

Worked example: an electrical job at the halfway point (hypothetical)

This example is entirely hypothetical. It uses the $43.59 burdened rate from above.

A contractor wins a tenant build-out for $180,000. The budget from the estimate:

Cost code

Budget

100 Permits & mobilization

$3,000

200 Rough-in labor (700 hrs)

$30,513

210 Rough-in material

$22,000

300 Trim labor (550 hrs)

$23,975

310 Gear & fixtures

$36,000

400 Low-voltage sub

$18,000

500 Lift rental

$4,500

600 Testing & closeout labor (150 hrs)

$6,539

Total budgeted cost

$144,527

Budgeted gross profit

$35,473 (19.7%)

Six weeks in, the bills entered so far total $64,378, and the owner feels fine. Here's the full job cost report:

Cost code

Budget

Actual to date

Open commitments

Uncommitted to finish

Forecast final

Variance

100 Permits & mob.

3,000

3,150

0

0

3,150

(150)

200 Rough-in labor

30,513

33,128 (760 hrs)

0

5,667 (130 hrs)

38,795

(8,282)

210 Rough-in material

22,000

19,400

1,800

1,500

22,700

(700)

300 Trim labor

23,975

0

0

26,154 (600 hrs)

26,154

(2,179)

310 Gear & fixtures

36,000

0

34,850

1,500

36,350

(350)

400 Low-voltage sub

18,000

6,000

12,000

0

18,000

0

500 Lift rental

4,500

2,700

0

2,700

5,400

(900)

600 Testing & closeout

6,539

0

0

6,539

6,539

0

Total

144,527

64,378

48,650

44,060

157,088

(12,561)

What the report shows:

  • Forecast gross profit fell from $35,473 (19.7%) to $22,912 (12.7%). Margin like that rarely disappears all at once. It leaks out one cost code at a time.

  • Rough-in labor is the main problem. The crew has used 760 hours against a 700-hour budget and still needs about 130 more. The PM also raised the trim forecast to 600 hours, because the same crew and conditions are likely to keep running slow.

  • The lift rental is running long because of the labor delay. One problem is causing another.

  • There's a pending change order for $6,500 of added circuits the tenant asked for. It is not in the contract value yet, because it isn't approved. Keep it on a separate line and push to get it signed.

Now add overhead. Say this contractor's overhead is a hypothetical $420,000 a year against about $2.8M of expected direct job cost. That's an overhead recovery rate of 15%. At the forecast cost, this job needs about $23,563 of gross profit just to cover its share of overhead ($157,088 × 15%), and it's now forecasting $22,912. At the halfway point, the job is on track to roughly break even after overhead. The owner can still act: get the change order signed, look at crew mix on trim, and send the lift back sooner. Without the forecast column, they'd have found out at closeout.

Job costing checklist

Copy this into your monthly close process:

  • [ ] Every active job has a job number and a budget by cost code from the estimate

  • [ ] The original budget is frozen; approved revisions sit on separate lines

  • [ ] Change orders are tracked separately: approved, pending, rejected

  • [ ] Cost codes match between estimating, timecards, POs and accounting

  • [ ] The burdened labor rate is recalculated for this year's wages, comp and benefits

  • [ ] All hours for the period are approved and coded (no "unassigned" labor)

  • [ ] Every PO and subcontract is entered as a commitment when signed

  • [ ] Vendor bills are matched to POs, so nothing is double counted

  • [ ] The PM has updated remaining hours and cost to finish by code

  • [ ] Forecast final cost and forecast margin are reviewed for every job

  • [ ] Jobs whose forecast margin dropped more than a set threshold (you pick it) get an action plan

  • [ ] Payroll, AP and the job cost report agree with the general ledger

  • [ ] Closed jobs get a final estimate-vs-actual review that feeds back into estimating

Simple template columns for a job cost report (spreadsheet or software): Cost code · Description · Original budget · Approved revisions · Current budget · Actual to date · Open commitments · Uncommitted cost to finish · Forecast final cost · Variance · Notes / owner / due date.

Common job costing mistakes

  1. Costing labor at the wage rate. As the example shows, this can understate labor cost by a third or more.

  2. Leaving commitments out. The report looks great until the switchgear invoice arrives.

  3. Using "percent complete" from gut feel. Forecast remaining hours and dollars instead.

  4. Counting pending change orders as revenue. Track them separately until they're signed.

  5. Dumping costs into "general job" or overhead when the receipt isn't coded. Fix the habit, not the report.

  6. Overwriting the original budget. You lose the ability to learn from your estimates.

  7. Reviewing only at year-end. By then, the only thing left is to learn the lesson.

  8. Never closing the loop. If the final job review doesn't change the next estimate, you'll make the same miss again.

  9. Ignoring cash. A job can be profitable on paper and still drain cash if billing lags or retainage piles up. Watch billing and collections alongside job costs.

Job costing and taxes: a quick note

Job costing is a management tool first. How you recognize revenue on your tax return is a separate question. For tax purposes, long-term construction contracts generally fall under IRC section 460. There is a small contractor exception for contracts expected to be completed within 2 years by contractors under an average annual gross receipts threshold, which is $32 million for tax years beginning in 2026 (IRS Rev. Proc. 2025-32, section .30). Recent law changes also affected residential contracts (IRS Instructions for Form 8697). Good job costing makes any method easier and gives your tax preparer clean numbers. The method itself is a conversation to have with your CPA.

When to bring in a CPA

You can run basic job costing yourself. It's time to bring in a CPA-led accounting team when:

  • Your job cost reports and your P&L don't agree, and no one can explain why

  • You're bidding larger work and your banker or surety is asking for a WIP schedule

  • Margins look fine on the P&L, but cash is always tight

  • You've never calculated a burdened labor rate, or it's more than a year old

  • Your PMs don't trust the reports, so they keep their own spreadsheets

  • You're growing past the point where the owner can keep every job in their head

A good accountant won't just record transactions. They'll set up the cost code structure, build the burdened rates, run the monthly job cost review with your PMs, and tie it all into a WIP schedule your lender will trust.

FAQ

What is job costing in construction?

Job costing is tracking all direct costs for each construction job (labor, materials, subcontractors, equipment and other job-specific costs) against that job's budget, so you can see each job's profit while it's in progress and after it's done.

How do I calculate a burdened labor rate?

Add up everything an employee costs you in a year: wages, employer payroll taxes, workers' comp, benefits and paid time off. Then divide by the hours that can actually be charged to jobs. In our hypothetical example, a $32 wage became a $43.59 burdened rate.

How many cost codes should a small contractor use?

Usually 8 to 15 phases that match how you estimate, combined with a few cost types (labor, material, sub, equipment, other). Add detail only when someone will use it to make a decision.

Can I do job costing in QuickBooks?

Yes. QuickBooks can track costs by job (customer or project) and by item or class, which can serve as cost codes. For forecasting and commitments, many contractors add a construction tool or a structured spreadsheet alongside it. What matters most is consistent coding and a regular review.

How often should I review job costs?

Weekly or every two weeks for active jobs, plus a full review at each month-end close. Fast-moving or troubled jobs deserve weekly attention.

What's the difference between job costing and a WIP schedule?

Job costing tracks costs and forecasts for each job. The WIP schedule uses those numbers, especially cost to date and forecast final cost, to calculate percent complete, earned revenue and over/underbillings for your financial statements.

Want a second set of eyes on your job costs?

If you're not sure your job cost reports are telling you the truth, we're happy to take a look. Our Free Financial Checkup is a 30-minute call with a CPA. We'll look at how you're tracking jobs today and give you honest next steps, whether or not you work with us.

This article is general information, not tax or legal advice. Rules and rates change. Confirm the details for your situation with your CPA.

Comments


bottom of page