Google Hotels Scraper avatar

Google Hotels Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Google Hotels Scraper

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

Eaglizer IT

Maintained by Community

Actor 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= and checkout= 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 totalPrice including taxes and fees alongside pricePerNight, 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_QUERIES with 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

FieldWhat it does
Search queriesOne or more, exactly as typed into Google Hotels. hotels in Glendale CA, hotels near LAX, Paris hotels.
Check in / check out date2026-11-30 format. Leave both empty for Google's default stay.
NightsUsed when only a check in date is given.
Check in days from nowFor scheduled runs: 7 means a week from the day the run starts.
Adults / childrenRoom occupancy.
CurrencyUSD, EUR, GBP, and so on.
LanguageGoogle interface language, for example en, de.
Google regionThe region Google answers as. Defaults to us. Keep it matched to your proxy country, see below.
Maximum hotels per query0 for every hotel on the page, usually about 20.
Minimum guest ratingSkip anything rated below this out of 5.
Maximum price per nightSkip anything above this.
ProxyResidential 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.
  • price is kept as an alias of pricePerNight so existing integrations keep working.

Testing

python3 tests/test_hotels.py # offline, against a saved page
LIVE=1 python3 tests/test_hotels.py # also hits Google