Bookings
Smart Waitlist & Gap Filling
Capture demand when you're fully booked, then match waiting customers to cancellation and processing-time gaps. Weekly availability windows, auto-confirm, per-customer throttle, and live queue position. Operator-managed on web and mobile, customer self-serve on storefront.
Last updated 2 September 2026
Capture customer demand when you're fully booked, then match waiting customers to cancellation and processing-time gaps. Three date-mode options, optional auto-confirm, per-customer throttle, and AI-ranked matching on PRO.
Where to find it - Web: Sidebar → Waitlist, or Waitlist in Schedule for requests that fit the dates currently in view. Mobile: bottom tab → Waitlist, or Waitlist from Calendar for the same view-scoped queue. Customer entry: storefront at
/your-slug/waitlist. Customer manage: magic-link page at/waitlist/manage/{token}.
TL;DR
- Customers self-join from the storefront with three date modes: Date range, Specific days, or Weekly windows (recurring per-weekday).
- Matching uses the same engine as Assistant gap-fill - cadence, service fit, weekday, time band, provider affinity, lead time.
- Schedule shows a view-scoped operational queue. Choose an exact appointment, review the prepared message, then send without losing your Calendar position.
- Auto-confirm books matched slots without operator action; customer has 24 hours to cancel from the SMS.
- Per-customer throttle (default 6 hours) prevents over-messaging. Suppressed offers surface in a strip.
- FREE includes the full base feature; PRO adds AI ranking, auto-offer modes, Smart Waves, and Recovered Revenue analytics.
The list-and-detail surface
The redesign in late April 2026 stripped marketing-style cards (insights, blasts, launch activations) to make Waitlist mirror the calendar's list-and-detail pattern. What you see today:
- Page header:
{N} waiting · {potential revenue}summary - Status tabs: Waiting / History, with reply-state filters when you need them
- Table or detail sheet (depending on width): each row shows customer, service, status, preference summary
- Settings sheet with three Opening Modes + throttle + auto-confirm + advanced options
Earlier versions of this doc described Waitlist Insights, Recent Blasts, and the Launch Activation card. Those have been removed - the cleaner surface focuses on the operational queue and the offers in flight.
Add a request for a client
Select Add Request from the Waitlist page. On desktop, the task opens in an attached side sheet so the queue remains visible; responsive web uses the same workflow in a drawer.
- Search for an existing client or choose Add guest manually. A name and at least one valid contact method are required.
- Select one or more services. Changing the client clears the service selection.
- Select Continue to preferences, then add a date range, specific days or weekly windows.
- Optionally set an overall time of day, preferred team member, notes and a single confirmation intent. The available email/SMS channels come from the client's saved contact details.
- Select Add to Waitlist.
The panel closes after the request is saved, the new request is selected in the read-only detail, and the Waiting count and potential value update immediately. A confirmation failure does not remove the saved request; Activity records a confirmation only when a channel was successfully initiated.
When the venue has never received a request, Waitlist shows Start your waitlist. When the active queue is clear but past requests exist, the Waiting and History controls remain available and View History opens those past requests.
Three Opening Modes
The way matched offers reach customers is controlled by the venue-wide Opening Mode in Waitlist settings.
| Mode | Tier | What happens when a match is found |
|---|---|---|
| Manual review | FREE | The match appears in the operator queue. You review and send the offer (or skip). |
| Best match first | PRO | AI Smart Fill ranks candidates by revenue, fit, and churn risk. The top match auto-receives the offer in Smart Waves cadence. |
| Offer to everyone | PRO | The match is sent as a single broadcast to all eligible candidates at once. Whoever responds first books the slot. |
Switch modes any time from Settings → Waitlist. Changing modes doesn't retroactively apply to already-sent offers.
Date modes (per entry)
Each waitlist entry - whether added by the customer or by staff - picks one of three date-mode options for when they're willing to come in:
Date range
Any time between two dates. Best for clients who are flexible across a window ("any time in the next 2 weeks").
Specific days
A list of individual dates. Best for clients who can only do certain days ("the 14th, 21st, or 28th of this month").
Weekly windows (new May 2026)
Recurring per-weekday preferences with time-of-day windows. Best for clients with a regular schedule ("Tuesdays 9-12 or Saturdays 2-6, every week").
Picker presets per weekday: Off / All day / Morning / Afternoon / Evening / Custom. Web desktop shows a 7-day grid; mobile and narrow viewports get a list with the same controls.
Weekly matching is timezone-aware - windows are evaluated in the venue's timezone, not the matcher's local clock, so a customer in another timezone still gets correctly-matched slots.
How matching works
When a bookable gap appears (cancellation, processing time, new opening), the recovery engine runs:
- SQL filter - pending entries for this venue with matching staff preference, time preference (morning / afternoon / evening / any), and overlapping date mode.
- TypeScript filter - date-mode-aware overlap:
- Date range: gap date is within the range
- Specific days: gap date is in the list
- Weekly: gap weekday + time falls inside one of the customer's windows
- Reranking:
- PRO: AI Smart Fill ranks candidates by revenue, fit, and churn risk
- FREE: deterministic rerank by recency + service fit
- Output: ranked
WaitlistRecoveryCandidatelist with confidence (high / medium / low), reasons, and any cautions
The matcher is the same engine that powers Assistant gap-fill - the six-factor scoring (cadence proximity 35%, service fit 20%, weekday 15%, time band 10%, provider affinity 10%, lead time 10%) applies the same way.
Auto-confirm
When a matching slot is found and either the customer has opted in OR (on PRO) the operator has set an override, the system books the slot directly instead of sending an offer.
- Customer opt-in - surfaced on the join form ("Skip the back-and-forth") and on the manage page. Customer toggles it on or off.
- Operator override (PRO) - per-entry override on the Advanced tab. Useful for VIP clients you want to book straight through.
When auto-confirm fires:
- The booking is created and held with a staff-level FOR UPDATE lock to prevent double-booking.
- A confirmation SMS goes out: "You've been auto-booked at {venue} on {date/time} with {staff}. Cancel by {cancel-by}: {link}"
- The customer has 24 hours to cancel from the SMS link.
- The waitlist entry transitions to "Booked".
If the slot can't be booked (advisory-lock conflict, double-take by another offer), auto-confirm falls back to the standard offer flow.
The <AutoConfirmBadge> (sparkle icon) appears on entries and candidate rows so you can see at a glance which entries have auto-confirm enabled.
Per-customer throttle
Stops the same customer receiving back-to-back offers. Settings → Waitlist → Maximum offers per customer: minimum hours between offers per customer, default 6, range 0-72. Set to 0 to disable.
When a candidate would receive an offer within the throttle window:
- The offer is suppressed (no SMS sent, no wallet charge)
- A
gap_offersrow is written with statussuppressed_throttlefor audit - The suppressed offer surfaces in the Suppressed Offers strip on the Waitlist page so you can see what was held back and override if needed
Owner-only setting. Managers and stylists can see the throttle in action but can't change it.
Queue position (customer-facing)
Customers see their live queue position on their manage page (the magic-link page in their SMS or email). The card has six states:
| State | What the customer sees |
|---|---|
| Position 1 | You're next - high-priority indicator |
| Position 2-10 | You're #N in the queue with likelihood band |
| Position 11+ | You're in the queue with rough wait estimate |
| Paused | Paused - you've asked to pause notifications |
| Offered, awaiting response | We've sent you an offer - check your messages |
| Loading / error | Graceful fallback |
Likelihood is bucketed from the venue's last-90-days recovery turnaround time:
- p50 ≤ 3 days → typical wait is fast (1-3 days)
- p50 ≤ 7 days → typical wait is 4-7 days
- p50 > 7 days → high demand right now
Operators don't see position numbers - only the customer-facing manage page surfaces them.
Recovered Revenue (PRO, owner-only)
The Recovered Revenue card on the Waitlist page shows:
- Recovered this month in dollars
- Trend vs last month (up/down %)
- 12-week sparkline of recovered revenue by month
- Optional lost potential subscript (gaps where no candidate accepted)
Boundaries are venue-timezone-aware. When last month was zero, the trend is suppressed instead of showing "+∞%".
This card replaces the older Waitlist Insights tiles and shifts the framing from "things we did" to "money we recovered."
Waitlist in Schedule
Schedule includes a view-scoped Waitlist queue for filling the Calendar you are looking at. It is an operational shortcut rather than a second Waitlist: the full Waitlist remains the place for lifecycle administration, request details, conversation and history.
- Fits this view lists active requests with an opening inside the visible day or multi-day interval.
- Waiting on client keeps requests with an active offer separate from work that is ready to send.
- Needs follow-up includes active requests without a visible opening, including lapsed or unanswered offers.
- Paused and completed requests stay out of the default Schedule queue.
Select a request to review its best appointment options. Selecting an option highlights that appointment footprint on the Calendar and prepares the offer for that exact staff member, start time and end time. The server checks the appointment again before sending; if the Calendar changed, OpenChair asks you to choose a current opening instead of sending a stale offer.
The queue label always states its scope, such as 2 fit Mon 31 Aug or 4 fit this view, and separately shows the number of open requests overall. Open full waitlist carries the selected request with you, and returning to Schedule restores the date and request context.
Mobile parity
Dedicated shared workstation
After a staff member claims the workstation with their own PIN, the Waitlist tab shows the venue's basic requests and supports adding an entry. Only a pending request can be removed. Waitlist settings, AI ranking, offer campaigns, Smart Waves, revenue reporting and full customer profiles remain in the personally signed-in app.
The workstation records the acting operator for each waitlist change. See Set Up and Use a Shared Workstation for the claim and privacy rules.
The full native Waitlist follows the same request hierarchy as web, with a compact request header, openings, current offer or conversation, request details, activity and older offer history. Phone previews three openings and collapses secondary sections; tablet previews four and keeps useful master-detail context visible.
From Calendar, phone opens the scoped queue in a sheet. Tablet uses a docked queue when space allows and changes to the phone sheet in narrow Split View. Both preserve the selected request and appointment when moving between Calendar and the full Waitlist. Draft messages are kept while navigating back; sending is disabled offline and the appointment is checked again after reconnecting.
Only active, accepted and bookable staff who provide the requested service appear in Waitlist matching and team-member selection. Named team members use their staff avatar where available; Any team member remains a text option.
Mobile FREE shows the same lock-state pattern as elsewhere: "Available on the PRO plan" passive copy with no upgrade verb (Apple/Google billing compliance).
Common mistakes
| Problem | What to check |
|---|---|
| Customer says they joined but I don't see them in the queue | Status filter is Waiting by default - switch to All or History if you want to see other states. |
| Weekly windows didn't match an opening they should have caught | Confirm the venue timezone (Settings → Venue → Timezone) - Weekly matching uses venue local time. If the customer's window is Monday 09:00-12:00 and your venue is in Sydney, the match runs against Sydney local time. |
| Auto-confirm booked a customer who'd already rebooked elsewhere | The advisory lock prevents this on OpenChair, but if the customer's elsewhere booking is outside OpenChair, you'll need to handle the conflict manually. Use the 24-hour cancel window. |
| Suppressed Offers strip is empty when I expected entries | Check the throttle setting - if it's set to 0, throttle is disabled and nothing is suppressed. |
| Smart Fill / Best match first is greyed out | PRO-only. Switch to Manual review for FREE behaviour. |
| Queue position card on the customer manage page says "Paused" | The customer paused their entry from the manage page. They can resume any time. |
| Customer SMS says "auto-booked" but they want to keep the slot | They don't need to do anything - auto-confirm books the slot. The cancel link is in case they didn't want it. The 24-hour window expires silently. |
Related Articles
Common questions
- Do I need PRO for the waitlist?
- No. Basic waitlist works on every plan - customers can join, you can manage entries, queue position works, throttle and customer-side auto-confirm all function. PRO unlocks AI-ranked Smart Fill matching, automatic offer-sending modes (best match first / offer to everyone), Smart Waves, the Recovered Revenue card, and the operator-side auto-confirm override.
- How does a customer add themselves to the waitlist?
- From your storefront when their preferred service or time isn't bookable, OpenChair surfaces a 'Join the waitlist' link. The customer completes a two-step form: contact details and service, then availability preferences (date range, specific days, or weekly windows). They can opt into auto-confirm at the same time.
- What's the difference between Date range, Specific days, and Weekly windows?
- Date range = any time between two dates. Specific days = a list of individual dates. Weekly windows = recurring per-weekday preferences (e.g. Tuesday 9-12 and Saturday 2-6 every week) - useful for clients with stable schedules.
- What is auto-confirm?
- When the system finds a matching slot for a customer who's opted in to auto-confirm, it books them automatically and sends a confirmation SMS instead of an offer. The customer can cancel within 24 hours by tapping the link in the SMS. Customers opt in from their join form or manage page; on PRO, you can override per entry for VIP clients.
- How does the per-customer throttle work?
- Settings → Waitlist → Maximum offers per customer sets the minimum hours between offers to any one customer. Default 6 hours, range 0-72. Set to 0 to disable. When throttled, the offer is suppressed and surfaces in the Suppressed Offers strip so you can see what was held back.