Skip to main content
2,200+ service businesses benchmarked. How do your margins stack up? See where you stand →
Level
Job Costing

Your Biggest Job Lost $47K. Here's How to Find Every Other One Hiding in Your Books.

Sam YoungStanford MBA · ex-BuildOps · ex-Vector Capital · 2,200+ service businesses benchmarked
2026-04-29·11 minute read
Share
Your Biggest Job Lost $47K — Find Every Other One — Level CFO

If this is you

You closed the job. Invoiced $280K. You think you made $9K. Then your accountant rebuilds the cost allocation correctly, and the real number is closer to negative $4K. You're not unique: most contractors estimate margin and get caught months later by the actual.

Across 3.84M jobs from 2,159 contractors in our benchmark datasetper Level Index data on 2,200+ service businesses, only 9% of jobs have full cost data attached. The other 91% have revenue logged. They have payroll. They have AP. But the costs are never allocated to the specific jobs that incurred them.

This is the phantom margin problem. Your P&L looks fine because total revenue minus total cost equals positive profit. But individual jobs — the ones you'd want to learn from, reprice, or fire customers over — are losing money invisibly.

If your biggest job last year quietly lost $47K, there are 3-5 others doing the same thing right now. Here's how to find them.

Why "feel" margins are wrong

Most contractors price jobs based on an estimating sheet that uses historical labor rates, materials at recent quoted prices, and a target margin. That gives you a quoted number.

When the job closes, you compare the quoted number to the invoiced number and call that "margin." If the customer paid what you quoted, margin is what you expected.

The problem: that math compares revenue to revenue. It tells you nothing about cost.

The real margin equation:

Real margin = Invoiced revenue − (actual labor + actual materials + actual subs + actual equipment + allocated overhead)

Most contractors miss at least three of those terms:

  • Unbilled labor. Techs spent 4 hours on a callback for this job that nobody charged. 15-25% of T&M labor is never invoicedper Level Index data on 2,200+ service businesses, per ServiceTitan and Sera Systems data.
  • Materials waste. Job pulled $3K extra in materials due to a misread spec. Nobody coded that adjustment.
  • Equipment time. The truck was tied up on this job for 3 days when it could have run a different route.
  • Allocated overhead. Office time, dispatch, supervision — all real, all costing real dollars, almost never allocated to specific jobs.

If any one of these is uncounted, your "margin" overstates reality by 5-15 percentage points.

How to autopsy a single job in 90 minutes

Start with one job — the biggest one you closed in the last 6 months. Not the one that "felt" weird. The biggest one.

Step 1: Pull the actuals (30 min)

For this specific job, pull from each system:

Labor (from FSM or timesheets):

  • Every hour logged against the job number
  • Every overtime hour
  • Every "callback" or "rework" hour (often coded separately)
  • Every drive-time hour for techs going to and from the site
  • Burdened cost = hours × your fully-burdened labor rate (not just wage — wages × ~3.11 to capture taxes, benefits, insurance, vehicle, supervision)

Materials (from AP or POs):

  • Every PO referencing the job
  • Every credit-card receipt that mentions the job
  • Every truck-stock pull that came off this job

Subs (from AP):

  • Every subcontractor invoice for this job

Equipment (from internal tracking or estimates):

  • Days of equipment use × daily allocation rate

Step 2: Add allocated overhead (20 min)

Take your last 12 months of overhead expenses (G&A, supervision, office, software, etc.) and divide by total direct labor hours from your jobs. That's your overhead-per-direct-labor-hour rate.

Multiply by direct labor hours on this specific job. That's the overhead you should allocate.

For most contractors, this number is $25-60 per direct labor hour. If your job had 200 direct labor hours, you have $5K-12K of overhead to allocate.

Step 3: Calculate real margin (10 min)

Real margin = Invoiced revenue − (labor + materials + subs + equipment + overhead)

Compare to "feel" margin (what you thought it was). The gap is your blind spot on this specific job.

Step 4: Identify the leak (30 min)

Where did the real margin land vs. expected? The gap is one of:

  • Labor overrun: Took more hours than estimated. Most common.
  • Materials waste: Used more materials than budgeted, or got hit by price increase between quote and execution.
  • Scope creep: Did work outside the original quote that didn't get billed as a change order.
  • Compliance gaps: Held billing because of paperwork (waivers, COIs) and now collecting on stale work that's been "completed" for 60 days.
  • Allocation surprise: Overhead is bigger than you thought.

Document which one was the dominant cause. This is your operational lesson for the next job like this.

Free profitability audit

Find out which jobs are actually making money.

We benchmark your books against 2,200+ service businesses and tell you exactly where the money is going.

How to find your other losers

Once you've autopsied one job and seen the gap between "feel" and reality, scale the process to your last 90 days of completed jobs.

Pull the list

From your accounting + FSM:

  • Every job that closed in the last 90 days
  • Revenue per job
  • Direct labor hours per job (from FSM)
  • Direct materials per job (from PO/AP)
  • Subs per job (from AP)

Calculate quick-and-dirty margin

Quick margin = Revenue − (labor hours × $burdened_rate) − materials − subs − (labor hours × overhead_per_hour)

This is approximate. It misses things like callback labor that wasn't coded to the job. But it's good enough to surface the obvious losers.

Sort by margin

Sort the list ascending. The bottom 20% by margin are your suspects. Mark each:

  • Loss-making (negative margin): Jobs that actually lost money. Investigate immediately.
  • Bottom-quartile (positive but well below your target): Jobs that "made money" but underperformed. Investigate to find the leak before it spreads.
  • Top quartile: Don't ignore these — figure out what's working and replicate.

Pattern-match

Across your bottom-quartile list, look for patterns:

  • Customer: Does one customer dominate? You may have a customer-pricing problem (or a scope-creep problem with that specific customer).
  • Job type: Does one type of work dominate (e.g. all the install jobs are losers)? Pricing problem in that line.
  • Tech: Does one crew or one tech show up repeatedly? Operational discipline problem.
  • Geography: Does one region show up? May be a routing/density issue.
  • Season: Does timing matter (e.g. all the rushed end-of-quarter jobs)? Bidding-pressure problem.

The pattern tells you whether the leak is structural (pricing, customer, line-of-business) or episodic (one bad crew, one rough month).

What changes after the audit

The contractors who do this autopsy seriously usually find one of three things:

Pattern 1: A customer or two is killing margin. 60-80% of the bottom-quartile jobs come from 1-2 customers. The fix: reprice on next renewal, fire the worst, or restructure the relationship.

Pattern 2: A specific service line is loss-making. Often install or large-project work. The fix: stop bidding it, or reprice it dramatically. Service-heavy contractors trade at 7-9x EBITDA; install-heavy at 4-6x. Following the margin is also the exit-readiness move.

Pattern 3: Estimating discipline is broken across the board. Bottom-quartile jobs scatter randomly across customers and types. The fix is operational: tighten estimating, weekly variance review, post-mortems on every job that misses by more than 10%.

Each pattern has a different fix and different timeline.

The 90-day discipline that prevents this

After the audit, the operational discipline that keeps you from re-creating the problem:

  1. Every timesheet codes to a job. No exceptions. If a tech is in the truck driving between jobs, that time codes somewhere.
  2. Every PO references a job. Truck-stock pulls get reconciled at month-end and allocated.
  3. Every credit-card receipt gets allocated within 7 days. The further out, the harder to remember why it was bought.
  4. Weekly job-margin report. Every Monday morning, the team reviews completed jobs from the prior week with revenue, cost, and margin. Bottom 10% gets a 5-minute root-cause discussion.
  5. Post-mortem on every miss > 10%. Not blame. Pattern recognition. What estimating assumption was wrong? What changed mid-job? How do we catch it earlier next time?

Most contractors with broken job costing have ServiceTitan, BuildOps, or QuickBooks Projects already configured. The tooling isn't the problem. The closed loop between field, ops, and accounting is. Most never close the loop.

Run your own job-margin audit in 2 minutes — see what your bottom quartile looks like compared to 2,200+ benchmarked service businessesper Level Index data on 2,200+ service businesses. Or book a free 30-min audit and we'll connect to your books, rebuild the job-cost allocation, and hand you the real margin distribution across your last 90 days.

Share

Get the next one

Want next week's benchmark in your inbox?

One email a week. Real numbers from 2,200+ service businesses. No fluff. Unsubscribe anytime.

Sam Young

About the author

Sam Young

Founder & CEO

Founder of Level. Former private equity investor evaluating contractor roll-ups. Spent four years at BuildOps building financial tooling for 1,000+ commercial contractors. Reviewed P&Ls across 2,200+ service businesses. Co-founded a real estate tax optimization firm analyzing $1B+ in real estate assets. Stanford MBA, Brown undergrad.

LinkedIn

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. Free audit included.

2,200+ service businesses benchmarked$13.25B in revenue analyzed24-hour response

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

No commitment. Real numbers, not generic advice.