
Stay updated
Stay informed and see how CaptainBook evolves to deliver smarter
v25.11.0
Captainbook v25.11.0
New
Add a monthly calendar widget to embed a month of sessions on your site
A new embeddable widget shows a full month of available sessions across all your products in one grid. Customers pick a date and time, choose quantities,and pay through your existing checkout. It matches your brand colours and respects your seat-availability and discount settings.
Add custom fields to availabilities, with optional default values
You can now define custom fields on availabilities — the same way you already can on bookings, customers and resources — and edit them per time-slot, show them on the calendar, and drive workflows from them. Any custom field (on any record type) can now also have a default value that pre-fills when no value is set.
Improved
View an experience's location in Google Maps from the booking widget
The location map on the booking widget now loads faster and lighter, and adds a "View on Google Maps" link so customers can open the full map to zoom, pan, and get directions.
Fixed
Franchise accounts are no longer billed for booking fees collected on their own Stripe account
Franchise operators were seeing commission line items on their Captainbook invoice for booking application fees that are actually collected on their own connected Stripe account. Those line items are no longer created.
Scanning an already checked-in ticket now shows a clear message
When you scan a ticket that has already been checked in, the app now tells you it was already checked in instead of silently re-validating it. The original check-in time and guest are preserved. Tickets marked as a no-show can still be checked in if the guest turns up.
Fix billing page error for accounts with add-on subscription items
The subscription/billing page could fail to load for accounts whose plan included an add-on (such as extra resources). It now displays the base plan price correctly instead of erroring.
Show the German flag in the language picker
The language picker showed a broken image for German. It now displays the German flag like the other languages.
Trip reminder emails show the correct amount for staff who only see their own bookings
Staff who are only allowed to see their own bookings used to receive the trip reminder email showing the money paid/total for the entire experience, including other people's bookings. The reminder now shows only the amounts for the bookings assigned to them.
Reservation hold countdown no longer shows "Expired" too early in the mobile app
Held reservations now report their expiry as an absolute UTC time, so the mobile app's countdown reflects the real remaining time. Previously the hold could appear to expire 2-3 hours early and read as "Expired" while it was still valid.
Product search now ignores letter case
Searching for a product when setting up a triggered notification now matches regardless of capitalization, so "sunset" finds "Sunset Tour".The same fix applies to the product picker, the bookings table search, and the mobile app product search.
Sold-out session times are now greyed out and struck through
When a day has several sessions and some are fully booked, the sold-out times are now struck through and dimmed instead of looking bookable. Still-available sessions stay selectable, and the "Join Waitlist" button on a sold-out slot stays fully visible.
Booking a time slot that just filled up now shows a clear message instead of a generic error
If a time slot sold out or closed between the moment the calendar was shown and the moment a customer clicked it, they now see a short "this time is no longer available, please choose another" message and the list refreshes, instead of a generic failure.
v25.10.0
Captainbook v25.10.0
New
Price private experiences by total group size, not per person
You can now set one total price per group size for a private experience
(e.g. 2 people = €500, 3 = €600, up to a 6–10 band) instead of a per-person
rate. This avoids awkward per-head prices like €133.67. The whole group is
priced from the size you book.
Embedded product pages can auto-resize to fit their content
If you embed your product page in an iframe on your own website, it can now
resize itself to fit its content as visitors browse, so there's no inner
scrollbar or empty space. Add the one-line listener snippet (in the PR's
"How to test") to the page hosting the iframe.
Improved
Show more text in pricing category descriptions
Pricing category descriptions on the product page now display up to seven lines before being truncated, instead of five, so longer descriptions read more completely.
See which fields need fixing at a glance with red-highlighted validation errors
When you submit a product or schedule form with missing or invalid fields, those inputs now show a red border so you can immediately see what needs correcting — no more hunting through error messages to find the right field.
Fixed
The by-date view's back arrow can now return to today
On the date-by-date availability view, the back arrow now correctly steps
back to the current day even later in the day, so customers can still reach
today's remaining time slots. Previously the arrow did nothing once the day
had started.
Clearing a schedule's min/max age now saves correctly as empty
When you cleared the Min age or Max age on a schedule, it was incorrectly
saved as 0 instead of being left empty. Cleared age fields now correctly
store no value, so a schedule with no age restriction no longer shows 0.
Card processing fees now show in the booking's currency
When a card payment is taken in one currency but paid out in another, the
Stripe processing fee shown on the booking is now displayed in the booking's
currency instead of the payout currency, so the figure matches the amount paid.
Keep "spots left" counts accurate under high-volume channel bookings
After a burst of channel bookings or cancellations (notably GetYourGuide), an
availability could show more spots than were actually open, because the
remaining-seats count lagged the real bookings. It now recalculates from the
live bookings, so the count stays correct and overbooking is avoided.
v25.9.5
Captainbook v25.9.5
New
Show pricing-category subtitle and description on mobile wallet passes
Mobile passes (Apple Wallet & Google Wallet) now display the subtitle and description from the pricing category each ticket belongs to. For example, an "Adults" ticket will show its own copy, distinct from a "Children" ticket. Text is automatically translated to the customer's language.
Send custom messages to guests through their Apple Wallet pass
Operators can now send personalised lock-screen messages to guests who have added their booking pass to Apple Wallet. Open a booking, compose a short message, and it appears on the guest's lock screen — great for last-minute meeting-point changes, weather alerts, or welcome notes.
Fixed
Notification settings now save correctly from the mobile app
Changing your notification preferences in the mobile app now reliably saves, including for notifications you had never customised before. Previously some toggles silently did nothing.
Contract PDFs now show each guest's own details, not the booker's
When a contract template used guest fields (name, email, phone, country), it filled them with the person who made the booking instead of the guest signing that copy. Those fields now pull from each guest's own answers to your per-guest questions. If a product has no matching per-guest question, the field is left blank rather than showing the booker.
v25.9.4
Captainbook v25.9.4
Fixed
Payment notifications now go only to staff in the booking's business unit
The "New payment received" alert used to reach every team member with finance access across all business units. It now goes only to people assigned to the business unit the booking belongs to, so staff stop seeing payments that aren't theirs.
Card charges taken in the app now record the correct booking fee
When a card payment was taken from the mobile/back-office app for certain legacy accounts with white label configuration, the booking's platform fee was recorded at 100x its real value (e.g. showing $480 instead of $4.80 on the payment summary) and was charged again on each balance payment. Fees are now recorded correctly and collected once across the whole booking.
v25.9.2
Captainbook v25.9.2
Fixed
Workflow booking filters no longer error on empty date conditions
Workflows that find bookings by an "is empty" or "is not empty" date filter
(such as cancellation date) now run correctly instead of failing. The error
only affected date, number, and yes/no fields.
Booking notification emails now send for marketplace bookings with a removed reseller agreement
Marketplace bookings whose reseller agreement had been removed could
silently fail to send the "Booking received" and "Payment confirmed"
emails. These notifications now send reliably.
v25.9.1
Captainbook v25.9.1
Fixed
Auto-apply discount overlap check now considers selected products
The overlap warning when creating auto-apply discounts no longer triggers for discounts assigned to different products. This prevents false-positive warnings when you have multiple auto-apply discounts targeting separate products.
Fix crash on embedded checkout when booking becomes unavailable mid-checkout
When a booking became unavailable during checkout, the page could crash with an error instead of handling the situation gracefully. This is now fixed.
v25.9.0
Captainbook v25.9.0
Fixed
Keep your account accessible while a failed renewal payment is being retried
If a subscription renewal payment fails, you now keep full access to your account while the payment is retried, instead of being locked out immediately. This gives you a window of 15 days to pay
v25.8.0
Captainbook v25.8.0
New
Accept or refuse bookings before the customer is charged
Turn on "Bookings require your approval" on any product to switch its checkout flow to an authorize-now, decide-later model. The customer's card is held but not charged. You see the request in the bookings feed with a "Decide in …" countdown, and accept or refuse from the booking details panel. Funds are captured on accept; the hold is voided on refuse. Customers get reason-specific emails on each path (received, refused, hold expired, capture failed).
Fixed
Booking confirmation page no longer errors while waiting for payment to confirm
Customers on the booking confirmation screen could hit an error in certain cases while the page waited for their payment to be confirmed. The page now reliably forwards them to the operator's thank-you page once payment completes.
v25.7.0
Captainbook v25.7.0
New
Charge only the deposit when finalising a booking
When finalising a booking whose product has a deposit, you can now tick
"Charge only the deposit" on the in-person card or offline/MOTO card sections.
It charges the difference between the deposit and what's already been paid,
instead of the full balance, so you can take a deposit over the phone or in
person and collect the rest later.
Require customer email or phone on agency widgets
You can now require the customer's email and/or phone number on each agency widget, set per widget in the widget's Customise tab. Useful when you need to contact the end customer directly rather than the agency. Both fields stay optional by default.
Fixed
Cancel reservations from the mobile app again
Cancelling a reservation that has no payments from the mobile app no longer
fails with an authorization error. Staff with cancel permission can now cancel
these bookings as expected.
Fix widget checkout and tracking errors for businesses whose name contains an apostrophe
Businesses whose name (or a product/list title) contained an apostrophe or quote
could break the embedded booking widget: the "update guests" link and analytics
tracking stopped working on the affected page. Names and titles are now handled
safely, so the widget works regardless of punctuation in the business or product name.
Stop showing an empty "Channel Policies" section to operators who can't use it
The "Channel Policies" panel on a direct widget and on the Marketplace channel page no longer appears for operators whose account doesn't have the channel policies feature, or who don't have permission to view policy rules. Previously it showed up as an empty section with a heading and no content.
Reopen concurrent availabilities when switching a resource on a manifest
When changing the resource assigned to a manifest, other availabilities sharing
that resource are now correctly reopened. Previously they could remain closed,
blocking bookings on unrelated availabilities.
v25.6.0
Captainbook v25.6.0
New
Charge your customers in Czech koruna (CZK)
You can now set Czech koruna (CZK) as your currency and take bookings, payments, and exports in it, the same way you already can with euros, zloty, and the other supported currencies.
Show the number of seats left on your booking widget
You can now choose, per widget, how seat availability appears to customers: the exact number of seats still available ("12 seats available"), the existing "Likely to sell out!" hint, or nothing at all. Pick it under "Seat availability display" in the widget editor.
Add subtitles and descriptions to your pricing categories
You can now give each pricing category a short subtitle and a longer description. They show up in the booking widget's guest selector, on confirmation, reminder and payment emails, and on PDF tickets, so guests get clearer context about what each fare includes.
Improved
Warn before changing a product's ticket type, and flag outdated tickets at check-in
Changing a product's ticket type now asks you to confirm first, telling you how many existing bookings will be reissued and reminding you that customers are NOT notified automatically. And if a customer shows up with a ticket that was reissued after such a change, the check-in app now tells you it was reissued and to ask for their current ticket, instead of a vague error.
Fixed
We no longer create duplicate subscriptions when a payment confirmation is pending
If you started a subscription but never finished the 3D Secure (2FA) prompt your bank required, or if a card charge failed, clicking Subscribe again will now finish the existing payment instead of charging you twice. A new "Complete payment" banner shows everywhere in the app whenever a subscription is awaiting payment, so you always know what to do next.
Fix the chat assistant failing to load on iPhone Safari
The embedded chat assistant could fail to open on iPhone Safari when the browser blocked storage inside the embedded window. It now loads reliably.
Fix the "Delete tenant" confirmation button staying disabled when the tenant name has stray whitespace
QR codes generate reliably across the dashboard
Generating or downloading a QR code for a folder, product, list, discount,
ticket, or promotional flyer now works everywhere. Previously the folder and
product QR code modal could fail to open.
Daily and hourly recurring schedule workflows can now be activated
Recurring schedule workflows set to run daily or hourly could not be saved or turned on — they were rejected with a "must have at least 1 items" error meant only for weekly/monthly schedules. They now activate correctly.
Checkout now respects a product's minimum number of guests
Bookings made through the embedded widget can no longer be reduced below the minimum number of guests the operator set on the product. The checkout now matches the product page, which already blocked it.
Discounted bookings no longer revert to full price when edited or rescheduled
A booking made with an automatic discount now keeps its discounted price when you edit the guest mix, change the schedule, or update it from the mobile app. Previously some of those actions reset the price back to the full amount, leaving the booking looking unpaid even though the customer had paid in full.




