Appointment Booking System
/install appointment-booking-system
Appointment Booking System
A complete appointment booking and management system for service businesses. Handles booking intake, confirmation emails, automated reminders, no-show detection, and daily schedule reports.
Problem
Service businesses (salons, clinics, consultants, studios) lose revenue from missed appointments, no-shows, and scheduling chaos. Booking platforms charge $30-100+/month and often lack customization. Manual reminders are unreliable.
This system provides self-hosted booking management with zero monthly fees.
What It Does
- Booking Intake — Webhook API receives bookings, validates fields, generates booking ID, stores in Sheets
- Confirmation — Sends confirmation email to client and notification to staff immediately
- Smart Reminders — Sends 24-hour and 2-hour reminders automatically
- No-Show Followup — Detects missed appointments and sends rescheduling email
- Daily Schedule — Morning email with today's and tomorrow's appointments plus weekly stats
Included Workflows
| # | File | Purpose |
|---|---|---|
| 01 | 01-booking-intake.json |
Webhook → validate → store → confirm client → notify staff |
| 02 | 02-booking-confirmation.json |
Update booking status (confirm/cancel) via webhook |
| 03 | 03-reminder-engine.json |
Hourly check → send 24h and 2h reminders |
| 04 | 04-noshow-followup.json |
Check past appointments → detect no-shows → followup email |
| 05 | 05-daily-schedule.json |
Morning report with today's schedule and weekly stats |
Architecture
Client books online (form/API)
|
v
Workflow 01: Booking Intake
+-> Validate required fields
+-> Generate booking ID
+-> Save to Google Sheets
+-> Email confirmation to client
+-> Email notification to staff
+-> Return booking ID
Status update (confirm/cancel):
|
v
Workflow 02: Booking Confirmation
+-> Update status in Sheets
Hourly:
|
v
Workflow 03: Reminder Engine
+-> Read confirmed appointments
+-> Check: is appointment in 24h? -> send reminder
+-> Check: is appointment in 2h? -> send reminder
+-> Mark reminders as sent in Sheets
Every 2 hours:
|
v
Workflow 04: No-Show Followup
+-> Check past appointments (1-48h ago)
+-> IF no showed_up status -> mark as no-show
+-> Send rescheduling email
Daily at 7 AM:
|
v
Workflow 05: Daily Schedule
+-> Build today's and tomorrow's schedule tables
+-> Calculate weekly stats (completed, no-shows, cancelled)
+-> Email to staff
Required n8n Credentials
| Credential Type | Used For | Placeholder in JSON |
|---|---|---|
| Google Sheets OAuth2 | Appointment storage | YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
| SMTP | Confirmations, reminders, reports | YOUR_SMTP_CREDENTIAL_ID |
Environment Variables
# Business Details (used in client-facing emails)
BUSINESS_NAME=Your Business Name
BUSINESS_PHONE=+1234567890
[email protected]
Note: The Google Sheet ID is configured as a
YOUR_BOOKING_SHEET_IDplaceholder in the workflow JSON files (not an environment variable). Replace it directly in n8n after import.
Configuration Placeholders
| Placeholder | Description |
|---|---|
YOUR_BOOKING_SHEET_ID |
Google Sheet ID for appointments |
YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
n8n Google Sheets credential ID |
YOUR_SMTP_CREDENTIAL_ID |
n8n SMTP credential ID |
YOUR_NOTIFICATION_EMAIL |
Staff email for schedule reports |
Google Sheets Schema (Appointments)
| Column | Type | Description |
|---|---|---|
| booking_id | text | Unique booking ID (auto-generated) |
| name | text | Client full name |
| text | Client email | |
| phone | text | Client phone |
| service | text | Service type (e.g., haircut, consultation) |
| date | date | Appointment date (YYYY-MM-DD) |
| time | text | Appointment time (HH:MM) |
| notes | text | Client notes |
| status | text | confirmed / cancelled / no-show / completed |
| showed_up | boolean | Whether client attended |
| reminder_24h | boolean | 24h reminder sent |
| reminder_2h | boolean | 2h reminder sent |
| created_at | datetime | Booking creation timestamp |
Quick Start
1. Prerequisites
- n8n v2.4+ (self-hosted)
- Google Sheets OAuth2 credentials
- SMTP email credentials
2. Create Appointments Sheet
Create a Google Sheet with the columns above. Name the tab "Appointments".
3. Import & Configure
Import all 5 JSON files into n8n. Replace all YOUR_* placeholders and set environment variables.
4. Test Booking
curl -X POST https://your-n8n.com/webhook/booking/new \
-H "Content-Type: application/json" \
-d '{
"name": "Jane Smith",
"email": "[email protected]",
"phone": "+1234567890",
"service": "Consultation",
"date": "2026-03-10",
"time": "14:00",
"notes": "First visit"
}'
Use Cases
- Hair salons — Booking, reminders, and no-show tracking for stylists
- Medical/dental clinics — Patient appointment management
- Consultants — Strategy call scheduling with automated reminders
- Fitness studios — Class and personal training bookings
- Auto repair shops — Service appointment scheduling
Requirements
- n8n v2.4+ (self-hosted or cloud)
- Google Sheets OAuth2 credentials
- SMTP email credentials
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install appointment-booking-system - After installation, invoke the skill by name or use
/appointment-booking-system - Provide required inputs per the skill's parameter spec and get structured output
What is Appointment Booking System?
Generic appointment booking and management system for service businesses. Booking intake, confirmation, automated reminders (24h, 2h), no-show followup, and... It is an AI Agent Skill for Claude Code / OpenClaw, with 452 downloads so far.
How do I install Appointment Booking System?
Run "/install appointment-booking-system" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Appointment Booking System free?
Yes, Appointment Booking System is completely free (open-source). You can download, install and use it at no cost.
Which platforms does Appointment Booking System support?
Appointment Booking System is cross-platform and runs anywhere OpenClaw / Claude Code is available (linux, darwin, win32).
Who created Appointment Booking System?
It is built and maintained by Muhammad H.M. Alvi (@mhmalvi); the current version is v1.0.1.