
Why Your Cancellations Are Hiding Your Real Problem (And How to Find It)
Most trade owners blame no-shows on customers. The data usually tells a different story—and it's costing you thousands.
The Pattern Nobody Sees
A $1.4M HVAC business in Burnaby was averaging 12–15 cancellations per month. The owner assumed it was flaky customers. His dispatcher blamed the technicians for not confirming jobs. The technicians blamed the customers. Nobody was wrong—and nobody was looking at the data.
When we pulled six months of cancellation records, a pattern jumped out: 68% of cancellations happened on jobs booked more than 10 days out. Another cluster: jobs scheduled between 2 and 4 p.m. had a 34% higher cancellation rate than morning or late-afternoon slots. A third: customers who received a confirmation call less than 24 hours before the appointment canceled at half the rate of those who got no call at all.
None of that was obvious from day-to-day operations. But once visible, it was actionable.
Why This Matters to Your Bottom Line
Let's do the math on a typical plumbing or electrical operation doing $600K–$800K in revenue. If you're running 8–12 jobs per day across two or three technicians, and 10% cancel, that's roughly 8–12 lost jobs per month. At an average service call value of $280–$400, you're looking at $2,200–$4,800 in lost revenue per month. Over a year, that's $26,400–$57,600.
But the real damage is deeper. A canceled 10 a.m. job doesn't just disappear. Your technician was routed to that address. Fuel burned. Time blocked. Now they have a two-hour gap that's too short to drive across town to the next job, so they're sitting idle or doing admin work at the shop. Your next customer gets a later arrival window. That customer gets annoyed. Your technician gets frustrated. Morale dips. Quality suffers.
One cancellation ripples through the whole day.
What the Data Usually Reveals
We've worked with dozens of trade shops across Metro Vancouver and beyond. Cancellation patterns almost always fall into one of these buckets:
Booking friction. Jobs scheduled 10+ days out feel less real to the customer. Life happens. They forget. They book with a competitor on the day-of because they lost your confirmation. Fix: automated reminders at 7 days, 2 days, and 24 hours.
Timing mismatch. A customer books a 2 p.m. slot because it sounds convenient, but their schedule doesn't actually allow it. They realize it the night before and cancel. Fix: offer specific time windows ("We can be there between 9–11 a.m. or 1–3 p.m. Tuesday") and ask them to confirm which works best.
Communication gaps. The customer never heard from you after they booked. No confirmation. No technician name or photo. No "we're 20 minutes away" text. They assume you forgot and book someone else. Fix: send a confirmation within 2 hours of booking, with the technician's name and a photo if possible.
Price surprise. The customer booked at a quoted price, then got a call from dispatch saying it'll actually be $150 more because of complexity. They cancel rather than argue. Fix: quote conservatively, or confirm the scope in the confirmation call so there are no surprises.
Seasonal or situational patterns. Winter cancellations spike because customers reschedule non-urgent work. Summer cancellations spike because vacations. Fix: build buffer into your scheduling on known high-cancellation weeks, and incentivize early booking.
How to Find Your Pattern
Pull your last 90 days of cancellations into a spreadsheet. Note:
- The date booked and date of the canceled job (how far in advance?)
- The time slot (morning, afternoon, evening?)
- The reason given, if any
- Whether they received a confirmation call
- Whether they were a repeat customer or new
- The job type (emergency vs. routine)
Look for the two or three things that repeat. Odds are, one of them accounts for 40–60% of your cancellations. That's your lever.
Then test a fix. If it's advance-booking friction, try a 48-hour confirmation call. Track cancellations for 30 days. If they drop by even 20%, you've found something worth doing every time.