Skip to main content
2,200+ service businesses benchmarked. Do you know your gross profit per labor hour? See where you stand →
Level
Pillar guide

Job Costing for Contractors

Median contractor job margin is 44.3% across 1.75M completed jobs, but that number is only useful when your labor, material, and subcontractor costs are attached to the same work. This guide is the playbook for building job costing that owners can actually use.

Try the 2-min diagnostic

44.3%

median gross margin across completed jobs

10.8-75.1%

P10 to P90 job-margin range

51%

of jobs are service calls under 4 hours, carrying about 9% of revenue

What job costing actually is, and what it isn't

Job costing is the practice of allocating every dollar of cost, labor, materials, equipment, subcontractors, overhead, to the specific job that consumed it. The output is one number per job: gross margin. The input is a process most contractors never finish setting up.

Most contractors think they have job costing because their FSM tracks job revenue. They don't. Revenue is half the equation. Without cost allocation tied to the same job, you have a revenue ledger and a payroll ledger, but no margin.

The takeaway: If you can't pull a list of every job last month with revenue, cost, and margin in three columns, you don't have job costing. You have a revenue report.

The job-costing problem: revenue is only half the equation

Across 1,747,089 completed jobs from 1,791 companies, Level measured a 44.3% median job-level gross margin. That calculation is only possible when labor, materials, and subcontractor cost are tied to the same job as revenue.

This is the silent killer of contractor profitability. Profitable jobs subsidize unprofitable ones, the owner sees a healthy company-level P&L, and individual losers stay invisible until cash gets tight.

The fix starts with operational discipline, every timesheet codes to a job, every PO references a job, every receipt gets allocated, but it requires accounting to mirror the field. Most contractors stop at one of those two halves.

What good looks like: percentile benchmarks

Level's completed-job distribution runs from 10.8% at P10 to 75.1% at P90, with a 44.3% median. The spread is why a blended company P&L cannot tell you which job types need a pricing or scope correction.

The operational standard is simple: every timesheet, PO, receipt, and subcontractor bill maps to a job before the monthly close. That lets you separate a real pricing problem from incomplete job data.

Get the next one

Get next week's benchmark by email

Real numbers from 2,200+ service businesses. One email a week.

The small-jobs trap: where margin blindness compounds

767,554 service calls under 4 hours make up 51% of the job count in our dataset and about 9% of revenue. Jobs under 24 hours are 93% of the count and about 27% of revenue. Job count and revenue share run in opposite directions, and the small end consumes more than half the operational complexity.

Most cost tracking discipline gets applied to the big jobs. The small ones get bucketed, billed, and forgotten. If even 20% of those small jobs run at a loss, that's $140M in revenue subsidizing losses across the dataset, and nobody can see it.

The fix isn't to chase a perfect time sheet on every $200 service call. It's to use job-type averages from the jobs you DO track to flag the ones that look out of pattern. A $300 job that took 6 hours and used $150 in parts isn't profitable, but it'll never get flagged unless you're building the average and comparing.

Fixing the process: the 90-day playbook

  • Audit your last 90 days of completed jobs. Pull every job with revenue and check whether labor cost, material cost, and subcontractor cost are coded to that job. Compute the percentage. If it's under 80%, the problem is operational, not accounting.
  • Set a rule: every timesheet codes to a job, every PO references a job, every credit-card receipt gets allocated within 7 days. No exceptions. The exceptions are where margin disappears.
  • Pick a job-type taxonomy you can actually maintain. Five categories beat fifty. PM, callback, install, T&M project, change order is enough for most service contractors.
  • Build the weekly report: every job completed last week with revenue, cost, and margin. Sort by margin descending. The bottom 10% is your re-bid list, your scope-creep list, or your customer-fire list.
  • Reconcile monthly. The job-level P&L should sum to the company P&L within rounding. If it doesn't, something is unallocated and your numbers are wrong.

The takeaway: You don't need new software. Most contractors with broken job costing have ServiceTitan, BuildOps, or QuickBooks Projects already configured. They just don't have a closed loop between field, ops, and accounting.

When DIY stops working

Job costing is the kind of problem where the cost of getting it wrong scales with revenue. A $1M contractor with broken job costing has $50-$100K of margin hidden somewhere. A $20M contractor with the same broken process has $1-$2M in compounded blind spots and probably can't sell the business at a fair multiple.

If you've tried to fix this internally twice and it didn't stick, the issue isn't your team, it's that the gap between operations and accounting needs something whose job is to bridge them, week after week. That's what Level's operating layer is for.

Use the data yourself

Frequently asked

What's the difference between job costing and project accounting?

Project accounting is the accounting treatment of long-running construction projects (WIP schedules, percentage-of-completion revenue recognition, retainage, AIA billing). Job costing is the operational practice of allocating every dollar of cost to the job that incurred it. You can have job costing without project accounting if your work is short-cycle service. You cannot have project accounting without job costing because the WIP schedule depends on accurate job-level costs.

Can QuickBooks Online do real job costing for contractors?

It can, with caveats. QBO Projects supports job-level revenue and cost tracking, but it doesn't handle progress billing, retainage, or AIA G702/G703 forms natively. For service contractors under $5M, properly configured QBO Projects plus a strong FSM is usually enough. For commercial contractors over $5-10M with project work, you typically outgrow QBO and need Sage Intacct, Spectrum, or similar.

How often should I review job-level margin?

Weekly for completed jobs (so you catch the losers before next quote uses the same assumptions). Monthly for trends by job type and customer (so you catch the patterns). Quarterly for repricing decisions and customer-fire calls.

What gross margin should we target?

It depends on trade and mix. For service-heavy HVAC, plumbing, and mechanical contractors, 38-45% gross margin is the median range, with top-quartile operators at 50%+. Electrical tends to run 35-42%. Roofing 28-35%. These are blended numbers, service work typically runs 10-15 points higher than install work, so a service-heavy book should beat the median.

Find out which jobs are actually making money.

We connect to your books and rank every job by real margin, not what your software shows.

2,200+ service businesses benchmarked$13.25B in revenue analyzedWeekly action cadence

No credit card. 15-min audit. We only follow up if we can actually help.

No commitment. Real numbers, not generic advice.