A no-show is not a lost booking, it is a lost hour you already paid for. The staff member is there, the chair or bay is there, and the revenue is not. For most service businesses, cutting no-shows is worth more than any new-customer campaign they could run for the same money. The specifics differ by trade — salons, dental and medical practices, tattoo studios and nurseries and tutors each have their own version — but the sequence below is the common core.
The three-message sequence
Not one reminder. Three touches, each doing a different job.
- On booking — the confirmation. Sent immediately. Establishes the thread, gets your number saved, and gives them something to search for later.
- 24 hours before — the reminder. The workhorse. Late enough to be relevant, early enough that they can still rebook rather than cancel.
- 2–3 hours before — the nudge. Short. Only for high-value or high-no-show appointments. Overuse this one and you become annoying.
The templates
export const templates = { confirmation: (c: Ctx) => `Hi ${c.firstName}, it's ${c.business}. You're booked for ` + `${c.service} on ${c.dayDate} at ${c.time} with ${c.staff}. ` + `Need to change it? ${c.rescheduleLink}`, reminder24h: (c: Ctx) => `Reminder from ${c.business}: ${c.service} tomorrow at ${c.time}. ` + `Reply C to confirm or R to reschedule.`, nudge3h: (c: Ctx) => `See you at ${c.time} today, ${c.firstName}. ${c.addressLine}`,};Why each line is there
- Name the business in the first message. An unidentified text is a deleted text. After the first one they have you saved, so you can relax.
- Use the day name, not just the date. 'Thursday at 2pm' is processed instantly. 'On 09/12' requires a calendar check that many people will not do.
- Give one action, not three. Every extra option lowers the response rate. Confirm or reschedule. That is the whole menu.
- Single-letter replies. C and R are effortless to type one-handed. Response rates on single-character replies are dramatically better than on 'reply CONFIRM'.
- Put the address in the last message only. It is useless the day before and genuinely helpful an hour out.
Make rescheduling easier than cancelling
A customer who cannot easily move an appointment will simply not turn up. A reschedule link that opens straight to their booking converts a would-be no-show into a filled slot on a different day. That link should carry your UTM tags so you can see how much revenue it saves — see UTM tagging.
Handle the reply properly
const STOP_WORDS = new Set(["stop", "unsubscribe", "cancel", "end", "quit"]); export async function handleReply(from: string, text: string) { const token = text.trim().toLowerCase(); // Opt-outs always win, before any business logic. if (STOP_WORDS.has(token.split(/\s+/)[0])) return optOut(from); if (token === "c" || token === "yes" || token === "confirm") { await markConfirmed(from); return send(from, "Great — see you then."); } if (token === "r" || token === "reschedule") { const link = await rescheduleLinkFor(from); return send(from, `No problem. Pick a new time: ${link}`); } // Anything else is a human question. Route it to a human. return routeToInbox(from, text);}'CANCEL' is a trap
A customer typing CANCEL almost always means 'cancel my appointment'. Carriers and regulators treat it as an opt-out keyword. You must honour the opt-out — so send a confirmation that tells them what happened and how to reach you, otherwise they will think their appointment was cancelled when it was not.
Timing rules that matter
- Send in the recipient's local time zone. An 8am reminder is a 5am reminder for someone three zones away.
- Keep to daytime hours — the common standard is 8am to 9pm local.
- Send the 24-hour reminder at roughly the appointment time, not at midnight. Same time of day, one day earlier, reads naturally.
- Never send a reminder for an appointment already confirmed within the last few hours.
See quiet hours and frequency for the full timing rules, and gap filling for what to do with the slots that open up anyway.
Measure it or you are guessing
Track your no-show rate for four weeks before you launch this and four weeks after. That difference, multiplied by your average ticket, is the value of the channel. It is usually the easiest ROI case a small business will ever make — how to run that calculation.
Next step
Generate a tagged link for whatever you send next with the UTM builder, see what this looks like in your industry, or compare the services that can send it on the providers page.