Guide
How to stop double-bookings for tours and charters
Why tour and charter operators get double-booked, the four fixes that work, and how a booking system can refuse an overlap before it is confirmed.
A double-booking is two confirmed reservations for the same boat, guide or van at the same time. One of those guests gets a refund and an apology, and often leaves a review about it. Most double-bookings come from a handful of causes, and each has a fix.
Where double-bookings come from
- More than one calendar. Phone bookings go in a notebook, walk-ins go on a whiteboard, and online bookings live in the booking system. Someone has to copy them across, and sooner or later someone doesn’t.
- Channels that sync late. A reseller or marketplace that updates its availability every few minutes can sell a slot that was booked directly in the meantime.
- Two guests checking out at once. Many systems check that a slot is free, then save the booking a moment later. If two guests do this at the same moment, both checks pass before either booking is saved.
- Counting tours instead of resources. A sunset cruise and a fishing charter can be two different products that need the same boat. If the calendar tracks the products and not the boat, both can be sold for 6 pm.
Four fixes that work
- Keep one calendar that every channel books into. Phone, walk-in and online bookings all go into the same system, as they happen.
- Book the resources, not just the time slot. Tell the system what each product needs, such as the boat and a captain, and let it check that every one of them is free.
- Hold the slot while the guest pays. A slot a guest is paying for should not be offered to anyone else until that payment finishes or times out.
- Make the overlap impossible to save. A database can enforce this directly. PostgreSQL’s exclusion constraints refuse to store two rows that overlap on the columns you name, such as the same boat and overlapping times. The second booking is rejected at the moment it is saved, so there is nothing to reconcile afterwards.
How Slate does it
Every Slate booking and every checkout hold is stored against the resource it uses, and the database refuses to store two that overlap for the same resource. Two guests racing for the last seat cannot both get it: one booking is saved and the other is told the slot is gone, before any money moves. This is on every Slate plan, including the free one.
Questions to ask any booking system
- Do phone, walk-in and online bookings all go into the same calendar?
- Can one product need several resources, and does the system check all of them?
- Is a slot held while a guest is paying?
- What happens when two guests book the last seat at the same moment?
Sources
- PostgreSQL 18 documentation: Exclusion constraintsaccessed
- Slate pricing: what every plan includesaccessed
- How Slate worksaccessed
Questions
Can two guests book the same seat at the same moment?
On a system that checks availability and then saves the booking as two separate steps, yes: both checks can pass before either booking is saved. A database constraint closes that gap, because the second save is refused.
Does a slot held during checkout count as taken?
In Slate, yes. While a guest is paying, the slot is held, and another guest cannot book it until the hold is confirmed or expires.
Does double-booking protection cost extra on Slate?
No. It is part of every Slate plan, including the free one.
Take bookings you can actually trust.
We move your calendar across with you, so nothing goes live until it matches what you already run.