Skip to content
Ajgori Technologies
All posts

OTA and travel tech 10 min read

How to connect multiple hotel suppliers to one booking engine

How to bring several hotel suppliers into one booking engine without duplicate hotels, confusing rates or slow search.

On this page
  1. Why agencies plan a multiple hotel suppliers integration
  2. Mapping the same hotel across suppliers
  3. Merging and ranking rates from each source
  4. Searching suppliers in parallel
  5. Keeping each supplier isolated when one fails
  6. Summary

To connect multiple hotel suppliers to one booking engine, you build a layer that sends each search to every supplier at the same time, matches the same hotel across their different lists, and shows the customer one clean set of results. The hard parts are hotel mapping, comparing rates fairly and keeping search fast when one supplier is slow. This guide explains how to plan a multiple hotel suppliers integration step by step.

A hotel supplier, in this context, is a company that sells hotel rooms to travel businesses through an API (a structured way for two systems to exchange data). Each supplier has its own hotel list, its own hotel IDs and its own way of describing rooms and rates. If you are planning a full travel platform, our OTA platform service page gives an overview of how we build them.

Why agencies plan a multiple hotel suppliers integration

A single supplier is simpler to build and run, so it is a sensible starting point. Agencies usually add more for practical reasons:

  • Coverage. No single supplier has every hotel in every destination. A second source fills gaps.
  • Price and availability. Different suppliers may hold different rates or rooms for the same hotel on the same night. More sources give you more chances to show a good option.
  • Resilience. If one supplier has an outage, you can still sell rooms from the others.
  • Negotiating position. When you are not tied to one source, you have more freedom in commercial discussions.

The cost is complexity. Every supplier you add brings its own contract, certification, error codes and data quirks. Plan the architecture for several suppliers from the start, even if you launch with one.

Deciding which kinds of source to combine comes first, and our comparison of hotel aggregator APIs and direct contracts covers that choice.

Mapping the same hotel across suppliers

Hotel mapping means working out that "Hotel A" in supplier one's list and "Hotel A" in supplier two's list are the same building. Without it, customers see the same hotel several times with slightly different names, which looks untidy and confusing.

  1. Create your own master hotel list. Give every hotel your own internal ID. Supplier hotel IDs are stored as links to your master record, never used as your main key.
  2. Import each supplier's static content. Static content is the information that rarely changes: name, address, coordinates, star rating, photos and facilities. Suppliers usually provide it as a separate download or API from live availability.
  3. Match automatically where you can. Compare coordinates, normalised names (lowercase, without words like "hotel" and punctuation), addresses and postal codes. Hotels that are very close together with very similar names are strong matches.
  4. Review uncertain matches by hand. Some cases need a person, such as two hotels in the same building or a hotel that changed its name. Build a simple admin screen for approving, rejecting and merging matches.
  5. Choose the best content for each hotel. Decide which supplier's description and photos to display, or combine them by rules you define. Customers should see one consistent hotel page.
  6. Keep mapping up to date. Suppliers add, remove and change hotels. Schedule regular imports and flag new unmatched hotels for review.

Mapping is ongoing work, not a one-time task. Budget time for it every month.

What to do with hotels you cannot match

Some hotels will not match anything, either because only one supplier sells them or because the data is too different to be sure. Treat them as separate hotels in your master list until someone reviews them. Showing a hotel once from a single supplier is always better than merging two different hotels by mistake, because a wrong merge can send a guest to the wrong building.

Keep a simple record of every manual decision, such as who approved a match and when. When a supplier later changes its data, this history helps your team understand why a hotel is mapped the way it is.

Our guide on how hotel supplier APIs work explains the static content and hotel IDs that mapping relies on.

Merging and ranking rates from each source

Once hotels are mapped, the same hotel can come back from several suppliers with different rooms and rates. You need rules for turning that into a clear choice for the customer.

  1. Normalise the rate data. Convert each supplier's room names, board types (for example room only or breakfast included) and cancellation policies into your own consistent format.
  2. Compare the total price. Compare what the customer will actually pay, including taxes and fees, in the same currency. Some suppliers return fees that are paid at the hotel; show these clearly and treat them consistently.
  3. Decide how to handle duplicates. When two suppliers offer what looks like the same room and board type, you can show only the best option or show both with clear differences such as cancellation terms. Either is valid, as long as it is consistent.
  4. Apply your markup after comparing net rates. Net rates are the prices you pay the supplier. Apply your markup rules once the comparison is done, so you compare like with like.
  5. Store which supplier each rate came from. When the customer books, the booking must go to the supplier that returned that rate, with the exact identifiers it provided.

Remember that most hotel suppliers need a rate check before booking, often called prebook. It confirms the rate, price and cancellation policy are still valid. Run it against the supplier that owns the chosen rate, and handle changes clearly.

Showing cancellation policies clearly

Cancellation policies are one of the biggest differences between suppliers, even for the same room. One rate may be free to cancel until a certain date, while a cheaper one may be non-refundable. Customers need to see this before choosing, not after paying.

  1. Convert every policy into the same structure. Store deadlines and fees in a consistent format, in the hotel's local time or clearly labelled.
  2. Show a short summary next to each rate, such as "Free cancellation until a set date" or "Non-refundable".
  3. Save the policy with the booking. Keep the exact policy returned at booking time, because suppliers may change it later and refunds should follow what the customer agreed to.

Flights raise a similar question of combining sources, covered in our comparison of GDS and NDC connections.

Searching suppliers in parallel

If you ask suppliers one after another, each search takes as long as all of them added together. Asking them at the same time means the search takes about as long as the slowest supplier you are willing to wait for.

In Laravel, the HTTP client can send several requests at once with a request pool. The example below sends one search to two suppliers and keeps only successful answers. The URLs and payloads stand for values from your own configuration.

use Illuminate\Http\Client\Pool;
use Illuminate\Http\Client\Response;
use Illuminate\Support\Facades\Http;

$responses = Http::pool(fn (Pool $pool) => [
    $pool->as('supplier_a')->timeout(8)->post($supplierAUrl, $supplierAPayload),
    $pool->as('supplier_b')->timeout(8)->post($supplierBUrl, $supplierBPayload),
]);

$results = collect($responses)
    ->filter(fn ($response) => $response instanceof Response && $response->successful())
    ->map(fn (Response $response, string $supplier) => HotelRateMapper::map($supplier, $response->json()));

HotelRateMapper stands for your own class that converts each supplier's format into yours. The check for a Response object matters because a supplier that cannot be reached returns an error object instead of a response.

A few practical points:

  1. Set a timeout for each supplier. Decide how long you will wait before showing results without that supplier.
  2. Cache results briefly. Filtering, sorting and paging should use cached results rather than new supplier calls.
  3. Search by your own hotel IDs. Translate your master IDs or destination into each supplier's IDs before sending the request.
  4. Watch your request allowances. Suppliers often limit how many searches you can make relative to bookings. Caching and sensible search rules help you stay within them.

Flight suppliers can be searched in parallel in the same way, and our guide on what a flight booking API is explains their main calls.

Keeping each supplier isolated when one fails

The biggest benefit of several suppliers disappears if one failing supplier can break your whole site. Build each connection so its problems stay contained.

  1. Give each supplier its own connector class. Each connector handles that supplier's authentication, formats and error codes, and returns results in your format.
  2. Treat a failed supplier as empty, not as an error page. If one supplier times out, show results from the others. Record the failure in your logs.
  3. Use a circuit breaker. A circuit breaker is a simple rule that stops calling a supplier for a short time after repeated failures, then tries again later. It protects your search speed and the supplier's system.
  4. Log per supplier. Record request, response, timing and errors for each supplier call, with sensitive data masked. You will need this for support, for billing questions and for each supplier's certification.
  5. Monitor each supplier separately. Alerts should tell you which supplier is failing, not just that "search is slow".
  6. Allow switching suppliers off. Add a setting in your admin panel to disable a supplier quickly, for example during their maintenance or a contract pause.

Testing with more than one supplier

Testing a multi-supplier engine means testing combinations, not just each supplier alone. Before launch, check at least these situations in each supplier's test environment:

  1. The same hotel returned by two suppliers, shown once with the right rates.
  2. One supplier timing out while the others answer.
  3. A rate that changes price or policy at the prebook step.
  4. A booking that fails with one supplier while the customer's search still shows the others.
  5. A supplier returning a hotel that is not yet in your master list.

Write these as automated tests where you can, using recorded supplier responses so the tests do not depend on test systems being available.

Flight integrations follow many of the same principles, including logging and careful handling of booking timeouts. Our guide on how to integrate a flight supplier API covers those in detail.

Summary

  • Keep your own master hotel list and link each supplier's hotel IDs to it.
  • Treat hotel mapping as ongoing work, with automatic matching and human review.
  • Normalise rates and compare total prices before applying your markup.
  • Search suppliers in parallel with per-supplier timeouts and short caching.
  • Isolate each supplier so one failure never takes down your search.

Adding suppliers one by one on a solid foundation is far easier than untangling a system that was built for only one. If you're planning to bring several hotel suppliers into one booking engine, you can tell us about it here.

OTA and travel tech

Related posts

OTA and travel tech

What it costs to build an OTA platform

What really drives the cost of building an OTA platform, module by module, plus the running costs that come after launch.

7 min read

Working on something?

Get in touch and tell us about it.