Skip to main content
Lifetime license included with every purchase
n8n workflowsSMS automationappointment remindersTwilio

How to Automate Appointment Reminders with n8n

Build n8n appointment reminder automation with Twilio and Google Sheets: send SMS and email at T-48h and T-2h, with confirm links, no monthly fees. Browse templates.

Nn8n Marketplace Team·September 25, 2026·Updated September 25, 2026·9 min read

A hair salon with 20 appointments on a Tuesday loses $240 in revenue from a single no-show if the average ticket is $80. That's one client, one empty hour, and no way to fill the slot on short notice. n8n appointment reminder automation cuts no-show rates by 30–50% by sending SMS and email reminders at 48 hours and 2 hours before each appointment, no $30–$99/month reminder SaaS needed.

The core setup isn't complicated. An n8n Schedule Trigger fires every hour, reads upcoming appointments from a Google Sheet, filters on the 48-hour and 2-hour windows, and routes each match through a Twilio SMS node and an SMTP email node. The tricky part isn't the send — it's the deduplication logic that stops the same reminder from firing twice on consecutive hourly runs.

This covers both.

What no-shows actually cost

The revenue loss is obvious. What's less obvious is everything around it: the service window you can't fill on short notice, the supplies pulled for the job, and the client who no-showed and now expects rescheduling without any friction. For medical and wellness practices, there's churn risk on top: a patient who no-showed and got no follow-up often assumes the practice doesn't want them back.

Service businesses running no reminder workflows see no-show rates of 5–30%. Add automated reminders at two touch points and that drops to 2–10% in most production deployments. The T-48h window catches the "I forgot I had this tomorrow" case. The T-2h window catches the "can I still reschedule?" case, which, if you catch it, often lets you fill the slot before the appointment time arrives.

What you can automate around appointments

Once the trigger and deduplication are in place, the full reminder sequence falls into place quickly:

  • SMS reminder at 48 hours with a one-click confirm link
  • Email reminder at 48 hours with a reschedule button
  • SMS reminder at 2 hours as a same-day nudge
  • Webhook handler that logs client confirm or reschedule replies to the sheet
  • Slack or Telegram alert to staff when a reschedule request comes in
  • Auto-fill from a waitlist if a slot opens after a cancellation

The Google Sheet stores appointment data (date, time, client phone, client email, reminder flags). n8n reads it, filters it, sends via Twilio and SMTP, and writes the Reminded flag back to the same row. That write is what makes the deduplication work.

Why a Google Sheet works here

Most booking systems don't expose reminder status through their API. A Google Sheet as your appointment store sidesteps that entirely. Paste in appointments (or sync from your booking tool with a separate n8n workflow), and the reminder workflow reads from the sheet every hour. No platform API dependency, no webhook quota to hit.

The n8n appointment reminder pipeline

Schedule Trigger (hourly)
  → Google Sheets: Read all upcoming appointments
  → IF: appointment within 48h window AND Reminded_48h = FALSE
    → Twilio: Send SMS with confirm + reschedule links
    → SMTP: Send email reminder
    → Google Sheets: Update Reminded_48h = TRUE
  → IF: appointment within 2h window AND Reminded_2h = FALSE
    → Twilio: Send same-day SMS alert
    → Google Sheets: Update Reminded_2h = TRUE

Two parallel branches off the same sheet read. One IF node per window, each with a nested deduplication flag check. That's the full structure.

Building the reminder workflow

1. Configure the Schedule Trigger

Use n8n-nodes-base.scheduleTrigger v1.2 with a cronExpression of "0 * * * *" (every hour on the hour). n8n's Schedule Trigger manages execution through its queue system, not raw cron: if the previous execution is still in flight when the next one fires, it queues rather than overlapping. For a sheet with hundreds of appointments, that prevents race conditions without any extra code.

2. Read appointments from Google Sheets

Use n8n-nodes-base.googleSheets to pull all rows where Status = Confirmed and the appointment date is in the future. Don't rely on Google Sheets filter formulas for the window logic — do the date comparison in n8n's IF node. Sheets formula filtering burns quota on every run and is slower to debug when the logic changes.

3. Filter by reminder window

An IF node computes the gap between the current timestamp and each appointment's datetime. The 48-hour window passes rows where the gap is between 86,400 and 172,800 seconds. The 2-hour window passes rows where the gap is between 0 and 7,200 seconds. Keep both windows in the same workflow so you're reading the sheet once per hour, not twice.

Use a n8n-nodes-base.code v2 node (the jsCode parameter) to normalize appointment datetimes to Unix timestamps early in the chain. Sheets populated by humans mix formats: "Jun 14 2026 10:00 AM" in one row, "2026-06-14T10:00:00" in another. The IF comparison breaks silently on mixed formats. Normalize first.

4. Deduplicate with flag columns

Add Reminded_48h and Reminded_2h boolean columns to the sheet. Before firing the Twilio node, a second IF node checks whether that column is already TRUE. After the SMS and email send successfully, a Google Sheets Update node flips the column to TRUE.

Don't skip this step. A scheduler without dedup tracking fires at least once extra per appointment window on the next hourly run. Clients who receive three identical reminders from the same business don't rebook — they unsubscribe or block the number. The dedup write is what separates a production-grade reminder from a toy.

5. Send, then log the result

n8n-nodes-base.twilio v1 sends the SMS. The message body needs to stay under 160 characters to avoid Twilio splitting it into two segments (which the client receives as two separate texts). Include the appointment time, the business name, and the confirm link. Nothing else.

The SMTP node sends the email in parallel with the Twilio node using n8n's built-in n8n-nodes-base.emailSend. It can carry more detail — service description, prep instructions, a map link — but keep the primary call to action consistent with the SMS: click to confirm or click to reschedule.

The confirm-link webhook

The confirm and reschedule links in every reminder point to a second n8n workflow with a n8n-nodes-base.webhook trigger. A client clicks "Confirm" and the webhook receives the appointment ID, updates the sheet row status to Confirmed, and returns a plain-text acknowledgment to the browser. There's no landing page to build, no redirect service needed. The second workflow runs alongside the reminder sender, sharing the same sheet.

Two patterns that catch common failures

Pattern 1: Phone number sanitization. Twilio requires E.164 format (+15551234567). Sheets filled by humans usually hold national format ((555) 123-4567) or omit the country code entirely. Add a Code node before the Twilio send that strips non-digits and prepends the country code. Without it, the Twilio node throws a validation error and the execution log won't surface it until you check manually — the workflow won't error loudly, it just won't send.

Pattern 2: Confirmed-only filtering. It's worth adding a Status column to your sheet and filtering for Confirmed rows only before the window check. Without it, the workflow sends reminders for cancelled appointments if the cancellation happened after the reminder window opened. Clients who receive a reminder for an appointment they cancelled 24 hours ago call to complain. The filter is one IF node and prevents an annoying class of false positives.

n8n nodes for appointment reminder automation

NodePurpose
n8n-nodes-base.scheduleTrigger v1.2Fires the workflow every hour
n8n-nodes-base.googleSheetsReads appointments and writes back reminder flags
n8n-nodes-base.code v2Date normalization and phone sanitization
n8n-nodes-base.ifWindow comparison and deduplication flag check
n8n-nodes-base.twilio v1Sends the SMS reminder
n8n-nodes-base.emailSendSends the email reminder via SMTP
n8n-nodes-base.webhookReceives client confirm and reschedule clicks

From spreadsheet to running workflow

  1. Set up the Google Sheet with columns for: appointment date/time (ISO 8601), client name, phone, email, status, Reminded_48h, Reminded_2h.
  2. Create n8n credentials for Google Sheets OAuth2, your Twilio account SID and auth token, and your SMTP server.
  3. Build the Schedule Trigger → Sheets Read → Code (normalize) → IF (48h window + flag) → Twilio + SMTP → Sheets Update chain.
  4. Build the confirm-handler Webhook workflow as a separate n8n workflow in the same instance.
  5. Generate the confirm and reschedule webhook URLs from the confirm-handler workflow and paste them into the Twilio and email message bodies.
  6. Test by adding a row with an appointment 47 hours in the future, triggering the workflow manually, and confirming the Reminded_48h column flips to TRUE after the SMS sends.
  7. Activate the schedule. Done.

The No-Show Guard template ships this pre-wired if you'd rather not build from scratch — both the reminder sender and the confirm handler, connected, with the Google Sheet structure included.

Browse n8n automation templates →
Skip the build

The No-Show Guard: Automated Appointment Reminders template ships this end-to-end — a Schedule Trigger that reads your Google Sheet hourly, Twilio SMS at T-48h and T-2h with one-click confirm and reschedule links, an SMTP email alongside each SMS, and a Webhook sub-workflow that logs client responses back to the sheet. It's part of The Complete n8n Templates Bundle, a one-time lifetime license to the whole catalog (plus every template added later) if you're running more than one of these automations.

Get the No-Show Guard template →

For prospects who call instead of booking online, the n8n missed-call text-back workflow handles the other side of the phone problem: an instant SMS to every unanswered call, with AI triage of the reply. The Missed-Call Text-Back template covers that side of the stack if you want to run both.

If you're building a fuller scheduling stack, n8n meeting scheduling automation covers routing Calendly and Google Calendar booking events into your CRM and notification channels.

Appointment reminders are the highest-leverage starting point. Build the hourly scheduler first, confirm the dedup flags work, then layer in the confirm handler.

See all n8n workflow templates →
FAQ

Common questions

Can n8n send automatic appointment reminders via SMS?
Yes. An n8n Schedule Trigger polls a Google Sheet every hour, filters rows where the appointment falls within the 48-hour or 2-hour window, and fires a Twilio SMS node for each match. One workflow, two reminder windows, no third-party reminder SaaS required.
What's the cheapest way to automate appointment reminders for a small business?
Self-hosted n8n plus a Twilio number. Twilio SMS costs roughly $0.0079 per message in the US; a small VPS runs around $5 to $6 per month. Tools like Apptoto and Goldie App charge $30 to $99 per month for the same underlying send logic. The one-time n8n setup pays for itself in under a month at typical booking volumes.
How do I prevent n8n from sending duplicate appointment reminders?
Add a Reminded_48h and Reminded_2h boolean column to your appointments sheet. After each successful send, the workflow updates that column to TRUE. On the next hourly run, an IF node checks the flag and skips any row already marked reminded — no double sends.
Stop reading. Start running.

Get the workflow templates this guide is built on

Import-ready n8n JSON, step-by-step setup, and tested end-to-end. One-time payment, own it forever.

Free — $40 value

Get 3 tested n8n templates, free

The full customer package for three real catalog templates — workflow JSON, step-by-step setup guide, credential checklist. Built through the same live-instance release process as everything we sell. Plus new templates and automation guides in your inbox. No spam, unsubscribe anytime.

  • 01Smart To-Do List ManagerPre-built n8n workflow template that automates productivity with OpenAI. Live in about 10 minutes.$14
  • 02Email Follow-Up AutomatorPre-built n8n workflow template that automates crm with OpenAI. Live in about 15 minutes.$12
  • 03Market Trend AnalyzerPre-built n8n workflow template that automates data processing with OpenAI. Live in about 10 minutes.$14