Find the patients overdue for care, reach them with minimum-necessary messaging, and get them rebooked without putting clinical detail into SMS.
Bring your stack to a call and we will scope it against how your business actually runs.
Book a callEvery established clinic is sitting on a list of people who were patients and are not any more, and almost none of them left deliberately. They moved house, changed jobs, had a baby, lost a card, meant to call back after a holiday, or simply never got a reminder because the last one went to an old cell number. The clinic's own records show them as active patients. Operationally they have vanished. Meanwhile the same clinic is paying to acquire new patients at the top of the funnel while a far warmer population sits in the practice management system doing nothing.
The specific operational failure is that recall is treated as a byproduct of the appointment system rather than as a process of its own. The practice management system can produce a list of patients due for a follow-up, a repeat screening, or an annual visit, and frequently does, but the list goes to a front-desk team that is already answering phones, and calling two hundred people is nobody's job this week. So the list is run quarterly at best, worked from the top until the day ends, and abandoned. The patients at the bottom of the list have been overdue for two years.
Money leaks in three measurable places. First, in unbilled visits that would have happened with a single well-timed message. The clearest and most immediate loss. Second, in clinical outcomes that are also revenue outcomes: a patient who misses a recall and presents later, worse, costs more to manage and is a poorer experience for everyone involved. Third, in acquisition spend that would not be needed at the current rate if the existing list were worked properly. The constraint on fixing it is not desire; it is that patient reactivation touches protected health information, and most clinics are rightly nervous about automating anything that does. That nervousness is the correct instinct. The answer is not to avoid the automation. It is to build it so that no clinical detail ever leaves the clinical system, and the messaging layer only ever knows that somebody is due to be seen.
Build this with a clear boundary. The practice management system or electronic health record holds the clinical reason a patient is due. The messaging platform holds only enough to send a neutral message and book an appointment. Nothing in the message, in a tag name, in a field name visible in a merge, in a form title, or in a calendar name states or implies a diagnosis, a condition, a test, a medication, or a service type. The patient knows why they are being contacted; the SMS does not need to say it, and the phone sitting on a kitchen table in front of other people must not.
One pipeline, Recall and Reactivation. Stages are deliberately generic in name, since stage names appear in notifications and reports:
Every field below is deliberately non-clinical in both its name and its contents. This is the most important design decision in the build.
Tag names are neutral. A tag named after a condition or a service is a disclosure waiting to happen. Tags surface in exports, in notification bodies, and on screens that patients can sometimes see.
BO's scope in a clinical setting is narrower than anywhere else in this knowledge base, and the narrowness is the point.
Trigger: scheduled, weekly, on receipt of the recall export from the clinical system. By a native integration where one exists, or by a scheduled file drop or an integration layer such as Zapier or Make where it does not. Whichever route is used, it must be covered by the same agreements and controls as the clinical system itself.
Conditions and branches: the entire workflow is a gate, and the order of the gates matters more than anything else in this build. Gate one: does the record carry deceased-suppress? Gate two: do-not-contact-campaign? Gate three: a channel opt-out? Gate four: is consent current for at least one channel? Gate five: is a contact method present and marked valid? Only a record passing all five gates proceeds. Branch on match quality: an exact external-identifier match updates the contact; a name-and-mobile match with no identifier creates a review task rather than merging, because a wrong merge in a clinical context means messaging one patient about another's care.
Actions in order:
Stop and exit conditions: a record that fails any gate exits and is not reconsidered until the next export. The import aborts entirely rather than partially processing if the file structure does not match the agreed schema. A half-processed clinical import is harder to unwind than a failed one.
Trigger: consent_sms or consent_email empty or older than the clinic's agreed refresh interval, or a record landing in No Consent on File.
Conditions and branches: branch on whether any messageable consent exists. With no consent at all, nothing may be sent electronically. The only permitted route is the postal path or an in-person update at the next visit. With consent for one channel but not another, use the consented one to ask about the other. Branch on preferred_language and serve the consent wording in that language, since consent presented in a language the patient does not read is not meaningful.
Actions in order:
Stop and exit conditions: consent captured, one reminder sent, or opt-out received. A record with no consent never enters an outreach wave regardless of how overdue the patient is. Overdue is not a justification; being overdue is the clinic's problem to solve through permitted channels.
Trigger: record enters Consent Verified and its reactivation_wave is the active wave.
Conditions and branches: branch on consented channel, SMS preferred where available. Branch on preferred_language. Branch on quiet hours in the patient's time zone. Branch on visit_duration_code and assigned_provider to select which booking link is sent, so the link only ever offers slots that are genuinely appropriate. Critically, do not branch the message wording on recall_type_code: one neutral message for all recall types is both safer and, in practice, no less effective.
Actions in order:
Stop and exit conditions: booking, reply, opt-out, delivery failure, or completion of two sends. Hard stop on any suppression tag appearing at any point, including mid-sequence, since a clinician may apply one after the wave has started.
Trigger: record completes Workflow 3 without a booking or reply.
Conditions and branches: branch to a different channel from wave one: email if SMS was used, SMS if email was. Branch on outreach_attempts against the clinic's policy cap, which should be set explicitly and should be low; three to four total attempts across all channels is a reasonable ceiling and more than that becomes harassment of someone who has not responded. Branch on recall age: a patient overdue by more than a defined period, two years say, should go straight to the staff call list rather than receiving more messages, because at that distance a message is unlikely to work and a call might.
Actions in order:
Stop and exit conditions: booking, reply, opt-out, attempt cap reached, or suppression. Once the attempt cap is reached with no response, the record leaves active outreach and waits for the next natural recall cycle. Grinding on the same non-responder every month is both ineffective and, on any reasonable reading, not minimum necessary.
Trigger: any inbound message on a recall thread, on any channel.
Conditions and branches: this is the workflow that keeps the build safe, and it should be built before the outreach waves rather than after. Branch one: urgent clinical language: pain, bleeding, worsening, breathing, chest, emergency, or any distress signal. These route instantly to the named clinical contact and the patient receives one message directing them to the clinic by phone or to urgent care, with no further automated interaction. Branch two: a clinical question that is not urgent, anything about results, medication, symptoms, or why the recall was issued. These route to staff with the message quoted, and BO replies only that a member of the team will call. Branch three: a logistics message. A date, a time, a request to be called back, a change of number. BO may handle these. Branch four: an opt-out or decline, which routes to Workflow 8.
Actions in order:
Stop and exit conditions: staff task completed, or the patient booked, or an opt-out. Automated messaging never resumes on a thread that reached the urgent branch; it stays with people permanently.
Trigger: an appointment is created on any recall calendar.
Conditions and branches: branch on consented channel and on preferred_language. Branch on interpreter or accessibility needs recorded on Pre-Visit Logistics, which generate internal tasks rather than patient messages. Branch on lead time: a booking made for tomorrow gets a compressed reminder ladder. Every message in this workflow is checked against one rule before it is built. Could this text, read by somebody other than the patient, reveal anything about their health? If yes, rewrite it.
Actions in order:
Stop and exit conditions: appointment attended, canceled, or not attended with the staff path triggered. Reminders for a confirmed appointment are transactional and continue through a marketing opt-out, but stop on a full communications opt-out.
Trigger: a hard delivery failure, a repeated soft failure, an invalid-number response, or a staff-recorded wrong number.
Conditions and branches: branch on whether an alternate consented channel exists. If one does, try it once. If none does, the record goes to the postal path, which is the only remaining route. Branch on whether the clinic holds a secondary contact on the clinical record, and if so, note carefully that contacting a family member or alternate contact about a patient's appointment is a disclosure and needs its own authorization on file. Do not message a listed emergency contact as a convenient fallback.
Actions in order:
Stop and exit conditions: details corrected and contact_valid set to yes, or the postal attempt made. No further electronic sends while contact_valid is no.
Trigger: opt-out language on any channel, a patient declining, or the Internal Suppression Request form being submitted by staff.
Conditions and branches: branch on what is being declined, and be precise about it, because in a clinical context the distinctions genuinely matter. A marketing opt-out is not a refusal of appointment reminders for an appointment the patient has booked. A decline of this recall is not a refusal of all future care. A request to stop all contact is a different and broader instruction. Branch on the source: a clinician-applied or privacy-officer-applied suppression overrides everything and is never cleared by a workflow. Branch on ambiguity: “not right now” is a deferral, not a decline, and should be treated as a deferral with a date rather than guessed at either way.
Actions in order:
Stop and exit conditions: terminal in every branch except the deferral. No workflow in this build re-enrolls a suppressed or opted-out record. Re-entry requires a fresh, documented consent captured on the Contact and Consent Update form or in person, with consent_source and consent_captured_date written.
Afterwards, recall stops being a quarterly scramble and becomes a weekly process that runs whether or not anybody remembers it. The due list arrives, suppressions are applied before anything is sent, the consented population is messaged in manageable waves, the people who reply are triaged within minutes, and the people who do not respond to two messages reach a call list that is short enough to actually complete. The front desk spends its time on conversations rather than on dialling through a list, and the clinic can state, with evidence, how many of its overdue patients were contacted and what happened to each one.
The second change is a compliance posture that is better than what preceded it, not worse. Before the build, recall messaging typically happens ad hoc, with staff texting patients from whatever device is nearest and clinical detail appearing in message bodies because it was convenient. After the build, every message is a reviewed template, every clinical detail stays in the clinical system, consent is a field with a date and a source rather than an assumption, suppressions are enforced mechanically, and every send is logged. Automating the process is what makes it auditable.
The third change is visibility of data quality. The count of unreachable patients is usually a shock the first time it is measured, and it is the cheapest problem on this list to fix.
Metrics to watch, monthly:
This build touches protected health information, and the sequencing of the preparation matters more here than in any other guide in this knowledge base. The following should be settled before the first workflow is created, not alongside it.
None of the above is legal advice, and this guide describes operational practice rather than compliance obligations. Privacy rules, messaging registration requirements, consent standards, state and national health-information law, and retention obligations vary by jurisdiction and change over time, and how they apply depends on the specific clinic, its covered status, its vendors, and its patient population. Confirm the specifics. Business associate agreements, what counts as minimum necessary for this clinic, consent wording, message content, retention periods, and breach obligations. With the clinic's own counsel and privacy officer before anything goes live. To scope a build for a specific clinic, book a call at bookings.appbo.io.
Every build on this page is something we configure, test and hand over with the SOPs your team needs to run it.
Book a call