Google Hotels Scraper
Pricing
from $2.00 / 1,000 results
Google Hotels Scraper
Scrape Google Hotels prices by check in and check out date: nightly price, total with taxes and fees, guest rating, review count, star rating, amenities and deal badges. Real date aware pricing, and you only pay for successful results.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Eaglizer IT
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape Google Hotels prices for any city or area, for the exact dates you care about: nightly price, total price with taxes and fees, guest rating, review count, star rating, amenities, and Google's own deal badges. You only pay for hotels you actually receive.
Why this one
- Dates actually work. This is the thing to check before you trust any Google Hotels scraper. Google accepts
checkin=andcheckout=in the URL and then silently ignores them, so a scraper built on those parameters returns the same prices for every date and still looks like it is working. This Actor writes your dates into the encoded parameter Google really reads. Verified: the same Glendale hotel returns $207 for five nights in October and $152 over Christmas, and a one night stay returns a different number again. - Total price, not just the teaser. Where Google shows it, you get
totalPriceincluding taxes and fees alongsidepricePerNight, plus the number of nights, so the figures reconcile. - Built to survive Google's redesigns. Most scrapers in this niche read CSS class names like
PVOOXe, which Google rotates every few weeks. This one reads accessibility labels instead, because Google cannot rotate those without breaking screen readers. - It tells you when it breaks. If Google changes the layout, the run fails loudly and charges you nothing, instead of returning an empty dataset that looks like a city with no hotels. Failed queries land in
FAILED_QUERIESwith the reason. - No charge for failures. A query that fails after every retry is never written to the dataset, so it is never billed.
What you can use it for
- Rate shopping and competitor monitoring: track what nearby hotels charge for the same dates, on a schedule.
- Revenue management: watch how prices for your own property move against the local market across a season.
- Travel content and deal sites: find real price differences between dates, cities, or lengths of stay.
- Market research: compare hotel pricing across neighbourhoods or entire cities.
- AI agents: one clean JSON object per hotel, with prices as numbers rather than strings.
Input
| Field | What it does |
|---|---|
| Search queries | One or more, exactly as typed into Google Hotels. hotels in Glendale CA, hotels near LAX, Paris hotels. |
| Check in / check out date | 2026-11-30 format. Leave both empty for Google's default stay. |
| Nights | Used when only a check in date is given. |
| Check in days from now | For scheduled runs: 7 means a week from the day the run starts. |
| Adults / children | Room occupancy. |
| Currency | USD, EUR, GBP, and so on. |
| Language | Google interface language, for example en, de. |
| Google region | The region Google answers as. Defaults to us. Keep it matched to your proxy country, see below. |
| Maximum hotels per query | 0 for every hotel on the page, usually about 20. |
| Minimum guest rating | Skip anything rated below this out of 5. |
| Maximum price per night | Skip anything above this. |
| Proxy | Residential proxies are strongly recommended, pinned to a country. Google blocks datacenter addresses quickly. |
Example input
{"searchQueries": ["hotels in Glendale CA", "hotels near LAX"],"checkInDate": "2026-11-30","checkOutDate": "2026-12-03","adults": 2,"currency": "USD","minRating": 4,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }}
Output
One record per hotel.
{"searchQuery": "hotels in Glendale CA","rank": 3,"name": "Hilton Los Angeles North/Glendale & Executive Meeting Ctr","entityId": "ChgI-M__6s-cz8mHARoLL2cvMXR4MTVtdHkQAQ","url": "https://www.google.com/travel/hotels/entity/ChgI-M__6s-cz8mHARoLL2cvMXR4MTVtdHkQAQ","price": 155,"pricePerNight": 155,"totalPrice": 173,"nights": 1,"priceIncludesTaxes": true,"priceText": "$155","priceSymbol": "$","currency": "USD","deal": null,"rating": 4,"reviewCount": 2005,"starRating": 4,"amenities": ["Breakfast ($)", "Free Wi-Fi", "Parking ($)", "Outdoor pool", "Air conditioning", "Fitness center", "Bar", "Restaurant"],"reviewHighlights": ["Couples", "Nature", "Bar"],"vendor": null,"checkInDate": "2026-11-30","checkOutDate": "2026-12-01","adults": 2,"children": 0,"scrapedAt": "2026-09-21T06:54:00Z"}
Fields that Google does not show for a given hotel come back as null or an empty list rather than being dropped, so every record has the same shape. Vacation rentals often have no rating, and vendor is only set when the price comes from a booking site rather than the hotel itself.
Two extra records are written to the key value store on every run:
FAILED_QUERIES— queries that failed, with the reason. These were not charged.RUN_STATS— results, retries, blocked responses absorbed, how many hotels your own filters removed, the Google region used, and how many pages had to be retried for missing prices.
If prices come back empty
Google gates nightly rates by region. Ask it from outside the region and it returns the hotel list, the ratings, the stars and the amenities, but every price is null. Verified 2026-09-21: one residential session with no country set returned 5 hotels and 0 prices, and the same query pinned to a United States exit returned 5 hotels and 5 prices.
So keep these two in agreement:
- Proxy country (Proxy section). Defaults to
US. - Google region (Output and filters). Defaults to
us.
The Actor retries once with a fresh proxy session when a page parses but carries
no prices, and if prices are still missing it says so as an error in the log
rather than leaving you to notice nulls in the dataset. RUN_STATS reports
googleRegion and pricelessPagesRetried.
Notes and limits
- Google returns roughly 20 hotels per query. To cover a city more deeply, send several narrower queries, for example by neighbourhood.
- Prices are what Google shows for that stay at that moment, and they move. For a series, run on a schedule and keep the dataset.
- Very long stays and unusual occupancy combinations fall back to whatever Google decides to show.
priceis kept as an alias ofpricePerNightso existing integrations keep working.
Testing
python3 tests/test_hotels.py # offline, against a saved pageLIVE=1 python3 tests/test_hotels.py # also hits Google