We Built a Booking Portal for a 12-Clinic Diagnostics Chain — No-Shows Halved
A Pune diagnostics chain (12 branches, 1,400 daily bookings) had a 31% no-show rate. We shipped a multi-branch booking portal with SMS + WhatsApp reminders and a deposit experiment. No-shows fell to 15%.
K
Khushi Singh
August 21, 202513 min read
0%
A Pune-based diagnostics chain runs 12 collection centres across the city and Pimpri-Chinchwad. Roughly 1,400 bookings a day, mostly blood work and imaging. Their no-show rate was 31% — phlebotomists and CT slots sitting idle while walk-ins queued. We built them a multi-branch booking portal with a layered SMS + WhatsApp reminder cadence and ran a deposit-on-booking experiment on two branches. Six weeks after launch the no-show rate sat at 15%. Here is the architecture, the reminder timing, and the deposit trade-off that surprised us.
31% → 15%
No-Show Rate (6 weeks)
12
Branches on One Portal
1,400
Bookings / Day
₹9.2L
Monthly Slot Revenue Recovered
## The Answer in 60 Words
We replaced phone-and-register booking with a web portal that shows real slot capacity per branch. Every booking fires a three-touch reminder: an SMS at T-24h, a WhatsApp card at T-3h with a one-tap reschedule, and an SMS at T-1h for morning slots. Two branches added a ₹100 refundable deposit. No-shows dropped from 31% to 15%.
## Why This Matters Now
Text reminders cut missed appointments by close to 40% — an ophthalmology cohort found reminded patients were [38% less likely to no-show](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2438329/), and a systematic review put the weighted mean reduction near [34% across 29 studies](https://www.dialoghealth.com/post/patient-appointment-reminder-statistics). For a diagnostics chain, an idle CT slot is pure lost margin. WhatsApp also got cheaper to run at scale: from [July 1, 2025 Meta moved to per-message pricing](https://www.ycloud.com/blog/whatsapp-api-pricing-update), and India utility templates land around $0.001–$0.0014 each. So a reminder stack that used to feel expensive now costs less than the revenue from one recovered slot per branch per day.
## The Client (Specific Details)
- Sector: Pathology + diagnostic imaging (blood work, X-ray, CT, ultrasound)
- Location: Pune + Pimpri-Chinchwad, Maharashtra
- Size: 12 branches, 1,400 daily bookings, ~180 staff, ₹62 cr annual revenue
- Stack on day 0: A landline phone, a paper register per branch, and one shared Google Sheet the front desk updated by hand
- The trigger: The CT scanner at their flagship branch ran at 58% utilisation. The owner did the math: every empty CT slot is ₹3,200 of gone-forever revenue.
- The constraint: No clinical data in the portal — only booking metadata. Reports stay in their existing LIS behind a separate login.
## The Architecture (What We Built)
📅
Per-Branch Slot Engine
Each branch has its own capacity grid — test type, machine, phlebotomist count. A CT slot is 20 minutes; a blood draw is 5. The engine never lets two bookings claim the same physical resource.
📨
Reminder Orchestrator
A queue worker that schedules SMS and WhatsApp jobs per booking. Idempotent by booking ID + touch number, so a retry never double-texts a patient.
🔁
One-Tap Reschedule
The WhatsApp reminder carries a deep link that opens the patient's booking with the next three open slots pre-filled. No login, just a signed token in the URL valid for that booking only.
📊
Branch Manager Dashboard
Live view of today's bookings, no-show rate by slot, and a "fill this gap" button that texts the branch's waitlist when a slot frees up inside 2 hours.
We built the portal as a Next.js front end with a Node.js API and PostgreSQL, deployed on AWS — the same multi-portal pattern we used building Radiant Finance's agent, admin, and customer apps. The slot engine is the piece that earns its keep: a naive "30-minute slots" model breaks the moment a branch has two phlebotomists and one CT machine sharing a calendar.
## The Slot Engine (Why a Calendar Grid Isn't Enough)
The single biggest mistake teams make building a clinic booking system is treating time as the resource. Time is not the resource — the machine and the person are. A branch with two phlebotomists can take two blood draws in the same 9:00 am slot, but only one of them can use the single centrifuge bay at 9:05. A CT scan and an X-ray run on different machines, so they overlap fine; two CT scans never do.
So our model has three layers: the branch, the resource (machine or staff role), and the time window. A booking reserves a resource for a window, and the engine checks resource availability, not clock availability. This is what lets one branch run blood draws, X-ray, and CT in parallel without a manager hand-tuning a spreadsheet. It is also what makes the "fill this gap" feature possible — the engine knows exactly which resource just freed up and for how long.
We added a soft buffer too. CT slots get a 5-minute turnaround buffer baked in, because a scan that runs long shouldn't cascade into three late appointments. Small detail, big difference to a branch manager's day.
## What You'll Need (Prerequisites)
Before a multi-branch booking portal is worth building, get these in place. We checked each off with the client in week one.
A DLT principal-entity registration and a registered SMS header (max 11 characters). Without it, your transactional SMS gets dropped by carriers.
A WhatsApp Business API number (via a Business Solution Provider) with at least one approved utility template. The reminder card needs this.
An accurate resource map per branch — machines, staff roles, peak hours. This is the input to the slot engine; garbage in, double-bookings out.
A UPI collect or payment-link setup if you plan to run a deposit experiment. We used the client's existing Razorpay account.
Buy-in from branch managers. The portal changes their daily workflow. We had one manager from each region in the design sessions, and it paid off at rollout.
## The Reminder Cadence (The Part That Moves the Number)
Timing matters more than channel. A reminder a week out gets forgotten; one ten minutes before is useless. After two weeks of A/B testing across branches, this three-touch cadence won.
| Touch | When | Channel | Content | Why this timing |
|---|---|---|---|---|
| 1 | T-24h | SMS (DLT template) | Confirm + branch address + prep instructions (e.g. "fasting required") | Catches the "I forgot I booked" miss; fasting prep needs a full day's notice |
| 2 | T-3h | WhatsApp utility card | Slot time + one-tap reschedule + live directions link | High open rate; reschedule beats a silent no-show |
| 3 | T-1h | SMS (morning slots only) | Short nudge, no link | Morning blood-draw slots had the worst no-show; the extra touch paid for itself |
We deliberately did not add a fourth touch. In testing, a T-15min message annoyed people and drove WhatsApp blocks — which then cost us the channel for the next visit. Three is the ceiling that still feels like a service, not spam.
DLT first, always. Every transactional SMS in India must use a template pre-registered on the DLT portal, tied to a registered header, with the Template ID passed in the message payload. Per TRAI's TCCCPR rules, transactional and service-implicit templates must carry personalization variables and match the approved text exactly. We registered six templates (confirm, reminder, reschedule, cancel, deposit-receipt, slot-freed) before writing a line of sending code.
## The Deposit Experiment (And the Trade-Off)
Reminders cut no-shows. But for high-value slots — CT, ultrasound — even a reminded patient sometimes skips because the booking cost them nothing. So on two branches we ran a four-week experiment: a ₹100 fully refundable deposit on imaging slots only, paid by UPI at booking, auto-refunded on arrival.
The result was real. On the two deposit branches, imaging no-shows fell to 9% versus 16% on the reminder-only branches. But here is the trade-off, and it is the honest part: total bookings on the deposit branches dropped 7% in week one. Some first-time patients bounced at the payment step. We were trading a few cautious new bookers for far fewer wasted slots.
A deposit is not free. It shaves your top-of-funnel. If your problem is empty high-value machines, a deposit wins on net revenue. If your problem is growing a new branch's patient base, a deposit can quietly throttle the growth you actually need. We kept deposits on imaging at mature branches and turned them off for the two newest centres.
After week two we softened it: the deposit applied only to imaging, only after the patient's first completed visit. New patients booked deposit-free. That recovered most of the lost bookings while keeping the no-show win on repeat imaging.
The refund mechanics mattered as much as the deposit itself. We auto-refunded the ₹100 the moment the front desk marked the patient "arrived" — not at end of day, not on a manual batch. A patient who pays ₹100 and sees it back on their UPI app within minutes of walking in trusts the system. A patient who has to chase a refund never books again. We watched the refund-latency metric closely in the first fortnight; median refund time was under 90 seconds.
## The Patient Journey (End to End)
🔍
Pick branch + test
🕒
Choose an open slot
📲
Confirm (+ deposit if imaging)
📨
3-touch reminders fire
✅
Arrive → deposit refunded
The whole flow is designed so a 55-year-old booking a fasting blood test for a parent can finish in under a minute without creating an account. Phone number is the identity; an OTP confirms it; the booking history lives against that number. We tested the flow with the client's own front-desk staff acting as first-time users before a single real patient touched it.
## The Build Plan (How We Sequenced It)
1
Week 1: Slot model + branch capacity audit
Sat with three branch managers. Mapped every resource — machines, phlebotomists, peak hours. Built the capacity grid before any UI. This is where a booking portal is won or lost.
2
Weeks 2–3: Booking flow + admin dashboard
Patient-facing booking (branch → test → slot) and the manager dashboard. We shipped read-only to one branch first and let the front desk shadow-book against the paper register to catch capacity bugs.
3
Week 4: DLT templates + reminder orchestrator
Registered six DLT templates, wired the SMS gateway and WhatsApp Cloud API, built the idempotent queue worker. Tested every touch against real numbers in a staging branch.
4
Weeks 5–6: Roll out 12 branches + deposit A/B
Two branches a day, with a manager from an already-live branch helping the next. Deposit experiment switched on for two branches only, measured against the rest.
## The Reminder Math, Visualised
## Common Mistakes (When Not to Do This)
Over-texting. Symptom: WhatsApp block rate climbing. More than three touches reads as spam and you lose the channel for the next visit. Cap it.
One global slot length. Symptom: double-booked CT machine. A blood draw and a CT scan are not the same slot. Model the physical resource, not a calendar grid.
Deposits on a new branch. Symptom: bookings dip while you are trying to grow. A deposit throttles top-of-funnel — wrong tool for a branch that needs patients.
Skipping DLT registration. Symptom: SMS silently undelivered. Unregistered templates get dropped by carriers. Register first, send second.
No waitlist for freed slots. Symptom: a cancelled CT slot stays empty. A reschedule frees capacity — text the waitlist inside the 2-hour window and fill it.
When does a portal like this not pay off? If you run a single branch with under 40 bookings a day, a shared calendar and a WhatsApp reminder you send by hand is enough. The portal earns its build cost at multi-branch scale, where capacity is invisible across locations and no-shows compound.
## Real Outcome
Six weeks in: no-shows down from 31% to 15%, CT utilisation up from 58% to 79%, and roughly ₹9.2 lakh a month in slot revenue that used to evaporate. The branch managers stopped fielding booking calls and started working the waitlist. The owner's verdict was blunt — the portal paid for itself in the first month on the imaging branches alone.
The unexpected win: the one-tap reschedule, not the reminder, was the quiet hero. Patients who would have ghosted instead moved their slot — 22% of T-3h WhatsApp touches ended in a reschedule, not a cancel. A moved booking is a kept patient.
"We used to staff for the bookings we had and pray half showed up. Now we staff for the bookings we'll actually see. The CT scanner isn't sitting cold by 11 am anymore."
— Operations head, the diagnostics chain (name withheld)
One more thing worth saying plainly: the portal did not replace the front desk. It freed it. Staff who spent half their morning answering "what time is my slot" calls now work the waitlist and handle walk-ins. The same number of people, doing higher-value work. That is the quiet ROI nobody puts in the proposal.
This is adjacent to work our web development team and CRM team do across the healthcare and services space — and it pairs with the mobile side we covered in our 7-week HIPAA-aware patient booking app build. If reminders are your bottleneck, our automation team wires the same cadence into a WhatsApp flow — see our n8n + WhatsApp Cloud API auto-reply guide for the no-code version, and the WhatsApp pricing breakdown before you budget.
## Frequently Asked Questions
### How much does a multi-branch patient booking portal cost to build?
For a portal covering 8–12 branches with a slot engine, reminders, and a manager dashboard, budget roughly ₹6–12 lakh depending on integrations. The reminder stack itself is cheap to run — India WhatsApp utility templates cost about $0.001–$0.0014 each post the July 2025 pricing change.
### How much can SMS and WhatsApp reminders actually cut no-shows?
Studies put the reduction near 34–38%. In our Pune build, reminders alone took the no-show rate from 31% to 18%. Adding a refundable deposit on high-value imaging slots pushed it to 9% on those branches.
### Do I need DLT registration to send appointment reminders in India?
Yes. Every transactional SMS must use a DLT-registered template tied to a registered header, with the Template ID in the payload. Unregistered messages get dropped by carriers. Register your confirm, reminder, and reschedule templates before you start sending.
### Should a clinic charge a deposit on bookings?
Only for high-value slots, and watch your funnel. A refundable deposit cut imaging no-shows to single digits for us, but dropped total bookings 7% in week one. We applied it only to imaging, only after a patient's first completed visit, which kept the no-show win without scaring off new patients.
### What reminder timing works best for diagnostics appointments?
Three touches won for us: an SMS at 24 hours (with fasting-prep instructions), a WhatsApp card at 3 hours with one-tap reschedule, and a short SMS at 1 hour for morning slots only. A fourth, last-minute touch annoyed patients and drove WhatsApp blocks.
### Can the booking portal connect to our existing LIS?
Yes, but keep clinical data out of the booking layer. We sync only booking metadata and let reports stay in the existing LIS behind its own login. That keeps the portal's data footprint small and the compliance surface narrow.
Need a multi-branch booking portal?
We ship a multi-branch patient booking portal — slot engine, SMS + WhatsApp reminders, manager dashboard — for Indian clinics and diagnostics chains in 5–6 weeks. Typical project: ₹6–12 lakh. Suitable if you run 5+ branches and no-shows are eating your machine time. No slides — just your problem and our honest take. Email contact@softechinfra.com.