Clients/Form reminders & the check-in worklist
updated 2026-08-24
Clients

Form reminders & the check-in worklist

Automatic escalating reminders when clients miss any form — weekly check-ins, onboarding, or other forms — plus a worklist to track every one by state.

Whenever you ask a client to fill in a form — a weekly check-in, an onboarding questionnaire, or any other form you assign — you want them to submit on time, and if they miss it, you need to know. Protocol automates the reminding for every one of these and gives you a single place to track its state.

Reminders apply to all three kinds of form to-do by default. The rest of this page says “check-in” for short, but the same ladder, worklist, and settings cover onboarding and other forms too.

How it works: the escalation ladder

Check-in reminders are on by default for your whole organization — you don’t have to switch anything on, and they cover every client and every form, whether or not a check-in is assigned to a specific coach. Each missed check-in triggers an escalating sequence. The steps are yours to configure — decide how many hours between reminders, how many reminders before it’s “fully missed,” and which channels (push and/or email) deliver each one.

Pre-reminder 24h before (optional) Check-in due Client gets push + to-do Missed 1st Reminder 1 after interval Missed 2nd Reminder 2 repeat interval Fully missed After max reminders you get notified

Each step depends on your policy settings. You control the timing, number of reminders, and message text.

Check-ins escalate on your schedule: optional nudge before due, then client gets a reminder, then reminders count up, then you're alerted once it's fully missed.

Each step sends a notification:

  • Pre-reminder (optional) — sends 24 hours before the check-in is due, so the client can plan ahead. Off by default.
  • Check-in due — sends when the check-in reminder date arrives. The client gets a push notification and a to-do in their app.
  • Missed reminders — each time the interval passes and they still haven’t submitted, send another reminder (push and/or email, your choice).
  • Fully missed — once you’ve sent as many reminders as you configured, the check-in escalates to “fully missed” and you get a notification so you know to follow up directly.

At any point, if the client submits their check-in, the escalation stops — that check-in is complete and won’t send any more reminders.

Configure your policy

You set one default policy and it applies to every form (check-ins, onboarding, and other forms) for your whole roster. Open Escalation settings from the check-in worklist to tune it:

Escalation settings
Enable check-in escalation reminders
  <div style="border-top:1px solid #eef1f4; padding-top:12px; margin-top:12px;">
    <div class="wlabel">Reminder interval (hours)</div>
    <div class="winput" style="width:100px"><span style="color:#39414e">24</span></div>
  </div>

  <div>
    <div class="wlabel">Max missed reminders before escalation</div>
    <div class="winput" style="width:100px"><span style="color:#39414e">2</span></div>
  </div>

  <div style="border-top:1px solid #eef1f4; padding-top:12px; margin-top:12px;">
    <div class="wlabel" style="font-weight:600; color:#2b313c">Due reminder</div>
    <div class="wlabel" style="margin-top:6px">Title</div>
    <div class="winput"><span style="color:#9aa2ad; font-size:12px">Progress Check-In</span></div>
    <div class="wlabel" style="margin-top:8px">Message</div>
    <div class="winput" style="min-height:44px"><span style="color:#9aa2ad; font-size:12px">You have a new progress check-in to complete</span></div>
    <div style="font-size:11px; color:#8a92a0; margin-top:4px; font-style:italic">Blank fields keep the built-in wording. Use {client} for the client's first name. A due time is appended automatically for time-sensitive check-ins.</div>
  </div>

  <div style="border-top:1px solid #eef1f4; padding-top:12px; margin-top:12px;">
    <div class="wfield"><span class="fl">Send a heads-up before the check-in is due</span><span class="wtoggle"></span></div>
  </div>

  <div style="border-top:1px solid #eef1f4; padding-top:12px; margin-top:12px;">
    <div class="wlabel" style="font-weight:600; color:#2b313c">Miss reminders</div>
    <div style="border:1px solid #eef1f4; border-radius:6px; padding:8px; margin-top:8px">
      <div style="display:flex; justify-content:space-between; align-items:center"><span style="font-size:12px; font-weight:600">Reminder 1</span><span style="color:#c0392b; font-size:12px">🗑</span></div>
      <div class="winput" style="margin-top:6px; min-height:34px"><span style="color:#39414e; font-size:12px">Looks like you missed your check-in, take 2 minutes to complete it?</span></div>
    </div>
    <div style="border:1px solid #eef1f4; border-radius:6px; padding:8px; margin-top:8px">
      <div style="display:flex; justify-content:space-between; align-items:center"><span style="font-size:12px; font-weight:600">Reminder 2</span><span style="color:#c0392b; font-size:12px">🗑</span></div>
      <div class="winput" style="margin-top:6px; min-height:34px"><span style="color:#39414e; font-size:12px">Second reminder: your check-in is still waiting for you.</span></div>
    </div>
    <div class="wfield" style="margin-top:8px"><span class="fl" style="color:#6b7480; font-size:12px">+ Add reminder message</span></div>
  </div>

  <div style="border-top:1px solid #eef1f4; padding-top:12px; margin-top:12px;">
    <div class="wfield"><span class="fl">Notify when a client fully misses a check-in</span><span class="wtoggle on"></span></div>
    <div class="wlabel" style="margin-top:8px">Send escalation to</div>
    <div style="display:flex; gap:6px; margin-top:6px; flex-wrap:wrap">
      <div class="wchip"><span style="font-size:12px">Owner (default)</span></div>
    </div>
    <div style="font-size:11px; color:#8a92a0; margin-top:4px; font-style:italic">Pick one or more team members. Leave it empty and Protocol notifies the check-in's assignee, then the account owner.</div>
  </div>
</div>
Set a policy once; it applies to all your clients. The due reminder, pre-reminder, miss-reminder ladder, and coach escalation each have their own message text and settings.

Key settings:

  • Enable check-in escalation reminders: toggle on/off for all clients at once. Even when this is off, the due-time reminder below still goes out; the toggle controls the miss ladder and coach escalation only.
  • Reminder interval (hours): how many hours after a missed check-in before you send reminder 1, then reminder 2, and so on.
  • Max missed reminders: once you’ve sent this many reminders, escalate to “fully missed” and notify your team.
  • Due reminder: the title and message sent the moment a check-in becomes due. Leave either field blank to keep Protocol’s built-in wording. Use {client} anywhere in the message and it’s replaced with the client’s first name. If the check-in has a specific time, not just a day, Protocol automatically appends the due time to the message, so you don’t have to write it yourself.
  • Pre-reminder: send a nudge a configurable number of hours before the check-in is due (helps clients not forget), with its own message and channels.
  • Miss reminders: an editable ladder of messages, one per missed reminder. Add as many steps as you want, or remove one you no longer need. If a client racks up more misses than you have messages configured, the last message in the ladder just repeats, so there’s always something to send.
  • Coach escalation: the message sent once a check-in is fully missed. Use {client} and {missCount} in the text. Choose which team members get notified from a multi-select list. If you don’t pick anyone, it goes to the check-in’s assignee, then falls back to the account owner.
  • Notify via: pre-reminder and each miss-reminder step choose push notification, email, or both independently.

Once you save, the policy is live for every form — check-ins, onboarding, and other forms. Clients start receiving reminders on their next form to-do.

Override individual forms

The default is on for every form. When one form needs different handling, add a per-form override in the same settings screen — turn escalation off for that form, or tune its interval and max misses. Need to go further? Open Customize notifications on that override to fully replace any of the four notification pieces just for this form: the due reminder, the pre-reminder, the miss-reminder ladder, or who gets notified when a client fully misses it. Anything you don’t customize keeps inheriting the default policy.

Per-form overrides
Monthly Feedback
48
1
🗑
▾ Customize notifications
Customize due reminder for this form
Customize pre-reminder for this form
Customize miss reminders for this form
Customize coach escalation for this form
Discard Save overrides
+ Add a form override…
Per-form overrides sit under the default policy. The top row toggles the form off or tunes its interval/max misses immediately. "Customize notifications" opens a per-section editor: flip on just the pieces you want to replace (here, the due reminder and miss reminders), edit them, then Save. Sections left off keep inheriting the default.

Common uses: turn escalation off for a one-time survey you don’t chase, shorten the interval on a time-sensitive onboarding form, rewrite the miss-reminder wording for a high-touch program, or route a form’s “fully missed” alert to a different team member than your usual default.

Stop reminders when a client stops paying

A recurring check-in reminder has no end date. Left alone it keeps going after the client stops working with you, so people who left months or years ago still get nudged.

There are two ways to stop that, and they solve different problems.

Per reminder, when you create it. In the appointment form, link the reminder to a program or a purchase. The reminder then follows that link: when the program stops being active, or the purchase ends, expires or is cancelled, the reminder stops on its own. Use this when only some reminders should be tied to a cooperation.

For everyone at once. In My app → Features → Scheduling, turn on Require an active purchase for check-in reminders. Any reminder that is not explicitly linked to a program or purchase then only sends while that client has an active purchase.

This second switch is off by default, and worth understanding before you turn it on:

  • It uses active purchases only. Pending checkouts and past-due payments do not count. If you want a client with a failed payment to keep receiving check-ins, link that reminder to their purchase explicitly instead, which uses the more forgiving rule.
  • A client with no purchases recorded at all counts as not having an active one, so their unlinked reminders stop. If you have long-standing clients you never recorded a purchase for, record one before switching this on.
  • Reminders you linked explicitly are not affected. Those keep following their own link.
  • Nothing is deleted. Turn the switch back off and the reminders resume.

There is a matching switch for programs under My app → Features → Programs: Require an active purchase for programs hides active programs from clients with no active purchase. The two are independent, so you can stop the reminders without hiding anyone’s program.

The check-in worklist

To see the state of every form to-do across your roster at a glance, open Clients → Check-ins (a tab on the client list). It’s a worklist organized by state — each bucket shows to-dos at that stage:

State
Client
Due
Actions
<!-- Fresh bucket -->
<div style="border-bottom:1px solid #f3f6f9; background:#f9fafb">
  <div style="padding:12px 16px; font-size:11px; font-weight:600; color:#6b7480; letter-spacing:.02em">Fresh (4)</div>
  <div style="display:flex; align-items:center; gap:12px; padding:12px 16px; border-top:1px solid #f1f3f6">
    <div style="flex:1"><span style="font-size:12px; color:#7c8593">Fresh</span></div>
    <div style="flex:2"><span style="font-size:13px; color:#39414e">Alex Chen</span></div>
    <div style="flex:1"><span style="font-size:12px; color:#6b7480">Jul 8</span></div>
    <div style="flex:1; display:flex; gap:6px; font-size:11px"><span style="color:#4b7fd9; cursor:pointer">↗ See</span> <span style="color:#4b7fd9; cursor:pointer">💬 Msg</span></div>
  </div>
</div>

<!-- Due soon bucket -->
<div style="border-bottom:1px solid #f3f6f9; background:#f9fafb">
  <div style="padding:12px 16px; font-size:11px; font-weight:600; color:#6b7480; letter-spacing:.02em">Due soon (3)</div>
  <div style="display:flex; align-items:center; gap:12px; padding:12px 16px; border-top:1px solid #f1f3f6">
    <div style="flex:1"><span style="font-size:12px; color:#7c8593">Due soon</span></div>
    <div style="flex:2"><span style="font-size:13px; color:#39414e">Morgan Lee</span></div>
    <div style="flex:1"><span style="font-size:12px; color:#d8a24a">Jul 6</span></div>
    <div style="flex:1; display:flex; gap:6px; font-size:11px"><span style="color:#4b7fd9; cursor:pointer">↗ See</span> <span style="color:#4b7fd9; cursor:pointer">💬 Msg</span></div>
  </div>
</div>

<!-- Missed 1st bucket -->
<div style="border-bottom:1px solid #f3f6f9; background:#f9fafb">
  <div style="padding:12px 16px; font-size:11px; font-weight:600; color:#6b7480; letter-spacing:.02em">Missed 1st (1)</div>
  <div style="display:flex; align-items:center; gap:12px; padding:12px 16px; border-top:1px solid #f1f3f6">
    <div style="flex:1"><span style="font-size:12px; color:#7c8593">Missed 1st</span></div>
    <div style="flex:2"><span style="font-size:13px; color:#39414e">Jamie Rodriguez</span></div>
    <div style="flex:1"><span style="font-size:12px; color:#c87133">Jul 4</span></div>
    <div style="flex:1; display:flex; gap:6px; font-size:11px"><span style="color:#4b7fd9; cursor:pointer">↗ See</span> <span style="color:#4b7fd9; cursor:pointer">💬 Msg</span></div>
  </div>
</div>

<!-- Fully missed bucket -->
<div style="border-bottom:1px solid #f3f6f9; background:#f9fafb">
  <div style="padding:12px 16px; font-size:11px; font-weight:600; color:#6b7480; letter-spacing:.02em">Fully missed (1)</div>
  <div style="display:flex; align-items:center; gap:12px; padding:12px 16px; border-top:1px solid #f1f3f6">
    <div style="flex:1"><span style="font-size:12px; color:#7c8593">Fully missed</span></div>
    <div style="flex:2"><span style="font-size:13px; color:#39414e">Taylor Kim</span></div>
    <div style="flex:1"><span style="font-size:12px; color:#c87133">Jun 30</span></div>
    <div style="flex:1; display:flex; gap:6px; font-size:11px"><span style="color:#4b7fd9; cursor:pointer">↗ See</span> <span style="color:#4b7fd9; cursor:pointer">💬 Msg</span></div>
  </div>
</div>
The check-in worklist, grouped by state. Each bucket shows how many are in that stage, and every row has quick actions: see the client's profile, send them a message, or adjust the check-in.

The buckets:

  • Fresh — check-in reminder was just created or a client just missed it for the first time. No reminders sent yet.
  • Due soon — the check-in is coming up in the next few days.
  • Missed 1st — you’ve sent one reminder and the client hasn’t submitted yet.
  • Missed 2nd (and beyond) — you’ve sent more reminders; this one hasn’t landed yet.
  • Fully missed — you’ve sent the max number of reminders you configured, and the client still hasn’t submitted. Time for you to reach out directly.

Narrow the view — two controls sit next to the bucket toggles:

  • Form type — filter to just Check-ins, Onboarding, or Other forms (or show all). Each row also shows the form name under the client, so you can tell at a glance which form is outstanding.
  • Time window — the Missed and Fully-missed buckets default to the last 14 days so old, no-longer-actionable misses don’t pile up. Widen it (30 / 90 days / all time) when you want the full history. Fresh and Due-soon are always current.

Row actions — every row gives you quick options:

  • See (↗) — jump to that client’s profile so you can review their history and follow up in context.
  • Message (💬) — open a chat window to message them directly without leaving the worklist.
  • Mark done — if the client submitted but the system didn’t catch it, mark it complete to close the worklist row.
  • Snooze — if a client is traveling or in a special situation, snooze the check-in for a few days (you pick how many). Reminders pause until the snooze ends.
  • Dismiss — if you’re OK with them skipping this one (temporary exception), dismiss it and move on. The next recurring check-in still runs as normal.

Why the worklist matters

Without it, missed check-ins get buried in your calendar and your inbox. The worklist is your single place to see who hasn’t checked in and who needs a nudge. Because it groups by state, you can prioritize: handle the “Fully missed” clients first (they need direct outreach), then work through “Missed 1st” and “Missed 2nd” tiers if you have bandwidth.

Since every form to-do is tied to your policy, you only set up reminders once — they run automatically for every check-in, onboarding, and other form across your roster. The worklist surfaces the signal so you don’t miss anyone.


Next: learn how to use Progress tracking to map check-in answers into metrics you can chart and compare over time.