Google Hotels Scraper
Pricing
from $1.99 / 1,000 search results
Google Hotels Scraper
Scrapes structured Google Travel hotel results with entity IDs, ratings, review counts, prices, property types, amenities, images, cancellation flags, dates, guest counts, and search metadata.
Pricing
from $1.99 / 1,000 search results
Rating
0.0
(0)
Developer
Search API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
Collect public hotel cards from Google Travel for one location or a batch of locations. The Actor uses Playwright with consistent browser fingerprints, bounded sessions and retries, and produces a normalized dataset without placeholder or empty fields.
Input modes
single: search onelocation(or the backward-compatiblequeryalias).batch: searchlocationsconcurrently.maxItemsis allocated fairly and the final dataset is interleaved across locations.
Dates are optional, but checkIn and checkOut must be supplied together, use YYYY-MM-DD, and describe a future stay. Inputs also support guest/room counts, child ages, locale, requested currency, price/rating filters, property types, amenities, free-cancellation filtering, sorting, limits, timeouts, and concurrency.
Example:
{"mode": "single","location": "Paris","checkIn": "2026-10-15","checkOut": "2026-10-18","adults": 2,"rooms": 1,"currency": "USD","gl": "us","hl": "en","maxItems": 10,"proxyConfiguration": { "useApifyProxy": false }}
Dataset
Every record has a stable SHA-256 id, canonical Google /entity/ URL, hotel name, positions, search context, source, engine, and ISO timestamp. When displayed by Google, records also include typed nightly price and currency, rating and review count, property/star type, amenities, deal, cancellation flag, image, and distance.
Optional values are omitted when Google does not expose them on the card. The Actor never invents address, coordinates, contact details, booking-provider details, or other fields that are not source-backed.
requestedCurrency records the input and currency records what Google actually displayed. currencyMatched makes localization overrides visible. For example, a direct run from an Indian IP can display INR even when USD was requested; use a compatible country-local Residential or custom proxy when matching market localization is important.
Proxy guidance
- Direct mode is the default and fastest option.
- Apify Residential or custom proxies are supported through
proxyConfiguration. GOOGLE_SERPis deliberately rejected. It supports Google Search-style HTTP requests, not the interactive Google Travel page used by this Actor.- CAPTCHA or challenge pages are never stored and are not bypassed. The affected request fails with
TARGET_BLOCKEDso an authorized proxy configuration can be selected.
Performance and reliability
The Actor blocks fonts and media (not images, scripts, or API calls), scrolls only as needed, caps concurrency at five, deduplicates by stable hotel ID, and stops at maxItems. Representative local direct runs produced 10 records in about five seconds and a two-location batch in about five seconds; cloud time includes container startup.
Local validation
npm testnpm run lintnpm run validate:datasetapify validate-schemaapify run --purge --input-file INPUT.jsonnode scripts/audit-dataset.mjs
Additional inputs are in qa-inputs/, including minimal, batch, filtered-empty, invalid-date, Residential-proxy, and incompatible-GOOGLE_SERP cases.
Limitations
Google changes card markup and localized availability over time. Only fields visible on public result cards are emitted. Results, prices, currencies, amenities, and deals can vary by IP market, language, dates, cookies, and availability. The Actor does not solve CAPTCHAs or access private/authenticated content.