Gross Margin per Job + Job Costing

Why this matters

Most service-business owners track revenue per job + maybe materials cost. Very few track TRUE gross margin per job - labor + materials + truck cost + warranty reserve + everything that touches that specific job. The owners who track this catch the loss-leader jobs before they bleed the business + spot the high-margin work to chase. The owners who don't track this leave 8 - 20% margin on the table month after month.

The full job cost equation

For any job, the true cost to deliver is:

Direct labor cost
+ Materials cost (at YOUR cost, not retail)
+ Subcontractor payments
+ Truck cost allocated (fuel + maintenance + depreciation)
+ Disposal / dump fees
+ Permit fees
+ Job-specific equipment rental
+ Warranty / callback reserve
+ Sales commission (if applicable)
= TOTAL JOB COST

Subtract this from the customer invoice = TRUE Gross Profit. Divide by invoice = TRUE Gross Margin %.

This is different from the simplified "invoice minus materials" most operators use.

Direct labor cost (most-mis-calculated)

Labor cost is NOT just wage × hours. Add: payroll taxes (~13 - 15%), workers comp (3 - 15% trade-specific), health insurance, PTO/benefits (~10%), plus non-billable time (40 - 60% utilization typical).

Example tech: wage + payroll + WC + health + PTO = loaded. At 60% utilization.60 = ** hour**.

That's the real cost. Charge = ~53% margin (good). Charge = ~30% margin (underpriced). Most operators calculate against unloaded wage + lose money.

Materials cost at YOUR cost

Materials cost = what YOU paid the supplier for the parts (NOT what you charged the customer).

Common operator mistake: thinking "I make 30% on materials" without tracking actual supplier cost.

Markup options:

  • Standard markup: 30 - 100% over your cost (typical residential service)
  • Flat-rate book: customer-facing rate that incorporates parts + labor + margin
  • Cost-plus: time + materials at YOUR cost + agreed markup percentage (commercial work)

Track materials at supplier-invoice cost. The receipt is the source of truth.

Truck cost allocation

The truck delivering the tech to the job costs money:

  • Loan interest (if financed)

Allocate to jobs:

  • Hours method: total truck cost ÷ annual billable hours = truck cost per billable hour
  • Mile method: cost per mile × miles driven per job
  • Simpler: add 5 - 10% of revenue per job as "truck cost"

Pick a method + stay consistent for tracking.

Warranty / callback reserve

Reality: some jobs come back. Customer reports the heater isn't working 3 weeks after install; tech returns at no charge.

The cost of callbacks is real. Track + reserve:

  • Industry average callback rate: 3 - 8% of jobs
  • Reserve: 1 - 3% of revenue per job as "warranty reserve"
  • Funds the inevitable warranty + callback work

Operators who don't reserve get hit by callbacks that erode margin invisibly.

Job costing example: HVAC repair

Customer's blower motor failed; replacement install.

  • Gross margin: 51% - healthy for HVAC

If you'd skipped truck cost + warranty reserve, you'd think margin was 61% - overstating by 10 points.

Job costing example: roof replacement

Tear-off + new shingle. Invoice . Materials (at your cost), labor 32 hrs × = disposal truck (5%) warranty (2%) . Total cost → gross profit = 34% margin.

Quoted at instead → gross profit = 26%. Same job, underpricing kills margin.

What to do with this analysis

Track each job in the same format

Most modern field-service software (Manuall, ServiceTitan, Housecall Pro) has job costing built in. Use it. Enter:

  • Time logged per tech per job (mandatory)
  • Material cost per job (entered at procurement, not estimated)
  • Truck allocation auto-applied
  • Reserve auto-applied
  • Compute margin per job automatically

Review monthly

  • Sort jobs by margin %
  • Identify the loss leaders (margin < 25%)
  • Identify the winners (margin > 50%)
  • Patterns: customer type, job type, tech, day-of-week, time-of-day

Action on patterns

  • Loss-leader customer: drop them OR repricing conversation
  • Loss-leader job type: raise pricing OR stop offering
  • Winner job type: market for more of these
  • Winner tech: study what they do differently

The single most-impactful job-costing change for most operators is tracking TIME ACCURATELY. Techs underreport time on jobs (they don't track drive time + diagnostic time + paperwork time). The real time per job is 40 - 80% MORE than what gets logged. Use GPS timestamps from job-to-job in your dispatch app + auto-allocate drive time as billable. Suddenly your "60% utilization" job costing reveals true labor cost is 1.4 - 1.8x what you assumed. Pricing recovers. Margin reappears.

Diagnostic + repair vs install: different margin reality

Service businesses typically have a margin gradient:

  • Diagnostic (single visit, time-only): 60 - 80% margin (high)
  • Small repair (1-hour fix, simple parts): 50 - 70% margin
  • Medium repair (multi-hour, multiple parts): 40 - 60% margin
  • Install (whole-system replacement): 25 - 40% margin (lower)
  • Maintenance contract (recurring): 55 - 70% margin (high)

This is why "selling membership" + "selling maintenance" drives so much profitability - those service lines have the highest margins.

References

  • "Pricing for Profit" - Profit First framework adaptation
  • NEXTAR Manual / Job Costing Best Practices
  • ServiceTitan, Housecall Pro, Manuall job-costing reports
  • Manuall internal: Reading a P&L Statement for a Service Business, Pricing Strategy Fundamentals