The 7 EBITDA Leaks
A field guide for HVAC, plumbing, and electrical owners — built by operators who have run multi-trade home-services companies with 100+ employees and $20M+ P&Ls. Each leak below comes with the symptoms, the metrics, the targets, and the fix.
The blended takeaway: a 3-truck shop is typically leaking $40,000–$90,000/year across these seven categories. Some leaks overlap — that range is the realistic combined figure, not the sum of the per-leak maxima.
Scheduling & Route Density
"Windshield Time"
Techs driving instead of billing. Long first-call travel, scattered routes between calls, the last call finishing early, techs sitting in the truck waiting for the next dispatch. Every minute in the windshield is a minute not billed.
How to Spot It
- Techs bill fewer than 6 hours in an 8-hour day
- Drive time exceeds 15% of paid hours
- First-call travel is long — the shop is outside the service area — and the last call ends at 3pm
- Dispatch texts the next address mid-job — no clustering
- Same neighbourhoods hit on different days of the week
How to Measure It
- Billable utilisation ratebillable hours ÷ paid hoursTarget: 70–75%
- Drive-time %drive hours ÷ total work hoursTarget: under 15%
- Route densityjobs completed within a 5-mile radius per dayTarget: 3+
- First-call start timewhen the first billable job beginsTarget: on-site by 8:00am
The full gap is bigger: a 3-truck shop running 60% utilisation instead of 75% leaks ≈ $95,000/yr — 3 trucks × ~1.2 hours/day lost × 220 working days × $120/hr. Most shops leak $30,000–$50,000 here.
The Fix
- Dispatch and routing software (ServiceTitan, Housecall Pro, Jobber) with route optimisation
- Geographic batching — assign techs a zone for the day, not scattered calls
- First-call/last-call clustering — first job near the shop, last job near home
- Minimum drive window — if the next job is more than 20 minutes away, dispatch reassigns
- Same-neighbourhood stacking — batch all calls in one subdivision to one day
- Front-load the day — first call at 8am, not 9:30am after coffee
The IronMargin angle: the dispatch-and-routing playbook is the first fix delivered at the Core tier. The rebate network includes preferred pricing on ServiceTitan and Housecall Pro, lowering the software cost barrier.
Parts Markup
"The Silent Margin Killer"
Materials marked up too low — 10–20% instead of 30–50% — inconsistent markup across techs, or parts passed through at cost for "good customers." The shop is essentially financing the customer's materials.
How to Spot It
- Gross margin % varies wildly by technician
- Some jobs show 70% labour / 30% parts margin — inverted from a healthy 40/60
- Repeat customers paying less than new customers for the same parts
- No price sheet on the truck — techs "remember" markups
- Invoice line items marked "at cost" or "N/C"
How to Measure It
- Realised parts markup(parts revenue ÷ parts cost) − 1Target: 35–50%
- Per-tech markup variancemarkup spread across techniciansTarget: under 5% spread
- Gross margin % by job typegross margin ÷ revenue, per job typeTarget: 55–65% blended
- Discount frequency on partsdiscounted parts line items ÷ total parts line itemsTrack the trend
A shop doing $400,000/yr in parts at 20% realised markup instead of 40% is leaving $80,000/yr in additional margin available. Most shops leak $20,000–$40,000 here.
The Fix
- Standardised markup matrix — tiered: fast-moving parts 40%, specialty 50%, emergency/after-hours 60%
- Price sheets on every truck, updated quarterly
- No-discount policy on parts — labour can flex; parts don't
- POS/software enforces a minimum margin — no invoicing below the floor
- Quarterly parts pricing review against supplier cost increases
- Stop "buddy pricing" for repeat customers — they pay the same as everyone
The IronMargin angle: the parts markup matrix playbook is a Core deliverable. The rebate network is the moat here — members get negotiated parts pricing from preferred suppliers, effectively raising their markup without raising customer prices.
Truck Stock & Inventory
"Cash on Wheels"
Overstocked trucks tie cash up in rolling inventory where parts expire, break, or get lost. Understocked trucks send techs to the supply house mid-job — killing billable time. Add shrinkage and no par levels, and every truck is a tiny warehouse. Most are badly managed.
How to Spot It
- Truck inventory value keeps climbing year over year
- Techs at the supply house more than twice a week
- Missing parts at month-end with no explanation
- Obsolete or discontinued stock still on trucks
- No one knows what's on each truck
How to Measure It
- Inventory turnsannual parts cost ÷ average truck inventoryTarget: 6–8+
- Shrinkage %missing/obsolete parts ÷ inventory valueTarget: under 2%
- Supply-house tripstrips per tech per weekTarget: under 2
- Truck inventory valuestock value carried per truckRight-sized, not maxed
3 trucks carrying $8,000 each is $24,000 tied up. At 20% shrinkage and obsolescence, that is ≈ $5,000/yr lost — plus ≈ $15,000/yr of billable time burned on supply-house runs.
The Fix
- Par-level inventory per truck — define exactly what belongs on each truck
- Weekly restock cycle — pull from a central stockroom, not the supply house
- Min/max levels — reorder at min, fill to max
- Cycle counts — count one category per week, not everything once a year
- "Will-call" policy for non-stock items — don't carry the long tail
- Tool accountability — tools signed in and out; the tech owns missing ones
The IronMargin angle: the inventory par-level playbook, plus the rebate network — better pricing on the fast-moving stock every truck carries.
Warranty Rework & Callbacks
"The Margin Eraser"
Free return trips to "fix" something. Three causes: a real warranty (defective part), a training issue (the tech didn't fix it right the first time), or a customer-service issue ("it's still making a noise"). Most shops don't track which is which, don't charge it back, and don't root-cause it — so it keeps happening.
How to Spot It
- Callback rate above 5% of jobs
- Same customers calling back repeatedly
- Certain techs with high callback rates — a training issue
- No tracking of why callbacks happen — they just "happen"
- "Warranty" used as a catch-all for free return visits
How to Measure It
- Callback ratecallback jobs ÷ total jobsTarget: under 3%
- Callback cost(return trips × avg labour cost) + parts replaced at no chargeTrack the trend
- Callback cause breakdownwarranty defect vs training vs customer serviceEvery callback coded
- Charge-back ratecallbacks charged to the responsible techTraining callbacks charged back
3 trucks × 1,000 jobs/yr × an 8% callback rate × $200 average callback cost. Plus lost capacity — those callback hours could have been billed jobs.
The Fix
- Callback tracking by tech and cause category — every callback coded
- Weekly root-cause review — what's the pattern?
- Charge-back policy — the tech eats the first hour of training-caused callbacks
- Quality checklist before leaving the job — the "before you drive away" list
- "Fix it right the first time" KPI per tech
- Separate true warranty (manufacturer defect) from rework (tech error) from service (customer expectation) — only the first is free
The IronMargin angle: the warranty/rework playbook plus the callback root-cause framework. This is where coaching pays for itself fastest — most shops don't even know their callback rate.
Want these numbers for YOUR shop?
The Leak Calculator takes five inputs — revenue, trucks, techs, average ticket, gross margin — and ranks your top two leaks in about two minutes.
Pricing & Discounts
"The Discount Habit"
Flat-rate or diagnostic fees set too low. Discounting as a reflex — "I'll knock $50 off." No tiered pricing, so every customer gets the same option. Repeat customers never paying full freight. Techs authorised to discount freely without approval.
How to Spot It
- Average ticket declining year over year
- Discount line items appearing on invoices
- Repeat customers paying less than new customers
- Techs discounting to "close" the job
- No Good/Better/Best options offered
- Diagnostic or trip fee below market
How to Measure It
- Average ticketrevenue ÷ jobsTrack the trend
- Discount %discounts given ÷ gross revenueTarget: under 3%
- Per-tech average ticket varianceaverage ticket spread across techsFlag the discounters
- Close rate, full price vs discountedis the discount even necessary?
- Financing offered %are you losing jobs you could close with financing?
A shop doing 1,000 jobs/yr at a $350 average ticket instead of $420 leaves $70,000/yr on the table. Reflex discounting of 3–5% of revenue adds another $15,000–$20,000.
The Fix
- Tiered pricing — Good/Better/Best on every quote; most customers pick the middle
- Minimum diagnostic/trip fee enforced — set to market, not below
- Tech discount authority capped — 10% maximum, manager approval beyond
- Price sheet enforcement — no "let me check with the boss" discounts
- No-discount-on-repeat policy — loyalty gets priority service, not price cuts
- Offer financing (GreenSky, Synchrony) — raises close rate and average ticket
- Annual price review — raise prices with cost increases, not after you're losing money
The IronMargin angle: the pricing playbook plus tiered pricing templates. Financing partnerships are part of the rebate network.
Overhead Allocation & Truck Profitability
"The Hidden Loser"
Overhead spread evenly across trucks when some trucks, techs, or service lines are unprofitable. The shop can't see which truck is the loser. Unprofitable service lines — repairs subsidising installs, or vice versa — stay hidden inside one blended P&L.
How to Spot It
- You can't produce a per-truck profit number in 5 minutes
- One truck or team is always "busier" but revenue is flat
- You don't know which service lines make money
- The "hardest working" tech isn't the most profitable
- The blended P&L looks okay but cash is always tight
How to Measure It
- Per-truck profitabilitytruck revenue − direct costs − allocated overheadMonthly, per truck
- Per-service-line marginrepair vs install vs maintenanceKnow which work makes money
- Fully-loaded cost per truck per day(labour + vehicle + overhead allocation) ÷ working days
- Revenue per truck per day vs fully-loaded costdaily revenue against daily costThe truck must clear its cost
A losing truck running at −5% margin on $300,000 revenue loses $15,000/yr — often hidden for years inside the blended P&L. Multiply across multiple underperformers.
The Fix
- Per-truck P&L — monthly, not annually
- Fully-loaded cost per truck per day — the number the truck must beat
- Service-line margin analysis — which work makes money?
- Kill or fix the loser — reassign, retrain, or retire the unprofitable truck
- Right-size the fleet — don't run a truck that isn't clearing its cost
- Allocate overhead by usage, not evenly — the truck that runs more wears out more
The IronMargin angle: the per-truck profitability framework plus the financial template pack (Pro tier). This is the "see the leak" capability most owners don't have.
Labour Productivity & Non-Billable Time
"The Gap"
Techs on the clock but not billing — shop time, training, waiting for parts, admin, sitting in the truck between calls. The gap between paid hours and billed hours is the single biggest hidden leak in the trades. Most owners pay for 40 hours, bill 22–26, and don't realise it.
How to Spot It
- Techs paid 40 hours, billing 24 or fewer
- Shop time creeping up — "waiting for dispatch"
- Morning starts late — first billable call at 9:30am, not 8am
- Admin and training scattered through the week instead of blocked
- No one tracks billable vs non-billable hours per tech
How to Measure It
- Billable utilisationbillable hours ÷ paid hoursTarget: 70–75%
- Non-billable time %category breakdown: shop, training, admin, waitingEvery hour categorised
- Revenue per tech per paid hourthe true productivity numberTrack the trend
- First-billable-call start timewhen the first job starts, not when the tech clocks inTarget: 8:00am on-site
The full gap: 3 techs billing 24 of 40 hours instead of 30 of 40 is ≈ 1,980 extra billable hours/year × $120/hr ≈ $130,000/yr — the high end, overlapping with Leak 1. Most shops recover $40,000–$70,000 here. This is the single largest leak in the system.
The Fix
- Billable-hour targets per tech — tracked and reviewed weekly
- Scheduled admin and training blocks — not scattered through billable hours
- Dispatch accountability — no tech "waiting" for the next call
- "Wrench time" KPI — time spent actually fixing
- Front-load the day — first job on-site at 8am, not 9:30am
- Minimise shop time — load out the truck the night before
- Per-tech utilisation dashboard — the techs who bill least are visible
The IronMargin angle: the labour productivity playbook plus the billable-utilisation KPI framework. This is the highest-leverage fix in the entire system — recovering even 5 utilisation points here pays for the membership many times over.
Common questions about EBITDA leaks
How much money does the average trades business lose to EBITDA leaks?
A 3-truck trades shop is typically leaking $40,000–$90,000 per year across the seven EBITDA leak categories in this guide. Some leaks overlap, so that range is the realistic combined figure, not the sum of the per-leak maxima.
What is billable utilisation and what should it be?
Billable utilisation is billable hours divided by paid hours, and a healthy trades shop should run at 70–75%. Most owners pay for 40 hours, bill 22–26, and don't realise it — a 3-truck shop running 60% instead of 75% leaks roughly $95,000 a year in unbilled capacity.
What should a trades company mark up parts?
Target a realised parts markup of 35–50%, enforced with a tiered matrix: 40% on fast-moving parts, 50% on specialty parts, and 60% on emergency or after-hours work. A shop doing $400,000 a year in parts at 20% realised markup instead of 40% is leaving $80,000 a year in available margin.
What is a healthy callback rate for an HVAC or plumbing company?
A healthy callback rate is under 3% of jobs; anything above 5% is a warning sign. A 3-truck shop running an 8% callback rate at a $200 average callback cost loses roughly $48,000 a year in free return trips — before counting the billable hours those trips displace.
How much is one unprofitable truck costing me?
A losing truck running at −5% margin on $300,000 of revenue loses $15,000 a year — often hidden for years inside a blended P&L. If you can't produce a per-truck profit number in five minutes, you can't see which truck is the loser; the fix is a monthly per-truck P&L and a fully-loaded cost per truck per day.
This is the Core curriculum — every leak gets a live working session.
The monthly group call rotates through the seven leaks: a 30-minute framework deep-dive, 30 minutes of member Q&A, and one commitment for the next week. The seven-week cycle repeats quarterly, going deeper each rotation.
| Week | Leak | Deep-dive focus |
|---|---|---|
| 1 | Scheduling & Route Density | Dispatch software setup + route batching |
| 2 | Parts Markup | Building the markup matrix + rebate network |
| 3 | Truck Stock & Inventory | Par levels + cycle counts |
| 4 | Warranty Rework & Callbacks | Callback tracking + root-cause framework |
| 5 | Pricing & Discounts | Tiered pricing + financing |
| 6 | Overhead & Truck Profitability | Per-truck P&L + service-line margin |
| 7 | Labour Productivity | Billable utilisation + the "wrench time" KPI |
Every playbook, metric, and target on this page ships inside the Core SOP library. The group call is where you work them into your shop — with operators who have run the same fixes on $20M+ P&Ls.
Founding-member beta pricing — Core at $297/month ($497 at launch), locked for life. 10 spots.