Google Hotels & Vacation Scraper - Most Comprehensive
Pricing
from $0.09 / 1,000 hotels
Google Hotels & Vacation Scraper - Most Comprehensive
๐ฅ ~$0.1/1K hotels ๐ฅ Scrape Google Hotels and Vacation Rentals with full filter support - price, hotel class, guest rating, amenities, property types, offers, eco-certified. Includes batch searches, booking links, and paginated reviews.
Pricing
from $0.09 / 1,000 hotels
Rating
0.0
(0)
Developer
Kai
Maintained by CommunityActor stats
0
Bookmarked
37
Total users
9
Monthly active users
15 days ago
Last modified
Categories
Share
Google Hotels & Vacation Rentals Scraper
Collect public Google Hotels and Vacation Rentals search results, property details, prices, reviews, and photos. Run location searches in batches or look up specific Google Hotels entity URLs.
Why use this scraper?
- Search hotels, vacation rentals, or both
- Run several destinations or stay dates in one Actor run
- Apply hotel price, class, guest-rating, and amenity filters
- Add property details and reviews to search results
- Look up specific hotel entity URLs with details and available gallery photos
- Receive usable dataset records with explicit partial-result status
Use cases
- Monitor hotel prices across locations and dates
- Compare vacation rental prices across booking platforms
- Build accommodation databases for travel analytics
- Track pricing trends for specific properties or areas
- Feed hotel data into alerting or recommendation pipelines
How to use
Basic hotel search
{"searches": [{ "location": "Hue", "checkInDate": "2026-10-15", "checkOutDate": "2026-10-18" }],"type": "hotels"}
Vacation rentals only
{"type": "vacation_rentals","searches": [{ "location": "Paris", "checkInDate": "2026-10-15", "checkOutDate": "2026-10-22" }]}
Batch searches
{"searches": [{ "location": "Paris", "checkInDate": "2026-10-15", "checkOutDate": "2026-10-18" },{ "location": "Paris", "checkInDate": "2026-11-12", "checkOutDate": "2026-11-15" },{ "location": "Tokyo", "checkInDate": "2026-12-03", "checkOutDate": "2026-12-06" }]}
With filters
{"searches": [{ "location": "Hue", "checkInDate": "2026-10-15", "checkOutDate": "2026-10-18" }],"type": "hotels","maxPrice": 100,"currency": "USD","hotelClass": [4, 5],"guestRating": "4.0","amenities": ["Pool", "Free Wi-Fi"],"sortBy": "price_low","adults": 2,"rooms": 1}
With details and reviews
{"searches": [{ "location": "Hue", "checkInDate": "2026-10-15", "checkOutDate": "2026-10-18" }],"type": "hotels","includeDetails": true,"includeReviews": true,"maxResults": 10}
Lookup specific hotels by URL
{"hotelUrls": ["https://www.google.com/travel/hotels/entity/ChkIq_atzbv20-8ZGg0vZy8xMXFoMzRoa3pfEAE"],"searches": [{ "location": "Tokyo", "checkInDate": "2026-10-15", "checkOutDate": "2026-10-18" }],"currency": "VND","includeReviews": true,"maxReviewsPerHotel": 100,"reviewSort": "highest_score","maxPhotosPerHotel": 0}
Reviews with sorting and search
{"hotelUrls": ["https://www.google.com/travel/hotels/entity/ChkIq_atzbv20-8ZGg0vZy8xMXFoMzRoa3pfEAE"],"searches": [{ "location": "Tokyo", "checkInDate": "2026-10-15", "checkOutDate": "2026-10-18" }],"includeReviews": true,"maxReviewsPerHotel": 50,"reviewSort": "highest_score","reviewSearch": "breakfast"}
Multiple guests
{"searches": [{ "location": "Bali", "checkInDate": "2026-10-15", "checkOutDate": "2026-10-22" }],"type": "vacation_rentals","adults": 4,"children": 2,"rooms": 2}
Input
| Field | Type | Default | Description |
|---|---|---|---|
hotelUrls | string[] | URLs containing /entity/<token>. Starts lookup mode; repeated valid entries are processed independently and entries without a token are skipped | |
searches | array | New York, next day | { location, checkInDate, checkOutDate } entries. Lookup uses the first entry's dates; an explicit empty array is accepted |
type | enum | both | hotels, vacation_rentals, both |
adults | integer | 2 | Adult guests (1-9) |
children | integer | 0 | Child guests (0-9) |
rooms | integer | 1 | Number of rooms (1-9) |
currency | string | USD | Any three-character price currency value, preserved as supplied |
minPrice | integer | Minimum price per night in the selected currency | |
maxPrice | integer | Maximum price per night in the selected currency | |
hotelClass | integer[] or string[] | Star levels from 2 through 5; numeric strings remain accepted | |
guestRating | enum | 3.5, 4.0, 4.5 | |
amenities | string[] | Amenity names. Known names are mapped to Google filters; unknown names are ignored | |
propertyTypes | string[] | Property-type names. Known names are mapped to Google filters; unknown names are ignored | |
freeCancellation | boolean | Request free-cancellation offers | |
specialOffers | boolean | Request special offers | |
ecoCertified | boolean | Request eco-certified properties | |
sortBy | enum | relevance | relevance, price_low, price_high, rating, distance |
maxResults | integer | 50 | Maximum results per location and property type |
includeDetails | boolean | false | Add booking links, amenities, descriptions, and related detail data to search results |
includeReviews | boolean | false | Add available reviews to each property |
maxReviewsPerHotel | integer | 40 | Maximum reviews per property. 0 continues until no page remains |
reviewSort | enum | most_helpful | most_helpful, most_recent, highest_score, lowest_score |
reviewSearch | string | Free-text search within reviews (e.g. "breakfast", "clean rooms") | |
maxPhotosPerHotel | integer | 0 | Lookup mode only. 0 continues until no gallery page remains |
proxyConfiguration | object | {"useApifyProxy":true} | Optional connection settings managed by Apify |
Legacy fields remain accepted across search and lookup modes. The Actor does not add cross-field rejection rules for date order, price order, repeated searches, occupancy, filters, or lookup/search field combinations. Unknown top-level and nested search fields are tolerated for forward compatibility.
When a non-empty hotelUrls list is present, lookup mode takes precedence. The Actor verifies that returned detail data belongs to the submitted entity token, then attempts web results, photo categories, gallery photos, and optional reviews. A URL without an entity token is skipped without discarding valid siblings. If searches is omitted, the baseline New York next-day search supplies lookup dates. Repeated entity tokens are processed independently in input order.
An empty input remains valid and uses the default New York search. An explicit empty searches array completes with no search work.
Real output
This is the complete, unchanged dataset record from a one-result New York hotel run on July 30, 2026. Property availability and values can change between runs.
{"searchType": "hotel","url": "https://www.google.com/travel/hotels/entity/ChYIjrDskJ36j9gtGgovbS8wamtfbnZwEAE","location": "New York","checkInDate": "2026-09-28","checkOutDate": "2026-10-01","name": "Hotel Edison","propertyId": null,"placeId": null,"starRating": 4,"propertyType": null,"latitude": 40.7597355,"longitude": -73.9861511,"distance": null,"pricePerNight": 257,"totalPrice": 772,"currency": "USD","priceLabel": "$257","reviewScore": 3.8,"reviewCount": 8462,"reviewSource": null,"thumbnailUrl": null,"photos": [],"amenities": [],"ecoBadge": false,"sleeps": null,"bedrooms": null,"bathrooms": null,"hashId": null,"highlights": [],"capacity": [],"featured": false,"bookingToken": "ChYIjrDskJ36j9gtGgovbS8wamtfbnZwEAE","phone": null,"website": null,"countryCode": null,"address": null,"neighborhood": null,"neighborhoodDescription": null,"neighborhoodScores": [],"ratingDistribution": [],"aspectSentiments": [],"externalReviewSources": [],"bookingLinks": [],"description": null,"roomTypes": [],"checkInTime": null,"checkOutTime": null,"reviews": [],"nearbyHotels": [],"sponsoredHotels": [],"nearbyVacationRentals": [],"nearbyPlaces": [],"nearbyBusinesses": [],"priceHistory": null,"priceBreakdown": null,"originalPricePerNight": null,"originalTotalPrice": null,"reviewSummaryPositive": null,"reviewSummaryNegative": null,"featuredReviewSnippets": [],"locationHierarchy": [],"googleCategory": null,"inclusivityLabels": [],"featuredIn": [],"webResults": [],"photoCategories": [],"dataStatus": "complete","failedSections": []}
Output
Each usable property is written directly to the default dataset. No runtime output schema rejects a whole record. Known unavailable values are represented by null or an empty array rather than invented values.
dataStatus is complete when all requested sections finished. It is partial when a requested enrichment failed, and failedSections names those sections. A complete record can still contain nullable fields when the source has no value.
Search records follow input order. For type: "both", hotels are processed before vacation rentals for each stay. Results within each search use the requested ordering. Repeated upstream rows and URL lookups retain their occurrence order and count toward their applicable limits.
Core fields
The table summarizes the commonly returned identity, context, price, and status fields. Additional source fields may appear when Google provides them.
| Field | Type | Description |
|---|---|---|
searchType | string | "hotel" or "vacation_rental" |
url | string | Public Google Hotels property URL |
location | string or null | Search location or resolved lookup location |
checkInDate | string | Check-in date |
checkOutDate | string | Check-out date |
name | string | Property name |
propertyId | string or null | Google property ID when available |
placeId | string or null | Google Place ID when available |
starRating | number or null | Hotel class when available |
propertyType | string or null | Property category |
latitude | number | GPS latitude |
longitude | number | GPS longitude |
distance | string or null | Source-provided distance label |
pricePerNight | number or null | Price per night |
totalPrice | number or null | Total price for the stay |
currency | string | Currency code |
priceLabel | string or null | Source-provided price label |
reviewScore | number or null | Aggregate review score |
reviewCount | integer or null | Aggregate review count |
reviewSource | string or null | Aggregate rating source |
thumbnailUrl | string or null | Property thumbnail |
photos | array | Deduplicated { url, label, categoryIds } entries |
amenities | string[] | Available amenity names |
hashId | string or null | Source identifier when available |
highlights | string[] | Source-provided property highlights |
capacity | string[] | Vacation-rental capacity labels |
sleeps | integer or null | Vacation-rental guest capacity |
bedrooms | integer or null | Vacation-rental bedroom count |
bathrooms | number or null | Vacation-rental bathroom count |
featured | boolean | Featured flag |
bookingToken | string or null | Source-provided Google Hotels booking token |
ecoBadge | boolean | Eco marker when returned in property details |
dataStatus | string | "complete" or "partial" |
failedSections | string[] | Any failed details, reviews, webResults, photoCategories, or photos sections |
Detail and lookup fields
Search mode populates these fields when includeDetails is true. Lookup mode always attempts property details. webResults, photoCategories, and full gallery pagination are lookup-only sections.
| Field | Type | Description |
|---|---|---|
address | string or null | Full street address |
phone | string or null | Phone number |
website | string or null | Hotel website URL |
countryCode | string or null | Country code when available |
description | string or null | Property description |
checkInTime | string or null | Check-in time |
checkOutTime | string or null | Check-out time |
amenities | string[] | Available amenities with human-readable names |
neighborhood | string or null | Neighborhood name |
neighborhoodDescription | string or null | Short neighborhood description |
neighborhoodScores | array | { category, rating } - 5 neighborhood category scores |
ratingDistribution | array | { stars, count } - star breakdown (5โ
through 1โ
) |
aspectSentiments | array | { aspect, score, positive, negative, total } - e.g. Breakfast, Service, Location |
externalReviewSources | array | { source, rating, maxRating, count } entries |
bookingLinks | array | { provider, price, url, logoUrl, isOfficialSite, freeCancellation, freeCancellationDeadline } |
roomTypes | array | { name, price } - room types with pricing |
priceHistory | object or null | Current and typical price values when available |
priceBreakdown | object or null | Base price, taxes, fees, and total with taxes when available |
originalPricePerNight | number or null | Original nightly price before a displayed discount |
originalTotalPrice | number or null | Original stay total before a displayed discount |
reviewSummaryPositive | string or null | Positive review summary |
reviewSummaryNegative | string or null | Negative review summary |
featuredReviewSnippets | string[] | Source-provided review snippets |
locationHierarchy | array | Resolved location names and identifiers |
googleCategory | string or null | Source-provided Google category |
inclusivityLabels | string[] | Source-provided inclusivity labels |
featuredIn | string[] | Editorial mentions (e.g. "Featured in Best Hotels in Tokyo with a View") |
webResults | array | Related { title, url, snippet, domain, favicon } results |
photoCategories | array | { categoryId, name, count, thumbnailUrl } - photo gallery category summary |
nearbyPlaces | array | { name, photoUrl, rating, reviewCount, description, latitude, longitude, category, travelTimes } - POIs with travel times |
nearbyBusinesses | array | { placeId, name, category, rating, reviewCount, phone, website, reservationUrl, photoUrl, priceRange, hours } |
nearbyHotels | array | Similar hotels (NearbyHotel type) |
sponsoredHotels | array | Sponsored/popular hotels (NearbyHotel type) |
nearbyVacationRentals | array | Nearby vacation rentals (NearbyHotel type) |
Review fields
Reviews are populated only when includeReviews is true. maxReviewsPerHotel applies to the collected review occurrences for each property.
| Field | Type | Description |
|---|---|---|
reviews | array | Review entries (see below) |
Each review:
| Field | Type | Description |
|---|---|---|
source | string | Review provider |
author | string | Reviewer name |
authorUrl | string or null | Profile URL |
avatarUrl | string or null | Profile photo URL |
rating | number | Rating (1-5) |
maxRating | number | Provider rating scale |
text | string | Full review text |
date | string | Relative date ("3 months ago") |
reviewId | string or null | Source-provided review identifier |
reviewUrl | string or null | Direct review URL when available |
subRatings | array | { category, score, maxScore } entries |
photos | string[] | Review photo URLs |
highlights | string[] | Hotel tags ("Luxury", "Romantic", "Great value") |
replyText | string or null | Owner reply text |
Run outcomes
A valid search with no matches succeeds with an empty dataset. In a batch, failed searches or lookups do not discard successful siblings, and even an all-target acquisition failure completes with an empty dataset plus warnings. Dataset persistence failures remain fatal.
Optional enrichment failures preserve the base property record with dataStatus: "partial". A URL lookup whose underlying detail request fails may have no record, but that target does not discard siblings or fail the completed batch. Use failedSections to decide whether to retry or accept a partial record.
Responsible use
The Actor collects public accommodation data. Review records can contain names, profile links, photos, and free text. Store only what you need, limit access and retention, and follow the source terms and laws that apply to your use.