Google Hotels Scraper
Pricing
from $1.00 / 1,000 results
Google Hotels Scraper
[๐ฐ $1 / 1K] Extract hotel and vacation rental listings from Google Hotels โ nightly and total rates, star class, guest ratings, amenities, images, GPS, and Google Place IDs. Filter by stars, 19 amenities, 12 property types and 10 rental types across 43 countries, 19 languages and 21 currencies.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
39
Total users
4
Monthly active users
18 days ago
Last modified
Categories
Share
Pull structured hotel and vacation-rental data straight out of Google Hotels: property names, nightly and total rates, star class, guest ratings and review counts, amenity lists, GPS coordinates, image galleries, and stable Google identifiers you can join on. Built for revenue managers, travel affiliates and market analysts who need a live view of a destination's inventory without babysitting a browser or stitching together a dozen hotel-brand sites.
Why This Scraper?
- Two modes in one actor โ search a location ("hotels in Paris") for browsable inventory, or feed property tokens back in to pull each property's own check-in and check-out times, which the search cards never carry
- Filters Google actually honours โ 19 amenities, 12 hotel property types, 10 vacation-rental types and 5 star levels, all picked by name from dropdowns. Every one was checked against what Google says it applied, so a "Resorts" search returns resorts and not the whole city
- Amenity lists on roughly 9 of every 10 first-page results โ and they stay correct in German, Portuguese and Indonesian, not just English (measured across four market and language combinations)
- Vacation rentals mode โ flip one toggle to search villas, houses, cabins, cottages, chalets, bungalows, gรฎtes, holiday villages and houseboats, complete with the capacity facts Google shows on the card ("Entire villa", "Sleeps 6", "3 bedrooms")
- Occupancy that moves the price โ up to 50 adults and 50 children with a per-child age list. Rates come back quoted for the party you asked for instead of Google's silent default of two adults
- Localization that reaches the currency โ 43 countries, 19 languages and 21 currencies, and every
linkin the output carries the same country and language, so the page you open is the same market you searched - Clean numeric pricing โ
ratePerNightandtotalRatearrive as{ extracted, currency, formatted }objects, ready to sort, average and drop into a spreadsheet without stripping currency symbols - Stable join keys on every row โ
propertyToken,googlePlaceIdand a numericpropertyId, so you can track the same hotel across weeks of runs and match it to your own records - From $1 per 1,000 results โ you pay per result row, not per page, so a query that runs out of inventory costs you nothing extra
Use Cases
Revenue Management & Compset Analysis
- Pull competitor nightly rates for an identical check-in/check-out window and party size
- Re-run the same query weekly and track how a compset's pricing moves into a season
- Compare your property's amenity coverage against every neighbour on page one
Travel & Hospitality Market Research
- Measure how a destination's inventory splits across 1- to 5-star classes
- Size the boutique, hostel, resort or bed-and-breakfast segment in any city
- Watch rate spreads across neighbourhoods by running one query per district
Travel Content & Affiliate Sites
- Populate "Best hotels inโฆ" and "Top vacation rentals inโฆ" pages with fresh rates and ratings
- Keep review counts, star classes and amenity lists current on destination guides
- Localize the same guide for 19 languages and 21 currencies from a single input set
Lead Generation & Prospecting
- Build lists of independent properties by filtering out chains on star class and property type
- Match prospects to your CRM using Google Place IDs and GPS coordinates
- Feed tokens back through the actor for each property's check-in and check-out times
Vacation Rental Intelligence
- Survey villas, cabins and cottages with the capacity facts Google lists on each card ("Sleeps 6", "3 bedrooms")
- Track nightly rates for short-term rental competitors in a resort market
- Build destination-specific rental inventories that refresh on a schedule
Getting Started
Simple Search
Enter a location and let the defaults handle the rest (2 adults, check-in 14 days out, US / English / USD):
{"searchQueries": ["hotels in Paris"]}
Search with Dates & Guests
Target a specific stay window and party size:
{"searchQueries": ["hotels in Tokyo", "ryokan in Kyoto"],"checkInDate": "2026-05-12","checkOutDate": "2026-05-18","adults": 2,"children": 1,"childrenAges": "7","language": "en","currency": "JPY","country": "jp"}
Filtered Search
Narrow by star rating, required amenities and property type:
{"searchQueries": ["hotels in Barcelona"],"checkInDate": "2026-06-10","checkOutDate": "2026-06-14","stars": ["4", "5"],"amenities": ["free_wifi", "pool", "air_conditioned"],"propertyTypes": ["boutique_hotels", "resorts"]}
Vacation Rentals
Search houses, villas and apartments instead of hotels:
{"searchQueries": ["vacation rentals in Malibu"],"vacationRentals": true,"rentalTypes": ["villas", "houses"],"checkInDate": "2026-07-15","checkOutDate": "2026-07-22","adults": 4}
Property Details by Token
Already have property tokens from an earlier run? Pull the detail record for each one:
{"propertyTokens": ["ChYIhJvEzt34sfmCARoJL20vMDMzYnhzEAE"],"checkInDate": "2026-08-01","checkOutDate": "2026-08-05"}
Input Reference
Search
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | ["hotels in Paris"] | Location-based search queries such as "hotels in Paris" or "Bali resorts". Each query produces its own set of results. |
propertyTokens | string[] | [] | Google Hotels property tokens (from earlier search results) to pull a detail record for specific properties. |
Provide at least one of the two. You can also combine them in a single run.
Dates & Guests
| Parameter | Type | Default | Description |
|---|---|---|---|
checkInDate | string (YYYY-MM-DD) | 14 days from today | Check-in date. Must be today or a future date. |
checkOutDate | string (YYYY-MM-DD) | day after check-in | Check-out date. Must be after check-in. |
adults | integer | 2 | Number of adult guests (1โ50). |
children | integer | 0 | Number of child guests (0โ50). |
childrenAges | string | "" | Comma-separated ages (e.g. "5,8,12"). Required when children > 0. Each age 0โ17. |
Anything other than the default 2 adults with no children returns the first page of results only, because Google applies your party size to that page and quotes its standard two-guest rate on everything after it.
Filters
| Parameter | Type | Default | Description |
|---|---|---|---|
stars | string[] | [] | Only include hotels with these star ratings. Options: "1" โ "5". |
amenities | string[] | [] | Only include properties that offer all of these amenities. 19 options: Free parking, Parking, Indoor pool, Outdoor pool, Pool, Fitness center, Restaurant, Free breakfast, Spa, Beach access, Child-friendly, Bar, Pet-friendly, Room service, Free Wi-Fi, Air-conditioned, All-inclusive available, Wheelchair accessible, EV charger. |
propertyTypes | string[] | [] | Only include these hotel property types. 12 options: Beach hotels, Boutique hotels, Hostels, Inns, Motels, Resorts, Spa hotels, Bed and breakfasts, Apartment hotels, Minshuku, Japanese-style business hotels, Ryokan. Ignored when Vacation Rentals mode is enabled. |
An amenity, property-type or rental-type filter also returns the first page only. Google applies those three to the opening result block and then stops, so later pages would hand you properties that ignore your filter. Star filters keep paginating, and rows that contradict the star filter are dropped rather than billed.
Vacation Rentals
| Parameter | Type | Default | Description |
|---|---|---|---|
vacationRentals | boolean | false | Search vacation rentals (houses, villas, apartments) instead of hotels. |
rentalTypes | string[] | [] | Rental types to include. 10 options: Apartments, Bungalows, Cabins, Chalets, Cottages, Gรฎtes, Holiday villages, Houses, Houseboats, Villas. |
Localization
| Parameter | Type | Default | Description |
|---|---|---|---|
country | string | "us" | Country code for localizing results (ISO 3166-1 alpha-2). 43 countries supported. |
language | string | "en" | Language for result text (ISO 639-1). 19 languages supported. |
currency | string | "USD" | Currency for prices (ISO 4217). 21 currencies supported. |
Advanced
| Parameter | Type | Default | Description |
|---|---|---|---|
maxPages | integer | 1 | How far to keep going past the first page. Page 1 is Google's opening result block, typically 18โ20 properties. Each page after that comes from Google's "nearby properties" expansion and adds roughly 6โ17 new properties once duplicates are removed, so 3 usually returns 40โ50 properties in total on an unfiltered query. Set 0 to keep expanding until Google stops offering new properties. Ignored (first page only) when an amenity, property-type or rental-type filter is set, or when the party is not the default 2 adults โ expect 18โ20 results from those searches whatever you set here. You are billed per result, never per page. |
Output
A search query produces one search metadata record plus one property record per result. A property token produces one property detail record. Every row carries a recordType field so you can split them apart.
Property record (recordType: "property")
{"recordType": "property","query": "pet friendly hotels in Denver","pageNumber": 1,"type": "Hotel","name": "Hilton Denver City Center","description": "Chic rooms & suites in a polished downtown hotel featuring a stylish restaurant & bar.","link": "https://www.google.com/travel/hotels/entity/ChYIxI-O36v-qpcpGgovbS8wbXZuc2Z0EAE?hl=en&gl=us","propertyToken": "ChYIxI-O36v-qpcpGgovbS8wbXZuc2Z0EAE","googlePlaceId": "0x876c78d75b3f3101:0x292eabf2bbe387c4","propertyId": "18387054143944481453","gpsCoordinates": { "latitude": 39.7469942, "longitude": -104.9901771 },"hotelClass": "4-star hotel","extractedHotelClass": 4,"images": ["https://lh3.googleusercontent.com/...","https://lh3.googleusercontent.com/..."],"overallRating": 4.2,"reviews": 4060,"amenities": ["Breakfast ($)","Free Wi-Fi","Parking ($)","Air conditioning","Pet-friendly","Fitness center","Bar","Restaurant"],"ratePerNight": { "extracted": 157.37, "currency": "USD", "formatted": "$157" }}
| Field | Type | Description |
|---|---|---|
recordType | string | Always "property" for search results |
query | string | The search query this result came from |
pageNumber | integer | 1-indexed page number |
type | string | "Hotel" or "Vacation rental" |
name | string | Property name |
description | string | Google's editorial one-liner. First-page hotel results only; vacation rentals never have one |
link | string | Google Hotels URL, carrying the same country and language as your run |
propertyToken | string | Token you can pass back in propertyTokens |
googlePlaceId | string | Google Place ID for cross-referencing |
propertyId | string | Numeric Google property identifier, stable across runs |
gpsCoordinates | object | { latitude, longitude } |
hotelClass | string | Class label, localized ("4-star hotel", "4-Sterne-Hotel", "Entire villa") |
extractedHotelClass | integer | Numeric star class 1โ5, hotels only |
images | string[] | Image URLs |
overallRating | number | Overall guest rating 0.0โ5.0 |
reviews | integer | Total review count |
amenities | string[] | Amenity labels Google lists for the property. First-page results only |
ratePerNight | object | { extracted, currency, formatted } for the check-in and check-out dates you asked for |
totalRate | object | { extracted, currency, formatted } for the check-in and check-out dates you asked for |
Fields Google does not publish for a given property are left out of that row rather than filled with nulls.
Both rate fields are omitted whenever Google only quotes that property for some other set of dates, so a number you see is always a number for the stay you searched. The rest of the listing still comes back, so you keep the property, its link, its location, its rating and its amenities even when there is no quote for your dates.
Property detail record (recordType: "propertyDetail")
Returned for each entry in propertyTokens. It adds the property's own check-in and check-out times and its address, neither of which appears on a search card, and omits pricing, which Google does not publish on the property page.
{"recordType": "propertyDetail","type": "Hotel","name": "Bellagio Hotel & Casino","link": "https://www.google.com/travel/hotels/entity/ChYIhJvE...?hl=en&gl=us","propertyToken": "ChYIhJvEzt34sfmCARoJL20vMDMzYnhzEAE","googlePlaceId": "0x80c8c430cb5147bd:0x82f2c7c5d9d10d84","propertyId": "18415970343024881596","address": "3600 S Las Vegas Blvd, Las Vegas, NV 89109","gpsCoordinates": { "latitude": 36.1129455, "longitude": -115.1765067 },"checkInTime": "3:00 PM","checkOutTime": "11:00 AM","hotelClass": "5-star hotel","extractedHotelClass": 5,"images": ["https://lh3.googleusercontent.com/..."],"overallRating": 4.7,"reviews": 143119}
| Field | Type | Description |
|---|---|---|
recordType | string | Always "propertyDetail" |
type | string | "Hotel" or "Vacation rental" |
name | string | Property name |
link | string | Google Hotels URL for the property |
propertyToken | string | The token you supplied |
googlePlaceId | string | Google Place ID |
propertyId | string | Numeric Google property identifier |
address | string | Address as printed on the property page |
gpsCoordinates | object | { latitude, longitude } |
checkInTime | string | Check-in time shown on the property page (e.g. "3:00 PM") |
checkOutTime | string | Check-out time shown on the property page |
hotelClass | string | Class label |
extractedHotelClass | integer | Numeric star class 1โ5 |
images | string[] | Image URLs |
overallRating | number | Overall guest rating 0.0โ5.0 |
reviews | integer | Total review count |
excludedAmenities | string[] | Amenities the property page explicitly marks as not offered |
Search metadata record (recordType: "searchMetadata")
One per query, pushed before that query's results.
{"recordType": "searchMetadata","query": "hotels in Las Vegas","estimatedTotalResults": 7998,"searchTimestamp": "2026-08-10T14:14:48Z","language": "en","country": "us","currency": "USD"}
| Field | Type | Description |
|---|---|---|
recordType | string | Always "searchMetadata" |
query | string | The search query |
estimatedTotalResults | integer | Google's own rough count for the page it served. Useful for seeing whether a filter narrowed things, but it shifts between runs and regions, so don't read it as a market size |
searchTimestamp | string | ISO 8601 timestamp of when the search ran |
language | string | Language the results were requested in |
country | string | Country the results were localized to |
currency | string | Currency the prices are quoted in |
Tips for Best Results
- Always set dates โ rates and availability only appear when check-in and check-out are provided, and they drive Google's own price ordering
- Go narrow, not deep โ three neighbourhood queries ("hotels in Le Marais", "hotels in Saint-Germain", "hotels in Montmartre") return far more distinct properties than one city-wide query with a high
maxPages, because each query gets its own fresh first page - Amenity, property-type and rental-type filters stop at page one โ so does any party other than 2 adults. That is Google's behaviour, not a limit we chose: it applies those to the opening result block and nothing after it. Expect 18โ20 rows from those searches and split the market across several queries if you need more. Star filters are the exception and keep paginating
- Match currency to destination โ prices in the native currency avoid FX rounding artifacts. Use
EURfor European hotels,JPYfor Japan - Stack filters carefully โ combining stars, amenities and property type can over-constrain a small market down to a handful of properties. Start broad, then add one filter at a time
- Amenities and descriptions come from page one โ if those two fields matter to your analysis, run more queries at
maxPages: 1rather than fewer queries atmaxPages: 5 - Hotels and rentals are two different searches โ Google keeps them in separate modes, so run two jobs if you need both
- Children need ages โ when
children > 0, list one age per child inchildrenAges, or Google prices the room for a different party than you asked for
Pricing
From $1 per 1,000 results โ a flat pay-per-result rate. Bronze, Silver and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.
| Results | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| 100 | $0.120 | $0.113 | $0.106 | $0.100 |
| 1,000 | $1.20 | $1.13 | $1.06 | $1.00 |
| 10,000 | $12.00 | $11.30 | $10.60 | $10.00 |
| 100,000 | $120.00 | $113.00 | $106.00 | $100.00 |
A "result" is any row in your dataset โ one per property, plus one metadata row per query. There are no compute or time-based charges; you pay per result, plus a small fixed per-run start fee. Storage and other platform fees depend on your Apify plan.
Integrations
Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:
- Zapier / Make / n8n โ Workflow automation
- Google Sheets โ Direct spreadsheet export
- Slack / Email โ Notifications on new results
- Webhooks โ Custom API integrations
- Apify API โ Full programmatic access to runs and datasets
Legal & Ethical Use
This actor is designed for legitimate travel market research, competitive intelligence, rate tracking, and content enrichment. Users are responsible for complying with applicable laws and Google's Terms of Service. Do not use extracted data for spam, harassment, misrepresentation, or any illegal purpose. The actor collects only publicly visible property information โ no personal user data.