Google Hotels Scraper - Live Room Prices by Date avatar

Google Hotels Scraper - Live Room Prices by Date

Pricing

from $3.35 / 1,000 hotel results

Go to Apify Store
Google Hotels Scraper - Live Room Prices by Date

Google Hotels Scraper - Live Room Prices by Date

Scrape Google Hotels prices for your own dates and party. Type a search like "hotels in Lisbon" and each row has the hotel name, nightly price, stay total, rating, review count, class and photo. Up to 10 searches a run, about 20 hotels each. $3.50 per 1,000 hotels.

Pricing

from $3.35 / 1,000 hotel results

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

2 days ago

Last modified

Share

Get Google Hotels prices for your own dates, one row per hotel: type a destination search like hotels in Lisbon, add your check-in and check-out, and each row comes back with the nightly price, the stay total, the guest rating, review count, hotel class, a photo and the Google listing link.

Google does not sell rooms. Hotels and booking sites feed in their rates for one specific stay, which is why a price on that page belongs to a set of dates rather than to the hotel. So the dates do real work here.

The size of it, before you plan around it: a search returns one page of Google's results, which has measured at roughly twenty hotels. It is not a way to list every hotel in a city.

InputUp to 10 destination searches, with check-in and check-out dates and who is staying
OutputOne row per hotel: nightly price, stay total, currency, rating, review count, class, type, photo and Google link
Ceiling10 searches per run, one page of results each, about 20 hotels
Account neededNone, and no Google API key
Price$3.50 per 1,000 hotels, flat on every plan. The free plan's $5 a month covers about 1,400

๐Ÿ” What Google Hotels Scraper does

You search the way you would in Google itself: hotels in Lisbon,

family hotels near Disneyland Paris
. Each row is one property on that results page, priced for the stay and the party you gave it.

Dates matter more than anything else here. Leave checkIn and checkOut empty and Google prices a stay of its own choosing, so what you get back is not comparable to anything. Set them and the prices belong to your itinerary.

Every page is checked before you pay for it. Google's page says which place, which stay and which guests it priced. If that is not what you asked for, the search is refused with a note and nothing is charged.

propertyToken is the field to key on. It is Google's stable id for the property, so tracking one hotel's price across runs survives a name being reformatted.

๐Ÿ“‹ What data you get from each Google Hotels listing

What you getField
The hotel, and Google's id and page for itname, propertyToken, detailsUrl
Nightly price and the whole stayprice, priceText, totalPrice, totalPriceText, currency
Guest rating and how many reviews it rests onrating, reviewsCount
Star class and kind of placehotelClass, hotelType
The booking site behind the rate, when Google names itvendor
A photothumbnail
The stay it was priced forcheckInDate, checkOutDate
Your search, and the place Google says it searchedsearchQuery, resolvedLocation, destinationCheck
When it was readscrapedAt

โ–ถ๏ธ How to scrape Google Hotels prices

  1. Open Google Hotels Scraper and click Try for free.
  2. Put your destinations into Hotel searches, replacing the example. Ten at most.
  3. Fill in Check-in date and Check-out date. Prices mean little without them.
  4. Add Children's ages if kids are coming, pick a Currency if you want one, then click Start.
  5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

Run it with no searches and you get one labelled sample row so you can see the shape. That row is not charged.

๐Ÿ’ฐ How much does it cost to scrape Google Hotels prices?

$3.50 per 1,000 hotels, which is $0.0035 a row. The same rate on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 1,400 hotels.

The same hotel matching two of your searches is delivered and charged once.

Not charged: the sample row, every diagnostic row, a search that comes back empty, a search where Google could not place your destination or priced a different stay, and places your minRating leaves out.

๐Ÿ“ฅ What you give it

{
"searchQueries": ["hotels in Lisbon", "family hotels near Disneyland Paris"],
"checkIn": "2027-05-14",
"checkOut": "2027-05-16",
"adults": 2,
"childAges": [8],
"country": "fr",
"currency": "EUR",
"maxItemsPerQuery": 50
}
FieldDefaultWhat it is
searchQueriesempty, the form opens with hotels in BarcelonaDestination searches in plain words. Only the first 10 are used.
checkInemptyYYYY-MM-DD, today or later. Optional, but set it.
checkOutemptyYYYY-MM-DD, after check-in and at most 30 nights later. Optional, but set it.
adults21 to 12. Prices are for the whole party.
childAgesemptyOne age per child, 0 to 17, like [8, 3]. Up to 6. Children change the price and which hotels have room.
countrycaTwo-letter Google edition code. In our tests it did not change the prices. Use currency to choose the currency.
languageenInterface language, like en, fr or de.
currencyemptyA three-letter code like EUR or USD. Google Hotels offers 72, and a code it does not offer is refused before anything runs. Empty lets Google pick, and every row states what it used.
minRatingemptyKeep only places rated at least this, out of 5, like 4 or 4.5. Places below it, and places with no rating, are left out and not charged. Works with language set to en.
maxItemsPerQuery50Caps the rows kept per search, up to 100. It trims the page, it does not deepen it.
fallbackToProxytrueLeave it on.
proxyConfigurationonLeave it alone. Servers of your own, if you add them, are used exactly as given.

๐Ÿ“ค What you get back

A real row from a run on 1 October 2026: hotels in Lisbon for 12 to 14 November, two adults, minRating 4. The photo link is cut short.

{
"ok": true,
"propertyToken": "ChgI782c2Z2f8OMdGgwvZy8xMWR5anhtYjcQAQ",
"searchQuery": "hotels in Lisbon",
"name": "Avenida Palace",
"vendor": null,
"price": 279,
"priceText": "US$279",
"currency": "USD",
"totalPrice": 585,
"totalPriceText": "US$585",
"rating": 4.8,
"reviewsCount": 1072,
"hotelClass": 5,
"hotelType": "hotel",
"thumbnail": "https://lh3.googleusercontent.com/grass-cs/ACvplmOAmg17Zla3xIHeeqhUsn_ljjJ...",
"detailsUrl": "https://www.google.com/travel/hotels/entity/ChgI782c2Z2f8OMdGgwvZy8xMWR5anhtYjcQAQ",
"checkInDate": "2026-11-12",
"checkOutDate": "2026-11-14",
"scrapedAt": "2026-10-01T03:19:55.453Z",
"resolvedLocation": "Lisbon",
"destinationCheck": "ok"
}
FieldHow to read it
price, totalPriceThe nightly rate on the card, and the whole stay with taxes and fees. In the row above, two nights at US$279 come to US$585. Use totalPrice for the cost of a stay.
priceText, totalPriceTextGoogle's own strings, currency symbol included.
propertyTokenGoogle's stable property id. Key on this, not the name.
resolvedLocationThe destination Google says it searched. Ask for hotels near the Eiffel Tower and it reads Paris, which is right, and it is also how you catch a search that drifted.
destinationCheckok when that matches what you asked for, unverified when the page carried no heading to check against.
checkInDate, checkOutDateYour dates, on every row. A row only goes out once Google's page confirmed it priced those dates.
vendorThe booking site behind the rate. Often null, because Google does not always name it on the results page.
rating, reviewsCountGoogle's own figures. They will not match a booking site's numbers.

๐Ÿงพ Reading the output

RowHow to spot itCharged
A hotelok: trueyes
The sample row_sample: trueno
A diagnosticok: false and an errorCodeno
CodeWhat it means
DESTINATION_NOT_FOUNDGoogle searched somewhere other than the place you asked for, so nothing was delivered. Usually a spelling slip or a name that needs narrowing: Springfield Illinois rather than Springfield.
STAY_NOT_APPLIEDGoogle priced a different stay or party than the one you asked for, so nothing was delivered. A check-in date in the past does this.
BAD_INPUTA setting Google can't use: a child's age outside 0 to 17, more than 6 children, a currency it does not offer, or a stay over 30 nights. Also a minRating outside 1 to 5, or one set with a language other than English. Nothing was searched.
NO_RESULTSGoogle returned a page with no properties on it, or none rated at your minRating.
BLOCKEDThat search could not be read this time. Run it again.
RATE_LIMITEDGoogle asked for a slower pace. Wait a little and try again.
SERVER_ERRORGoogle answered with an error of its own.
NETWORKGoogle could not be reached. A malformed date also lands here rather than saying the date is wrong.

Check destinationCheck before you trust a batch. When Google's page carries no heading there is nothing to compare against, so those rows come through as unverified and are delivered and charged. The default table view hides that field, along with price, totalPrice, searchQuery and the dates, so read the dataset as JSON or export it.

๐Ÿ’ก What people use it for

  • Watching a handful of hotels' nightly rates for one set of dates, keyed on propertyToken.
  • Pricing a family trip: two adults and the kids' ages, for the dates the school holidays allow.
  • Pulling rating, review count and class for a shortlist without opening twenty tabs.
  • Building a weekly price series for a city break, by running the same searches on the same dates.

A trip priced end to end, in three runs:

  1. Run this with your dates and minRating at 4, and keep the hotels whose totalPrice fits.
  2. Put the name of each one you kept, with the city, into Google Maps Reviews Scraper and read what guests said lately.
  3. Price the flights in Skyscanner Flights Scraper with a route whose date is your checkInDate and returnDate your checkOutDate.

๐Ÿšง What it does not do

  • One page of results per search. Measured at roughly twenty hotels. maxItemsPerQuery trims that page, it cannot go deeper, so a broad city search will not return every hotel in the city.
  • Only the first 10 searches are used. Extras past that are dropped without a message.
  • minRating trims the page, it does not dig deeper. At 4.5 expect about a third of the page. A place whose row has no rating is left out as well, and some holiday rentals come back that way.
  • Big parties and far-off dates get fewer prices. Google only shows a price where it has a room: in our tests, two adults with six children got a price at 2 of 20 hotels, and a stay a year out at 3 of 20. Rows without a price are still delivered and charged.
  • Prices move, constantly. A rate read this morning may be gone this afternoon. Anything price-tracking needs repeat runs.
  • vendor is often empty, because Google does not always name the booking site on the results page.
  • No dates means no comparable prices. Google prices its own default stay, and that default is not stable between runs.

๐Ÿงญ Which travel scraper do you need?

If you wantUse
Hotel prices from Google for your own datesThis one
Booking.com properties with prices, review scores and free cancellationBooking.com Hotels Scraper
Airbnb listings with prices and ratingsAirbnb Listings Scraper
Hotels as places on Google Maps, with address, category and coordinatesGoogle Maps Scraper
Every Google review for one hotelGoogle Maps Reviews Scraper
Guest reviews from Booking.comBooking.com Reviews Scraper
Traveller reviews of hotels, restaurants and attractionsTripadvisor Reviews Scraper
Flight fares for the same datesSkyscanner Flights Scraper

โ“ Questions people ask

Do I need a Google account or an API key to scrape Google Hotels?

No. There is nothing to sign in to.

Why is the total more than the nightly price times the nights?

The total is the whole stay with taxes and fees, and the nightly price leaves them out. In our tests it ran up to a quarter higher.

Why did a search return nothing?

Most likely Google could not place the destination, so the run returned a DESTINATION_NOT_FOUND note instead of hotels from somewhere else. Narrow the name and try again.

Can I track one hotel's price over time?

Yes. Save propertyToken and run the same dates on a schedule.

No. Split the city into several searches instead, like a district or a landmark per search.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/google-hotels-scraper. Either way the run happens on your Apify account at the same price.

These are public listings and public prices. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

๐Ÿ†˜ If something breaks

Open the Issues tab on the actor page. Send the search, the dates and the run ID. The errorCode on the diagnostic row usually names the problem on its own.