Google Hotels Scraper avatar

Google Hotels Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Google Hotels Scraper

Google Hotels Scraper

Scrape hotel data from Google Hotels, including prices, ratings, reviews, amenities, photos, and location details. Perfect for travel research, competitor analysis, pricing insights, and marketplace datasets. Fast, accurate, and ideal for large-scale hospitality intelligence.

Pricing

$19.99/month + usage

Rating

5.0

(3)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

1

Bookmarked

42

Total users

2

Monthly active users

6 days ago

Last modified

Share

Google Hotels Scraper — Prices, Ratings and Amenities Data

Google Hotels Scraper pulls hotel data straight from Google Travel's search results — hotel name, address and GPS, live price comparisons across Booking.com, Expedia and Hotels.com, star rating, review count, and amenities — for any city, area, or hotel name you search. Every hotel comes back as clean, typed JSON, with no HTML parsing on your side. Search once, or queue up dozens of destinations in the same run — try it on the Actor's Apify Store page.

What is Google Hotels Scraper?

Google Hotels Scraper is an Apify Actor that crawls Google Travel's public hotel search results and individual hotel pages for a given search query, date range and party size, then returns structured JSON with pricing, ratings, amenities, contact details and location data for each hotel found. It requires no Google account, no login, and no API key from Google — it reads the same public search results any visitor sees. It's built for developers embedding hotel data into apps and dashboards, OTA and metasearch analysts comparing prices across providers, and revenue managers tracking competitor rates for specific dates.

What Google Hotels data is publicly available to scrape?

Google Travel's hotel search results are visible to any visitor without signing in — no Google account is needed to see hotel names, prices, ratings, amenities or photos. A couple of details sit outside what Google itself displays and only appear once you continue through to the booking site.

Data CategoryPublicly AvailableRestricted behind OTA checkout
Hotel name, address, GPS coordinatesYes
Star rating & aggregate review countYes
Price comparison across OTAs (Booking.com, Expedia, Hotels.com, etc.)Yes
Amenities & health/safety notesYes
Photos & thumbnailYes
Individual guest review textYes — Google surfaces only an aggregate rating and review count, not the review text itself
Exact room type & final checkout priceYes — confirmed only after continuing to the OTA's own booking flow, which may require creating an account

Google Hotels Scraper only returns the publicly visible search-result and hotel-profile data described above — nothing behind an OTA login or booking flow.

What data can I extract with Google Hotels Scraper?

Google Hotels Scraper returns hotel identity and location details, pricing and rating data, and media and amenity information for every hotel matched by your search.

Field NameDescription
titleHotel name
urlGoogle Travel entity URL for the hotel
addressStreet address as shown on the hotel's Google Travel page
phoneHotel contact phone number, when found
websiteHotel's own website, resolved from Google's outbound booking link
gps{ lat, lng } coordinates
aboutHotelHotel description text
addressAndContactAddress, phone, check-in and check-out time pulled from the hotel's /details sub-page (only the keys that were found are included)
searchQueryThe search term that produced this row — useful when a run covers multiple destinations
ratingAggregate rating out of 5
reviewsTotal review count
starsOfficial hotel star rating out of 5
pricesArray of { provider, price, link } — one entry per OTA (Booking.com, Expedia, Hotels.com, etc.) with a price for your dates
priceRange"min - max" string across all OTA prices found
thumbnailPrimary hotel photo URL
photosArray of up to 15 hotel photo URLs
amenitiesArray of amenity labels (Wi-Fi, breakfast, parking, pool, etc.)
healthAndSafetyArray of health & safety policy notes, when Google surfaces them

Hotel identity & location details

title, url, address, phone, website, gps, aboutHotel, addressAndContact, searchQuery

Pricing & ratings

rating, reviews, stars, prices, priceRange

Media & amenities

thumbnail, photos, amenities, healthAndSafety

🤖 Add-on: Need additional travel data?

If your project also covers short-term rentals, pair this with Airbnb Scraper for listing prices, host details and availability on Airbnb. Both return the same kind of clean, typed JSON, so you can merge hotel and rental inventory into one dataset without writing separate parsers.

How does Google Hotels Scraper differ from the official Google Hotels API?

Google does not offer a public, self-serve API for arbitrary third parties to query hotel search results. Its Hotel Ads and Travel Partner APIs exist, but they're built for approved OTAs, metasearch companies and hotel chains submitting their own rate feeds — not for reading the public search results Google shows to visitors.

FeatureGoogle Hotel Ads / Travel Partner APIsGoogle Hotels Scraper
Who can access itApproved OTAs, metasearch partners and hotel chains onlyAnyone with an Apify account
Setup processPartner application and technical integration reviewProvide a search query and start the run
Data returnedThe feed you submit yourself (your own rates/listings)The public comparison results Google displays to any visitor
Third-party / competitor dataNot accessible — partners see only their own feed's performanceYes — any hotel or OTA price shown in search results
Output formatPartner-specific feed and reporting formatsOne consistent JSON schema across every run

Use the official partner APIs if you're a hotel or OTA submitting your own rates to Google. Use Google Hotels Scraper if you need to read the publicly displayed comparison data at scale.

How to use Google Hotels Scraper

Google Hotels Scraper runs on Apify Console — no separate sign-up with Google is required.

  1. Open Google Hotels Scraper on its Apify Store listing and click Try for free (or Start, if already added to your account).
  2. Provide searchQuery — the only required input — with one or more cities, areas, or hotel keywords (e.g. "Prague hotels").
  3. Optionally set checkInDate, checkOutDate, numberOfAdults, numberOfChildren, currencyCode, sortOrder and maxResults.
  4. Click Start to launch the run.
  5. Download results as JSON, CSV, or Excel from the run's dataset, or pull them via the Apify API.

How to scale to bulk Google Hotels extraction

searchQuery is an array, not a single string — add as many cities, areas or hotel keywords as you need, and the Actor loops through each one in the same run, tagging every hotel row with the searchQuery that produced it. There's no separate "bulk mode" to enable; one run with a longer searchQuery list is the scale-up path.

What can you do with Google Hotels data?

  • A travel or OTA analyst tracking rate parity uses prices and priceRange to spot which booking channel is cheapest for a given hotel and date range.
  • A revenue manager benchmarking competitors uses title, stars and priceRange for a fixed checkInDate/checkOutDate to see how rivals are priced for the same stay.
  • A content or marketing team auditing listings uses amenities, aboutHotel and photos to compare how competing hotels present themselves.
  • A map-based travel app developer uses gps, address and website to plot hotels and link straight to their own booking pages.
  • An AI travel assistant or RAG pipeline ingests aboutHotel, amenities and healthAndSafety as grounded context, answering guest questions about a specific hotel without scraping HTML itself.

How does Google Hotels Scraper handle rate limits and blocking?

Google Hotels Scraper starts every run with no proxy at all, and only escalates if Google responds with a block (HTTP 403, 429, or 503): first to an Apify datacenter proxy (the GOOGLE_SERP proxy group), then to residential proxy if datacenter still gets blocked. Each request gets up to 3 attempts, with a short increasing delay between retries before the next proxy tier kicks in. Hotels are fetched in small batches of 4 at a time to avoid bursting requests, and connect/read/write timeouts are enforced on every request so one slow page can't stall the whole run.

If a hotel's page still fails after retries and proxy escalation, that hotel is simply skipped and logged — it does not appear in the output, and no placeholder row is pushed in its place. The Actor also detects Google's "Before you continue to Google" consent interstitial and discards it rather than saving it as hotel data.

⬇️ Input

Google Hotels Scraper takes one required input and eight optional ones, all read from the Actor's input schema.

ParameterRequiredTypeDescriptionExample Value
searchQueryYesarrayCities, areas, or keywords to search — e.g. "Prague hotels", "Paris center". Add multiple for bulk scraping.["Prague hotels"]
maxResultsNointegerHow many hotels to return per search query (1–5000). Default 10.20
checkInDateNostringArrival date, YYYY-MM-DD. Affects returned prices. Default "2026-12-01"."2026-12-01"
checkOutDateNostringDeparture date, YYYY-MM-DD, must be after check-in. Default "2026-12-05"."2026-12-05"
numberOfAdultsNointegerNumber of adults (1–10). Affects room options and pricing. Default 2.2
numberOfChildrenNointegerNumber of children (0–10). Default 0.0
currencyCodeNostring3-letter currency code (EUR, USD, GBP, BRL, TRY, etc.). Default "EUR"."USD"
sortOrderNostringHow to order the dataset: relevance (Google's own order), price_low_high, price_high_low, rating_high_low, stars_high_low. Hotels missing the sort value are placed last, never faked. Default "relevance"."price_low_high"
proxyConfigurationNoobjectApify proxy settings. Leave default to start with no proxy — the Actor auto-upgrades only if it gets blocked.{ "useApifyProxy": false }

Example input

{
"searchQuery": ["Prague hotels", "Paris center"],
"maxResults": 20,
"checkInDate": "2026-12-01",
"checkOutDate": "2026-12-05",
"numberOfAdults": 2,
"numberOfChildren": 0,
"currencyCode": "EUR",
"sortOrder": "price_low_high",
"proxyConfiguration": { "useApifyProxy": false }
}

⬆️ Output

Every hotel is pushed to the Actor's dataset as one typed JSON record, with the same 18-key schema on every run. Export it as JSON, CSV, Excel, or any other format Apify's dataset export supports.

Example output

{
"thumbnail": "https://lh3.googleusercontent.com/gps-cs-s/AC9h4nqExampleThumbnail",
"url": "https://www.google.com/travel/hotels/entity/CgoIhZWXt6qtwpUBEAE",
"title": "Hotel Paříž Prague",
"website": "https://www.hotel-paris.cz",
"address": "U Obecního domu 1, 110 00 Praha 1, Czechia",
"phone": "+420 222 195 195",
"photos": [
"https://lh3.googleusercontent.com/p/ExamplePhoto1",
"https://lh3.googleusercontent.com/p/ExamplePhoto2"
],
"rating": 4.6,
"reviews": 1284,
"prices": [
{ "provider": "Booking.com", "price": 245, "link": "https://www.google.com/travel/clk?..." },
{ "provider": "Expedia", "price": 259, "link": "https://www.google.com/travel/clk?..." }
],
"priceRange": "245 - 259",
"stars": 5,
"amenities": ["Free Wi-Fi", "Breakfast included", "Fitness center", "Air conditioning"],
"gps": { "lat": 50.0876, "lng": 14.4265 },
"aboutHotel": "Art Nouveau hotel near the Municipal House, offering elegant rooms, a spa and an on-site restaurant.",
"healthAndSafety": ["Physical distancing", "Staff temperature checks"],
"addressAndContact": {
"address": "U Obecního domu 1, 110 00 Praha 1, Czechia",
"phone": "+420 222 195 195",
"checkIn": "2:00 PM",
"checkOut": "12:00 PM"
},
"searchQuery": "Prague hotels"
}

How does it work?

Google Hotels Scraper sends plain HTTP requests — no headless browser — to Google Travel's public search page and to each matched hotel's entity page, plus its /location and /details sub-pages, using httpx with an optional Apify proxy layered in only if Google blocks the request. It parses the returned HTML with BeautifulSoup and regex, reading both the visible page markup and the JSON Google embeds inline (script tags, ld+json, and Google's own AF_initDataCallback data) to fill in fields like price, rating, amenities and GPS. Because several independent extraction paths feed each field, the output schema keeps its shape even when Google tweaks its page markup. Only what Google shows to any visitor is returned — nothing requires signing in.

Integrations

Google Hotels Scraper is an Apify Actor, so it's callable the same way as any other Actor on the platform — no proprietary SDK to learn.

Calling Google Hotels Scraper programmatically

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run_input = {"searchQuery": ["Prague hotels"], "maxResults": 20}
run = client.actor("google-hotels-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item.get("priceRange"))

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

MCP integration for AI agents

Google Hotels Scraper can be exposed to an MCP-compatible client through Apify's official @apify/actors-mcp-server: run APIFY_TOKEN=<your-token> npx -y @apify/actors-mcp-server --actors google-hotels-scraper to register it as a callable tool. This works with Claude Desktop, Claude Code, and other MCP clients that support local server registration.

No-code tools (n8n, Make, LangChain)

In n8n or Make, use an HTTP Request module pointed at the Actor's run endpoint (https://api.apify.com/v2/acts/google-hotels-scraper/run-sync-get-dataset-items) with your Apify API token, and pass the input JSON as the request body. In LangChain, call it through the ApifyWrapper utility, passing google-hotels-scraper as the Actor ID and your run input as the call parameters.

Yes — scraping publicly available hotel data that any visitor can see without logging in is generally lawful. Google Hotels Scraper returns only public business and pricing data — hotel names, addresses, amenities, and OTA prices — not personal data about individuals, so this sits under standard website terms-of-service and database-rights considerations rather than personal-data regimes like GDPR or CCPA. Consult legal counsel if your use case involves bulk storage of personal data or redistribution of scraped content.

Frequently asked questions

What Google Hotels fields does Google Hotels Scraper return?

The top fields are title, prices/priceRange, rating, stars, and amenities, alongside address, GPS, photos and hotel descriptions — see the full fields table above.

Does Google Hotels Scraper require a Google account or login?

No. It reads Google Travel's public search and hotel pages with a standard HTTP client — no Google account, cookies, or API key are used or required.

How many hotels can I extract in one run?

maxResults accepts 1–5000 hotels per search query, and searchQuery can hold multiple search terms in one run, so a single run can cover many destinations at once.

What happens if a hotel search returns zero results, or a hotel page fails to load?

If Google's search page returns no hotel links for a query, the Actor logs a warning and moves to the next query with no rows for that search. If an individual hotel's page fails or times out after retries and proxy escalation, that hotel is skipped — it's left out of the dataset rather than saved as an empty or fabricated row.

Can I scrape multiple Google Hotels searches at once?

Yes. searchQuery is an array — add as many cities, areas, or hotel keywords as you want, and the Actor processes them one after another in the same run.

Does Google Hotels Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes. It's reachable through Apify's @apify/actors-mcp-server for MCP clients like Claude Desktop and Claude Code, and it's callable as a plain HTTP endpoint from any agent framework that can make a request.

How does Google Hotels Scraper compare to other Google Hotels scrapers?

Google Hotels Scraper aggregates prices from multiple OTAs (Booking.com, Expedia, Hotels.com, and others) per hotel in a single run, enriches each hotel with its /location and /details sub-pages for amenities and health & safety data, and lets you re-sort the output by price, rating, or stars without a second pass over the data.

Does Google Hotels Scraper return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with consistent field names across runs — no HTML parsing or selectors needed. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.

What happens when Google changes its layout or anti-bot system?

The Actor is maintained, and its output schema is designed to stay stable because each field has more than one extraction path (embedded JSON first, page markup as fallback). No specific update turnaround time is promised.

Can I use Google Hotels Scraper without managing proxies or browser infrastructure?

Yes. The Actor makes its own HTTP requests and handles proxy selection and escalation internally — you don't configure a browser or manage proxy tiers yourself. It does not use a headless browser; it works directly against Google's HTML and embedded JSON.

Which Google Hotels fields work best for AI training data and RAG indexing?

For RAG, index the high-information text fields: aboutHotel, amenities, and healthAndSafety. For training data, use the fields with the most consistent structure across records: priceRange, rating, and stars — all return as typed primitives (strings and numbers), not free text.

Scraper NameWhat it extracts
Airbnb ScraperAirbnb listing details, host info, pricing and availability
Airbnb Full Year Price Tracker: Cheapest & Most Expensive DatesAirbnb nightly price calendar across a full year
Airbnb Occupancy Scraper with Booking Rate PercentageAirbnb booking-rate and occupancy estimates
Zillow Search Scraper: Price History TrackingProperty listings and price-history data from Zillow
Google Trends ScraperSearch-interest trend data from Google Trends

Your feedback

Found a bug or missing a field in Google Hotels Scraper? Let us know through the Actor's Issues tab on Apify or your Scraper Engine support channel, and we'll take a look. Bug reports and field requests are what keep this Actor accurate as Google's pages change.