Google Hotels Prices Scraper: Price Comparison of Booking Sites
Pricing
from $0.80 / 1,000 hotels
Google Hotels Prices Scraper: Price Comparison of Booking Sites
Hotel scraper and hotel price API for Google Hotels: nightly rates by city and dates (stars, rating, GPS, link), or every booking site's price for given hotels (Booking.com, Expedia, official site) with a daily price calendar. No browser or proxies. Pay per hotel.
Pricing
from $0.80 / 1,000 hotels
Rating
0.0
(0)
Developer
PlainRows
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
Get Google Hotels prices for any city and dates: nightly rate, estimated stay total, star class, guest rating, reviews count, GPS coordinates, photo and Google Hotels link for every hotel. Type a destination (Paris, France), pick dates and guests, and get up to 140 hotels per search as clean JSON, CSV or Excel.
New: price comparison mode. Give hotel names (Hyatt Regency Lisbon), hotel IDs or Google Hotels links and get, for each hotel, the price of every booking site Google lists (Booking.com, Expedia, Agoda, the hotel's own website...) for your dates, plus a daily price calendar for the coming months, in one row per hotel.
It calls a commercial travel data API instead of driving a browser: results in seconds, no proxies, no blocked runs, no Google account. You pay only per hotel returned, plus a small fee per results page fetched (see Pricing).
Typical uses
- Hotel price tracking: schedule a daily run on your city and dates and follow the price of each hotel (
hotelIdis stable). - Revenue management and rate shopping: see where your hotel's price sits against every competitor of the same class.
- Travel apps and AI agents: give an assistant live hotel prices for "3 nights in Lisbon next month for 2 adults".
- Market research and price indexes: average nightly price by city, star class or date, cheapest hotel per city (
sortBy: lowest_price). - Automations: send the results to Google Sheets, Airtable, a database or Slack with n8n, Make or Zapier.
What you get for each hotel
| Field | Description |
|---|---|
name, hotelId, propertyType | Hotel name, Google hotel identifier (stable across runs), hotel or vacation_rental |
pricePerNight, currency | Lowest nightly price Google shows for your dates and guests |
priceBeforeDiscount, discountText | Deal information when Google shows one, e.g. "33% less than usual" |
estimatedTotalPrice | pricePerNight × nights (calculated, not quoted by Google) |
checkIn, checkOut, nights, adults | The stay the price is for |
hotelClass | Official star class 1 to 5 (null when Google shows none, e.g. many hostels and rentals) |
rating, reviewsCount | Average guest rating out of 5 and number of reviews |
latitude, longitude | GPS coordinates |
imageUrl, imagesCount | Main photo and number of photos |
googleHotelsUrl, searchUrl | Hotel page on Google Hotels and the Google Hotels search with your dates |
freeCancellation | true when you used the free-cancellation filter, otherwise null |
rank, destination, observedAt | Position in the results, the destination searched and when (UTC) |
Missing values are always null, never guessed. Each hotel appears once per destination.
Price comparison mode: every booking site + a price calendar
Fill in hotels instead of destinations, one per line: a hotel name with its city (Hyatt Regency Lisbon), a Google hotel ID from the hotelId column of a search run, or a link such as https://www.google.com/travel/hotels/entity/ChoIy_fo59Ha34akARoNL2cvMTFmeTVnazZ0YxAB. A name is first looked up on Google Hotels; the hotel found is checked only if its name contains every word you typed (accents and case ignored; words such as hotel or the don't count; local and English city names such as Lisboa / Lisbon or Wien / Vienna are the same), otherwise nothing is checked (found: false, reason: hotel-not-found): type the name as Google shows it (Hotel Adlon Kempinski Berlin). The same hotel entered twice is checked once (reason: duplicate); an ID Google refuses gives reason: invalid-hotel-id and the run goes on. By default (speed: "standard") each hotel waits in the data provider's queue (about 10-20 seconds when measured, longer at busy times) at no extra fee; speed: "fast" answers in seconds for a small extra fee (handy for AI agents). Each hotel gives one row:
| Field | Description |
|---|---|
lowestPrice, lowestPriceSite | Cheapest booking site for your dates |
officialSitePrice | Price on the hotel's own website, when Google lists it |
highestPrice, sitesCount | Price spread and number of sites with a price |
sites | Every site, cheapest first: site, price, officialSite, freeCancellationUntil, domain, url |
priceCalendar | Lowest price per night from the check-in date, over priceCalendarRange (month, three_months, six_months, year; with year, Google returned about 280-290 nights on 2026-10-09) |
calendarLowestPrice, calendarLowestPriceCheckIn | Cheapest night in the calendar and its date |
name, hotelClass, rating, reviewsCount, address, latitude, longitude | Hotel details |
query, hotelId | What you entered and the Google hotel ID (reuse it to skip the name lookup) |
Example (Iberostar Selection Lisboa, 1 night on 2026-11-12, 2 adults, EUR, checked on 2026-10-09): 32 booking sites from 105 to 185 EUR, official site 119 EUR, cheapest night of the next three months 94 EUR on 2026-11-30. All prices are nightly prices as Google shows them for the market (country), so taxes may be excluded. Sponsored offers are removed (they repeat the same sites). Use it for rate parity checks (is my hotel cheaper on Booking.com than on my own site?), competitor rate shopping and finding the cheapest dates.
{ "hotels": ["Hyatt Regency Lisbon", "ChoIy_fo59Ha34akARoNL2cvMTFmeTVnazZ0YxAB"], "checkInDate": "2026-11-12", "nights": 1, "currency": "EUR", "priceCalendarRange": "three_months" }
Input
{"destinations": ["Paris, France", "Lisbon, Portugal"],"checkInDate": "2026-12-18","nights": 2,"adults": 2,"currency": "EUR","maxHotelsPerDestination": 20,"sortBy": "relevance","propertyType": "hotels"}
- destinations: up to 500 per run. Write them as in Google Hotels; adding the country (
Lisbon, Portugal) avoids ambiguity. If the hotels returned for a destination are spread over more than 200 km, the run warns you that Google may not have recognised it. - checkInDate (optional): leave empty for 30 days from today, useful for scheduled tracking. nights: 1 to 30. adults: 1 to 6.
- currency: any three-letter code (
USD,EUR,GBP,CHF...). - maxHotelsPerDestination: 1 to 140 (default 20). Google returns about 20 hotels per results page.
- sortBy:
relevance,lowest_price,highest_rating,most_reviewed. - country: the Google market the search is made from (US, GB, CA, AU, IE, IN, DE, AT, CH, FR, BE, ES, MX, IT, NL, PT, BR, PL, SE, JP). It changes how Google shows prices (for example with or without taxes), not where the hotels are. languageCode (optional) sets the language of names and labels.
- Free filters, applied by Google:
propertyType(any,hotels= rentals removed and not billed,vacation-rentals),hotelClass(e.g.["4","5"]),minRating,minPrice/maxPriceper night,freeCancellationOnly,amenities(pool,free_breakfast,free_wifi,spa,pets_allowed,free_parking...).
Output example
Real row from a run on 2026-10-07 (destination Paris, France, US market, check-in 30 days ahead, 2 nights, 2 adults, USD):
{"destination": "Paris, France","found": true,"rank": 1,"name": "MOB HOUSE","hotelId": "ChkIwbex3tvknL0EGg0vZy8xMWhfY2NkMGZqEAE","propertyType": "hotel","hotelClass": 4,"rating": 4.3,"reviewsCount": 1134,"pricePerNight": 69,"priceBeforeDiscount": null,"discountText": "39% less than usual","estimatedTotalPrice": 138,"currency": "USD","checkIn": "2026-11-06","checkOut": "2026-11-08","nights": 2,"adults": 2,"freeCancellation": null,"latitude": 48.9048814,"longitude": 2.3376201,"imageUrl": "https://lh3.googleusercontent.com/gps-cs-s/ANWiy9STzfpG18IP5pB-BZwkN1w5UIpKfSq7BXyTJ_xszZmzLWAG2DpBbeWy1T6Ahpvi6t_9tKTwS64DwtD1GpqU0cy5dEsUdhuB8G0YLyJY9nZK9KAqZnxH1qOTNVc4KphPM3HmAjkWeXG6fhc=s287-w287-h192-n-k-no-v1","imagesCount": 9,"googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChkIwbex3tvknL0EGg0vZy8xMWhfY2NkMGZqEAE?hl=en&gl=us","searchUrl": "https://www.google.com/travel/search?q=Paris%2c+France&hl=en&gl=US&ap=KigKEgkAO_5UCcjfvxF6JcpeJvNkwBISCXxjUQVVq1JAEewNRBbN0zfAMAA&ts=CAESCAoCCAMKAggDGlkKOxIPOg1QYXJpcywgRnJhbmNlGigKEgkAO_5UCcjfvxF6JcpeJvNkwBISCXxjUQVVq1JAEewNRBbN0zfAEhoSFAoHCOoPEAsYBhIHCOoPEAsYCBgCMgIQACoJCgU6A1VTRBoA","searchCountry": "US","languageCode": "en","sortBy": "relevance","observedAt": "2026-10-07T13:18:30.144Z","schemaVersion": "1.0"}
Pricing
Pay per use, no subscription, no proxy costs. See the Pricing tab for current prices. Destination search uses two events:
- Hotel found: one per hotel returned with its price. Cheaper on higher Apify plans.
- Results page: one per Google Hotels results page fetched (about 20 hotels), charged once Google Hotels has answered, at the cost of our data provider. A 20-hotel search uses 1 page; 100 hotels use 5 pages.
Example: one destination with 20 hotels costs 1 page + 20 hotels. A destination that returns no hotel (for example filters that are too strict) still uses its page, but no hotel is billed. Hotels without a price, vacation rentals removed by propertyType: "hotels", duplicates and input mistakes cost nothing. The run never spends more than the maximum cost you set.
Price comparison mode uses one event, Hotel price check: one per hotel compared, with all its booking sites and its price calendar, whatever the calendar range. From October 25, 2026, with speed: "fast" (answers in seconds instead of waiting in the data provider's queue), each hotel compared also uses one Fast mode event; until then fast runs at standard speed. The default standard speed has no extra fee. A hotel given by name also uses one results page to find it (charged even if no matching hotel is found); IDs and links skip this step. A hotel is billed when Google has a price for it, for your dates or in its price calendar; a hotel with neither is reported with found: false and is free. In the rare case the data provider's queue is very slow, a hotel may come back with reason: "provider-slow": it is free, run it again later. Like every PlainRows tool, a run stops early if it keeps calling the data provider without anything billable (after about $0.01 of such calls; in price comparison mode up to 25 hotels are checked at once, so a few more may be checked before it stops, at our cost, not yours).
Price change on October 25, 2026: results page $0.004 to $0.006 (all plans); hotel price check $0.008 (FREE) / $0.007 (BRONZE) / $0.005 (GOLD+), down from $0.02 / $0.017 / $0.013; new Fast mode event $0.01 per hotel; hotel found does not change.
Free Apify plan: price comparison is limited to 3 hotels per run; each search run returns up to 20 hotels for up to 2 destinations, so you can check the output. A paid Apify plan removes these limits.
Use it from code, automations or AI agents
API (one call, results returned directly):
curl -X POST "https://api.apify.com/v2/acts/plainrows~google-hotels-prices/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"destinations": ["Lisbon, Portugal"], "checkInDate": "2026-12-18", "nights": 2, "currency": "EUR"}'
n8n, Make, Zapier: use the Apify integration, pick plainrows/google-hotels-prices, and map the dataset items to Google Sheets, Airtable or your database. Schedule the Actor on Apify to track prices every day.
AI agents (MCP): add https://mcp.apify.com?tools=plainrows/google-hotels-prices to Claude, Cursor or any MCP client. The agent gets a typed tool and pays per result; for price comparisons use "speed": "fast" so it gets the answer in seconds.
What this is not
- Destination search gives one price per hotel (the lowest Google shows); use the price comparison mode for every booking site's price. Neither mode gives individual room rates.
- No phone or amenity list, and no reviews text or reviewer names.
- Not a booking tool: prices are a snapshot at
observedAtand change often. Whether taxes are included depends on the Google market (country). - Not affiliated with Google.
Run summary
Each run stores a summary in the key-value store (OUTPUT): destinations run, destinations with no priced hotel, hotels billed, results pages charged, hotels skipped without a price, rentals and duplicates removed, destinations that may not have been recognised, invalid destinations, and anything skipped because of the free-plan or budget limit. In price comparison mode: hotels compared, hotels with no price, sponsored offers removed, names looked up and names not found.
FAQ
How do I track hotel prices in a city?
Enter the destination with its country (Lisbon, Portugal), leave checkInDate empty (30 days from today) and schedule the run daily: each row is one hotel with its nightly rate, stay total, stars and rating.
How many hotels per destination? 1 to 140 (maxHotelsPerDestination); Google shows about 20 per results page.
Can I filter 4 and 5 star hotels or free cancellation? Yes: hotelClass, minRating, minPrice / maxPrice, freeCancellationOnly and propertyType are Google's own filters; hotels they remove are not billed.
Do I get Booking.com or Expedia prices?
Yes, in the price comparison mode: fill in hotels with hotel names (Hyatt Regency Lisbon), hotel IDs or Google Hotels links and you get the price of every booking site Google lists, plus a daily price calendar.
How do I find the cheapest dates for a hotel?
Price comparison mode, priceCalendarRange: "year": priceCalendar lists the lowest price for each night Google has (about 9 to 10 months ahead on 2026-10-09) and calendarLowestPriceCheckIn gives the cheapest one.
Which currency?
Any three-letter code (USD, EUR, GBP, CHF...). Whether taxes are included depends on the Google market (country).
More PlainRows tools
Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.
- SEO and keywords: Keyword Search Volume, CPC & Difficulty · Keyword Ideas Generator · Google Autocomplete & People Also Ask · Google Trends Explorer · Website Organic Traffic & Top Keywords · Bulk Domain Authority Checker · Backlink Checker · Broken Link Checker · AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode) · Google Maps Rank Tracker (Geo-Grid Local SEO)
- Leads and companies: Google Maps Scraper · Website Technology Checker · ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby) · Google Jobs Scraper · Google Ads Scraper (Transparency Center) · Company Registry Lookup (SIRENE, LEI, Brreg) · Public Tenders Search (EU TED & UK)
- E-commerce and travel: Amazon Product Search Scraper · Google Shopping Prices Scraper · Tripadvisor Reviews Scraper
- Content and media: Google News Scraper · YouTube Search Scraper · YouTube Comments Scraper · Google Images Scraper · Website Screenshot API · Google Maps Reviews Scraper · App Store & Google Play Reviews Scraper
Compared with other APIs: Hotel prices on every booking site, as JSON (rate parity check)
Support
Missing a field or found a bug? Open an issue on this page. Issues are read and answered.