Your 90% Booking Rate Is Fake

Contents
Say your ServiceTitan dashboard shows a 90% booking rate and your own read of the month is that the leads were junk. Both can be true at once, because the booking rate only scores the callers who made it into the count, and nobody has looked at who didn’t. This article gives you a working definition of a lead, the four ways callers slide out of ServiceTitan’s count, and an audit you can run this month on data you already own.
A lead is anyone in your area asking for something you do
Here’s the definition I run: if the caller is in a zip code you serve, asking about a service you provide, that’s a lead. Not a maybe. Not a tire-kicker. A lead.
That includes the callers your team loves to write off. The price shopper asking what a service call costs is a lead; she called you, which is more than most of your market ever does. The household that sounds like it can’t afford the replacement is a lead. The caller who mentions your competitor is a lead, unless they already have an appointment booked with that competitor, in which case wish them luck and move on.
It also includes the callers nobody spoke to. A missed call, a hangup, a ring nobody picked up: that’s unverified demand, presumed a lead until someone confirms spam or a robocall. You don’t get to subtract a person you never talked to. Call them back. Text them. Then decide what they were.
To be clear about what this is: it’s my operating standard, the one I hold call centers to, not a line from anyone’s help docs. The software’s counting rules are a separate thing, and they’re next. But the definition comes first, because every number downstream inherits it.
One more piece, because this is where the definition usually dies in practice. The CSR’s job is to book viable work. Ranking it is the dispatcher’s job. When a CSR starts deciding at the phone which jobs deserve a slot, you’ve handed triage to the person who can’t see the three-day call board, which tech is right for the job, the drive time between stops, or any of the other context dispatch stares at all day. Book it, let dispatch prioritize it. The lower-priority job that fills a Thursday gap can serve that customer well and turn into a membership, a replacement conversation, a referral. No promises on that math. But a booked gap is a customer relationship, and a screened-out call is nothing.
What “no bad leads” does and doesn’t cover
When I say there’s no such thing as a bad lead, I mean exactly the definition above: an in-area, provided-service caller doesn’t become a bad lead because price, budget, job priority, or your own phone process made the booking harder. Hard to book is not the same as bad.
The rule was never meant to cover spam and out-of-scope requests, and Google treats those as exclusions too: on Local Services Ads, leads judged invalid or low quality aren’t charged or get credited after reassessment. The creditable bucket is whatever Google’s models judge invalid or low quality, spam and duplicate contacts being its own examples; you don’t pick a dispute category, you rate the lead in its feedback survey, and Google may credit what you report there. What Google no longer supports credits for is “job type not serviced” and “geo not serviced” leads: the caller from two counties over is now a charge you keep, and tight service-area and job-type settings are the lever you hold. Every other platform runs its own rules; check the source’s policy before assuming anything comes back.
That’s the whole aside, and here’s why it matters: the exclusion list is real, so it becomes the costume everything else wears. Every unbooked call gets filed under “bad lead” because a few genuinely were. The only way to catch the costume is to look at who never made it into the count at all.
How callers vanish from your booking rate
ServiceTitan’s documented rule: a call lead is an inbound call lasting at least 60 seconds or marked Is Lead, and the inbound booking rate is the percent of call leads booked into work. Two scope notes, once: this is the documented flow for the basic phone integration, and call reasons and your phones configuration shape it, so verify in your own account. And it’s the CSR-side rate, an agent performance view, not your lead count or marketing ROI; the reporting side of the story, where booking rates and CPA both get flattered, is its own article.
The documented rules have four exits.
Exit one: the 60-second trapdoor. An answered call that ends inside 60 seconds with nothing booked auto-classifies as excused and sits outside the lead count. The caller who gave up at 0:45. The price shopper brushed off in 50 seconds. The 60-second line and the Is Lead mark are two separate documented rules; how they meet in your setup is something to inspect in your own classifications, not assume.
Exit two: the ring nobody answered. An unanswered call, or one where the CSR never clicked the call bubble, files as abandoned, in its own corner of the dashboard, never reaching the booked-or-unbooked split the rate is built on. A phone that rings out all Saturday leaves Monday’s rate untouched. The calls are still in the log. The rate just never met them.
Exit three: call reasons. ServiceTitan is blunt about it: set up call reasons first, otherwise any call over 60 seconds classifies as a lead. The reason list cuts both ways. No reasons, and vendors flood the denominator. Sloppy reasons, and real demand drains out of it. Either way that list is policy, written once during onboarding by somebody who probably hasn’t reread it since.
Exit four: reclassification. A CSR can’t simply mark a call “excused”; longer non-leads leave the lead bucket through a not-a-lead call reason, automatic excuse rules, or a manager whose Reclassify Call permission (off by default) lets them reclassify it. The paths are gated, and ServiceTitan’s own glossary warns that mishandled excused calls “will throw off your call booking metrics.”
A near-perfect booking rate is a reason to look closer
When I see a call center running 90 to 100%, I don’t celebrate. I pull the excused calls. That’s my heuristic, labeled on purpose: a great team on a tight service area can earn a real 90, but a near-perfect rate is also exactly what over-excusing produces, and the metric can’t tell you which one you’ve got. Only the recordings can.
And I’ll tell you where to aim the flashlight, because it’s usually not where owners look first. The problem rarely hides in the spam tags; your CSRs aren’t outright lying. It hides in the one-to-three-minute calls marked excused. A real conversation happened there, long enough to hear a name, an address, a problem, and it still left the count. That’s the pile I spot-check first, every time.
The incentive doesn’t help: a CSR who gets a real lead excused improves her own number, no scheming required. The cost lands on you, because the rate you quote and the budget decisions built on it now rest on a groomed sample. And if your call classifications feed a conversion import your bidding runs on, the ad platform can inherit the grooming too.
Before you buy a fix, ask what’s in its denominator
There’s a market of tools that promise to catch what your team misses, including AI receptionists with impressive booking percentages. Some may be worth it. All of them deserve the same scrutiny you just gave your own dashboard, because nobody has to lie to produce a flattering number. Picking the denominator does it.
Read the fine print on any case study and you’ll find the percentage usually sits on “answered calls,” “leads,” or “calls with intent,” and every vendor defines those a little differently. A caller who stayed through the hold, opted in to talk to the machine, and qualified herself before the counting started is a very different denominator than every ring that hit the line. So ask for the whole funnel: does the rate count every caller offered or routed to the system? What happens to the one who hangs up on hold, or at the “would you like to talk to our AI assistant” moment, or who opts out? What share opt in at all? And what’s the rate from first ring to booked job? Don’t take any percentage at face value until you know who it left out, which is the same disease your own 90% can carry.
We’ve already written the verdict on AI versus humans on the phones: better than voicemail, every time; better than a trained human, no. Staff and schedule accordingly, and treat AI as the overflow, not the roster.
For the excused pile itself, two related tools exist: ServiceTitan’s Second Chance Leads reviews unbooked, excused, and not-a-lead calls and flags the most promising ones for follow-up (it needs call transcription; included with Phones Pro, a purchasable add-on for Basic Phones), and the Missed Lead Reports in our Software score missed leads and send your call center manager a daily digest. Different tools, related job. And the audit below does the core of it by hand, free.
The audit: pull who your rate forgot
One short session, your own data, no purchase. These are overlapping views of the same call log, not a pie chart; inspect each pile, don’t sum them.
- Pull 30 days of calls by classification: leads, booked, unbooked, excused, abandoned, not-a-lead. Write the counts down. Most owners have never seen them on the same page.
- List your excuse and not-a-lead call reasons by volume. Flag any that could hide viable demand. “Just asking about price” is the classic.
- Pull roughly 20 recordings from the excused and not-a-lead piles, starting with the one-to-three-minute excused calls, and score each against one question: in our area, for something we do? Count the yeses. Reclassify them honestly through whoever has the permission.
- Open the abandoned list. For each: did anyone call or text back, and how fast? Your own callback time is the only benchmark that matters.
- Check credit reality by platform against each source’s official rules, starting with LSA’s, and confirm your service area and job types are set tight.
- Last column, observation only: which lower-priority jobs filled slots this month that would have sat open?
Then take the yes-count from step 3 into your next budget meeting and set it next to the booking rate. One of those numbers was on the dashboard all year. The other one is the argument.
This was never really marketing versus operations. ROAS is a team score, and both sides have been pointing at a rate whose denominator neither of them had opened. The callers who fell out of it didn’t leave the building. They’re in the abandoned list and the excuse log, recorded and waiting, and every one nobody goes back for is a call the search results are free to hand to the next truck. Our Software catches this automatically; done by hand, it’s a stack of recordings and an honest ear, unfortunately. Either way, somebody has to listen. The expensive leads aren’t the bad ones. They’re the ones you paid for and wrote off.
Get it in your inbox, every Friday.
2,000+ trades owners already read it. Unsubscribe any time. @freeagency.ai on TikTok
Keep reading
More plays
LSA is moving to Google Ads: the hottest take (it’s lukewarm)
If you run Local Services Ads, your inbox had a busy week.
Read the play
How to Add a Trade Without Starting in the Hole
Someone has probably told you what a new division costs. Maybe a coach, maybe the guy at Pantheon who added plumbing last year, maybe just the math in your own head.
Read the play
SMS Template Pack: 13 Automations Built for Home Services
A lead form fills out at 9:12 AM Tuesday. Your CSR is in the morning rush: three dispatches to sort, a tech asking where the truck keys ended up, the phone ringing off the hook.
Read the play
