Google Hotels Search Scraper
Pricing
Pay per event
Google Hotels Search Scraper
Extract Google Hotels listings by destination and stay dates: nightly prices, displayed currency, ratings, review counts, class, amenities, badges, sponsorship, and property IDs. Export JSON, CSV, or Excel; schedule recurring hotel rate monitoring.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Extract public Google Hotels listings into structured data for hotel price monitoring, destination research, and travel market analysis.
Google Hotels Search Scraper returns one row per property with the displayed nightly rate and currency, rating, review count, class, amenities, badges, sponsorship status, Google property identifier, and source URL.
No Google account or API key is required.
What does Google Hotels Search Scraper do?
Google Hotels Search Scraper opens the public Google Hotels experience in a real browser and converts destination search cards into clean dataset records.
Use it to:
- π search one or many destinations
- π apply future check-in and check-out dates
- π₯ set adult and child traveler counts
- π° collect the nightly price exactly as Google displays it
- β extract ratings, review counts, and hotel class
- ποΈ collect amenity and location or sustainability badges
- π£ distinguish sponsored cards from organic hotel results
- π retain Google property identifiers and result URLs
- π request a language, country, and currency
- π export results as JSON, CSV, Excel, XML, or RSS
The scraper preserves the displayed currency rather than silently relabeling a price when Google overrides the requested locale.
Who is Google Hotels Search Scraper for?
Hotel revenue and market analysts
- Monitor nightly rates for destination compsets.
- Compare review strength and hotel-class positioning.
- Track whether properties appear in sponsored placements.
Travel metasearch and deal teams
- Build destination-level hotel feeds.
- Detect low-price properties for newsletters or alerts.
- Enrich internal hotel records with Google property IDs.
OTAs, agencies, and destination marketers
- Compare visible inventory signals across cities and dates.
- Research amenity coverage for campaign planning.
- Schedule recurring snapshots for client reports.
Researchers and developers
- Create reproducible public hotel-market datasets.
- Feed travel applications through the Apify API.
- Connect hotel search data to AI agents through MCP.
Why use this Google hotel scraper?
- β Purpose-built output: one normalized record per hotel, not an unstructured page dump.
- β No login: it uses the anonymous public Google Hotels surface.
- β Date-aware: stay dates can be selected through Googleβs accessible date controls.
- β Locale-safe: requested and displayed currencies are never silently mixed.
- β Sponsored labels: ad placements remain identifiable.
- β Fail-closed filters: records with unparseable values do not slip through numeric filters.
- β Bounded browser use: one browser session is reused across sequential searches.
- β Apify-native: schedule runs, call an API, add webhooks, and export datasets.
What Google Hotels data can you extract?
| Category | Field | Description |
|---|---|---|
| Identity | name | Property name shown by Google |
| Identity | propertyId | Google entity identifier when exposed |
| Identity | propertyUrl | Google hotel entity link when exposed |
| Rate | nightlyPrice | Numeric displayed nightly price |
| Rate | priceText | Original price text, including symbol |
| Rate | currency | Currency inferred from displayed text |
| Reputation | rating | Google rating from 0 to 5 |
| Reputation | reviewCount | Expanded integer review count |
| Property | hotelClass | Google hotel class from 1 to 5 |
| Property | amenities | Flat list of displayed amenities |
| Signals | badges | Eco, location, deal, or ranking labels |
| Offers | bookingProviders | Providers when Google exposes external offer links |
| Placement | isSponsored | Whether the card is sponsored |
| Search | position | Position among accepted records |
| Search | destination | Normalized destination text |
| Search | query | Original query used for the search |
| Search | displayedDates | Dates Google displays for the prices |
| Search | sourceUrl | Final Google Hotels results URL |
| Time | scrapedAt | ISO timestamp for the snapshot |
Provider names are returned only when they are present on the result card. The Actor leaves the provider array empty rather than inventing an attribution hidden behind another Google panel.
How much does it cost to scrape Google Hotels?
This Actor uses pay-per-event pricing.
A small one-time run fee covers browser startup, followed by a fee for each hotel saved.
| Apify plan | Current per-hotel price |
|---|---|
| Free | $0.0021625 |
| Starter / Bronze | $0.0018804 |
| Scale / Silver | $0.0014667 |
| Business / Gold | $0.0011283 |
| Platinum | $0.00075217 |
| Diamond | $0.00052652 |
The one-time search setup fee is $0.005 per run.
Examples at the Free tier:
| Hotels | Estimated Actor charge |
|---|---|
| 10 | $0.026625 |
| 100 | $0.22125 |
| 1,000 | $2.1675 |
Actual platform limits and maximum-charge settings can stop a run earlier.
Prices will be synchronized with the live Apify pricing configuration before publication.
How to scrape Google Hotels
- Open Google Hotels Search Scraper on Apify.
- Enter one destination, such as
London. - Optionally add future check-in and check-out dates.
- Choose the traveler count and locale.
- Add price, rating, or hotel-class filters if needed.
- Keep
maxItemssmall for the first run. - Click Start.
- Open the dataset and export JSON, CSV, Excel, or another format.
A minimal input is:
{"queries": ["London"],"maxItems": 10}
A filtered destination search is:
{"queries": ["Miami Beach"],"minRating": 4,"hotelClasses": ["4", "5"],"maxPrice": 350,"maxItems": 30,"currency": "USD","country": "US"}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
queries | string[] | ["London"] | Destinations or hotel search phrases |
startUrls | RequestListSource[] | empty | Public Google Hotels search URLs |
checkInDate | string | empty | Future date in YYYY-MM-DD |
checkOutDate | string | empty | Date after check-in |
adults | integer | 2 | Adult travelers, 1-20 |
children | integer | 0 | Child travelers, 0-10 |
minPrice | number | empty | Minimum displayed nightly price |
maxPrice | number | empty | Maximum displayed nightly price |
minRating | number | empty | Minimum Google rating |
hotelClasses | string[] | empty | One or more classes, "1" through "5" |
includeSponsored | boolean | true | Include and label sponsored cards |
maxItems | integer | 10 | Maximum accepted hotels, 1-500 |
currency | string | USD | Requested ISO currency |
language | string | en | Requested interface language |
country | string | US | Requested two-letter country code |
proxyConfiguration | object | direct | Optional Apify Proxy settings |
Provide both stay dates or neither.
Explicit URLs must belong to a Google Hotels search surface. Unrelated Google pages and third-party URLs fail before navigation.
Output example
{"destination": "London","query": "London","checkInDate": null,"checkOutDate": null,"adults": 2,"children": 0,"position": 1,"name": "The Tower Hotel, by Thistle","propertyId": "ChYIrIK1s_Hf-arLARoJL20vMDkxZGNfEAE","propertyUrl": "https://www.google.com/travel/hotels/entity/ChYIrIK1s_Hf-arLARoJL20vMDkxZGNfEAE","nightlyPrice": 123,"priceText": "β¬123","currency": "EUR","rating": 4.1,"reviewCount": 12224,"hotelClass": 4,"amenities": ["Breakfast ($)", "Free Wi-Fi", "Parking ($)"],"badges": ["Excellent location", "Eco-certified"],"bookingProviders": [],"isSponsored": false,"displayedDates": "Aug 2 β 3","sourceUrl": "https://www.google.com/travel/search?...","scrapedAt": "2026-07-19T05:17:20.025Z"}
Numbers are emitted as numbers.
Arrays remain flat for straightforward CSV and spreadsheet use.
Tips for reliable hotel rate monitoring
- π§ͺ Start with 5-10 hotels to validate your query.
- π Always pair check-in and check-out dates.
- π Treat
currencyas a request; verify the returnedcurrencyfield. - π§ Use a country-specific proxy when geographic presentation matters.
- π§Ή Use filters to reduce the final dataset, not to reinterpret missing source values.
- β±οΈ Schedule snapshots at a consistent local time for cleaner comparisons.
- π Deduplicate longitudinal records with
propertyIdwhen available. - π£ Keep
isSponsoredin ranking analyses. - π Compare like-for-like stay dates and traveler counts.
- π¦ Use conservative concurrency; Google Hotels is browser-rendered.
Google Hotels scraper integrations
Google Hotels β Google Sheets
Schedule a destination search each morning and append rate snapshots to a sheet for a revenue-management dashboard.
Google Hotels β Slack or Discord
Send a webhook when a four-star property drops below a chosen nightly price.
Google Hotels β Make or Zapier
Trigger the Actor from a destination list, transform the dataset, and update CRM or campaign records.
Google Hotels β data warehouse
Use a dataset webhook to load hotel rates, placements, and review counts into BigQuery, Snowflake, or PostgreSQL.
Google Hotels β AI analysis
Expose the Actor through Apify MCP and ask an AI agent to summarize price bands or identify unusually strong review-to-price combinations.
Use Google Hotels Search Scraper with the Apify API
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/google-hotels-search-scraper').call({queries: ['London'],maxItems: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/google-hotels-search-scraper').call(run_input={'queries': ['London'], 'maxItems': 10})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~google-hotels-search-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"queries":["London"],"maxItems":10}'
Use Google Hotels data with AI agents via MCP
Connect Claude Code:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/google-hotels-search-scraper"
For Claude Desktop, Cursor, or VS Code, add:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/google-hotels-search-scraper"}}}
Authenticate with Apify when your client opens the OAuth flow.
Example prompts to try:
- βUse
automation-lab/google-hotels-search-scraperto find ten highly rated hotels in London and summarize their nightly prices.β - βCompare four-star Google Hotels rates in Miami Beach and Los Angeles.β
- βBuild a weekly monitoring input for sponsored hotel placements in New York.β
Scheduling Google hotel price checks
- Save a working Actor input.
- Open Schedules in Apify Console.
- Choose the desired daily or weekly cadence.
- Use the same stay-date logic for comparable snapshots.
- Attach a webhook or integration to process the finished dataset.
For rolling stay windows, generate future dates in an external workflow before calling the Actor.
Do not leave fixed dates in a permanent schedule after they pass.
Handling locales and currencies
Google may use serving geography, consent state, or other public presentation rules when choosing a displayed currency.
This Actor therefore:
- sends the requested
currency,language, andcountry - reads the symbol shown on every card
- emits the inferred displayed ISO currency
- logs a warning when requested and displayed currencies differ
- never changes a numeric amount merely to match the requested code
If exact geography matters, enable Apify Proxy with an appropriate country.
Error handling and empty results
The Actor fails with a non-zero run when:
- no query or URL is provided
- a URL is outside the Google Hotels scope
- only one stay date is provided
- check-out is not after check-in
- locale or limits are invalid
- Google Hotels loads but no hotel passes the requested filters
A zero-item successful run is not used to hide extraction failure.
If results are unexpectedly empty, remove filters and retry one small destination first.
Is it legal to scrape Google Hotels?
Google Hotels Search Scraper extracts publicly available result-card data.
Scraping public data is generally lawful in many jurisdictions, but laws, contracts, and acceptable-use rules vary.
You are responsible for:
- using the data for a legitimate purpose
- following applicable laws and Googleβs terms
- avoiding excessive request volume
- respecting personal-data and database rights
- applying an appropriate retention policy
This Actor does not bypass login controls or collect private account data.
FAQ
How fast is the Google Hotels scraper?
A small destination search normally completes in under two minutes. Browser rendering, consent, dates, geography, and source throttling affect duration.
Do I need a Google API key?
No. The Actor uses the public anonymous Google Hotels interface.
Why does the returned currency differ from my input?
Google can override locale hints based on its serving region. The Actor reports the currency actually displayed instead of silently relabeling the price.
Why is bookingProviders empty?
Google often hides provider names behind a separate price panel. The Actor returns providers only when external offer links are exposed on the result card.
Why did my filtered run fail with no records?
Price, rating, and class filters fail closed. Remove filters to inspect source coverage, then add thresholds one at a time.
Does it include sponsored hotels?
Yes by default. Sponsored cards have isSponsored: true. Set includeSponsored to false to exclude them.
Can I scrape multiple destinations?
Yes. Add up to 20 queries or URLs. The browser session is reused and maxItems applies across the run.
Can I export to CSV or Excel?
Yes. Every Apify dataset supports JSON, CSV, Excel, XML, and other export formats.
Other travel and hotel scrapers
- Google Flights Scraper for flight fares and itineraries
- Booking Scraper for Booking.com property listings
- Trip.com Hotels Scraper for Trip.com hotel inventory
- Airbnb Listing Scraper for short-term rental listings
- Hotels.com Reviews Scraper for guest review research
- Booking Hotel Photos Scraper for property image datasets
- Trip.com Hotel Reviews Scraper for Trip.com reputation analysis
Combine them to compare Googleβs visible hotel market with booking platforms, vacation rentals, reviews, flights, and property media.