Home / Dental Practices / Overdue recall and reactivation texts with a call list (Open Dental recall list)
Dental Practices problem 3: Patients fall overdue for recall and hygiene chairs sit empty
Overdue recall and reactivation texts with a call list (Open Dental recall list)
Each weekday morning the workflow reads Open Dental's recall list for patients who are past due and not booked, sends up to three generic reminders 14+ days apart ('it's time to book a checkup', with your online booking link) and records each one on the recall the same way Open Dental's own recall list does. Families sharing a phone get one text. Patients without text consent, and those who got three reminders and still didn't book, go on a call list.
The problem
An unfilled hygiene slot is lost production, and staffing makes it harder to fill: most practices say hygienists are hard to hire, so every booked chair counts.
- ADA Health Policy Institute, Q3 2025: 90.8% of practices trying to hire a dental hygienist said recruiting one was challenging. Source: ADA Health Policy Institute, Economic Outlook and Emerging Issues in Dentistry, Q3 2025 (Professional association survey)
- Open Dental's own Web Sched Recall and eReminders can send automated recall texts and emails. If you already use them, keep them and skip this recipe, or the patient gets both. Source: Open Dental manual: Web Sched Recall setup (Vendor manual)
Who it's for
US dental offices on Open Dental whose recall list is longer than the front desk can work by phone, and who don't already use Open Dental's automated recall messages.
Tools and monthly cost
| Tool | Official price |
|---|---|
| Twilio US SMS, sent or received | $0.0083 per 160-character segment, plus carrier fees of about $0.0035-$0.005 per segment pricing page |
| Open Dental API (per location, paid by whoever holds the developer key) | Free: Read All only (1 request per 5 s). $15 / month: adds Comm, InsuranceSimple and others (1 request per second). This recipe writes commlogs or recall status, so it needs the $15 tier pricing page |
| Google Workspace with the HIPAA BAA accepted (call lists and logs live in Google Sheets) | Any paid Workspace edition (not the legacy free edition) can accept Google's BAA in the Admin console; Sheets is covered. You probably already pay for Workspace pricing page |
| n8n, self-hosted | Community Edition is free; you pay for the server. n8n Cloud is not an option here: n8n staff said in January 2026 that n8n does not offer a BAA for Cloud pricing page |
| Twilio HIPAA account (only if any text could contain PHI) | Requires Twilio Security Edition or Enterprise Edition plus a signed Business Associate Addendum; priced by Twilio Sales (no public price) pricing page |
Example month: Illustrative arithmetic. Assume 300 overdue patients sharing 220 phone numbers with text consent, one reminder each this month: 220 one-segment texts = $1.83 plus carrier fees of $0.77-$1.10. Open Dental API $15 per location (recall status writes need the Comm permission). Twilio number shared with the missed-call recipe. About $18 a month plus your n8n server.
Setup
- Read the 'HIPAA, TCPA and BAAs' section on the dental hub first. Turn off Open Dental's automated recall texts (or don't use this recipe) so patients aren't reminded twice.
- Use the Twilio number, A2P campaign and SMS webhook from the missed-call recipe.
- Give the workflow an Open Dental API key with the $15 tier. Optionally set RECALL_STATUS_TEXTED_DEFNUM to the definition number of your 'Texted' recall status so it shows on the recall list.
- Set RECALL_MIN_OVERDUE_DAYS (default 30) and RECALL_LOOKBACK_MONTHS (default 24: older lapses are left for a personal call), plus PRACTICE_SHORT, PRACTICE_PHONE, WEB_SCHED_URL and PRACTICE_TZ.
- Create the call-list Sheet in BAA-covered Google Workspace and swap the mock sheet URL for n8n's Google Sheets node. The workflow also has a manual 'run now' webhook used by our tests. Delete it, or put it behind n8n's header authentication, before you go live.
Download
Download dental-overdue-recall-reactivation.zip
Contains the n8n workflow, the mock data, the test runner with its last results, and the mock server we tested against. All keys in .env.example are fake.
Test result
Every workflow was imported into n8n 2.45.4 and run end to end on our test machine. Open Dental's API, Twilio, Stedi, Google Sheets and the email sender (Resend) were replaced by a local mock server built from their official API docs: it checks the same request shapes and required fields, enforces Open Dental's request throttle (HTTP 429) and records every call. We also compared the mock's field names with Open Dental's public test database (read-only GET requests with the test key Open Dental publishes, no writes). These recipes use no AI model; every decision is a written rule. Patients, plans and phone numbers are invented. Verified with mocks; no real patient data used, and nothing was sent to a real phone, patient, payer or account.
4/4 scenarios passed (run 2026-10-28)
| PASS | R1 | Overdue recalls: one text per family phone (two kids, one number), call list for no-consent / 3-reminder patients, booked and recently reminded skipped |
| PASS | R2 | Next day: nothing new (14-day gap, daily cap) |
| PASS | R3 | Two weeks on: family texted STOP (Open Dental TxtMsgOk = No) -> call only; patient who replied -> call only; 2nd reminder to others |
| PASS | R4 | Patient books (appointment added): drops off the list; 429 from Open Dental handled |
Actual output from the test run
Scenario R1: the reminder text and the first call-list rows (invented patients). Names and numbers are invented.
R1: Maple Grove Dental: it's time to book a checkup. Pick a time: https://example.com/maple-grove/book or call +15555550100. Reply STOP to opt out.
Call list:
[
{
"run": "2026-11-09",
"patient": "Leo Lopez",
"PatNum": 112,
"phone": "+15555550201",
"recall": "Prophy",
"due": "07/15/2026",
"reminders_before": 0,
"action": "Covered by family text"
},
{
"run": "2026-11-09",
"patient": "Frank Odum",
"PatNum": 106,
"phone": "+15555550206",
"recall": "Prophy",
"due": "09/20/2026",
"reminders_before": 0,
"action": "Call (opted out of texts)"
},
{
"run": "2026-11-09",
"patient": "Grace Kim",
"PatNum": 107,
"phone": "+15555550207",
"recall": "Prophy",
"due": "09/01/2026",
"reminders_before": 0,
"action": "Texted (reminder 1 of 3)"
}
]Verified with mocks
- Overdue, unbooked recalls: one generic text per phone number (two children on one parent's number get one text), under 160 characters, ending 'Reply STOP to opt out'.
- Patients with TxtMsgOk = No, and those who already had 3 reminders, go to the call list instead; booked and recently reminded patients are skipped.
- Next-day re-run sends nothing new; the 2nd reminder goes out 14+ days later.
- A family that texted STOP (TxtMsgOk = No in Open Dental) and a patient who replied become call-only.
- A patient who books drops off; Open Dental 429 replies are retried; each text is written to the recall with PUT recalls/Status.
- Verified with mocks; no real patient data used.
Documented from official API docs only
Built to the vendor's documentation but not run against a live account. Check these on yours.
- Open Dental API v1 recalls/List (and its date and string formats, compared with the public test database), recalls/Status PUT, patients and appointments (from Open Dental's API docs).
- Twilio Messages API (from Twilio's docs).
Limitations
- Reactivation texts to patients who have not been in for a long time may be closer to marketing than to a treatment reminder. Your compliance officer should decide the lookback window.
- Built for Open Dental only. Dentrix, Eaglesoft, Curve and NexHealth versions are not built, and we make no claim that this works with them.
- Business associate agreements are your job: self-host n8n on infrastructure covered by a BAA (n8n does not offer one for n8n Cloud), accept Google's Workspace BAA before any patient name goes into a Sheet, and ask your compliance officer whether your texting setup needs Twilio's HIPAA offering (Security or Enterprise Edition plus a BAA, sales-quoted). Patient replies can contain health details even when our texts do not.
- Not a compliance guarantee. We designed around HIPAA and the TCPA (generic texts with no treatment, fee or name; consent from Open Dental; staff lists kept in BAA-covered Google Workspace), but whether your setup is compliant depends on your contracts, your server and how your staff use it. Check with your compliance officer or counsel and your state dental board before you turn it on.