Take bookings for everything you run
Add appointments, weekly classes, courses, camps and events, and customers book them from your website.
Everything you run lives on your Schedule: an appointment customers pick a time for, a weekly class, a course, a workshop, a camp, an event, a rental, open hours or day care. Customers book from your website and get a link to see, move or cancel their booking under your cancellation policy.
Reminders are on from the start. Check them in Settings, under Automations. Most no-shows are people who forgot.
Steps
- On Schedule, choose New offering and pick its kind. The kinds your business runs come first; the rest are under Something else. Give it a name, its times or dates, how many it holds and a price. Or choose Set it up for me and describe it to the assistant: "A 6-week wheel-throwing course, Tuesdays at 6, 8 people, $240." For an appointment, add an option for each length you sell, like 60 minutes for $90 and 90 for $130. Under Add-ons, offer extras customers can tick when they book, like hot stones for 15 minutes or massage oil. Pick them from your products, or Add a new one. You can also ask the assistant: "Add hot stones for $20 and 15 minutes to my deep tissue." It sets up the options and the add-on as one change for you to approve. Or ask the assistant: "Offer my deep tissue at 60 for $90 and 90 for $130, and add hot stones for $20 and 15 minutes."
- Check Review. It shows every date, price and problem before anything is saved. Saving never messages anyone.
- Set your opening hours in Settings, Business details. Appointments are booked inside them, in your business's time zone. Each person on your team can have their own hours on the Team tab.
- Connect Google Calendar so your busy times block bookings and your sessions show on your calendar. Only you can connect it, signed in.
- Check reminders in Settings, under Automations. Open one to see exactly what it sends and change its timing.
Options and add-ons
Each option has its own name, length and price. Customers pick one, like "90 min · $130", then tick any add-ons and see the total, like "105 min · $150", before they see times. Only times with room for the whole length show.
- Length comes from what they book. Who takes it never changes it. If someone works slower, add an option for them, like a 75-minute cut.
- Staff and rooms per option. Open an option's Who does it and where to name who takes it and the rooms it needs, like only Sam grooms large dogs, in the big tub. An option with nobody ticked uses the offering's staff and rooms.
- Add-ons. A service adds its minutes, so 90 minutes with hot stones blocks 105. An item is handed over at the visit and sells only while it's in stock. Each add-on is its own line on the sale, so hot stones shows as $20 beside the $130 massage.
- Changes. A new length applies to new bookings. A booking keeps the length and add-ons it was booked with, also when it moves. Cancelling ends the add-ons with it, under the same policy.
Several services in one visit
Customers can book more than one service in a visit, like a manicure and then a pedicure. After the first option and its add-ons, they tap Add another service and pick the next. Each service starts when the one before it ends, with no buffer between them. Only times where every service has someone free and its rooms open show, and each time says who takes each part, like "With Ana, then Lee".
- One checkout. Every part books or none does, and one checkout charges them together. A pack or membership pays any part it covers.
- Moves and cancels. Moving the visit moves every part together, and each keeps its length. A customer cancels the whole visit. To cancel one part, ask the assistant, like "Cancel Maya's pedicure and keep her manicure." It refunds that part under the booking's policy and keeps the rest.
- Approval. If one of the services waits for your OK, the whole visit waits, and accepting one part accepts them all.
Headings on your booking page
Give offerings a tag under More options, like massage on Swedish, Deep tissue and Prenatal. Offerings that share a tag show under one heading, and each keeps its own options and staff. By default each offering goes under its first tag, in the order of your offerings. Use Move up and Move down on Schedule, Offerings to change the order. To pick the headings yourself, use Headings on your booking page below the list. Use the default goes back.
Running it day to day
Schedule opens on the week with your next session. Open a session to get its own page: how full it is, what's still to collect, whose forms are in and its 6-digit check-in code for the door. From an hour before it starts, tap each person to check them in. Who's coming shows what covers each person, like "Membership", "Pack, 9 left" or "Owes $25", and whether their waiver is signed. To collect lists only this session's money, with Mark paid. Book someone in, check in a walk-in, or move the session, put someone on to cover it or call it off without touching the rest. Calling it off shows who gets their money or credit back before you confirm.
Every name opens that customer's page. From a customer's page, Book them in opens the calendar; pick a session and they're filled in.
Teachers and other team members see only their own sessions and do only what their role allows. Their changes come to you to approve unless their role is set to Just do it.
Without payments turned on, customers pay at the visit. Each booking is a sale on Money, under Sales, and what's owed shows under Owed right now: what's paid, what's still due and the terms they booked under. Packs and memberships pay for bookings they cover, and add-ons are always charged; see Sell memberships and packs.
When someone books a paid time through an AI assistant like ChatGPT, the place is held while they pay, and they get an email or text from you with a link to pay on your website. Paid, the booking is confirmed. Unpaid by then, the place opens up again and nothing is charged.
What your customers see
Every confirmation links to the booking's own page on your website, under your name and logo. It shows what they booked, when, where with directions, who's going and what's left to pay, like "Pay $25 at your visit." From there they move it, cancel it or send someone else, and signed in, they go back to their account.
A waiver or record still due shows on that page with its button, like "Studio waiver due before Tue, Oct 6", and check-in waits until it's done, at the front desk too. The message names what's missing. Once they sign, the waiver's page leads back to the booking. Opened too early, Check in names their next session and when check-in opens.
For agents
- Add or change an offering with
offerings.save, in one call. Readofferings.shapesfirst for each kind's fields and a worked example. Give it akeyso a retry updates it. Ask for a time, price or size you weren't told. Name its location (locationId), staff (resourceId), rooms and add-ons as the owner does, or by id: a name that matches none, or more than one, is refused with the choices and the read that lists them. Never ask the owner for an id. - Add dates or a repeating schedule to an offering already set up with
offerings.addSessions:{"offering": "Wheel throwing", "dates": [{"date": "2026-11-07", "startMinute": "10:00", "durationMinutes": 120}]}. It waits for the owner's OK asofferings.savedoes. - An appointment's options are its
oneadmissions, each withdurationMinutes,nameandpriceMinor. An option can name its ownstaffandresources.addOnsonofferings.saveis the whole list customers can add, in order: a product by name or id, or a new one as{ name, priceMinor, durationMinutes }(leavedurationMinutesout for an item). The save makes a new one and reuses one with the same name, so options and add-ons go in one call. Never make an add-on withcommerce.createProductfirst. - For a visit of several services, pass the ones after the first as
partstoofferings.times(each withofferingId,admissionIdandaddOns); each time'svisitnames every part's start and who takes it. Book at that start withofferings.book, passing the same parts asmore. Every part books or none does, in one sale. A move moves every part, and the owner cancels one part withpart: true. - Booking-page headings come from
tags.offerings.reorderchanges the order of offerings,offerings.saveBookingPage(groups) picks the heading tags andofferings.bookingPagereads them. The two changes wait for the owner's OK unless they chose otherwise. - Find open times with
offerings.times(offeringId,date) and book withofferings.book(admissionId,start, the customer,pay). For an appointment with options or add-ons, pass the option'sadmissionIdand the pickedaddOnsfromofferings.bookabletoofferings.times,offerings.reviewandofferings.book, so the times fit the whole length. A scheduled session is booked withofferings.enroll(admissionId,sessionIds). LeaverequestIdout; Allpage makes one. - Run sessions with
offerings.sessions,offerings.roster,offerings.changeSession,offerings.assignStaff,offerings.callOffSession(waits for the owner's confirmation),offerings.markAttendanceandofferings.checkIn. Change a running schedule withofferings.editPattern. Block time off withresources.block. - A customer's booking through an agent never carries a card step. When something is due now, the booking answers
status: "held"withpayAt(the business's own pay page, which the business has already emailed or texted the customer) andholdUntil. Tell the customer to pay from that email or text. Unpaid byholdUntil, the place is released. integrations.connectonly gives the owner a link to connect Google Calendar: pass it on.- Automations:
playbook.templateslists them,playbook.enableturns one on.
The offerings.setup and offerings.run skills have the details.