The Silent Problem Draining Your Revenue
A 50-seat restaurant in Paris or Algiers loses an average of 8 to 15 tables per week to no-shows. At a €45 average ticket, that's between €1,440 and €2,700 in lost revenue every single month.
The problem isn't malicious customers. It's that they forget. A reservation made Monday for Friday evening easily slips from memory — especially without a reminder.
Automated restaurant reservation management changes everything. Here's how to build a reminder system that concretely reduces no-shows by 60% or more.
Why Manual Reminders No Longer Cut It
Many restaurant owners assign reminder calls to a team member. The result:
- Inconsistency: on busy days, nobody calls
- Human cost: 30 minutes to 1 hour wasted on the phone daily
- Zero traceability: no way to know who confirmed and who didn't
- No follow-up: a client who doesn't pick up is assumed to be coming
Automation solves all four problems simultaneously.
The Technical Architecture
Here's the stack we deploy at Otomy for our restaurant clients:
| Component | Tool | Role |
|---|---|---|
| Database | Supabase | Store reservations with status tracking |
| Orchestrator | n8n (self-hosted) | Trigger reminders at the right time |
| SMS channel | Twilio | Send SMS reminders |
| WhatsApp channel | Twilio WhatsApp API | Send WhatsApp reminders |
| Intelligence | Claude AI (Anthropic) | Personalize messages |
| Frontend (optional) | Vercel + Next.js | Confirmation/cancellation page |
The Step-by-Step Workflow
Step 1: Structure Your Reservation Database in Supabase
Create a reservations table with this structure:
CREATE TABLE reservations (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
client_name TEXT NOT NULL,
phone TEXT NOT NULL,
email TEXT,
date_reservation TIMESTAMPTZ NOT NULL,
nb_covers INTEGER DEFAULT 2,
status TEXT DEFAULT 'pending',
reminder_sent BOOLEAN DEFAULT false,
client_confirmation TEXT DEFAULT 'none',
created_at TIMESTAMPTZ DEFAULT now()
);
The status field accepts: pending, confirmed, cancelled, no-show.
Step 2: Configure the n8n Workflow
In n8n, create a workflow with this sequence:
- Cron Trigger: runs every hour between 9 AM and 6 PM
- Supabase Node: query reservations where
date_reservationis within the next 24 hours ANDreminder_sent = false - IF Node: check whether the client has a WhatsApp-compatible number (+33 or +213 prefix)
- Claude AI Node: generate a personalized message
- Twilio Node: send SMS or WhatsApp message
- Supabase Update: set
reminder_sent = true
Step 3: Personalize Messages With Claude AI
Instead of a generic template, use Claude AI to adapt the tone:
Prompt: "Generate a warm, short reservation reminder (max 160 characters) for {client_name} who booked {nb_covers} covers on {date_reservation} at {restaurant_name}. Include a confirmation link: {confirmation_link}."
Sample output:
Hi Sarah! 🍽️ We're looking forward to seeing you tomorrow at 8 PM for 4 guests at Le Comptoir. Confirm here: https://r.otomy.dz/c/abc123
Step 4: Build the Confirmation Page
Deploy a simple Next.js page on Vercel with two buttons:
- ✅ I confirm my reservation
- ❌ I need to cancel
Each click updates the client_confirmation field in Supabase via an API call. On cancellation, a second n8n workflow triggers to notify the restaurant and free up the table.
Step 5: The Second-Level Reminder
If 4 hours before the reservation client_confirmation = 'none':
- Send a second, more direct reminder
- If still no response 1 hour before: auto-call via Twilio Voice with a pre-recorded message
This two-tier system is what pushes no-show reduction from 35% to 60%+.
Real Results
Here are the numbers observed across three Otomy restaurant clients after 90 days:
| Metric | Before | After | Change |
|---|---|---|---|
| No-show rate | 18% | 6.5% | -64% |
| Tables recovered/week | 0 | 7.2 | +7.2 |
| Staff time on reminders | 45 min/day | 0 | -100% |
| Estimated recovered revenue/month | — | ~€2,100 | — |
Common Mistakes to Avoid
1. Sending the reminder too early A reminder 48 hours before gets ignored. The sweet spot is 24 hours + 4 hours before.
2. Not offering easy cancellation If cancelling is complicated, the client does nothing — and doesn't show up. Make cancellation as simple as a single tap.
3. Using SMS only In Algeria, WhatsApp has a 92% open rate versus 34% for SMS. In France, SMS still performs well, but WhatsApp is gaining ground. Use both channels.
4. Forgetting GDPR compliance
Store explicit client consent for receiving messages. Supabase makes this easy with a consent_sms field in your table.
What Does It Cost?
| Item | Monthly Cost |
|---|---|
| Supabase (Free tier) | €0 |
| n8n (self-hosted on VPS) | ~€5/month |
| Twilio SMS (200 reminders) | ~€8/month |
| Twilio WhatsApp (200 reminders) | ~€12/month |
| Claude AI API | ~€3/month |
| Total | ~€28/month |
For a €28/month investment, you potentially recover €2,000+ in revenue. That's an ROI exceeding 7,000%.
How to Get Started This Week
- Day 1-2: Create your Supabase database and import existing reservations
- Day 3: Set up the n8n workflow with Cron and Twilio nodes
- Day 4: Deploy the confirmation page on Vercel
- Day 5: Test with 10 real reservations
- Week 2: Add the second-level reminder and Claude AI personalization
Don't have the time or technical skills? Otomy deploys this system turnkey for restaurants in France and Algeria — including staff training.
Conclusion
Automated restaurant reservation management is no longer a luxury reserved for large chains. With open-source tools and affordable APIs, any restaurant can cut no-shows by three in under two weeks.
The real cost is inaction: every week without an automated system means empty tables that could have been filled.
Running a restaurant and losing money to no-shows? Contact Otomy for a free audit of your reservation process.