Acuity client retention console with one-click rebooking

See which salon, clinic, or studio clients are drifting away, ranked by their own booking rhythm, then rebook them or draft a win back email without leaving the screen.

App
Acuity SchedulingGmailOperationsSalesMeeting WorkflowsEmail Automation
PromptCreate

Build me a client retention console for Acuity Scheduling that I can sit down with once a week and work through the clients who are drifting away. I run a salon, clinic, or studio, and this is for me as the owner or for my front of house manager. The whole point is answering "who is slipping away and what do I do about it" on one screen, because Acuity itself cannot report on client retention.

The main screen is a sortable client table. Build the roster from Acuity List Clients, then enrich every client with their appointment history from Acuity List Appointments. Pull a long history window, at least the last 18 to 24 months, and match appointments back to clients on email first, falling back to name plus phone. Each row shows the client name, days since last visit, lifetime visit count, lifetime spend, no-show count, cancellation count, and their usual appointment type, meaning the type they have booked most often. Every column is sortable, and there is a search box for finding a specific person by name, email, or phone. Lifetime spend should sum the price on their past appointments, and note that Acuity returns prices as decimal strings rather than numbers, so parse before summing.

Bucket the roster into three tabs, Regulars, At Risk, and Lapsed, based on each client's own booking rhythm rather than one flat cutoff for the whole business. For each client, compute their personal cadence as the median gap in days between consecutive past visits. A client sitting within roughly their normal cadence is a Regular, one who is meaningfully past it is At Risk, and one who is far past it is Lapsed. Use sensible multiples of their own cadence for those two thresholds and expose both as settings I can adjust. Clients with too little history to have a real cadence, meaning fewer than about three visits, fall back to a house default cadence that I can also set. Show each client's cadence in the table or on hover, so it is obvious why someone was flagged, and show the tab counts on the tabs themselves.

Selecting a client opens a detail view. The top is their profile and the same summary numbers from the roster. Below that is their full visit timeline, every past appointment in reverse chronological order with the date, appointment type, price, and status, clearly marking no-shows and cancellations so a pattern of flakiness is visible at a glance.

The detail view also has a rebooking panel that pulls genuinely open slots. Resolve the client's usual appointment type to its id using Acuity List Appointment Types, then use Acuity Get Available Dates to find dates with openings over the next few weeks and Acuity Get Available Times for the slots on a chosen date. Show me the real open times, and let me book the client straight in with Acuity Create Appointment for the selected slot and their usual type. Let me switch the appointment type and the date range before booking, in case they are due for something different. After a successful booking, update the client's row and record the booking in the contact history described below.

As the alternative to booking, let me draft a personal win back email using Gmail Create a Draft. The draft is addressed to the client and written in a warm, personal, first-person voice referencing how long it has been, what they usually book, and a couple of the real open slots from the availability panel. It lands in my Gmail drafts for me to review and send myself. Never send email directly from the app, and after creating a draft, confirm it was created and link me to it.

The app must remember which clients I have already contacted and when, since Acuity has no last contacted field. Store this in the app's own storage: the client, the date and time, whether it was an email draft or a direct booking, and any note I add. Anyone contacted inside a cooldown window, defaulting to 14 days and configurable, drops out of the working queue instead of getting chased twice, so someone I reached out to three days ago is not in front of me again. Do not hide them entirely, show them in a separate Recently contacted view with how many days ago I reached out, and give me a way to clear the flag if I want to follow up sooner.

Give me a per client note field for things like "prefers Thursday evenings" or "moved across town". Save it through Acuity Update Appointment on that client's most recent visit, so the note lives in Acuity where my team will see it, and display any existing note when the detail view opens.

A few practical notes. Acuity limits requests to about 10 per second, so fetch the appointment history in batches with the client roster and cache the assembled result for the session rather than refetching on every tab switch, with a visible refresh button and a last updated timestamp. Acuity list endpoints return plain arrays and page by narrowing the date filter rather than a cursor, so page appointments in ascending order using the last result's datetime as the next start date. Treat the paid field as the string yes or no rather than a boolean. Show a clear loading state on first load since assembling the history takes a moment, and handle clients with no appointment history at all without breaking the table.

What does this prompt do?

  • Builds one sortable client roster from your Acuity account, showing days since last visit, lifetime visits, lifetime spend, no-show and cancellation counts, and the service each person usually books
  • Sorts everyone into Regulars, At Risk, and Lapsed based on each client's own booking rhythm, so someone who normally comes every three weeks gets flagged long before a twice-a-year client does
  • Opens a detail view for any client with their full visit timeline and a rebooking panel of genuinely open slots for their usual service, bookable in one click
  • Drafts a personal win back email in Gmail that waits in your drafts folder for you to read and send yourself
  • Remembers who you have already contacted and when, so anyone you reached out to recently drops out of the working queue instead of getting chased twice

What do I need to use this?

  • An Acuity Scheduling account with your client and appointment history in it
  • A Gmail account for drafting win back emails
  • A few months of past bookings, so the app can learn each client's normal visit rhythm

How can I customize it?

  • Change how far past their normal rhythm a client drifts before they land in At Risk or Lapsed
  • Set the quiet period after you contact someone, so they stay out of the queue for a week, two weeks, or a month
  • Adjust the columns and default sort on the roster, or limit the whole console to one location, calendar, or service

FAQs

How does it decide who is at risk of leaving?
Instead of one flat cutoff for everyone, it learns each client's normal gap between visits. Someone who books every three weeks gets flagged after about a month, while someone who comes twice a year does not get chased in week five. Clients with only one or two visits fall back to a house-wide default you can set.
Will it email my clients automatically?
No. Win back emails are created as drafts in your Gmail account and nothing goes out until you open the draft, read it, and hit send. The booking side is the same, an appointment is only created when you pick a slot and confirm it.
Can I actually book the appointment from inside the app?
Yes. The rebooking panel pulls real open times for that client's usual service straight from your live availability, so the slots you see are genuinely bookable. Picking one creates the appointment in Acuity right away.
How does it stop me from chasing the same person twice?
The app keeps its own record of who you contacted and when, because Acuity has no last contacted field. Anyone you reached out to inside the quiet period drops out of the working queue and shows a note telling you how many days ago you contacted them.
Does this work for a salon, a clinic, and a studio?
Yes. It reads whatever services and appointment types you already have set up, so it fits any appointment-based business running on Acuity. The language on the roster follows your own service names.
Why not just use Acuity's own reports?
Acuity's built-in reporting covers basic booking data and does not report on client retention, repeat visit rates, or no-show rates by client. Those are the numbers this console assembles for you from your existing appointment history.

Related templates

Compare every Hireflix candidate for a role side by side

A calibration board that lines up every candidate's answer to the same question, hides names until your panel has scored, and writes the agreed rating back.

Hireflix
Gmail
App
Build a PR media list from real worldwide news coverage

Search three months of global coverage on your topic, rank the outlets actually writing about it, and draft a tailored pitch for each one.

GDELT
Google Sheets
Gmail
App
Morning review board for your open Housecall Pro quotes

Open one board every morning to see every outstanding quote by age and value, decide on each one, and send follow-ups only after you approve them.

Housecall Pro
Gmail
App
Booked vs collected cash flow desk for HoneyBook studios

See every HoneyBook project's booked revenue next to what actually landed in your bank, chase what is late, and bill the next payment in one click.

HoneyBook
Xero
Gmail
App
Gumroad buyer support console with refunds and license control

Paste a customer email or license key and see every purchase, license, and membership in one place, then refund or reset a key right from the row.

Gumroad
Gmail
App
Contractor payment board that keeps you 1099 ready all year

See every contractor's paperwork, bank details and year to date pay in one table, then run and fund this cycle's payment batch from the same screen.

Gusto
Gmail
Google Sheets
App

Stop losing regulars without noticing.

Give yourself one screen that answers who is slipping away and what to do about it, in the weekly half hour you already spend guessing.