Google Hotels — Location Details Scraper
Pricing
$19.99/month + usage
Google Hotels — Location Details Scraper
Get comprehensive hotel data from Google Hotels—listings, prices, ratings, reviews, photos, and amenities. Clean, structured output makes it perfect for travel research, dynamic pricing models, and marketplace data enrichment.
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
1
Bookmarked
38
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Share
Google Hotels Scraper — Hotels, Nearby Attractions and Location Data
The Google Hotels — Location Details Scraper pulls hotel listings from Google Hotels/Travel search results as structured JSON — hotel name, star and guest ratings, review count, price range, amenities, address, phone, website, and GPS coordinates. For every hotel it also adds a neighborhood summary, a Google location score, and up to 23 nearby points of interest with travel times, plus a derived walkability proxy. Travel and OTA analysts, revenue management consultants, and market researchers use this location-enriched dataset to compare destinations and score competitive sets.
What is Google Hotels — Location Details Scraper?
Google Hotels — Location Details Scraper is an Apify Actor that scrapes Google Hotels/Travel search results and each hotel's own entity page, returning one structured JSON record per hotel plus, optionally, a mirrored dataset of nearby-place rows. No Google account, API key, or Places API billing is required — the Actor requests Google's public search and hotel pages directly (with an EU consent-cookie header) and runs entirely from the input fields you set on Apify.
Key capabilities:
- Discover hotels by free-text destination — city, neighborhood, or phrase (
destinations), with multiple destinations searched in one run - Return core identifying and contact fields: hotel name, address, phone, website, GPS coordinates
- Return guest-trust signals: star rating, aggregate rating, review count, and a computed price range across booking providers
- Return location-context fields not in a plain hotel scrape: neighborhood name/description, a distinct Google location score, up to 23 nearby points of interest with travel time, and a derived walkability proxy score/label
- Filter by stay dates, guest count, currency, result sort order, and which nearby-place categories to keep
- Accepts both this Actor's field names and the equivalent base-schema key names (e.g.
destinations/searchQuery,hotelLimit/maxResults) so JSON built for either schema runs unchanged - Export results as JSON, CSV, Excel, or the other formats Apify's dataset view supports
What data can I extract with Google Hotels — Location Details Scraper?
Each run pushes one dataset row per hotel. The Actor's row-building function (extract_hotel_data in src/main.py) writes the following keys; the dataset's default table view surfaces most of them plus url, which is present on every row but hidden from the default view:
| Field | Example Value | Use Case |
|---|---|---|
title | "Prague Central Residence" | Identify the hotel |
url | "https://www.google.com/travel/hotels/entity/CgoI8..." | Deep link back to the live Google Hotels listing |
thumbnail | "https://lh3.googleusercontent.com/gps-cs-s/..." | Lead image for a listing card |
photos | ["https://lh3.googleusercontent.com/...", "..."] (up to 15) | Gallery display |
address | "Politických vězňů, Prague, Czechia" | Mapping, geocoding, NAP matching |
phone | "+420 222 210 022" | Direct outreach to the property |
website | "https://www.praguecentralresidence.com" | Official booking link, bypassing OTA commission |
gps | {"lat": 50.0819, "lng": 14.4267} | Radius search, map plotting |
rating | 4.9 | Guest-satisfaction benchmarking |
reviews | 8 | Review-volume weighting |
stars | 4 | Category/class filtering |
amenities | ["Free Wi-Fi", "Air conditioning", "Non-smoking rooms"] | Feature-based comparison |
prices | [{"provider": "Booking.com", "price": 120, "link": "https://..."}] | Per-OTA price comparison |
priceRange | "120 - 145" | Quick budget filter |
aboutHotel | "Straightforward hotel offering modern rooms near..." | Listing summaries, AI context |
healthAndSafety | ["Contactless check-in", "Mask required in common areas"] | Policy display |
addressAndContact | {"address": "...", "phone": "...", "checkIn": "2:00 PM", "checkOut": "11:00 AM"} | Confirm stay-policy details |
neighborhood | {"name": "New Town", "description": "...", "qualitativeRating": "Excellent"} | Neighborhood-level context |
locationScore | 4.8 | Google's own 0-5 location rating |
nearbyPOIs | [{"name": "Národní Third of May", "category": "Top Sight", "travelMinutes": 6, "travelMode": "walking", ...}] | Proximity and itinerary analysis |
nearbyPOICount | 16 | Volume of nearby attractions found |
proximityScore | 92 | Walkability comparison across hotels |
proximityLabel | "Very Walkable Area" | Quick-read walkability tag |
avgPoiTravelMinutes | 7.2 | Average distance to nearby attractions |
searchQuery | "Prague hotels" | Trace a row back to its destination search |
Amenities, rates and stay details
amenities, prices, and priceRange cover the buying-decision data: amenities is the raw feature list scraped from the hotel page (Wi-Fi, parking, breakfast, and similar), prices is an array of {provider, price, link} objects — one entry per booking provider (Booking.com, Expedia, Hotels.com, and others) whose deep link the Actor could parse from the search page — and priceRange is the computed min-max span across those providers for the arrivalDate/departureDate window you set. aboutHotel and healthAndSafety add the free-text description and listed safety policies. A revenue analyst can pull prices for a destination to see how a property's rate compares across OTAs for the same stay dates, without opening each provider individually.
Location and date targeting data
gps, neighborhood, locationScore, nearbyPOIs, proximityScore, and proximityLabel are the fields you filter and segment on. gps and neighborhood place a hotel on the map and in its local context; locationScore and the walkability pair let you rank hotels by how well-situated they are rather than by guest rating alone. arrivalDate, departureDate, adultsCount, and childrenCount control which stay window and party size the displayed prices reflect, so two runs with different dates on the same destination return comparable, date-scoped pricing.
How does Google Hotels — Location Details Scraper differ from the official Google Places API?
Google does not publish a public API for searching live hotel rates in bulk. The closest official option, the Places API's Place Details endpoint, returns only static place data for a lodging entry — name, address, phone, hours, rating, review count — no room rates, availability, neighborhood insights, or nearby-attraction data — and it requires an API key plus a billing-enabled Google Cloud project (per Google's Places API docs, checked 2026-07-26).
| Feature | Google Places API | Google Hotels — Location Details Scraper |
|---|---|---|
| Live OTA room rates | Not returned | prices per provider + computed priceRange |
| Nearby points of interest with travel time | Not included | Up to 50 nearbyPOIs per hotel via maxNearbyPOIs |
| Neighborhood context / location score | Not included | neighborhood object + distinct locationScore |
| Walkability metric | Not included | Derived proximityScore + proximityLabel |
| Setup requirement | API key + billed Google Cloud project | Apify account only; run directly with input fields |
| Destination text search | Requires separate Text Search / Place Search calls | Single destinations list runs multiple searches in one job |
Why can't I get live hotel prices from the Places API?
The Places API is built around static place records, not travel bookings — it has no endpoint for OTA rates, so it cannot answer "what does this room cost for these dates." That gap exists because Google keeps live hotel pricing inside Google Hotels/Travel's own consumer search product rather than the developer Places API. This Actor covers that gap by requesting the same Google Hotels search and entity pages a browser would load for your destinations, arrivalDate, and departureDate, then parsing the per-provider price links directly off that page.
Use the Places API when you need a small number of verified business-listing lookups backed by a formal Google Cloud SLA. Use this Actor when you need hotel pricing, nearby-attraction data, or location scoring across many hotels at once.
How to use data extracted from Google Hotels?
Travel and OTA analysts
Run destinations for a target city with your real arrivalDate/departureDate window, then pull title, stars, rating, priceRange, amenities, and nearbyPOIs into a competitive-set spreadsheet. Because prices breaks rates out per provider, an analyst can spot which OTA undercuts the hotel's own website for the same dates, and use locationScore/proximityScore to explain why two similarly-rated hotels command different rates. Re-running the same destinations with rolled-forward dates turns this into a recurring rate-shopping workflow.
Revenue management and hospitality consulting agencies
Agencies working across multiple hotel clients run the same destinations query on a recurring basis to benchmark a client property against its actual competitive set: same neighborhood, similar stars, comparable priceRange. Because neighborhood, locationScore, and proximityScore are returned for every competitor in one pass, an agency can show a client exactly how their location scores against nearby alternatives, not just how their rate compares.
Market research and intelligence
gps and neighborhood support density mapping of hotel supply across a destination, priceRange supports price-distribution analysis by area or star tier, and proximityScore/locationScore let a researcher quantify how "walkable" a destination's hotel stock is overall — useful when scoping a new market or comparing two candidate cities before an expansion decision.
AI agents and automated pipelines
aboutHotel, neighborhood.description, and nearbyPOIs give a trip-planning or concierge agent grounded, current text to reason over instead of a static knowledge cutoff. An agent framework can call this Actor as a tool for a given destination and date range, then use the returned JSON directly in a recommendation or itinerary response.
🔼 Input sample
All 13 input parameters are optional — the Actor runs with its prefilled defaults if you change nothing.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
destinations | No | array | Cities, neighborhoods, or search phrases. Add several to run multiple searches in one job. Same field as the base schema's searchQuery. | ["Prague hotels"] |
hotelLimit | No | integer | How many hotels to scrape per destination (1-5000). Same as base's maxResults. | 10 |
arrivalDate | No | string | Check-in date, YYYY-MM-DD. Affects displayed pricing. Same as base's checkInDate. | "2026-12-01" |
departureDate | No | string | Check-out date, YYYY-MM-DD, must be after arrival. Same as base's checkOutDate. | "2026-12-05" |
adultsCount | No | integer | Number of adult guests (1-10). Same as base's numberOfAdults. | 2 |
childrenCount | No | integer | Number of child guests (0-10). Same as base's numberOfChildren. | 0 |
currency | No | string | 3-letter ISO currency code for displayed prices. Same as base's currencyCode. | "EUR" |
sortOrder | No | string (enum) | Order the scraped hotels: relevance (default, Google's own order), price_low_high, price_high_low, rating_high_low, stars_high_low. Rows missing the sort key are placed last, never faked. | "relevance" |
includeNearbyPOIs | No | boolean | Pull the nearby points-of-interest list from the same hotel /location page already fetched for amenities — no extra request. Default true. | true |
maxNearbyPOIs | No | integer | Cap on nearby points of interest kept per hotel across all categories combined (0-50). 0 = unlimited. Default 23. | 23 |
poiCategories | No | array (enum items) | Which nearby-place categories to keep: topsights, restaurants, airports, transit. Default all four. | ["topsights", "restaurants", "airports", "transit"] |
includeWalkabilityScore | No | boolean | Derive a 0-100 proximity/walkability proxy + label from nearby-place travel times. Default true. | true |
proxyConfiguration | No | object | Leave default for no proxy; the Actor auto-upgrades to datacenter then residential proxy only if Google blocks a request. | {"useApifyProxy": false} |
{"destinations": ["Prague hotels", "Paris city center"],"hotelLimit": 10,"arrivalDate": "2026-12-01","departureDate": "2026-12-05","adultsCount": 2,"childrenCount": 0,"currency": "EUR","sortOrder": "relevance","includeNearbyPOIs": true,"maxNearbyPOIs": 23,"poiCategories": ["topsights", "restaurants", "airports", "transit"],"includeWalkabilityScore": true}
Common pitfall: each unit of hotelLimit triggers three page fetches per hotel (search result, /location, /details), so a run of 500+ starts slow if you also leave includeNearbyPOIs on. Start with 10-20 while testing, and if you supply both a variant key and its base equivalent (e.g. both arrivalDate and checkInDate) in the same JSON, the base key wins.
🔽 Output sample
Output is a typed, normalized JSON row per hotel, exportable as JSON, CSV, or Excel from the Apify dataset. Only hotel rows are billed, under the hotel_result charged event; nearby-place rows mirrored into a per-run child dataset (nearby-places-<runId>) are pushed uncharged.
{"thumbnail": "https://lh3.googleusercontent.com/gps-cs-s/AC9h4nq...","url": "https://www.google.com/travel/hotels/entity/CgoI8dSGgJnQ3M8BEAE","title": "Prague Central Residence","website": "https://www.praguecentralresidence.com","address": "Politických vězňů, Prague, Czechia","phone": "+420 222 210 022","photos": ["https://lh3.googleusercontent.com/gps-cs-s/AC9h4nq1...","https://lh3.googleusercontent.com/gps-cs-s/AC9h4nq2..."],"rating": 4.9,"reviews": 8,"prices": [{ "provider": "Booking.com", "price": 120, "link": "https://www.google.com/travel/clk?..." },{ "provider": "Hotels.com", "price": 145, "link": "https://www.google.com/travel/clk?..." }],"priceRange": "120 - 145","stars": 4,"amenities": ["Free Wi-Fi", "Air conditioning", "Non-smoking rooms", "24-hour front desk"],"gps": { "lat": 50.0819, "lng": 14.4267 },"aboutHotel": "Straightforward hotel offering modern rooms near Wenceslas Square, with a 24-hour front desk.","healthAndSafety": ["Contactless check-in", "Mask required in common areas"],"addressAndContact": {"address": "Politických vězňů, Prague, Czechia","phone": "+420 222 210 022","checkIn": "2:00 PM","checkOut": "11:00 AM"},"neighborhood": {"name": "New Town","description": "Diverse area with chain stores on Wenceslas Square & waterside bars, plus National Theatre opera.","qualitativeRating": "Excellent"},"locationScore": 4.8,"nearbyPOIs": [{"name": "Národní Third of May","category": "Top Sight","rating": 4.6,"reviews": 312,"description": "Historic monument commemorating 1945 uprising","travelTime": "6 min walking","travelMinutes": 6,"travelMode": "walking"},{"name": "Restaurace U Dlabačů","category": "Restaurant","rating": 4.5,"reviews": 546,"description": "Restaurant","travelTime": "5 min by taxi","travelMinutes": 5,"travelMode": "taxi"}],"nearbyPOICount": 16,"proximityScore": 92,"proximityLabel": "Very Walkable Area","avgPoiTravelMinutes": 7.2,"searchQuery": "Prague hotels"}
How do you filter and target specific hotels?
Because destinations is free text rather than a fixed category list, phrasing changes result completeness — "Prague hotels" matches Google's general hotel search for the city, while a more specific phrase like "Prague city center hotels" narrows the same search toward that area first, so a broader term suits maximum coverage and a narrower one suits a specific area. Scope precision comes from arrivalDate/departureDate (which stay window the returned prices reflect), adultsCount/childrenCount (party size), and currency (which currency the price fields display in). Quality thresholds are set through sortOrder — sorting by rating_high_low or stars_high_low moves the best-reviewed or highest-class hotels to the top of the dataset without discarding the rest, and hotels missing that value are always placed last rather than assigned a guessed score — and through poiCategories, which limits nearby-attraction matching to the categories that matter for a given analysis, such as transit only for a commuter-focused comparison. Volume is controlled by hotelLimit, a hard per-destination cap from 1 to 5000 rather than a page size — there is no separate pagination parameter, and listing several destinations in one job simply reapplies the same hotelLimit to each entry independently. Toggle includeNearbyPOIs and includeWalkabilityScore off when you only need core hotel and price fields, since skipping that parsing step is the fastest way to scale a run toward the upper end of hotelLimit.
{"destinations": ["Prague city center hotels"],"hotelLimit": 15,"sortOrder": "rating_high_low","includeNearbyPOIs": true,"maxNearbyPOIs": 10}
{"destinations": ["Lisbon hotels", "Porto hotels"],"arrivalDate": "2026-09-10","departureDate": "2026-09-14","poiCategories": ["restaurants", "transit"],"sortOrder": "price_low_high"}
{"destinations": ["Manhattan NYC"],"hotelLimit": 500,"currency": "USD","sortOrder": "price_low_high","includeNearbyPOIs": false,"includeWalkabilityScore": false}
▶️ Want to try other travel/property scrapers?
| Scraper | What it extracts |
|---|---|
| Airbnb Full Year Price Tracker Scraper | Real nightly Airbnb prices across a date range, one live request per check-in date |
| Airbnb Occupancy & Rate Analytics Scraper | Occupancy rate, monthly breakdown, and daily availability from Airbnb's public calendar |
| Airbnb Scraper: Host Full Listings | Airbnb listings with the full host block plus each host's entire listing portfolio |
| Zillow Search Scraper: Investment Analyzer | Zillow search results with cap rate, rental yield, mortgage payment and cash-flow estimates |
| Zillow Agents Finder & Reviews Scraper | Zillow agents and lenders plus individual customer reviews in a linked child dataset |
How to extract Google Hotels data programmatically
This Actor runs as a standard Apify REST call — one endpoint, your Apify API token as the header, structured JSON back.
Python example
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("simpleapi/google-hotels-location-details-scraper").call(run_input={"destinations": ["Prague hotels"],"hotelLimit": 20,"sortOrder": "rating_high_low",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["priceRange"], item["locationScore"])
MCP for AI agents
This Actor is reachable through Apify's hosted MCP server. Register it with:
https://mcp.apify.com?tools=simpleapi/google-hotels-location-details-scraper
Compatible clients include Claude Desktop, Claude Code, Cursor, and VS Code (GitHub Copilot agent mode). A trip-planning or concierge agent can call the tool for a destination and stay dates, then reason over the returned hotel, pricing, and nearby-attraction JSON directly in its response.
Export to spreadsheets or CRM
Use the Apify dataset's built-in CSV/Excel export and map title to Hotel Name, address to Address, phone to Phone, priceRange to Price Range, and locationScore to Location Score as CRM or spreadsheet columns.
Is it legal to scrape Google Hotels?
Yes — this Actor collects publicly listed hotel and pricing information that Google itself displays openly to any visitor, without requiring a login. The records returned (hotel name, address, phone, price, amenities, location data) are business and product data rather than private personal information, so the relevant framework is Google's terms of service and general database-rights considerations rather than GDPR/CCPA. Review Google's terms of service before large-scale or commercial use, and consult legal counsel for commercial applications involving bulk storage of personal data.
❓ FAQ
What happens to hotels that are removed or no longer listed on Google?
The Actor returns whatever Google Hotels currently serves for your destinations at run time — there is no separate "closed" flag. Hotel rows where title extraction fails (for example, a consent-interstitial page instead of a real hotel page) are filtered out before being pushed, so delisted or unreachable hotels simply don't appear rather than showing as blank rows.
Can I get nearby attractions along with the main hotel records?
Yes. nearbyPOIs returns up to maxNearbyPOIs (default 23, max 50) points of interest per hotel across the categories set in poiCategories, sourced from the same /location page fetch used for amenities. The same rows are also mirrored into an uncharged per-run child dataset (nearby-places-<runId>) if you want to analyze attractions independently of hotels.
How accurate is the price and contact data?
The Actor returns data exactly as Google Hotels displays it for your arrivalDate/departureDate at request time. Accuracy depends on how current the underlying OTA/hotel listing is; validate a price or contact detail against the linked provider before using it in a booking or outreach decision.
How many hotels can I get per run?
Up to 5,000 per destination, set via hotelLimit. Because each hotel requires three page fetches (search result, /location, /details), runtime scales with this value and with how many destinations you list.
How do I filter by walkability or nearby-attraction type?
Set poiCategories to only the attraction types you want matched (topsights, restaurants, airports, transit), and leave includeWalkabilityScore on to get a proximityScore/proximityLabel computed from the resulting travel times. Turn includeWalkabilityScore off if you only need the raw nearbyPOIs list.
Does Google Hotels — Location Details Scraper work with Claude, ChatGPT, and AI agent frameworks?
Yes. It is reachable through Apify's MCP server at https://mcp.apify.com?tools=simpleapi/google-hotels-location-details-scraper for MCP-aware clients, and callable as a plain HTTP endpoint by any agent framework via the Apify API.
How does this compare to other Google Hotels scrapers?
Its distinguishing capability, verifiable in its own output schema, is that it parses neighborhood context, a distinct location score, and nearby points of interest with travel time from the same hotel page fetch used for amenities — with no extra request. This README does not cite competitor prices or speeds, since no competitor's own current listing was available to verify at the time of writing.
Can I use it without a Google API key or developer account?
Yes. You only need an Apify account and your run inputs — no Google account, API key, or Google Cloud billing project is required.
Conclusion
Google Hotels — Location Details Scraper turns a Google Hotels search into structured hotel records that already carry the location context — neighborhood, location score, nearby attractions, and walkability — that a plain hotel scrape leaves out. It's built for travel and OTA analysts, revenue management and hospitality consulting agencies, and market researchers who need pricing and location quality compared across many hotels at once, with a schema that stays consistent whether you scrape 10 hotels or 5,000. Open the Input tab, add your destinations and stay dates, and click Start to get JSON, CSV, or Excel results in your Apify dataset.