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.
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.pyreproduces 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 |
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
- Open the hotel on Google Hotels and look at the whole price list, not the first logo.
- Skip comparing Expedia vs Hotels.com vs Orbitz vs Travelocity: they're almost always the same price.
- 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
}
# 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()})
Schedule it daily and you have a rate-shopping tracker.


Top comments (0)