Run your service business like an online store.
Booking software with a full shop inside. Every booking is an order, with checkout, payment, invoice and refunds attached. Use our storefront, start from a free template, or build your own site on the API.
Harbour Physio
Sports massage
60 min · with Leo · Studio 2
Try it: pick another time and book.
Waiting for a booking.
150+ service businesses take bookings on Opencals.
- Hosted in EuropeAWS London, UK
- GDPRDPA available
- SOC 2Controls self-assessed
- ISO 27001Controls self-assessed
- HIPAABAA available
Assessed automatically with Prowler and Aikido Security. How we test
Everything connects to one dashboard.
Bookings come in from
Hey there, let's get started.
And flow out to
Booking tools give you a calendar. Opencals gives you a shop.
Built for meetings
Calendly, Cal.com, Acuity
Very good at putting a call in someone's diary. They strain the moment you add a second location, a bookable room, a package or a company invoice.
Built for chains and marketplaces
Mindbody, Vagaro, Fresha
Deep, but shaped around wellness chains or a marketplace: long setup, and a booking page that looks like everyone else's on the platform.
Built like a shop
Opencals
The depth of an operations platform, the setup of a simple tool, and an API on top for anything it doesn't do yet.
The questions you actually ask
“Who still hasn't paid for Saturday?”
A calendar with tools bolted on: The calendar knows the slot, the payment app knows the money. You compare the two by eye.
Opencals: One filter on your orders. Every booking is an order, and every order has a payment status.
“Send this company one invoice for four visits.”
A calendar with tools bolted on: Export a spreadsheet, retype it into the invoicing tool, hope nothing drifted.
Opencals: Four appointments, one order, one invoice, with their company name and VAT number already on it.
“Charge for the treatment and the product together.”
A calendar with tools bolted on: A slot has one price. The extra ends up in a note, or in a second transaction.
Opencals: Add-ons are line items on the same order, so the total, the tax and the invoice all follow.
“Refund the visit she cancelled, not the whole package.”
A calendar with tools bolted on: Refund in the payment tool, then go back and fix the calendar, the report and the invoice.
Opencals: Refund that one line. The appointment, the invoice and your revenue report move with it.
“I want booking on my own website, in my own design.”
A calendar with tools bolted on: Their widget inside your page, styled as far as their settings allow.
Opencals: Your own storefront on your own domain, a free template, or your own site on the public API.
One order. Six weeks. Nothing to chase.
Marta, physio patient
- $48.00
Sports massage · 60 min
Mon 12 Oct · 09:00
- $48.00
Sports massage · 60 min
Mon 19 Oct · 09:00
- $48.00
Sports massage · 60 min
Mon 26 Oct · 09:00
- $48.00
Sports massage · 60 min
Mon 2 Nov · 09:00
Payments
Nothing taken yet.
One record the whole way through. The payments always add up to the total.
Sent to Marta
On your dashboard
If you sell time, you can sell it here.
Hair salons Padel clubs Dental clinics Car hire Music lessons Escape rooms Barbershops Physiotherapy Photo studios Yoga studios Guest houses Consultants Tattoo studios Driving schools Podcast studios Vet clinics Tennis courts City tours Massage therapists Coworking desks Language tutors Personal trainers Holiday lets Psychologists and yours.
Every business books differently.
A padel club books courts on a grid, a studio sells hours, a car hire firm needs pick-up and return. Here are six of those booking pages to try. They're examples, not the list: the same engine takes whatever shape your business needs, and the order on the right never changes.

Service
With
When
How long do you need?
Start time · only the ones where 2 h fits
Add-ons




Minimum two nights. Prices change by night, not by stay.
Payment, invoice, reminders and refunds hang off this order.
Used by salons, clinics, consultants, and anything else booked the same way.
Used by podcast & photo studios, meeting rooms, and anything else booked the same way.
Used by padel & tennis, golf simulators, and anything else booked the same way.
Used by fitness, workshops, tours, and anything else booked the same way.
Used by car & bike hire, equipment hire, and anything else booked the same way.
Used by guest houses, holiday lets, and anything else booked the same way.
Built on Opencals
Open-source booking sites for a few of the businesses above, each one running on the public API. Fork one as a starting point. More are on the way.





- Build your own
Your business
Not on the list? Build it on the same API, or describe it to Claude, v0, Lovable or Base44 and let them build it for you.
Everything you sell with, in one place.
Sell
A slot with one price is how calendars think. A shop sells a service plus the extras, the product on the shelf, the package of ten and the discount that brings people back, all on one order.
Add-ons
Offer the extra at the moment it makes sense: hot stones on a massage, deep conditioning with a cut, racket hire with a court. Each add-on becomes its own line on the order, with its own price and tax.
Read more about add-onsDiscounts
Discounts that apply themselves, like early mornings or a first visit, plus codes you hand out. The order keeps the original price, the discount and the total, so nothing needs explaining later.
Read more about discountsCheckout questions
Ask what you need to know before the visit: allergies, an injury, a car registration. Answers are saved on the booking and on the customer's record.
Read more about checkout questionsCredit packages
Sell ten sessions or five hours upfront. The balance sits on the customer's account, in minutes or in money, and is drawn down at checkout each time they book.
Read more about credit packagesBook
Every schedule a service business runs: weekly hours, seasonal date ranges, fixed class times, rolling windows, buffers between visits, and resources shared between rooms or courts.
Flexible scheduling
Slot lengths, intervals, buffers and minimum notice, set per service. Customers only ever see times that genuinely work.
Read more about flexible schedulingAvailability rules
Weekly hours, date ranges for the season, holidays and days off, separately for each person, service and location.
Read more about availability rulesRecurring sessions
A weekly physio slot or a course of eight lessons, booked in one go and kept on one order.
Read more about recurring sessionsGroup appointments
Classes, tours and workshops with a seat limit. Guests can join a booking, and the slot closes itself when it's full.
Read more about group appointmentsMulti-day bookings
Car hire, equipment, stays and courses that run across days, with pick-up and return times rather than a single slot.
Read more about multi-day bookingsGet paid
Card, cash or bank transfer, recorded on the order itself. Part-pay now and the rest later, refund one line instead of the whole thing, and send the invoice a company's accounts team actually needs.
Payments on the order
Stripe for cards and wallets, plus cash and bank transfer for the desk. Every payment is recorded against the order, so paid, part-paid and unpaid are one filter away.
Read more about payments on the orderInvoices
Numbered invoices with net terms, the company name and VAT number taken from the billing address. Issued per order, emailed automatically or when you choose.
Read more about invoicesPartial refunds
Refund the one visit she cancelled, not the whole package. The appointment, the invoice and your revenue report all update with it.
Read more about partial refundsShopify order sync
Running on Shopify too? Bookings become real Shopify orders, paid in your own checkout, and stay in sync both ways.
Read more about shopify order syncCustomers
Customers get an account, see their bookings, move or cancel inside your rules, and hear from you at the right moments, in emails that look like your brand.
Notifications
Confirmation when they book, a reminder before they come, an update when anything changes, and a feedback request after. All automatic.
Read more about notificationsFeedback and reviews
Ask the questions you care about after each visit, star ratings, free text or yes/no, and collect reviews you can actually use.
Read more about feedback and reviewsYour brand on every page and email
Your colours, fonts and logo on the booking pages, and your own wording in every email that goes out.
Read more about your brand on every page and emailCustomer accounts
Customers see their upcoming and past bookings and reschedule or cancel within the cutoffs you set, without calling you.
Read more about customer accountsTeam and locations
Staff with their own calendars, services and permissions; locations with their own hours, rules and teams; several brands under one account. The plan grows with the team.
Staff
Each person gets their own services, hours and permissions. Customers pick someone, or take the first one available.
Read more about staffStaff calendars
Everyone's day side by side, across locations, with bookings, breaks and time off in one view.
Read more about staff calendarsLocations
Physical, online or mobile, each with its own hours, staff and rules, and its own page on your storefront.
Read more about locationsMultiple stores
Run more than one brand from one account, each with its own storefront, catalogue and settings.
Read more about multiple storesAnalytics and audit log
Revenue, orders and bookings by staff member, location and service, plus a record of who changed what.
Read more about analytics and audit logConnect
A public Storefront API and typed SDK over the same platform, booking events into Zapier, two-way Shopify sync, and calendar and video links on every booking.
Calendars and video
Bookings land on each staff member's Google Calendar, and online sessions get a Meet or Zoom link automatically.
Read more about calendars and videoAPI and SDK
A documented REST API and a typed TypeScript SDK over the same platform your dashboard runs on. Build your own site, app or kiosk.
Read more about api and sdk
Zapier
Booking created, rescheduled, cancelled, completed, feedback shared: each event can start a Zap into 8,000+ other apps.
Read more about zapier
Shopify
Install the Shopify app to sell bookings as real Shopify orders, or run Opencals on its own, or both.
Read more about shopifyGet it on the Shopify App StoreYour website, three ways.
Switches every few seconds. Pick one to stop.
Four stores, one platform. Click into any of them.
These are live demo stores running on Opencals, each styled in the theme editor with no code. Pick one and click through services, staff, times and checkout in the phone.
Start from a finished site.
MIT-licensed Next.js sites, already wired to your store through the SDK. Change the design as much as you like; bookings, payments and accounts keep working.
Service commerce infrastructure.
A public REST API, a typed TypeScript SDK and booking events, over the same platform our merchants run on. Build a web app, a kiosk or a client's site, and leave availability, checkout and payments to us.
- Free development stores, seeded with a working business
- No card, no trial clock, no private beta
- The platform stays hosted; templates and SDK are open source
Or describe the site and let an AI builder make it:
import { setupOpencals, ProductService } from "@opencals/storefront-sdk";
setupOpencals({ apiKey: process.env.OPENCALS_API_KEY, throwOnError: true });
// Live availability for one service, in the customer's time zone
const { data: slots } = await ProductService.getCurrentAvailabilities({
path: { productId },
query: {
date: "2026-11-10",
timezone: "Europe/Lisbon",
staffMemberId, // optional: one provider only
duration: "5400", // optional: 90 minutes instead of the default
},
});import { AppointmentService, CartService, CheckoutService } from "@opencals/storefront-sdk";
// 1. Hold the slot
const { data: appointment } = await AppointmentService.create({
body: {
slot: { productId, fromDate: "2026-11-10", fromTime: "10:00:00",
toDate: "2026-11-10", toTime: "11:00:00" },
numberOfAttendees: 1,
},
});
// 2. Put it in a cart
await CartService.createOrGet();
await CartService.addItem({ body: { appointmentId: appointment.id } });
// 3. Pay — the order, invoice and emails follow on their own
await CheckoutService.start({
body: { provider: "stripe", customer: { email: "ana@example.com" } },
});
await CheckoutService.submit();import { AppointmentService } from "@opencals/storefront-sdk";
// Customer self-service, inside the cutoffs you set in the dashboard
const { data: upcoming } = await AppointmentService.list({
query: { status: ["scheduled"] },
});
const next = upcoming.data[0];
await AppointmentService.reschedule({
path: { appointmentId: next.id },
body: {
slot: { productId, fromDate: "2026-11-12", fromTime: "17:30:00",
toDate: "2026-11-12", toTime: "18:30:00" },
notifyCustomer: true, // sends the "visit moved" email
},
});
// Or cancel it; the refund and the invoice follow on the order
await AppointmentService.cancel({
path: { appointmentId: next.id },
body: { notifyCustomer: true },
});// Pushed to your Zap the moment it happens.
// appointment.created · rescheduled · cancelled · completed · feedback_shared
{
"name": "#1042-1",
"status": "scheduled",
"createdBy": "customer",
"from": "2026-11-10T09:00:00.000Z",
"to": "2026-11-10T10:30:00.000Z",
"product": { "title": "Sports massage", "duration": 5400 },
"staffMember": { "name": "Leo" },
"location": { "type": "physical", "name": "Harbour Physio · Studio 2" },
"customer": { "email": "ana@example.com" }
}Start free. Pay when you're booked.
- 1
Open a free development store
No card and no trial clock. Seed it with a demo business, or build your real one at your own pace.
- 2
Let the setup assistant do the busywork
Tell it what you sell. It drafts your services, prices, staff and opening hours in about ten minutes.
- 3
Switch to production when you're ready
Take real bookings and real payments. Choose how you pay below, and change it whenever you like.
Pay as you go
$0.99per booking
No monthly fee. A quiet month costs nothing.
Monthly, once you have the volume
from$14.98per month
300 bookings included, then $0.20 each. Scales as you grow: add staff, locations and features when you need them. 10% off when billed yearly.
How Opencals compares
Feature for feature, against the tools people usually move from. Based on each product's public pages; entry prices are list prices and vary by plan and region.
| Capability | Calendly | Cal.com | Acuity | Fresha | Mindbody / Vagaro | Opencals |
|---|---|---|---|---|---|---|
| Multi-staff scheduling | Partial or paid add-on | Partial or paid add-on | Yes | Yes | Yes | Yes |
| Multi-location operations | No | No | Partial or paid add-on | Yes | Yes | Yes |
| Bookable resources and rentals | No | No | Partial or paid add-on | Partial or paid add-on | Partial or paid add-on | Yes |
| Group classes and capacity | Partial or paid add-on | Yes | Yes | Partial or paid add-on | Yes | Yes |
| Multi-day bookings and stays | No | No | No | No | Partial or paid add-on | Yes |
| Online payments and refunds | Partial or paid add-on | Partial or paid add-on | Yes | Yes | Yes | Yes |
| Every booking is an order with an invoice | No | No | Partial or paid add-on | Yes | Yes | Yes |
| Discounts and promo codes | No | No | Yes | Yes | Yes | Yes |
| Customer accounts with self-service | Partial or paid add-on | Partial or paid add-on | Yes | Yes | Yes | Yes |
| Feedback forms and reviews | No | Partial or paid add-on | Partial or paid add-on | Yes | Yes | Yes |
| Branded storefront and editor | No | Partial or paid add-on | Partial or paid add-on | Partial or paid add-on | Partial or paid add-on | Yes |
| Shopify app | No | No | No | No | No | Yes |
| Public storefront API and typed SDK | Partial or paid add-on | Yes | Partial or paid add-on | No | Partial or paid add-on | Yes |
| Open-source building blocks | No | Yes | No | No | No | Yes |
| Free developer or sandbox stores | No | Partial or paid add-on | No | No | Partial or paid add-on | Yes |
| Pay per booking option | No | No | No | Yes | No | Yes |
| Entry price per month | Free / $10+ | Free / $15+ | $20+ | Free + fees | $30–$129+ | $0.99 / booking or $14.98 |
Side-by-side write-ups: Acuity alternatives, Opencals vs Fresha, Mindbody alternatives.
Questions, answered plainly
Something missing? Ask the founder. You'll get a reply from a person.
What is Opencals?
Opencals is booking software for service businesses that works like an online store. Every booking is an order with checkout, payment, invoice and refunds attached, managed from one dashboard. You can take bookings on the Opencals storefront, on a free open-source template, or on your own website through the public API. It also runs as a Shopify app.
How is Opencals different from Calendly, Cal.com or Acuity?
Calendly, Cal.com and Acuity are built for scheduling meetings, and they are very good at it. Opencals is built for selling services: packages, add-ons, group classes, rentals, multi-day bookings, company invoices and per-line refunds, across several staff and locations, all on one order. If you sell time rather than book calls, that is the difference.
Acuity alternatives comparedHow is Opencals different from Mindbody, Vagaro or Fresha?
Mindbody and Vagaro are built for wellness chains, and Fresha is a marketplace. Opencals gives you similar depth with a quicker setup, pay-per-booking pricing, your own branded storefront instead of a marketplace listing, and a public API to build anything the dashboard doesn't do.
Mindbody alternatives comparedWhat kinds of businesses can use Opencals?
Any business that sells time. That covers appointments (salons, clinics, tutors), rentals (courts, rooms, studios, equipment, vehicles), classes with limited seats, multi-day bookings such as car hire and courses, and overnight stays. They all run on the same engine with different settings, so nothing is built per industry.
Browse industriesCan I use my own website?
Yes, three ways. Use the Opencals storefront on your own domain with your colours and fonts. Start from one of the free MIT-licensed Next.js templates. Or build your own front end on the public Storefront API and typed TypeScript SDK, by hand or with an AI builder such as Claude, v0, Lovable or Base44.
For developersIs Opencals open source?
The site templates and the TypeScript SDK are open source under the MIT licence. The Opencals platform itself is a hosted service with a public API, so you get open building blocks without having to run booking, payments and availability yourself.
Open-source templatesDoes Opencals work with Shopify?
Yes. Opencals works on its own, as a Shopify app that syncs products, orders and customers, or both at once. You don't need Shopify to use it.
Opencals for ShopifyCan I try it for free?
Yes. Development stores are free for as long as you want them, with no card and no trial clock. You can seed one with a complete demo business, build your setup, and switch to production when you're ready to take real bookings.
How much does Opencals cost?
You choose. Pay as you go costs $0.99 per booking with no monthly fee. The monthly plan is $14.98 for 300 bookings, then $0.20 per booking, with 10% off for yearly billing. The monthly plan scales with you: add staff, locations and features as you need them.
Full pricingOpen your shop. It's free until you're booked.
Set up a free development store tonight. Bookings, payments and invoices work from the first order, and your storefront is live the moment you switch to production.