Self-hosted appointment booking — the complete guide
The complete guide to owning your booking system: what per-seat SaaS costs, the real open-source options, why double-booking is the whole problem, and what a buy-once engine covers.
Booking software has one unforgivable failure mode. Nobody remembers the day it worked; everybody remembers the double-booking. This guide is the complete map of running appointments on software you own — including the free options, the SaaS meters, and the one engineering problem that decides whether any of it can be trusted.
The meter you are probably paying
- Calendly — Standard at $10 per seat per month billed yearly (read 4 August 2026, re-read 5 September 2026 — unchanged). Three staff calendars is $360 a year, forever, for slot-picking. *Its free tier is capped by event type rather than by seats — "One event type", "One calendar connection"*** — so anyone offering a consultation and a follow-up has outgrown it without hiring. A "Save 17%" badge sits against annual billing; the monthly figure did not render to us on that re-read, so it is not quoted here.
- Acuity Scheduling — Starter $16/month billed annually ($20 monthly), then Standard $27 ($34) and Premium $49 ($61) (read 2 August 2026, re-read 5 September 2026 — unchanged). "Flat per account" is not quite the shape: the account is billed once, but what moves you up the ladder is calendars — one on Starter, up to six on Standard, up to thirty-six on Premium. For a two-room clinic that is the number to count, not the staff.
- SimplyBook.me — a free tier exists; the Basic paid tier rendered €11.90/month billed annually to our (geo-dependent) fetch (read 5 July 2026). A 5 September 2026 re-read confirms how geo-dependent: the page localises to the visitor and publishes no currency selector, serving us Brazilian reais that day. We have not converted between the two — an exchange rate would be our arithmetic, not their price. What is locale-independent is the meter, and for a booking guide it is the number that matters: Free holds 50 bookings a month with one provider, Basic 100 with five, Standard 500 with fifteen, Premium 2,000 with thirty. A hundred bookings a month is about four a working day for the whole business — so a busy two-chair salon is on Standard long before the price on the cheap row applies to it.
Reasonable numbers monthly; the three-year math is where they stop looking reasonable — and your client list lives on their servers for as long as you keep paying.
The open-source options, honestly reviewed
- Cal.com — the open-source heavyweight: polished, team routing, huge integration surface, with self-hosting still offered (read 5 September 2026). The cost is operational: a modern Node/Postgres stack, self-hosted, tracking a fast-moving upstream. Excellent if that describes your comfort zone. Note that "free" describes the source and not the service — Cal.com's own hosted plans are per-seat and dearer than the incumbent, Teams at $16 per user per month and Organizations at $37. Running it yourself is the free route; signing up is not.
- Easy!Appointments — the classic PHP scheduler, which calls itself "100% free and Open Source" with "No monthly fees", usable "even for commercial use", on ordinary LAMP hosting (read 5 September 2026). Services, providers, working plans — the basics, solidly. Its age shows in the interface and feature pace, and deposits are not its focus.
If either covers your needs at your ops level, use it — free-and-fits beats paid every time. The full comparison lives in the booking-systems field guide.
The problem that actually matters
Every booking tool demos beautifully. The difference shows at 9:00:03 on a Monday when two clients tap the same 10:00 slot from two phones. Most cheap scripts check availability then write — a race window where both bookings succeed. The other classic: daylight-saving day offers a 2:30 that does not exist, or shows your London client slots in your timezone. When you evaluate any tool on this page — free, rented, or owned — these two questions outrank every feature list: what stops the race, and who handles the clocks?
The owned option
Slotly is our entry, built around that exact obsession: double-booking is prevented at the database level, so even simultaneous requests cannot both land, and the engine is timezone- and DST-correct — customers book in their own timezone while you work in yours, and impossible clock-gap times are never offered. Around that core: prep/cleanup buffers, blackout dates, minimum notice, per-weekday hours with split shifts, group classes with hard capacity, per-service deposits, coupons, and automatic email reminders enabled by one cron line. One-time purchase, full PHP source, on the same cheap hosting Easy!Appointments runs on.
Try the Slotly demo ↗Live, on sample data, no sign-up.
The honest limits
From Slotly's own page: it never processes cards — deposits are quoted and tracked in admin, and your own payment link (a Stripe or PayPal page) is shown to the customer beside the amount due, so the payment happens on your provider's page rather than inside the booking flow. It is one business per install, not a multi-vendor marketplace. If the card must be taken inside the booking flow itself, the hosted tools do it today and Slotly does not.
The honest chooser
- Ops-comfortable, want free and full-featured: Cal.com.
- Cheap PHP hosting, simple needs, free: Easy!Appointments.
- Conflict-proof engine with deposits and group capacity, owned once: Slotly — the demo is open, no signup; the Studio Suite adds waivers, memberships and the visitor list.
- Zero ops tolerance: stay hosted and accept the meter — the honest trade, priced above.
Two workflows that separate real shops from demos
Deposits are the no-show cure nobody's free tier handles well: attach a deposit to the services where absence hurts (the two-hour color appointment, not the trim), quote it at booking, and track it in admin — even without card processing, "a deposit is expected" filters the flaky bookings out on its own. Group capacity is the other: a yoga class is one slot that eleven people may book and the twelfth must not; capacity has to be enforced by the same engine that stops double-booking, or the race problem simply returns wearing a leotard. Both ship in Slotly's engine, both are worth testing in anyone's demo before you commit — and the email reminders that cut no-shows further are one cron line, documented on the product page.
Whoever you pick, the client list should end up in your database. That is the quiet, compounding asset of the whole self-hosted category — a booking tool is, quietly, the most complete customer list a service business ever assembles.
Slotly is also one of the four apps on Ownware Cloud — we run it for $12/month with the licence yours after a year. Since the 3.0 release it carries a REST API and an MCP endpoint — self-hosted booking, simple to use, with an API is the direct answer. And every vendor price in this guide lives, dated and sourced, in the Price Observatory.