A good appointment reminder SMS goes out 24 to 48 hours before the visit, with an optional short nudge about 2 hours before. It names the business, the day and the time, and asks for a one-letter reply: C to confirm, R to reschedule. Keep each one under 160 plain characters so it bills as one segment, send only to people who agreed to texts, and make sure every reply reaches a person or a workflow that acts on it.

This guide covers what has to be true for that to work at a clinic, a salon, a home services company, or an agency running reminders for many client sub-accounts. It includes the timing for each business type, templates you can paste in, what happens to "C", "R" and "running late" replies, the quiet-hours trap that catches early-morning appointments, and what a month of reminders costs with the math shown. We make Ready, so the setup sections use our product, but the timing and copy work on any platform.

When to send: 48 hours, 24 hours, 2 hours

Each reminder in the cadence does a different job:

  • 48 hours out gives someone time to reschedule. If they can't make it, you still have two days to fill the slot. Use it for appointments that take prep or are hard to backfill: dental cleanings, procedures, long color services, installs.
  • 24 hours out works as the confirmation request for most businesses. It's close enough that people know their plans and far enough out that you can act on a cancellation.
  • 2 hours out is a logistics message. It covers the address, parking, the arrival window, or "your tech is on the way." It shouldn't ask for confirmation again, because a reply this late doesn't change much.

Most businesses don't need all three. Every send costs money, and a third reminder for a haircut feels like nagging. Here's how we'd start, by business type:

Business typeRemindersWhy
Medical and dental clinics48h + 2hTime to backfill a cancelled slot; the day-of text covers arrival and paperwork
Salons, spas, barbers24h + 2hShort bookings, and clients often book only a few days ahead
Home services (HVAC, plumbing, cleaning)24h + morning-of "arrival window" textThe customer needs to be home, so the day-of message matters most
Consultations and sales calls24h + 1 to 2hPeople forget calls more easily than places
Agencies running reminders for clientsPer sub-account, matched to the client's businessOne cadence for every client fits none of them

A booking made less than 24 hours ahead should skip straight to the day-of reminder. Sending a "confirm your appointment tomorrow" text 3 hours after someone booked for tomorrow is noise.

Appointment reminder SMS templates that get a C or R reply

Reply rates depend on the ask. "Reply C to confirm, R to reschedule" works because it's one keystroke and the options are clear. "Let us know if you can make it" gets you paragraphs, or nothing.

The templates below use example business names; swap in your own. Each one stays under 160 GSM-7 characters with a typical first name, so it bills as one segment. No emoji: a single emoji drops the segment limit to 70 characters, and a 150-character reminder becomes 3 segments. Ready swaps curly quotes, long dashes and ellipses for plain ones before sending, so pasting from a doc won't add segments. Emoji still will.

Clinic, 48 hours out

Hi {first_name}, this is Maple Dental. You're booked Thu 3/14 at 2:30 PM. Reply C to confirm or R to reschedule. Reply STOP to opt out.

Leave out the procedure, the provider's specialty and anything else that reveals a health condition. A reminder can be fine under the TCPA and still be a HIPAA problem because of what's in the body. Our post on the fields to never include in a patient text covers it.

Salon, 24 hours out

{first_name}, reminder from Glow Studio: tomorrow at 10 AM, 412 Main St. Reply C to confirm, R to reschedule.

Home services, morning of

Hi {first_name}, Northside Plumbing here. Your tech arrives between 1 and 3 PM today. Reply R if you need to move it.

Consultation call, 2 hours out

{first_name}, your call with Brightline Marketing is at 3 PM today. We'll call this number. Reply R if you need a new time.

Replies to send after the customer answers

After a C:

Thanks, you're confirmed for Thu at 2:30 PM. See you then.

After an R:

No problem. Pick a new time here: {booking_link} or reply with a day that works and we'll text you back.

Two notes on the reschedule link. First, use your own domain, not a public shortener. Shared shortener domains are a common reason carriers filter texts. Second, {booking_link} and {first_name} expand at send time. A 40-character URL and a long name can push a 150-character template past 160 and into 2 segments. Test the longest realistic version, not the placeholder version.

Put "Reply STOP to opt out" in the first message a contact receives, at minimum. Ready honors STOP automatically either way. Including the line keeps carriers and customers comfortable.

How confirm and reschedule replies get handled

Most reminder setups fail here. The text goes out, the customer replies "C", and nothing happens. The appointment still shows unconfirmed, and someone calls them the next morning anyway.

Where replies land

On Ready, inbound replies land in the Inbox in the same thread as the reminder. If the account is connected to GoHighLevel, replies also sync into the GHL conversation for that contact, mapped to the right sub-account. A reminder sent from a GHL workflow therefore gets its reply back in GHL, where your workflows can act on it. Our GHL setup guide walks through connecting the account.

Routing C, R and everything else

In GoHighLevel, the usual pattern is a workflow triggered when the customer replies, with branches on the reply text:

  1. Reply contains C, Y, yes or confirm → mark the appointment confirmed and send the "you're confirmed" text.
  2. Reply contains R or reschedule → send the booking link and create a task for the front desk in case they don't rebook.
  3. Anything else ("running 10 min late", "is parking free?", a question about price) → assign the conversation to a person.

Match loosely. People type "c", "C.", "Yes!" and "confirmed thx". If you only match an exact capital C, a lot of confirmations end up in the human queue.

Platforms sending through our API do the same routing in their own code, using the inbound webhooks covered in the messages docs.

Ready no longer lets accounts create AI reply agents, but one set up earlier may still answer texts on its own until you pause its automation in Automations, and the Take over button in the Inbox thread stops it in that conversation. AI helps you write and spam-check the reminder copy, but a reply that falls outside your C/R rules goes to a human. We think that's the right default for appointments. "Can I bring my kid?" needs a real answer.

STOP is handled for you

If someone replies STOP or UNSUBSCRIBE, Ready records the opt-out and blocks that number across every campaign and workflow on the account. A later reminder to that number is refused up front and isn't charged. Your booking system still thinks it sent a reminder, so if you rely on texts for confirmations, check opt-outs (GET /v1/opt-outs/:phone) and fall back to a phone call or email for those customers.

Consent and quiet hours

Consent comes from the booking

Appointment reminders are transactional, but you still need the customer's agreement to receive texts. The cleanest place to get it is the booking flow: a checkbox or clear disclosure next to the phone field ("We'll text you appointment reminders. Msg & data rates may apply. Reply STOP to opt out."). Record the time, the exact wording and the page or form it came from.

Store that record in your own system. Ready records the sender's attestation on every bulk send and every API send that sets consent_attested: who sent, to how many, and when. That gives you an audit trail of your promise. It isn't a per-contact consent record, and a customer replying "C" doesn't create one. Our post on documenting SMS consent covers what to keep.

Don't reuse reminder consent to send promotions. If you want to text offers too, collect marketing consent separately.

Quiet hours and early appointments

Ready checks permitted local hours based on the recipient's area. Campaigns, drip campaigns and automations wait up to 24 hours for the recipient's permitted window. A one-to-one, inbox or API text (bulk API included) is held only if the window opens within 6 hours; otherwise it is not sent, and you send it again once the window opens. You're charged only when a text actually sends. As a reference point, the federal TCPA window for solicitations is 8 AM to 9 PM in the recipient's local time, and some states are stricter.

This catches early appointments. A 2-hour reminder for a 7:30 AM visit is scheduled for 5:30 AM. It gets held, and it may arrive after the customer has already left. For anything before about 10 AM, send the day-of reminder the evening before, or skip it.

The hold uses the recipient's area, not your office's, so a customer with an out-of-state number is timed by that number's area. For most local businesses this rarely matters. If you see a reminder go out later than expected, this is usually why.

Registration: pick the use case that matches reminders

Business texting to US numbers runs over A2P 10DLC, and unregistered traffic gets filtered by carriers. Register your brand and a campaign whose use case describes what you actually send. If the campaign is registered as marketing and you send reminders, or the reverse, you can be throttled or rejected. The use-case picking guide covers which one fits.

On Ready, registration happens in-app with no setup fee:

  • At submit: $25, which is the first month.
  • Monthly: $25 for registration + $2 per number.
  • Timing: most approvals take 2 to 7 days.

You don't have to wait for approval to start. The first 20 texts on a new account are free one-to-one sends, so use them for testing before you register; they end once a registration is paid for. Before registering, an account can send up to 500 texts a month at the normal per-text rate. If you bought a number before registering, it sends on Ready's shared registration at the same rate while yours is in review. To send, you add a card and get a number, which is $2 a month with the first month charged when you get it. For a small practice doing a few appointments a day, that covers the review period.

Agencies and software platforms give each client its own sub-account, with its own numbers and registration. One salon's bad behavior then can't drag down a dental office's deliverability.

Sending reminders from your own app

If you run scheduling software or a vertical SaaS product, you'll trigger reminders from your job scheduler through the API. A single reminder looks like this:

curl -X POST https://api.tryready.com/v1/messages \
  -H "X-API-Key: $READY_API_KEY" \
  -H "Idempotency-Key: 3b9f6c1e-8d2a-4f7b-9c4e-2a1d5e7f0b63" \
  -H "Content-Type: application/json" \
  -d '{"to": "+12125550199", "body": "Hi Sam, this is Maple Dental. You are booked Thu 3/14 at 2:30 PM. Reply C to confirm or R to reschedule.", "consent_attested": true}'

Three habits help here:

  • One idempotency key per appointment-and-reminder pair. Generate a UUID when you schedule the 24-hour reminder for appointment 1042, and store it. If your worker crashes and retries, the same key means the customer gets one text, not two.
  • Validate at booking, not at send. GET /v1/validate/:phone tells you when someone typed a landline, while you can still ask for a mobile number. Each number checked costs $0.003. Known landlines are refused at send and not charged, but the customer still gets no reminder.
  • Set consent_attested honestly. It's your promise that this person agreed to texts, so tie it to the consent flag in your own database.

The quickstart covers keys and sub-accounts.

What reminders cost: a worked example

This example assumes a clinic with 400 appointments a month, a 48-hour and a 2-hour reminder for each, and every message kept to one segment. We also assume about half of patients reply to the 48-hour text. That reply rate is an assumption for the math, not a statistic.

  • Outbound: 400 × 2 reminders = 800 segments
  • Replies: on Ready, replies bill like sent texts, so 200 replies = 200 segments
  • Confirmation texts back to those who replied C, assuming most do: roughly 180 segments
  • Total: about 1,180 segments

On Ready Standard at $0.0075/segment, that's 1,180 × $0.0075 = $8.85, plus a $0.0045 carrier fee on each of the 1,180 segments, itemized separately on the bill. That all-in figure excludes the compliance surcharge. Scrubbing and landline validation each add $0.003 per segment if you switch them on for the account; both are off by default. The fee is per segment, not per contact, and doesn't change with volume.

Now add one emoji to a 150-character reminder. Each send becomes 3 segments, so the 800 outbound reminders become 2,400 segments, or 2,400 × $0.0075 = $18 in rate before carrier fees. The confirmation is just as effective without the emoji.

If you're on GoHighLevel and LC Phone already works for you, it runs about $0.0083 per message, which is lower per message than our Standard rate. Reasons to choose Ready anyway are the registration flow, STOP propagation, quiet-hours holds and per-sub-account isolation that come with the platform. Price per text isn't one of them. If your booking software already sends reminders that get confirmed and acted on, you may not need anything new. Rate details are on our pricing page.

The practical takeaway

Send one confirmation request 24 to 48 hours out and one logistics text on the day. Keep each under 160 plain characters, and ask for a one-letter reply. Then make the C and R replies change something in your calendar. Collect consent at booking, and store the record yourself. Move day-of reminders for early appointments to the evening before. Register a campaign whose use case matches reminders.

If you want to try this, create an account and use the first 20 free one-to-one texts to send your templates to your own phone and a colleague's before you register.

Frequently asked questions

How far in advance should you send an appointment reminder text? Send the main reminder 24 to 48 hours before the appointment, and optionally a short logistics text 1 to 2 hours before. Use 48 hours when a cancelled slot is hard to fill, and 24 hours for short, frequently booked services. Skip the 2-hour text for appointments before about 10 AM, since quiet-hours rules may hold it until too late.

Do I need consent to send appointment reminder texts? Yes, you need the customer's agreement to receive texts, even for transactional reminders. The easiest way is a clear disclosure or checkbox at booking, with the time and wording stored in your own system. Promotional texts need their own consent on top of that.

What should an appointment reminder text say? It should say who you are, the day and time, and the one action you want, such as "Reply C to confirm or R to reschedule." Keep it under 160 plain characters with no emoji so it bills as one segment. For healthcare, leave out procedures and anything that reveals a condition.

How much does it cost to send appointment reminders by SMS? On Ready Standard it's $0.0075/segment plus a $0.0045 carrier fee per segment, and customer replies are billed the same way. A clinic sending two one-segment reminders for 400 appointments, with replies and confirmations, uses roughly 1,180 segments a month. Registration adds $25 at submit, then $25 for registration + $2 per number each month.

Can customers confirm or reschedule by replying to the text? Yes. Replies land in the same conversation thread, and in GoHighLevel a workflow can mark the appointment confirmed or send a booking link based on the reply. Anything that isn't a clear C or R should go to a person, because Ready no longer lets accounts create AI reply agents.