No-shows down −63% across 22 chairs — dental network · Lviv
22% of patients simply did not show up.
Clinica Via runs four dental locations across Lviv: 22 chairs, 31 staff, around 1,400 appointments a week. The reception team confirmed appointments by phone the day before. Calls that went to voicemail counted as "confirmed" because there was no time to do otherwise.
The result: a 22% no-show rate at the network level, with the suburban location running closer to 28%. At an average chair-hour value of UAH 1,200, the network was losing ~UAH 440k of capacity per month — money that was, technically, already spent on the dentist's salary, the nurse, the rent and the autoclave.
Maryana, the operations director, had tried two things before us: a YClients-native reminder, and an off-the-shelf chatbot vendor. The reminder helped a little. The chatbot, she said, "spoke like a robot trained on someone else's clinic."
Contract number: no-show rate ≤ 14% at the network level, measured over rolling 30 days, after the first 60 days live.
YClients stays the source of truth. The daemon talks to patients.
YClients holds every appointment, every dentist's schedule, every chair. We didn't replace it — we wired the agent to it bidirectionally. The daemon reads tomorrow's slate, talks to each patient on whichever channel they first arrived through, and writes confirmations / cancellations / new slots back into YClients for reception to see.
The cadence is unsexy and very specific to dental: T-72h ("you have an appointment Thursday — works?"), T-24h with friction-free "reply 1 to confirm", T-2h gentle reminder. Cancellations through any of these get re-offered to a waitlist patient automatically.
The kicker is the recovery loop. If a patient still doesn't show, the daemon messages them within 4 hours with three candidate slots — usually inside 48h. We wrote that recovery message with the front desk; it sounds like Halyna at reception, not like a piece of software.
| Day | Stage | Output | Owner |
|---|---|---|---|
| Day 0 | Brief | Network audit · 4 locations · cadence drafted · KPI co-signed | Vlad K. · Maryana |
| Day 1–3 | YClients sync | Bidirectional integration; slot & capacity model live | Olha B. |
| Day 4 | Channels | Viber, SMS, Telegram, VOIP wired with patient consent flow | Marko Y. |
| Day 5–6 | Tone with reception | Halyna & Olesya (front desk) write voice with us · 3 dialects | Iryna S. |
| Day 7–10 | Shadow mode | Daemon drafts; reception sends. 411 conversations reviewed. | All |
| Day 11 | Recovery loop calibration | 4h window confirmed; refusal rules signed off with clinical lead | Iryna S. · Maryana |
| Day 12–13 | Live · ramp | 1 location → 4 locations. Daily 18:30 metrics call. | Marko Y. |
| Day 14 | Hand-off | Calibration period begins. KPI measured rolling 30d from Day 60. | Kateryna L. |
Contract said ≤ 14%. Steady state is 8.1%.
The network's no-show rate halved in the first 30 days and continued to drop as the recovery loop earned its keep. The biggest delta was the suburban location, which fell from 28% to 9%. The downtown location, with younger patients on Telegram, got to 6.2%.
- −63% no-show rate at the network level (rolling 30d, months 3–22)
- ~280k UAH/month of recovered chair-capacity, on a fee of ~UAH 38k/mo
- 11 hours/week saved at the front desk · zero confirmation calls
- 0.42 recovery rate — 42% of no-shows re-book within 7 days
- +24% reschedule rate — patients reschedule rather than vanish
What we got wrong. Our first cadence was T-48h / T-2h. Patients felt nagged; some opted out. We worked with the front desk to land on T-72h / T-24h / T-2h, which respects how Ukrainians actually plan their week. Opt-out rate fell from 4.1% to 0.6%.
They wrote the no-show number into the contract on day one. We hit it on day eleven. Two years later, the daemon still confirms more appointments than the four humans who used to.
Run a clinic? Let's draw your daemon.
A 30-minute call, your booking system audit, the no-show number that goes in your contract.