Google Hotels Scraper · Prices, Reviews & Booking-Site Rates
Pricing
from $3.00 / 1,000 hotels
Google Hotels Scraper · Prices, Reviews & Booking-Site Rates
Scrape Google Hotels for any city and dates: nightly and total price, deals, rating, stars and amenities, plus the price at every booking site. Track the price of specific hotels across up to 330 check-in dates, and get guest reviews from Google, Tripadvisor and more. Any currency.
Pricing
from $3.00 / 1,000 hotels
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Google Hotels Scraper
Search Google Hotels for any city, neighbourhood or landmark and get every hotel with its price for your dates: nightly and total price, deal flag, guest rating and review count, rating breakdown, star class, amenities, what guests mention most, and photos. Turn on hotel details to add address, coordinates, phone, website, check-in and check-out times, Google Place ID, review topics, and the price at every booking site that lists the hotel.
Track the price of specific hotels across dates: paste their Google Hotels links, pick a first check-in date and a number of dates, and get one row per hotel per date with the lowest price, the hotel's own price and the price at every booking site.
Turn on guest reviews to get one row per review for every hotel found, or paste the Google Hotels links of specific hotels to read their reviews directly: text, score, date, reviewer, the site the review was posted on (Google, Tripadvisor, Trip.com, the hotel chain's own site and others), trip type, room, service and location scores, the owner's reply and photos.
Any currency, any dates up to 30 nights, up to 1,000 hotels per location.
Why use it
- Prices for your exact stay. Check-in, check-out, number of adults and currency go straight into Google's search, so the nightly and total prices are the ones a traveller would see for those dates.
- Deep results. Google shows 20 hotels per page; the actor keeps paging, up to 1,000 hotels per location.
- Booking-site comparison. With hotel details on, each hotel carries the nightly and total price at Booking.com, Expedia, Hotels.com, Agoda, Trip.com, the hotel's own site and every other site Google lists, cheapest first, with a free-cancellation flag and a link to each offer.
- A rate calendar for any hotel. Price tracking prices one hotel, or a list of them, for up to 330 consecutive check-in dates in one run. Each date carries every booking site's nightly price, price with taxes and fees, stay total, free-cancellation flag and a link to the offer, plus the lowest price and the hotel's own price at the top level for charting.
- Reviews from every source Google shows. Google Hotels lists its own reviews next to those from Tripadvisor, Trip.com, Priceline, the hotel chain's own site and others. The actor returns them all, or one source, one topic ("Breakfast", "Cleanliness") or a keyword, in the order you pick. There is no cap below what the hotel has: a hotel with 3,000 reviews returns 3,000.
- Typos do not cost you. When Google cannot find a place it quietly shows hotels somewhere else. The actor checks for that and returns a free row that says the location was not found, instead of billing you for the wrong city.
- Reliable. Requests go through residential proxies with retries, and an empty page is retried from a fresh connection before the actor gives up.
Use cases
- Hotel price monitoring for a destination and date range
- A daily rate calendar for your hotel and its competitors: lowest price and own-site price for each of the next 30, 90 or 330 days
- Rate parity checks: how the hotel's own price compares with OTAs
- Revenue management and competitive set analysis for hotels
- Travel apps and comparison tools that need hotel lists with prices and coordinates
- Market research on hotel supply, star mix and guest sentiment by city
- Reputation monitoring: the newest reviews of your hotel and its competitors, across review sites
- Review analysis by topic, trip type or score, for a hotel or a whole destination
Input
| Field | What it does |
|---|---|
| Locations | Paris, Shibuya, Tokyo, near Times Square. Searched as "hotels in …"; write hostels in Lisbon or resorts in Cancun for other stay types. |
| Check-in / check-out date | YYYY-MM-DD. Defaults to a 2-night stay starting two weeks from today. |
| Adults | Guests per room, default 2. |
| Currency | USD, EUR, GBP, JPY and 27 more. |
| Max hotels per location | Default 20, up to 1,000. |
| Hotel details | Adds address, coordinates, phone, website, booking-site prices and review topics. Billed as an extra event per hotel. |
| Minimum guest rating / star class, maximum price per night | Optional filters. |
| Hotels to track | Google Hotels links (or entity IDs) of hotels to price across dates, with no city search. |
| First check-in date / number of check-in dates / nights per stay | The sweep for tracked hotels: default tomorrow, 30 dates, 1 night. Google prices check-ins up to 330 days ahead. Adults and currency apply too. |
| Price rows | How tracked prices are written: one row per hotel per date with the booking sites inside it (default), or one flat row per booking site per date for CSV, Excel and BI tools. Billing is the same either way. |
| Guest reviews for every hotel found | Adds one row per review for each hotel in the results. Billed per review. |
| Reviews for specific hotels | Google Hotels links (or entity IDs) of hotels to read reviews for, with no city search. Leave Locations empty to get reviews only. |
| Max reviews per hotel | Default 50. A hotel with fewer returns all it has. |
| Sort reviews by | Most recent (default), most helpful, highest score or lowest score. |
| Review source / topic / search | Optional filters: one source such as Google or Tripadvisor, one of the topics Google lists for the hotel such as Breakfast, or a keyword such as parking. |
Example input
{"locations": ["Paris", "Shibuya, Tokyo"],"checkInDate": "2026-11-20","checkOutDate": "2026-11-23","adults": 2,"currency": "EUR","maxResults": 100,"includeDetails": true,"minRating": 4}
Prices of two hotels for every check-in date of the next 60 days:
{"priceHotelUrls": ["https://www.google.com/travel/hotels/entity/ChcI6cDSjb3e-ItCGgsvZy8xdGh0MDdyaxAB","ChoI_uTZsvz1i6-bARoNL2cvMTFmZHB6eDEwMxAB"],"priceDays": 60,"priceNights": 1,"currency": "USD"}
Reviews of two specific hotels, newest first:
{"hotelUrls": ["https://www.google.com/travel/hotels/entity/ChcI6cDSjb3e-ItCGgsvZy8xdGh0MDdyaxAB/reviews","ChoI_uTZsvz1i6-bARoNL2cvMTFmZHB6eDEwMxAB"],"maxReviewsPerHotel": 200,"reviewsSort": "most_recent"}
Hotels in a city with their 20 lowest-scored Tripadvisor reviews each:
{"locations": ["Vienna"],"maxResults": 30,"includeReviews": true,"maxReviewsPerHotel": 20,"reviewsSort": "lowest_score","reviewsSource": "Tripadvisor"}
Output
One row per hotel:
{"type": "hotel","location": "Paris","resolvedLocation": "Paris","totalResultsForLocation": 15000,"position": 1,"name": "The Originals Boutique, Hôtel Maison Montmartre, Paris","entityId": "ChoI_uTZsvz1i6-bARoNL2cvMTFmZHB6eDEwMxAB","pricePerNight": 60,"pricePerNightDisplay": "€60","totalPrice": 143,"totalPriceDisplay": "€143","nights": 2,"currency": "EUR","checkIn": "2026-11-10","checkOut": "2026-11-12","adults": 2,"dealLabel": "GREAT DEAL","percentBelowUsual": 36,"rating": 4,"reviewCount": 2127,"ratingDistribution": { "1": 10, "2": 5, "3": 8, "4": 23, "5": 54 },"mentions": ["Bar", "Dining", "Service"],"hotelClass": 4,"propertyType": "tourist hotel","amenities": ["Breakfast ($)", "Free Wi-Fi", "Parking ($)", "Air conditioning", "Pet-friendly", "Bar", "Restaurant", "Airport shuttle"],"ecoCertified": true,"imageUrls": ["https://lh3.googleusercontent.com/gps-cs-s/..."],"googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChoI_uTZsvz1i6-bARoNL2cvMTFmZHB6eDEwMxAB?hl=en&ts=..."}
With hotel details on, each row also has:
{"address": "10 Pl. de la République, 75011 Paris, France","latitude": 48.867437,"longitude": 2.365367,"phone": "+33 1 43 14 43 50","website": "https://www.ihg.com/crowneplaza/hotels/gb/en/paris/pardl/hoteldetail","neighborhood": "Folie-Méricourt","checkInTime": "3:00 PM","checkOutTime": "12:00 PM","googlePlaceId": "ChIJNeGz9Qhu5kcRZqDtykV9vb0","reviewSources": [{ "source": "Tripadvisor", "reviewCount": 330 }],"reviewTopics": [{ "topic": "Breakfast", "mentions": 166, "positive": 129, "negative": 21 }],"vendorPrices": [{"vendor": "Crowne Plaza Paris - Republique by IHG","isOfficialSite": true,"pricePerNight": 182.43,"pricePerNightWithFees": 219.57,"totalPrice": 439.15,"totalPriceDisplay": "$439","freeCancellation": false,"freeCancellationUntil": null,"offer": "Get a lower price plus free Wi-Fi with free enrollment","bookingUrl": null,"features": ["Get a lower price plus free Wi-Fi with free enrollment"]},{"vendor": "Booking.com","isOfficialSite": false,"pricePerNight": 186.15,"pricePerNightWithFees": 223.67,"totalPrice": 447.35,"totalPriceDisplay": "$447","freeCancellation": false,"freeCancellationUntil": null,"offer": null,"bookingUrl": "https://www.booking.com/hotel/fr/...","features": []}]}
For hotels to track there is one row per hotel per check-in date (type: "price"):
{"type": "price","hotelName": "Holiday Inn Vienna City by IHG","entityId": "ChcI6cDSjb3e-ItCGgsvZy8xdGh0MDdyaxAB","checkIn": "2026-10-12","checkOut": "2026-10-13","nights": 1,"adults": 2,"currency": "USD","googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChcI6cDSjb3e-ItCGgsvZy8xdGh0MDdyaxAB/prices?hl=en&ts=...","available": true,"lowestPricePerNight": 131.52,"lowestPricePerNightWithFees": 151.22,"lowestTotalPrice": 151.22,"lowestPriceVendor": "Vio.com","officialSitePricePerNight": 166.92,"officialSiteTotalPrice": 175.27,"vendorCount": 36,"note": null,"vendorPrices": [{"vendor": "Vio.com","isOfficialSite": false,"pricePerNight": 131.52,"pricePerNightWithFees": 151.22,"totalPrice": 151.22,"totalPriceDisplay": "$151","freeCancellation": null,"freeCancellationUntil": null,"offer": null,"bookingUrl": "https://deals.vio.com/?sig=..."}]}
With Price rows set to per booking site ("priceRows": "per_site"), the same data comes as one flat row per booking site per date (type: "rate"), cheapest first within each date:
{"type": "rate","hotelName": "Holiday Inn Vienna City by IHG","entityId": "ChcI6cDSjb3e-ItCGgsvZy8xdGh0MDdyaxAB","checkIn": "2026-10-12","checkOut": "2026-10-13","nights": 1,"adults": 2,"currency": "USD","available": true,"vendor": "Vio.com","isOfficialSite": false,"rank": 1,"pricePerNight": 131.52,"pricePerNightWithFees": 151.22,"totalPrice": 151.22,"totalPriceDisplay": "$151","freeCancellation": null,"freeCancellationUntil": null,"offer": null,"bookingUrl": "https://deals.vio.com/?sig=...","lowestTotalPrice": 151.22,"vendorCount": 33,"note": null,"googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChcI6cDSjb3e-ItCGgsvZy8xdGh0MDdyaxAB/prices?hl=en&ts=..."}
With guest reviews on, or for hotels given by link, there is one row per review (type: "review"):
{"type": "review","hotelName": "Holiday Inn Vienna City by IHG","entityId": "ChcI6cDSjb3e-ItCGgsvZy8xdGh0MDdyaxAB","location": "Vienna","googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChcI6cDSjb3e-ItCGgsvZy8xdGh0MDdyaxAB/reviews?hl=en","reviewId": "Ci9DQUlRQUNvZENodHljRjlvT25wd1l6WmFjRmQzWjFWcWJEUmxVV2s0UzJaNFZHYxAB","source": "Google","rating": 4,"ratingScale": 5,"date": "a week ago","dateEstimate": "2026-10-04","isEdited": false,"text": "Great hotel, in the centre and near all the famous attractions","originalText": null,"isTranslated": false,"authorName": "Jane D.","authorUrl": "https://www.google.com/maps/contrib/100000000000000000000?hl=en","authorImageUrl": "https://lh3.googleusercontent.com/a-/...","reviewUrl": null,"tripType": "Business","travelGroup": "Family","subRatings": { "rooms": 4, "service": 4, "location": 5 },"highlights": ["Quiet"],"aspects": [{ "aspect": "Rooms", "rating": 4, "note": null }],"ownerResponse": { "text": "Hi Jane, we're delighted to hear you enjoyed our central location...", "originalText": null, "date": "a week ago" },"photos": ["https://lh3.googleusercontent.com/grass-cs/..."]}
Key fields
| Field | Meaning |
|---|---|
pricePerNight / totalPrice | Lowest nightly price and the stay total with taxes and fees, in currency. null when Google shows no price for your dates (sold out or no partner offer). |
dealLabel, percentBelowUsual | Google's own deal flag, e.g. "GREAT DEAL", 36% below the usual price. |
ratingDistribution | Share of 5- to 1-star reviews, in percent. |
hotelClass | Official star class. |
entityId | Google's hotel id, stable across runs. Use it to de-duplicate or to re-check prices later. |
vendorPrices | One entry per booking site, cheapest first: nightly price, nightly price with taxes and fees, and stay total, to the cent. Also freeCancellation (and until when), the hotel's member offer, and bookingUrl, the site's own link to the offer. A site Google lists only as a sponsored offer has no bookingUrl. features repeats the free-cancellation and offer text. |
resolvedLocation | The place Google actually searched. |
available, note | Price tracking: false when no booking site has a price for that date (sold out, or not on sale yet); note says why. Those rows are free. |
lowestPricePerNight, lowestPricePerNightWithFees, lowestTotalPrice, lowestPriceVendor | Price tracking: the cheapest offer for that date. Per-night price before taxes and fees, per-night price with them, and the stay total with them. Where Google shows one all-in price, the first two are equal. |
officialSitePricePerNight, officialSiteTotalPrice | Price tracking: the hotel's own site, when Google lists it for that date. |
vendorPrices (price rows) | Every booking site for that date, in the same shape as on hotel rows, without features. |
rank, lowestTotalPrice, vendorCount (rate rows) | Flat price rows: the site's position for that date with 1 the cheapest, the cheapest stay total that date, and how many sites had a price. A date with no price is a single row with available: false and no vendor. |
source, reviewUrl | Where the review was posted. Reviews from partner sites link to the review or the hotel's review page there; Google reviews have authorUrl, the reviewer's Google Maps profile. |
rating, ratingScale | The score and what it is out of. Most sources use 5, a few use 10. |
date, dateEstimate | Google shows review dates as "2 months ago", not as a calendar date. date is that text; dateEstimate is the day it points to, counted back from the run. |
text, originalText | When the review was written in another language, text is Google's English translation, originalText the reviewer's own words, and isTranslated is true. |
tripType, travelGroup | "Business" or "Vacation", and "Family", "Couple", "Friends" or "Solo", when the reviewer said so. |
subRatings | The reviewer's scores for rooms, service and location, when given. |
aspects | Extra points the reviewer rated or commented on, such as "Walkability" or "Food & drinks". |
Limits to know
- Prices follow Google's own listing for the dates and guests you send; some hotels show no price for some dates.
- The order of results can shift slightly between pages; the actor removes duplicates by
entityId. - Hotel details make one extra request per hotel, so a run with details takes longer.
- Review dates are relative ("3 weeks ago") because that is all Google publishes on this page. Sort by most recent when the order matters more than the exact day.
- Some reviews are a score with no text;
textisnullfor those. - Price tracking covers check-ins up to 330 days ahead; Google has no prices beyond that. A sweep that runs past it is cut there.
- The booking sites listed, and their prices, depend on the country the request comes from. Runs on a paid Apify plan price from the United States; free-plan runs follow the proxy country in the input.
- Hotels given under Reviews for specific hotels return review rows only; put a hotel under Hotels to track for its prices.
FAQ
How do I track prices over time? For specific hotels, put their links under Hotels to track, leave the first check-in date empty so each run starts from tomorrow, and schedule the actor daily; join runs on entityId and checkIn. For a whole destination, schedule a search with the same locations and dates and join runs on entityId.
Can I get tracked prices as a flat table? Set Price rows to one row per booking site per date. Every row then has the same columns, one booking site each, which suits CSV, Excel and BI tools. The cost does not change: a hotel priced for one date is one billed event however many booking sites it has.
Where do I find a hotel's link or ID? Open the hotel on google.com/travel and copy the address. The part after /entity/ is the ID, and every hotel row from a search carries it as entityId.
Which currency do prices use? The one you pick. It is sent to Google with the search, so it does not depend on where the request comes from.
What if a location is misspelled? You get one free row with error: "location_not_found" and a message naming what Google showed instead.
How do I get the reviews of one hotel? Open the hotel on google.com/travel, copy the address into Reviews for specific hotels, and leave Locations empty. Set Max reviews per hotel to the number you want.
How do I follow new reviews? Schedule the actor with Sort reviews by set to most recent and a small Max reviews per hotel, and de-duplicate on reviewId.
A hotel returned no reviews. Why? With a source, topic or search filter, a hotel that has nothing matching returns nothing. A hotel given by link gets one free row that says so and lists the sources or topics its page does have.
What am I billed for? Hotel rows, a details event for each hotel when details are on, one event per hotel per priced date in price tracking, and one event per review when reviews are collected. Error rows and dates with no price are free.
Support
Open an issue on the actor's Issues tab with the input and the run link if a location or field comes back wrong.
For AI agents and LLM apps
Call with locations (array of place names) and optional checkInDate, checkOutDate, currency. Read the default dataset; rows with type: "hotel" are results, rows with error explain a location that returned nothing. Turn on includeDetails when you need coordinates or booking-site prices. To price specific hotels across dates, pass priceHotelUrls (Google Hotels links or entity ids) with priceStartDate (default tomorrow), priceDays (default 30) and priceNights (default 1); rows with type: "price" carry lowestTotalPrice, officialSiteTotalPrice and vendorPrices, and available: false marks a date with no price. Add "priceRows": "per_site" for flat rows instead, type: "rate", one booking site per row with vendor, rank and totalPrice. For reviews, pass hotelUrls (Google Hotels links or entity ids, e.g. the entityId of a hotel row) or set includeReviews, with maxReviewsPerHotel, reviewsSort (most_recent, most_helpful, highest_score, lowest_score) and optionally reviewsSource, reviewsTopic, reviewsSearch; rows with type: "review" are reviews.
Disclaimer
This actor reads publicly visible Google Hotels search results, prices and reviews. You are responsible for using the data in line with Google's terms and the laws that apply to you.
Keywords
google hotels scraper, google hotels api, hotel price scraper, hotel prices, google travel hotels, hotel rate shopping, hotel price comparison, booking.com prices, expedia prices, hotel data, hotel price monitoring, rate parity, travel data scraper, hotel price tracker, hotel rate calendar, google hotels price history, competitor rate shopping, google hotels reviews scraper, hotel reviews scraper, hotel guest reviews, tripadvisor reviews on google, hotel reputation monitoring, hotel review api