Beauty (salon chain) 12 salons in three cities

How a Beauty Salon Chain Cut No-Shows by 40% with an AI Confirmation Agent

−40% no-shows
Before
22%
clients didn't show
After
13%
some with prior notice
Additional revenue
+18%
via filling cancellations from waitlist
Implementation
9 days
including booking system integration

Context and challenge

Clients booked services (haircut, coloring, nails) — but 20-25% didn't show up without warning. Lost revenue (stylist idle) and missed opportunities for clients on the waitlist. Standard "confirm your visit" SMS performed poorly — clients didn't reply, didn't perceive as important.

Approach

n8n pipeline:

  1. Scheduled trigger — every hour scenario queries booking API for next 24h appointments
  2. Enrichment — for each booking, pulls client profile (history, visit frequency, preferred stylist)
  3. Channel decision — if Telegram username — use it, else SMS cascade
  4. Message generation — Claude Haiku formulates personalized text from template (considering — frequent/new client, what service, what time)
  5. Send & wait — send, wait 4 hours for reply
  6. Reaction — if “confirm” — mark booking confirmed, don’t bother. If “won’t come” — slot to waitlist, find next. If no reply — fallback to SMS

What was hard

Hard part 1 — booking system sync. API has specific auth logic and rate limits. Used caching (Redis) for frequent queries and retry logic for transient errors. Stable uptime by day 4.

Hard part 2 — message tone. Beauty industry is about emotion and comfort. Dry technical confirmations don’t work. Prescribed in prompt — address by name, mention specific stylist, ask about prep, use warm phrasing. Tested on first 200 messages, corrected.

Hard part 3 — waitlist. Not every salon had it structured. Built simple Telegram bot UI where admin can see queue and quickly trigger outreach. Without it, automated filling would work at only 60% potential.

Business impact

1.5 months after launch across all 12 salons:

  • No-show: 22% → 13% (−40%)
  • Revenue: +18% (filling cancellations from waitlist)
  • Admin time on “confirmation calls”: 3 hours/day → 30 min (only complex cases)
  • Client NPS rose +8 points — noted that they know about visits in advance and can plan
"No one skips appointments without warning anymore. And when a cancellation happens, we manage to fill the slot from the waitlist."
— chain manager

Tech used

Claude 3.5 Haiku (fast and cheap)n8nBooking system APITelegram Bot APIPostgreSQLSMS provider
Timeline — 2 days audit + 7 days dev

Case FAQ

Don't the messages annoy clients?
Balance matters. We did — one message 24h before, warm and brief tone, clear CTA (one button "confirm", one "need changes", one "won't come"). If client already confirmed — don't write again. If frequent stable client (no no-show history) — simpler message, no extra questions.
What about clients without Telegram?
Channel cascade — first Telegram (if available, asked at first booking), then SMS, then email. Plus option for 50+ clients — admin phone call (only 3% of base, manual list).
Why Claude Haiku, not Sonnet?
Task is simple — generate short warm message from template. Haiku does it well, 12× cheaper, faster. Savings at 4000 messages/month are noticeable. Sonnet reserved for complex cases (e.g., client complaints).
How does the waitlist work?
Every time client replies "won't come" — booking system marks slot free, and n8n scenario automatically messages the first person on the waitlist for that service + stylist. If they reply "I'll take it" within 30 min — slot is theirs, else try next. Semi-automated cancellation filling.
first step

Want the same result?

Free 2-day audit. In half an hour we'll know if there's reason to move forward.

By submitting you agree to data processing. We don't spam.