Skip to main content

Job costing

Job costing for contractors: what it is and how to set it up

Company-level profit tells you almost nothing about which jobs earned it. Here is the cost code structure and setup sequence that makes job margin visible.

8 min read · Updated

Job costing is the practice of assigning every dollar of cost to the specific job that caused it, so you can compare what a job earned against what it cost to deliver. Most contractors already track revenue by job because they invoice that way. Cost is where it falls apart: material, labor, and subcontractor spend gets coded to company-wide expense accounts, and job margin becomes an estimate made from memory.

The practical consequence is that you cannot tell a good bid from a bad one. Two jobs at the same contract value can differ by twenty points of margin, and without cost by job you learn that only in aggregate, months later, if at all.

The five cost codes that cover most trades

Elaborate cost code systems fail because nobody maintains them. Start with five categories, apply them consistently, and add detail only where a decision depends on it.

  • Labor — your own crew's hours, at a burdened rate rather than base wage.
  • Materials — anything consumed on the job, split at the point of purchase entry.
  • Subcontractors — trade partners billed to the job, with W-9 status tracked alongside.
  • Equipment — rental, or an internal rate for owned machines that reflects payment, fuel, and repair.
  • Other direct cost — permits, dumpsters, tipping fees, temporary power, travel.

Everything that does not belong to one job — insurance, office rent, admin salary, software, marketing — stays in overhead. Resist the urge to allocate overhead into jobs early on. Direct cost accuracy first; allocation is a refinement, and a wrong allocation is worse than none.

Burdened labor: the number most contractors underestimate

A crew member at $30 per hour does not cost $30 per hour. Add employer payroll taxes, workers' compensation — which in construction classes can be a substantial percentage of wages — plus any benefits, paid time off, and non-productive time. The loaded cost is commonly twenty-five to forty percent above base wage, and workers' comp rates vary widely by trade and by state.

Calculate your own rate rather than borrowing a rule of thumb: take total annual labor cost for the crew, including taxes, comp premium, and benefits, and divide by the actual productive hours billed to jobs during the year. Bidding at the unburdened wage is one of the most reliable ways to book a full year of unprofitable work.

Setting it up in QuickBooks Online

  1. Turn on projects, and enable billable expenses and cost tracking in account settings.
  2. Create a project per job, named the way your field team refers to it, so entry is unambiguous.
  3. Build a service item list that mirrors the five cost codes; items, not accounts, are what carry cost codes into job reports.
  4. Enter your bid budget by cost code at job setup, even if the estimate was built in another tool.
  5. Split every supplier bill and card charge to a job at entry — retroactive splitting is where accuracy dies.
  6. Allocate payroll hours to jobs at the burdened rate, using whatever time tracking your crew already uses.
  7. Reconcile monthly and review budget versus actual by cost code while the job is still open.

Reading the report once you have it

A profit and loss by job is the first payoff. Sort by gross margin percent rather than dollars — the largest jobs are frequently not the most profitable, and pattern recognition across a dozen jobs is what should change how you bid. Look for cost codes that consistently run over budget: if labor exceeds estimate on every job of a given type, the problem is in your estimating assumption, not in the crew. See how we structure job costing for general contractors shows what that report looks like in practice.

Give it two or three months before drawing conclusions. Early job cost data is noisy while coding habits settle, and the value compounds once you have enough completed jobs to compare like with like.

A worked example: two decks, same price, different jobs

You build two cedar decks in the same month, both sold at $18,500. Without job costing they are identical entries on your income statement. With job costing they look nothing alike.

  • Deck A — 96 crew hours at a burdened $42 per hour ($4,032), $6,900 material, $1,100 for the railing sub, $350 permit and dumpster. Direct cost $12,382, gross profit $6,118, margin 33 percent.
  • Deck B — same drawings, but a sloped lot and three trips back for punch items. 148 hours ($6,216), $7,400 material after a lumber price move, $1,100 railing sub, $600 permit, dumpster, and an extra equipment rental. Direct cost $15,316, gross profit $3,184, margin 17 percent.

Averaged together they read as a 25 percent month, which is a number that teaches you nothing. Separated, they tell you something you can act on: sloped lots need a site-condition line in the bid, and punch-list trips need to be scheduled and priced rather than absorbed. That is the entire point of job costing — not a tidier report, but a bid you can defend next time.

How the burdened rate changed the answer

Burdened rate means the true hourly cost of an employee — base wage plus employer payroll taxes, workers compensation premium, and benefits. At the base wage of $30, Deck B would have shown $4,440 of labor and a 24 percent margin, and you would have concluded the job was fine. The $12 per hour of burden is the difference between a job you would repeat and one you would price differently.

What to do in your first month

  1. Pick the five cost codes above and write them down. Do not customize yet.
  2. Calculate one burdened labor rate for your crew and use it everywhere, even if it is approximate. Approximate and applied beats precise and unused.
  3. Set up every currently active job as a project, and enter its bid budget by cost code.
  4. Make a rule that no supplier bill or card charge gets entered without a job on it. If the job is genuinely unknown, it is overhead, and say so deliberately.
  5. At month end, run job profitability and read it out loud against your bids. That fifteen minutes is where the money is.

Signs your job costing is not working yet

  • Job margins that all land suspiciously close to each other — usually a sign costs are being spread rather than assigned.
  • A large unassigned or general job absorbing spend.
  • Labor cost on jobs that is well below your payroll total for the same period.
  • Margins that change materially weeks after a job closes, which means costs are arriving late.

This article is general information about bookkeeping practice, not tax, legal, or accounting advice. Crew Bookkeeping is not a CPA firm. Confirm anything with a bearing on your filings with a qualified tax preparer.

Find out what your jobs are really earning.

Get a free review of your current books — no obligation, no long-term contract.