Eight trucks, one Tuesday in July.
A Phoenix HVAC and plumbing shop doing about $2.4M a year. Two trades, six field techs, an install lead and a comfort advisor. Everything below is modelled on the shops we've scoped, using their own numbers — but it's a composite, not a customer testimonial.
Revenue
$2.4M
Trailing twelve months
Trucks
8
Two trades, one board
Office
2
One owner, one dispatcher
Plan members
614
Before: 388
Season
Apr–Sep
70% of the year's calls
Before
Nothing was broken. That was the problem.
The shop ran on a whiteboard, a shared calendar, a spreadsheet for memberships, and a dispatcher who knew where everyone was because she'd been doing it for eleven years. It worked. It had always worked.
What it couldn't do was tell anyone what it was costing. There's no line on a P&L called calls that went to voicemail, or the truck that drove past the job on the way to the other job, or the fifteen-year system nobody flagged before it died in August. Money leaves through gaps that don't have names.
31%
of July inbound calls hit voicemail. On the worst three days it was over half. The dispatcher was on the phone explaining where a tech was.
9.1 hrs
of driving a day across eight trucks. Assignment was "who's free," so a plumber in Tempe took a Glendale call while another sat twelve minutes away.
388
members, with 71 owed visits nobody had scheduled. The spreadsheet tracked who paid. It didn't track what was still owed to them.
The one that actually hurt
Fourteen months of repair history sat in the system with no way to ask it a question. Six houses had systems over fifteen years old with three or more repair visits each — the exact profile that fails in a heat wave and gets replaced by whoever answers the phone that afternoon.
Four of those six were replaced that summer. The shop got one of them.
The rollout
Ninety days, and nobody stopped working.
The shop kept dispatching the way it always had for the first two weeks. Nothing was switched off until the replacement was already running beside it.
Week 1
Everything imported, nothing changed
Customers, properties, equipment with serials and install dates, membership list, price book. The equipment registry was the slow part — install dates came off nameplate photos and old invoices. It was also the part that paid for itself first.
Week 2
Intake agent goes on, answering second
It only picked up when the office didn't. In the first week it caught 34 calls that would have gone to voicemail, triaged them, and booked 26. That number alone ended the internal argument about whether this was worth doing.
Weeks 3–4
Dispatch board replaces the whiteboard
Both trades on one grid. The dispatcher kept the whiteboard up for a fortnight and stopped drawing on it after nine days. The recommendation engine was the thing that won her over — not because it was right every time, but because it explained itself.
Weeks 5–8
Agreements, both engines
388 members migrated with their owed-visit backlog reconstructed from paid dates. Six commercial route contracts moved onto standing slots. The backlog filler started putting owed tune-ups into soft afternoons in week six.
Weeks 9–12
Techs, customers, money
Field app to all eight trucks, portal live, invoicing and deposits switched over, collections agent working the aging list. The last thing to go on was the replacement opportunity list — deliberately, so the comfort advisor had capacity to work it.
After ninety days
What moved, and by how much.
Same eight trucks. Same six techs. No new hires.
| Measure | Before | After 90 days | Change |
|---|---|---|---|
| Calls answered | 69% | 98% | +29 pts |
| Booked jobs per week | 142 | 169 | +19% |
| Driving hours per day | 9.1 | 7.4 | −1.7 hrs |
| Jobs per truck per day | 4.2 | 5.0 | +0.8 |
| First-time fix | 84% | 91% | +7 pts |
| Callback rate | 5.8% | 2.4% | −3.4 pts |
| Plan members | 388 | 614 | +58% |
| Recurring revenue / month | $6,180 | $11,239 | +82% |
| Owed visits unscheduled | 71 | 8 | −89% |
| Days sales outstanding | 38 | 21 | −17 days |
| Average ticket | $437 | $486 | +11% |
| Annualised revenue effect | — | +$418,000 | +17% |
Revenue effect is annualised from the ninety-day run rate and excludes the replacement pipeline below, which hadn't closed yet.
Where it came from
Five levers, and one of them did most of the work.
Worth being specific about this, because the instinct is to credit the flashiest part. It wasn't the flashiest part.
Calls that stopped going to voicemail
34 caught a month, 26 booked, average ticket $486. This is the whole game in season.
Driving hours converted to billable hours
1.7 hours a day across eight trucks — roughly one extra job a day at shop average.
Membership growth and the owed-visit backlog
226 new members, 63 owed visits delivered. Each visit is also a conversation about a fifteen-year system.
First-time fix and fewer callbacks
Parts on the truck because the right tech was sent. A callback costs a full slot and earns nothing.
Collections and deposits
DSO from 38 days to 21. Not new revenue — but it's the difference between making payroll comfortably and not.
And the one still in the pipe
The replacement list found $78,500 sitting in six houses the shop already serviced — systems past fifteen years with repeat repair history. Three closed in the first ninety days. The other three are scheduled for pre-season conversations in March, which is the point: those conversations now happen before August instead of during it.
Honest part
What it didn't fix.
Three things worth saying plainly, because every one of them came up.
The equipment registry is real work
Two weeks of someone photographing nameplates and digging install dates out of old invoices. There's no shortcut and it can't be automated away. It's also the single highest-value data in the system — the replacement list doesn't exist without it.
One tech never came around
A twenty-two year plumber who had run his own day for two decades. He used the field app for timers and payment and ignored the rest. The shop decided that was fine. Not every adoption problem is a training problem.
The intake agent isn't a receptionist
It's excellent at triage, booking and after-hours. It is not the right answer for a distressed customer on the third callback. Those get routed to a human immediately, and the rule for when that happens took three rounds to get right.
Nothing here fixes pricing
The price book made margins visible, which is not the same as improving them. The shop raised two categories after seeing real margin on the screen — that was their decision, not the software's.
"The whiteboard worked fine at four trucks. At eight it started costing me a job a day and I couldn't see where it was going."
This is the sentence, in some form, that starts almost every conversation we have. Somewhere between five and ten trucks the way you've always done it quietly stops working — and the software built for twenty trucks wants six months and a consultant before it helps.
Run your own numbers.
Open the demo — it's the real product with this Tuesday loaded into it. Or book twenty minutes and we'll put your shop's name on the board while you watch.