Draft preview. Not in the index, feed or sitemap.

How to build a booking platform: the hard part isn't the booking

The booking flow is the easy part of a booking platform, because payment providers and booking tools already do it well. The work is in making offers from different suppliers comparable, keeping the price and availability you show true until the money moves, and treating payment as a schedule with states. If you only sell your own time or rooms, buy a booking tool instead.

By The Spiral team Published 9 min read

How to build a booking platform, in short

To build a booking platform that sells other suppliers' stock, start with the data, not the calendar. Collect real offers from three suppliers and design one format they all fit, then one price calculation every page shares. Re-check price and availability at the moment of payment, and treat payment as a schedule with states. Build the booking flow last, because payment providers have already solved most of it.

This guide is for founders and operations leads at UK and EU companies planning a platform that puts several suppliers into one search. The suppliers might run tours, rent out venues or sell holiday packages. It's the kind of web application where the data model decides whether a second release is possible. If you only take bookings for your own business, the last section explains why a booking tool is the better buy.

We built Guidoo, an Albanian travel platform that puts holiday packages from licensed agencies across the country into one search. As its case study says, the hard part was not the booking flow. It was making packages from different agencies genuinely comparable. The rest of this guide follows from that sentence.

Most of a booking platform is already solved

On a typical feature list, most parts of a booking platform are solved problems you can buy or plug in. The parts that decide whether the platform works depend on your suppliers, and no tool ships them.

Most pages that rank for this question come from booking tools and website builders, written for a salon or a consultant taking appointments. For that job, a tool is the right answer. A platform that sells many suppliers' stock is a different job, and the table shows where the difference sits.

PartBuy or plug in?Where the real work is
Search and filtersStandard componentsMaking a filter mean the same thing for every supplier
AvailabilitySupplier systems and booking tools hold itKnowing how fresh each supplier's data is, and re-checking before payment
Checkout and card paymentA payment provider's hosted checkoutStates such as partly paid or a failed instalment
Confirmation emailsAny email serviceSending only after the payment provider confirms the money
Supplier onboardingPartlyGetting every supplier's offers into one format
AdminFramework admin panelsScreens built around the questions your team asks each morning

Why comparing offers from different suppliers is the hard part

Suppliers describe the same thing in different ways. A comparison is only honest when every offer uses the same units and the same meaning of "included".

Albanian holiday packages are sold agency by agency, so comparing them means calling around. Guidoo compares whole packages rather than raw flights and rooms, and prices flights, hotel, transfers and meals as one figure. The case study doesn't describe how the comparison works, so this section doesn't either. It describes the general problem any multi-supplier platform runs into.

Say three suppliers each offer a week in Crete. One quotes per person with breakfast, and another per room with half board. The third quotes per person, all inclusive, with airport transfers extra. Put those three prices side by side and the cheapest-looking trip may cost the most.

What suppliers sendWhat your platform has to decide
Prices per person, per room or per groupOne unit to show customers, and the rule that converts each supplier's price
"Half board", "breakfast and dinner", "HB"One list of meal plans, and who maps each supplier's words onto it
7 nights or 8 daysOne way to count a stay
Taxes and fees listed separately, or not at allA total that includes every compulsory charge
Nothing about transfersWhether "not stated" shows as not stated, instead of a guess
Cancellation terms in free textA few standard categories a customer can compare

The last two rows cause the most trouble. A comparison that fills missing data with a default looks complete and quietly misleads. Show the gap, and ask the supplier to fill it.

Once offers are comparable, something decides which one comes first, and the law watches that choice. In the EU, Directive (EU) 2019/2161 requires a site that ranks different traders' products to publish the main parameters behind the order. Paid placement has to be disclosed too. In the UK, the CMA made six hotel booking sites, including Booking.com and Expedia, say when commission affects their rankings in 2019.

Keeping price and availability true until payment

A search result is a snapshot. Re-check price and availability at the source at the moment of payment, and tell the customer about any change before you charge them, never after.

Between a customer's search and their payment, a supplier can sell the last room to someone else or change a price. Four rules hold up:

  1. Keep one price calculation. Every page that shows a price calls it, from search results to the confirmation email. Two pieces of code that each work out a price will one day disagree, and the customer will see it at checkout.
  2. Re-read the live price and availability just before you take the money, and if the supplier supports holds, place one for the few minutes the customer needs to pay.
  3. Let the database refuse double bookings. Where you hold the stock yourself, a check in code can lose the race when two people press pay at the same moment. The PostgreSQL documentation uses a reservation table as its example: an exclusion constraint rejects any booking whose dates overlap one already stored.
  4. Show the total up front. Every compulsory charge belongs in the headline price.

The fourth rule is also UK law. The CMA's 2019 action made those hotel sites put compulsory taxes and fees in the headline price and stop giving a false impression of availability. An "only two rooms left" badge has to be true.

Since 6 April 2025, the Digital Markets, Competition and Consumers Act has banned drip pricing: compulsory fees that appear partway through checkout. The CMA's price transparency guidance sets out what a headline price must include. In November 2025 it wrote to businesses in 14 sectors, holidays among them, about their online pricing.

Payments are a schedule with states

A booking can be paid, partly paid, overdue, refunded or disputed. Design those states, and what happens in each, before you design the checkout page. Each state needs its own screen and email.

Guidoo takes payment fully online, with instalments, in a market used to paying in person. Instalments turn one payment into a schedule, and every date on it can fail. Decide in advance what a failed instalment means: a reminder, a grace period, then cancellation under terms the customer agreed to. Suppliers need the same answer, because it decides when they get paid and when they can sell the place again.

Let the payment records drive the booking's status. Store every payment event as its own entry, refunds and failures included. Work out "paid in full" from those entries instead of ticking a box by hand. A refund is then a new entry, and the history explains every change to a booking.

Stripe's documentation adds two rules:

  • Confirm the booking when the provider tells your server the payment succeeded, not when the customer reaches the thank-you page. Stripe warns that a customer can pay and lose their connection before that page loads. The code that confirms an order may also run more than once for the same payment, even at the same moment.
  • Make payment requests safe to repeat. Stripe's idempotency keys let your system retry after a network error without charging the customer twice.

Instalments come in two shapes. Paying the balance before the trip is a deposit and a schedule. Travelling first and paying later is credit, and in the UK, buy now, pay later lenders have needed FCA authorisation since 15 July 2026. Know which shape you're offering before anyone designs the flow.

The payment page is also where a customer decides whether to trust you. Say who they're paying, what happens if the trip is cancelled, and how to reach a person. Guidoo's support is in Albanian, because that's who the platform serves.

Selling a bundle can make you answer for all of it

In the EU and the UK, travel services sold together at one total price usually form a package. The package's organiser answers for every part of it, so if your platform bundles, find out who the organiser is before you design the checkout.

The EU's Package Travel Directive has several tests for when two or more travel services for the same trip form a package. One is that they're "offered, sold or charged at an inclusive or total price". The organiser is responsible for every service in the package, whoever performs it. The UK's Package Travel and Linked Travel Arrangements Regulations 2018 use the same test.

Flight-inclusive packages sold to UK customers also fall under the CAA's ATOL rules, wherever the flight departs and wherever the seller is based.

Whether the organiser is your platform or each supplier changes the contract, the confirmation the customer receives and the refund flow. Take advice from a travel lawyer in each market you sell to. This section is a map, not legal advice.

What to build first

Build in the order the risks appear. The offer format comes first and the admin comes last:

  1. The offer format. Collect real offers from at least three suppliers and design one format they all fit. Test it by putting the three side by side.
  2. One price calculation, with every compulsory charge in the total.
  3. Payment states, each with a written policy: failed instalment, cancellation, refund, dispute.
  4. The booking flow, on your payment provider's hosted checkout where you can. Design the unhappy screens too: no results, sold out since you searched, payment declined.
  5. An admin built around the questions your team asks each morning: which bookings are waiting on a supplier, which instalments failed, which offers changed price.

Our web applications page makes the point that most applications fail on the second release rather than the first. The data model was drawn for the demo, then reality arrives. In a booking platform, reality is the fourth supplier, whose offers don't fit the format the first three agreed on. For what belongs in a first release and what can wait, see our guide to what an MVP should include.

When you shouldn't build a booking platform

If you only sell your own time or rooms, buy a booking tool. Build only when the platform's value comes from bringing several suppliers together in a way no tool does. Skip the build in any of these cases:

  • You take appointments or reservations for your own business. Scheduling tools such as Calendly, SimplyBook.me and Square Appointments do this for a subscription.
  • A booking system already works, and the problem is the website in front of it. Two of our own projects made that call. For Shkodra Shore, a villa on Lake Shkodra, and Pelikani Kacurrel, a restaurant in Zogaj, the site hands guests to the booking system already in use. Our guide to custom software vs off-the-shelf explains the reasoning.
  • You haven't signed suppliers yet. Take the first bookings by phone and a spreadsheet. The offers suppliers really send become your specification.
  • A marketplace builder fits your listings as they are. Check that it can model your comparison and export your data before you commit.

If you can't tell whether you need an application at all, our guide to web apps vs websites sets out the difference.

Try the comparison before you ask for a quote

Before you ask anyone for a quote, collect three real offers from three suppliers, in whatever form they arrive. Put them in one table with one price per person, one meal plan and one set of cancellation terms. Every cell you have to phone someone to fill is work the platform will have to do. Send that table with your brief, and any studio, us included, can quote the real job instead of the calendar.

Questions

Can the platform connect to our suppliers' systems automatically?

Only where a supplier offers an API or a data feed, and many small suppliers don't. A common pattern is a supplier portal where they enter offers in your format, plus imports for the few who have feeds. Check each supplier's data before you promise customers live availability. The platform can only be as current as its slowest supplier.

Should we start with a marketplace builder instead of custom software?

Often, yes, to test demand. Marketplace builders such as Sharetribe handle listings, calendar bookings and payments for a subscription. Before you commit, check whether it can model your comparison and your payment rules. Check too that you can export your data if you outgrow it. If the comparison is what makes your platform different, that is the part you will eventually build.

Who owns the platform once it's built?

You should. When we build, the code, repository, hosting account and documentation sit in your own accounts and move to you at handover. Ask the same of anyone who builds for you, and check that the payment provider account is in your company's name too. That account holds the money and the customers' payment records.

How we wrote this: drafted with AI, then checked and edited by the people who build our projects. Figures come from our own work or from the linked sources.

Tell us what is slow

Describe the project, or the part of the business that still runs by hand. You will hear back within one business day, from the people who would build it.

info@thespiral.studio