Home / Dental Practices / Unscheduled treatment follow-up: weekly call list plus a generic booking nudge (Open Dental)

Dental Practices problem 2: Diagnosed treatment never gets scheduled

Unscheduled treatment follow-up: weekly call list plus a generic booking nudge (Open Dental)

Verified with mocksLast tested 2026-10-28 · pricing checked October 2026

Every week the workflow finds treatment-planned procedures in Open Dental that have no future appointment and builds a call list for the treatment coordinator: patient, planned codes, fee and date presented. Patients who agreed to texts get at most two generic nudges per plan, 30+ days apart ('you have a follow-up visit to schedule with us'), never the procedure, tooth or fee. Patients who book drop off; patients who reply or opt out become call-only.

The problem

Treatment that is diagnosed and presented but never booked is care the patient doesn't get and production the practice never sees. The benchmark below comes from a practice-software vendor.

Who it's for

US dental offices on Open Dental with a treatment coordinator or office manager who calls patients about unscheduled treatment.

Tools and monthly cost

ToolOfficial 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-hostedCommunity 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 60 unscheduled plans, 40 with text consent, and a first text to each in month one: 40 one-segment texts = $0.33 plus carrier fees of $0.14-$0.20. Open Dental API $15 per location (Comm permission for commlogs). Uses the Twilio number from the missed-call recipe. About $16 a month plus your n8n server.

Setup

  1. Read the 'HIPAA, TCPA and BAAs' section on the dental hub first.
  2. Use the Twilio number and A2P campaign from the missed-call recipe, and its SMS webhook, so STOP replies reach Open Dental.
  3. Give the workflow an Open Dental API key with the $15 tier (it reads procedures, appointments and patients, and writes a commlog for each text). Set OD_AUTH and OD_REQUEST_INTERVAL_MS.
  4. Create the call-list Sheet in BAA-covered Google Workspace, share it only with the treatment coordinator, and swap the mock sheet URL for n8n's Google Sheets node.
  5. Set PRACTICE_SHORT, PRACTICE_PHONE, WEB_SCHED_URL, PRACTICE_TZ and TP_MIN_AGE_DAYS (default 14: give a patient two weeks after the plan is presented before anyone nudges them).
  6. Run it once with the Twilio node disabled and review the call list before letting it text anyone. 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-unscheduled-treatment-follow-up.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.

5/5 scenarios passed (run 2026-10-28)

PASSU1First weekly run: call list for every unbooked plan; generic text only to TxtMsgOk = Yes; patients with a future visit, inactive and just-presented plans skipped
PASSU2A week later: visits on Nov 5 are past but the plan is still open -> those patients join the list; already-texted wait 30 days
PASSU3Dec 3: patient who booked drops off; patient who replied is call-only; plans whose visit passed or that aged past 14 days get a first text; second text to the rest
PASSU4Jan 4: after two texts it is call only, never a third text
PASSU5Frequency cap shared with the other recipes (missed-call text 2 h earlier) + Open Dental 429 handled

Actual output from the test run

Scenario U1: the generic text, and the first rows of the staff call list (invented patients; this list stays in the practice's Sheet). Names and numbers are invented.

U1: Maple Grove Dental: you have a follow-up visit to schedule with us. Book: https://example.com/maple-grove/book or call +15555550100. Reply STOP to opt out.

Call list:
[
 {
  "week_of": "2026-11-02",
  "patient": "Frank Odum",
  "PatNum": 106,
  "phone": "+15555550206",
  "planned": "D4341",
  "planned_fee": "295.00",
  "presented": "2026-08-20",
  "action": "Call (opted out of texts)"
 },
 {
  "week_of": "2026-11-02",
  "patient": "Hank Moss",
  "PatNum": 108,
  "phone": "+15555550208",
  "planned": "D4341, D4341",
  "planned_fee": "590.00",
  "presented": "2026-10-01",
  "action": "Texted (1 of 2)"
 },
 {
  "week_of": "2026-11-02",
  "patient": "Kara Diaz",
  "PatNum": 111,
  "phone": "+15555550211",
  "planned": "D2740 #18",
  "planned_fee": "1250.00",
  "presented": "2026-08-01",
  "action": "Texted (1 of 2)"
 }
]

Verified with mocks

  • Weekly run: every treatment plan with no future appointment lands on the call list; patients with a future visit, inactive patients and plans presented less than 14 days ago are skipped.
  • Texts go only to patients with TxtMsgOk = Yes, contain no procedure, tooth or fee, are under 160 characters and end 'Reply STOP to opt out'.
  • Second text no sooner than 30 days later; never a third; after two texts it is call-only.
  • A patient who books drops off the list; a patient who replied is call-only; a plan whose scheduled visit passed without the work being done rejoins the list.
  • Shares one frequency ledger with the other dental recipes: a patient texted by the missed-call recipe 2 hours earlier is not texted again (at most 1 automated text per 24 hours and 3 per 7 days). Open Dental 429 replies are retried.
  • 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 procedurelogs (ProcStatus TP, DateTP), appointments and commlogs (from Open Dental's API docs; field names compared with the public test database by read-only GETs).
  • Twilio Messages API (from Twilio's docs).

Limitations

  • The call list is the main output: a text is a reminder to book, not a treatment conversation. Fees and codes appear only in the staff Sheet.
  • Insurance-driven delays (waiting for the new benefit year) are not detected; the coordinator should mark those plans.
  • 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.