You put the appointment on the calendar, and the client still forgot. The obvious fix is a text the day before. That raises a fair question: doesn't my calendar already do that? Usually, it doesn't. Where it does, the text often goes out from a number you don't control, carries wording you can't fully edit, and has no clear path for the reply when someone writes back "can we push to 3?"
This post covers what the common scheduling tools actually do natively and where they stop. It then walks through how to send reminders from your own registered number using an automation tool or a few lines of code, with the costs worked out.
What your scheduling tool does on its own
Most calendar and booking tools were built to notify you, not the person you're meeting. Here's the honest rundown. Features change, so check your plan before you build anything.
| Tool | Texts the client natively? | What you're working with |
|---|---|---|
| Google Calendar | No | Notifications go to the calendar owner by email or push. Guests get email invites, not texts. |
| Outlook / Microsoft 365 calendar | No | Reminders pop up for the user. Attendees get email. |
| Microsoft Bookings | On some plans and regions | SMS notifications have been offered on certain business plans. Check your tenant. |
| Calendly | Yes, on paid plans via workflows | Text reminders to invitees, sent from Calendly's sending setup. Two-way conversation isn't the point of it. |
| Other booking tools (salon, clinic, field service) | Often, as an add-on | Usually one-way, sometimes metered, and the number belongs to the vendor. |
When the built-in option is fine
If you run a few dozen appointments a month, you only need a one-way "see you tomorrow at 2 PM," and you don't care which number it comes from, Calendly's built-in reminders or your booking tool's add-on are perfectly reasonable. Don't build a pipeline you don't need.
When it stops being enough
Teams usually outgrow the native option for one of these reasons:
- Replies go nowhere useful. The client texts back to reschedule and nobody sees it, or the reply lands in a separate tool from the rest of your conversations.
- The number isn't yours. Clients can't save it, and it isn't the same number your team texts from for everything else.
- You need logic. Examples: a different reminder for first visits, a no-show follow-up, or a confirmation request that updates the booking.
- You're a platform. If you build scheduling software and want reminders for your customers, each one needs its own registered number and brand, not one shared sender.
Why the sending number matters more than the trigger
The trigger is easy: an event gets created, and something fires 24 hours before it. The harder part is getting the text delivered.
US carriers filter application-to-person texts that don't come from a registered A2P 10DLC number. A reminder system that works perfectly in testing can go quiet in production because the carrier treats unregistered traffic as suspect. Registration means you tell the carriers who your business is (the brand) and what you're sending (the campaign), with sample messages. Our 10DLC explainer covers the background.
For reminders, pick the use case that matches what you actually send. Registering as "marketing" when you send appointment notices invites rejection or throttling. We cover that in detail in matching use case to what you send.
On Ready, registration happens in-app with no setup fee. The first month, $25, is charged at submit. After that the monthly cost is $25/mo for registration + $2 per number. Most approvals take 2 to 7 days. While you wait, an account that has bought a number sends on our shared registration at the same per-text rate. Separately, any account can send up to 500 texts a month before it registers.
Option 1: Connect your calendar through an automation tool
This is the no-code route, and it works with Google Calendar, Outlook, Calendly, and most booking tools that expose triggers.
- Trigger: "Event start time approaching" (Google Calendar or Outlook), or "Invitee created" (Calendly). In Calendly you'd add a delay until 24 hours before the start time.
- Find the phone number. This is the step that breaks most setups. Calendar events don't carry a phone number by default. Add a required phone question to your booking form, or put the number in the event description in a consistent format and parse it out.
- Check consent. The booking form needs a clear line such as "Text me appointment reminders. Reply STOP to opt out." Your system should keep that record. Ready records your attestation for each send, but it does not store the recipient's opt-in wording or timestamp. (A contact who signs up on a Ready-hosted opt-in page is the exception: Ready stores that sign-up, with the time, IP address and exact wording, and support@tryready.com can send you a copy.)
- Send: Call Ready's messages API with an HTTP or webhook step.
We've written up the Calendly-specific wiring in connecting SMS to Calendly, Typeform and Jotform.
Option 2: Call the API directly
If you have a backend, or you build software that books appointments, skip the middleware. A reminder is a single request:
POST https://api.tryready.com/v1/messages
X-API-Key: <your key>
Idempotency-Key: 3f1c2a8e-7b4d-4e19-9a52-0c6d8e1f2b37
Content-Type: application/json
{
"to": "+12125550199",
"body": "Reminder: your cleaning with Dr. Patel is tomorrow at 2:00 PM. Reply C to confirm or call to reschedule. Reply STOP to opt out.",
"consent_attested": true
} Two details matter for reminders specifically.
Use the Idempotency-Key header. Schedulers retry, and webhook tools retry harder. If you derive a stable UUID from the appointment ID plus the reminder slot (24-hour or 2-hour), a retried job can never text the client twice.
Let quiet hours do their job. If a job fires at 6 AM in the client's time zone, Ready holds the text and sends it once local permitted hours begin. You're only charged when it actually sends. That's convenient, but schedule within business hours anyway so the timing reads as intended. Campaigns, drip campaigns and automations wait up to 24 hours for the window; a one-to-one or API text is held only if the window opens within 6 hours, otherwise it is refused and must be resent; a one-to-one reply to someone who texted you in the last 24 hours goes out at any hour.
Opted-out numbers are refused up front and not charged. A client who replies STOP to a reminder won't get your next promo either, because the opt-out applies across campaigns. Full request details are in the messages API docs and the quickstart.
If you're building this for your customers
Scheduling and vertical SaaS products should give each customer a sub-account, with its own numbers and its own 10DLC registration. Reminders then go out under the right business name, and one customer's complaint rate doesn't drag down the others. See who registers the brand when you text for your customers and the 10DLC registration API.
What it costs: a worked example
Assumptions: a practice with 400 appointments a month sends a 24-hour reminder and a 2-hour reminder. Both are plain text under 160 characters, so each is 1 segment.
- Texts sent: 400 × 2 = 800 segments
- Ready Standard rate: 800 × $0.0075 = $6.00
- Carrier fee: 800 × $0.0045, itemized separately on the bill
- Registration: $25/mo for registration + $2/mo for one number
Replies are billed like sent texts, at the per-segment rate plus the carrier fee. If roughly a third of clients reply "C" (an assumption, not a benchmark), that adds about 130 more segments. TCPA/DNC scrubbing and landline validation are off by default. If you switch them on, each adds $0.003 per segment.
The emoji tax
Now add a 📅 to that 140-character reminder. A single non-GSM character drops the segment limit to 70 characters (67 per part in multipart messages), so the text becomes 3 segments instead of 1. Your 800 segments turn into 2,400, which triples your per-text spend for a calendar icon. Curly quotes and long dashes are fine on Ready because we swap them for plain characters before sending. Emojis are not swapped.
A note on comparison: if all you need is raw sending and you'll build the inbox, opt-out handling and registration flow yourself, a raw CPaaS like Twilio charges less per segment. What you get with Ready is registration in-app, quiet hours, opt-out propagation, and a shared inbox where "can we do Thursday instead?" actually gets seen. That inbox is also in GoHighLevel if you run there.
Writing reminders that get answered
Keep it short, specific and actionable:
- Business name, day, time, and who the appointment is with
- One action: "Reply C to confirm" or a reschedule link
- Opt-out language, at least in the first message
- No emoji unless you've done the segment math above
For copy you can paste straight in, see our appointment reminder SMS guide, which also covers timing.
The practical takeaway
Google Calendar and Outlook won't text your clients. Calendly and most booking tools can, within their limits, and for low-volume, one-way reminders those limits are fine. Once you want replies in one place, your own number, or reminders for your customers' clients, the reliable setup has three parts:
- A registered 10DLC number.
- A trigger from your calendar, through Zapier, n8n or your own code.
- One API call with an idempotency key.
If you want to try it, create an account. To send, you add a card and get a number, which is $2 a month with the first month charged when you get it. Your first 20 one-to-one texts are free, so use them to test a reminder to your own phone before you submit registration.