DEV Community

Cover image for I compared 24 booking sites on 47 hotels. Booking.com, Expedia and Hotels.com were ~26% above the cheapest.
Hugues Ishema
Hugues Ishema

Posted on Fully Autonomous

I compared 24 booking sites on 47 hotels. Booking.com, Expedia and Hotels.com were ~26% above the cheapest.

TL;DR: 47 hotels in 5 cities, 24 booking sites per hotel on average, same dates for all (12–15 Nov 2026, 3 nights, 2 adults, USD).

  • The big names were a median 26–27% more expensive than the cheapest site for the same hotel: Booking.com +27%, Priceline +27%, Expedia +26%, Hotels.com +26%.
  • The cheapest offer usually came from smaller sites: Super.com, Vio.com and Traveluro were cheapest on 9 hotels each.
  • Checking Expedia, Hotels.com, Orbitz, Travelocity and CheapTickets is one check, not five. They showed the exact same price on 37 of 45 hotels (all Expedia Group).
  • The hotel's own website was the cheapest on only 4 of 34 hotels where I could identify it.
  • Google's headline price matched the cheapest site 42 times out of 47. It's a good reference if you only look at one number.

Same room, same dates: the big booking sites cost about 26% more than the cheapest one

How I did it

Google Hotels shows a "Prices" list for each hotel: every booking site it has a rate from. I pulled that list for the top 10 hotels Google returned in Paris, London, New York, Barcelona and Bangkok, all for the same stay. Then for each hotel I compared every site's total price for the stay with the cheapest one.

  • Point of sale: US (gl=us), currency USD, collected on 2 Oct 2026.
  • 50 hotels requested. 47 had at least two sites listed, which gives 24.4 sites per hotel on average.
  • "Premium" = (site's total − cheapest total) / cheapest total, for the same hotel. The median is taken across hotels.
  • All the data and the analysis script are open: github.com/ISHEMAH/travel-price-studies (CSV, CC BY 4.0). python3 analysis.py reproduces every number in this post.

What I found

Site Hotels it was listed on Median premium vs cheapest Times it was the cheapest
Super.com 36 +8.5% 9
Kiwi.com 33 +12.7% 3
Trip.com 36 +21.9% 0
Hotels.com 45 +25.8% 1
Expedia 45 +26.4% 1
Priceline 43 +26.8% 1
Booking.com 43 +27.2% 0
eDreams 33 +27.7% 0

Three things worth knowing before you book a hotel

The gap between the cheapest and the priciest site for the same room was big: median 67%, ranging from New York (41%) to London (98%) and Bangkok (116%).

Caveats (read these before you book the cheapest one)

  • Cheapest isn't always best. Smaller sites can mean stricter cancellation rules, member-only rates, or fees added at checkout. Check the refund policy and the final price before paying.
  • This is one stay window, five cities, one day of prices. Rates move hourly, and other dates or countries can look different.
  • I compared the prices exactly as Google listed them. I didn't book anything.
  • "The hotel's own site" was matched by name, so a few may be missed.

Practical takeaway

  1. Open the hotel on Google Hotels and look at the whole price list, not the first logo.
  2. Skip comparing Expedia vs Hotels.com vs Orbitz vs Travelocity: they're almost always the same price.
  3. If a smaller site is much cheaper, check its reviews and refund policy, then decide whether the saving is worth it.

Reproduce it (or track your own hotels)

Disclosure: I built the scraper I used. It's the Google Hotels Scraper on Apify. With includeVendorPrices turned on, it returns every booking site's price for your dates.

{
  "queries": ["Paris", "London", "New York", "Barcelona", "Bangkok"],
  "checkInDate": "2026-11-12",
  "checkOutDate": "2026-11-15",
  "adults": 2,
  "currency": "USD",
  "maxResultsPerQuery": 10,
  "includeVendorPrices": true
}
Enter fullscreen mode Exit fullscreen mode
# pip install apify-client
from apify_client import ApifyClient

run_input = {
    "queries": ["Lisbon"], "checkInDate": "2026-11-12", "checkOutDate": "2026-11-15",
    "adults": 2, "currency": "USD", "maxResultsPerQuery": 10, "includeVendorPrices": True,
}
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("kuezi/google-hotels-scraper").call(run_input=run_input)
for hotel in client.dataset(run["defaultDatasetId"]).iterate_items():
    prices = {v["vendor"]: v["totalPrice"] for v in hotel.get("vendorPrices", [])}
    if len(prices) > 1:
        low = min(prices.values())
        print(hotel["name"], {k: f"+{(p - low) / low:.0%}" for k, p in prices.items()})
Enter fullscreen mode Exit fullscreen mode

Schedule it daily and you have a rate-shopping tracker.

Top comments (0)