All customer calls, Jul 8 – Aug 7 2026. What we count as a “viable” call, where those calls end up, and how much of the headline rate we give away through strict classification and measurement gaps.
Only about a third of inbound production calls are classified viable, and less than a quarter of those convert to a CRM booking. Everything in this report is about the middle segment — viable calls that never became a booking.
Viable is a per-call LLM judgment (“the call was related to booking an appointment”), made independently of the call-end category. Several categories that are marked viable convert at effectively zero — they are viable in intent but unbookable in practice, and they only exist in the denominator.
Each step removes one defensible sub-category from the viable denominator, cumulatively. Booked jobs (the numerator) are unchanged — this is purely about which calls we hold ourselves accountable for.
The numerator only counts crmJobBooked / crmJobRescheduled. Accounts without a working CRM integration can never contribute a booking — but their viable calls still count against the aggregate.
After every exclusion above, these viable-but-unbooked calls remain. This residue is the honest conversion gap — the part a better definition can’t fix, and the real lever for revenue.
Customers with ≥50 viable calls in the window, showing today’s rate vs the rate under the generous definition (all ladder exclusions applied). Rows marked “no CRM sync” recorded zero CRM bookings all month — their true rate is unknown.
CallResult = "Booked" for non-integrated accounts. There are also 713 viable calls where the LLM says the appointment was booked but no CRM job was recorded — recoverable numerator.computeMetrics already excludes transfers from the raw booking-rate denominator but not from viable. A call handed to a human is a success whose outcome we simply don’t observe; competitors are unlikely to count these as AI failures.Viable = true and CallResult = "Excused" (follow-ups on existing jobs, callbacks, reschedules). That is internally contradictory — one prompt-level fix: when CALL_RESULT is Excused or NotLead, force VIABLE false.