For saunas & wellness bathhouses
Booking software for saunas and wellness bathhouses on Shopify
A sauna seats a number of bodies and not one more. CapFlow Booking sells that number per session through your existing Shopify checkout, with local pass holders recognised at the point of booking and towel hire offered on the way to the cart.
The way it actually goes wrong
A coastal badstue with one 34-seat sauna and a cold plunge runs hourly sessions from 07:00 to 21:00, plus two aufguss ceremonies a day. The obvious way to sell them on Shopify is a product per session with inventory set to the number of places.
Shopify stock sits on a product, not on an hour, so a bathhouse running fourteen sessions a day is maintaining close to a hundred variants a week by hand. One Saturday the 18:00 aufguss is set up as a copy of the 17:00 and the cap is never changed from the old 40. Forty tickets sell. The gus master has counted the benches, because that is the job: three tiers, 34 places, towels laid out. Six people who paid have nowhere to sit, and the ceremony cannot simply run a bit longer to fit them in.
The number goes on the schedule rather than on a hundred products. Write one weekly rule for the main sauna (daily, 07:00 to 21:00, on the hour, 34 places) and CapFlow Booking generates the whole season from it, every session carrying 34 whether or not anyone remembers. The 34th booking closes the session. The 35th customer sees it as full before they reach the cart, and the last place cannot be sold twice because holds during checkout are atomic.
Bench places, not a vague capacity number
Each sauna schedules on its own rule with its own number: 34 in the main room, 12 in the small smoke sauna. Every session a rule generates carries that number, and the widget will not sell past it.
Locals and visitors share the same benches
Hold part of each session for annual and monthly pass holders, and put the rest on public sale. Unclaimed member places release to everyone a set number of hours before löyly.
Towel hire sold with the session
A session can carry one per-person add-on, so put your hire there and sell it during the booking flow rather than at the desk while a queue forms in the changing room. It goes through the same Shopify cart as the session itself.
Full-moon sauna and championship nights
One-off events carry their own capacity, price and access rules, and they block the room. A ceremony night and an ordinary drop-in session cannot be sold into the same sauna at the same hour.
A short code at the door
The check-in dashboard lists today's arrivals with a booking code like gold-rose-0427, so whoever is on the desk can tick people off without opening Shopify admin, and no-shows are recorded.
Occupancy per hour, not per guess
See fill rate by session time, the pass holder versus public split, and peak hours, with CSV export. If the 07:00 runs at 30 percent and the 18:00 turns people away, you will know within a fortnight.
Why a sauna is not a treatment room
Booking apps built for spas assume a room and a therapist: one guest, one hour, one bed. A public sauna is the opposite. The session runs whether four people or thirty-four turn up, nobody is booking a named member of staff, and the only number that matters is how many bodies fit on the benches.
That number is unusually hard. A treatment room can sometimes take a plus-one on a chair. A sauna cannot. Three tiers of bench are a fixed length, everyone needs space to sit or lie without touching a stranger, and during löyly the top tier is not a place you can politely squeeze into. When an aufguss master says 34, they mean 34.
CapFlow Booking starts with the bench count. The main sauna, the small smoke sauna and the plunge area, if you sell it separately, are each a resource carrying its own number of places, and the opening hours are a rule written against that resource rather than a diary kept beside it.
What a bathhouse setup looks like
| CapFlow concept | In sauna language |
|---|---|
| Resource | Main sauna (34), smoke sauna (12) |
| Service | Drop-in session, aufguss ceremony, morning plunge |
| Schedule | Sessions on the hour, as weekly rules |
| Timeslot | One session on one day |
| Capacity pool | Places held for pass holders vs. visitors |
| Membership | Annual pass, monthly pass, ten-session clip card |
| Event | Full-moon sauna, aufguss championship night |
| Add-on | One per-person extra per session, usually towel hire |
Sessions start on the hour, which suits a schedule built from weekly rules. Write the rule once and CapFlow Booking generates the whole season, then edit the rule when the winter timetable starts rather than rebuilding a hundred products. Sessions the edit removes take their bookings with them, cancelled and emailed, so change a live season deliberately rather than as a tidy-up.
Locals and tourists on the same benches
The commercial problem with a good sauna is that its two audiences want the same seats. Locals buy an annual pass in October and expect a place on a Wednesday evening. Visitors arrive in July, book once, pay full price, and are worth more per session.
CapFlow Booking splits each session into a member pool and a public pool. Membership comes from Shopify customer tags, which is how you already segment those people for email, so a pass holder booking a session takes their reserved place without going through payment, while a visitor books the same session at your public price through the normal checkout. Both bookings count against the same 34.
Holding member places permanently would waste them on the quiet nights. The auto-release window is the compromise: held until a set number of hours before the session, then open to anyone. Set it to three hours and a Tuesday ceremony that locals have not claimed fills with people who walked past the harbour that afternoon.
Ceremonies, and selling the towel with the ticket
An aufguss championship night or a full-moon session is not part of the weekly rhythm. Events handle that: their own capacity, their own price, their own access restrictions, and they block the sauna so an ordinary drop-in session cannot be sold into the same room at the same hour.
The other easy money is hire. Towels, robes and sauna hats are the classic upsell, and the worst place to sell them is at the desk while ten people are waiting to get changed. A session can carry one per-person add-on, which appears during the booking flow and lands in the same Shopify cart, so your normal payment providers, gift cards, discount codes and refunds all behave as they do for a bag of birch whisks. One add-on, though, so pick the thing people actually forget. Usually the towel.
Multi-session and consecutive bookings
Some guests want two hours: sauna, plunge, sauna again. Multi-slot booking covers the case where a customer books several consecutive sessions in one go, with the server checking the sessions really are back-to-back before it prices them, rather than trusting the browser.
Honest limits
What a bathhouse will miss, in the order it tends to come up:
- No custom booking fields. There is no place to ask about health conditions or to collect a signed condition of entry on the booking form.
- No waitlist. A full session is full, with no automatic queue.
- No deposits. Sessions are paid in full at checkout, or not at all.
- Rescheduling keeps the session details fixed. Guests and staff can move the same booking to another available time. A different session type, duration, party size, or resource still means cancel and rebook.
- No SMS. Email only, under your bathhouse’s name.
- No Shopify POS integration. Walk-in sales at the desk stay in whatever you use today, and are not counted against the session capacity.
- No buffer time between sessions. If you need twenty minutes to air the room, build it into the schedule by starting sessions on the hour with a shorter service duration.
- No multi-location. One installation covers one site.
None of that is on a roadmap we would ask you to trust. If one of those lines is the thing standing between you and a decision, the comparison pages name the app that has it.
Questions from sauna & wellness
Can I cap a session at the number of places on the benches?
That is the core of it. The capacity goes on the weekly rule that fills the sauna, every session that rule generates carries it, and the booking widget stops at the number. Holds during checkout are atomic, so two people racing for the last place cannot both succeed.
How do annual passes for locals work?
Sell the pass as a normal Shopify product. It applies a customer tag, CapFlow Booking reads that tag and treats the holder as a member, so they book into the reserved part of the session without paying again. Monthly passes and clip cards work the same way.
Can I run gender-separated hours?
Yes, as separate services on the same resource, scheduled at different times by weekly rule. Women's hours on Monday mornings and mixed sessions the rest of the week is a schedule question, not a special feature.
Is there a waitlist when a session is full?
No. When the benches are sold, the session shows as full and there is no queue that promotes people automatically if someone cancels. Freed places simply return to sale, and pass holders who did not claim their place release it at the auto-release window.
Can guests move themselves to a later session?
No, and nor can your staff. Guests can cancel their own booking from the link in the confirmation email, with your cancellation fee rules applied, but moving someone from the 17:00 to the 19:00 is not supported: that booking has to be cancelled and a new one made.
Do you send an SMS before the session?
No. Everything goes out by email, under your bathhouse's name: the confirmation, the reminder before the session, and the cancellation notice. You set the name that appears, though not the address it is sent from, which stays CapFlow's. There is no text message anywhere in the product, which is worth knowing if your guests are used to a text on the morning of their booking.
Try it on your own schedule
Free plan, no time limit. Billing runs through Shopify if you upgrade.
Install free on Shopify