Google Hotels Scraper
Pricing
Pay per event
Google Hotels Scraper
Scrape Google Hotels: hotel names, nightly and total prices, ratings, reviews, stars, amenities, coordinates, images and the price of every booking site (Booking.com, Expedia, official site...) for any location and dates.
What does Google Hotels Scraper do?
Google Hotels Scraper extracts hotel listings from Google Hotels for any city, region or area and any dates. For each hotel you get the name, nightly price, total price for the stay, star class, guest rating, review count, amenities, coordinates, images and, optionally, the price offered by every booking site: Booking.com, Expedia, Hotels.com, Trip.com, Priceline, the hotel's official website and more.
Enter a list of locations and dates, click Start, and download the data as JSON, CSV, Excel or HTML, or fetch it through the Apify API. Because it runs on the Apify platform, you can schedule it, call it from your own code, connect it to Make, Zapier or Google Sheets, and monitor every run.
Why use Google Hotels Scraper?
- Rate monitoring & revenue management. Track how a hotel's price differs between booking sites and between dates.
- Travel price comparison. Feed your own comparison site or deal alerts with fresh prices from all major OTAs.
- Market research. Compare supply, star classes, ratings and prices across cities, neighborhoods or seasons.
- Lead lists of properties. Build lists of hotels with coordinates, class and rating for a destination (business listing data only, no personal data).
The Actor reads the structured data Google embeds in the page rather than the visual layout, so it's fast and cheap (no browser) and less likely to break when Google restyles the page.
How to scrape Google Hotels
- Open the Actor and go to the Input tab.
- Add one or more locations, for example
Lisbon,New YorkorRio de Janeiro. - Pick the check-in and check-out dates, guests, currency, language and country.
- Choose how many hotels you want per location and whether to include booking-site prices.
- Click Start. When the run finishes, open the Output tab or export the dataset.
Input
All fields except locations are optional.
| Field | Type | Default | Description |
|---|---|---|---|
locations | string[] | (required) | Places to search, as you'd type them after "hotels in". One search per location. |
checkInDate | YYYY-MM-DD | today + 14 | Check-in date. |
checkOutDate | YYYY-MM-DD | today + 15 | Check-out date (1 to 30 nights). |
adults | integer | 2 | Number of adults. |
children | integer | 0 | Number of children (sent to Google as 10 years old each). |
currency | string | USD | ISO currency code for all prices. |
language | string | en | Google interface language (hl), e.g. en, pt-BR, es, ja. |
country | string | us | Google country (gl), e.g. us, br, gb, jp. |
maxResultsPerLocation | integer | 50 | Maximum hotels per location (up to 500). The Actor paginates automatically. |
includeVendorPrices | boolean | true | Also collect the price of each booking site and the street address (one extra request per hotel). |
proxyConfiguration | object | Apify Proxy | Network settings. The default works; you normally don't need to change it. |
Example input:
{"locations": ["Lisbon", "New York"],"checkInDate": "2026-10-17","checkOutDate": "2026-10-19","adults": 2,"currency": "EUR","language": "en","country": "us","maxResultsPerLocation": 50,"includeVendorPrices": true}
Output
One item per hotel. Example (shortened):
{"query": "hotels in Tokyo","location": "Tokyo","checkIn": "2026-10-17","checkOut": "2026-10-19","rank": 2,"name": "ONE@Tokyo by insomnia","googleHotelId": "8513623909204002594","propertyToken": "ChoI84KEy5HjiaeGARoNL2cvMTFkeGp4MnEyXxAB","url": "https://www.google.com/travel/hotels/entity/ChoI84KEy5HjiaeGARoNL2cvMTFkeGp4MnEyXxAB?q=hotels+in+Tokyo&...","address": "1 Chome-19-3 Oshiage, Sumida City, Tokyo 131-0045, Japan","latitude": 35.7117889,"longitude": 139.8159778,"stars": 3,"hotelClass": "3-star hotel","rating": 4.3,"reviewCount": 1004,"pricePerNight": 148.03,"totalPrice": 296.06,"currency": "EUR","amenities": ["Free Wi-Fi", "Accessible", "Kid-friendly"],"images": ["https://lh3.googleusercontent.com/..."],"description": "Industrial-chic quarters & a cafe in a choice hotel offering a rooftop lounge with skyline views.","vendorPrices": [{ "vendor": "ONE@Tokyo by insomnia", "price": 181.94, "priceText": "€182", "totalPrice": 363.88, "url": "https://...", "isOfficialSite": true },{ "vendor": "Priceline", "price": 148.03, "priceText": "€148", "totalPrice": 296.06, "url": "https://www.priceline.com/...", "isOfficialSite": false }],"scrapedAt": "2026-09-29T04:05:00.000Z"}
If a location can't be scraped after several retries, the dataset gets one item like { "query": "hotels in X", "location": "X", "error": "..." }. These error items are not charged. You can download the dataset in various formats such as JSON, HTML, CSV or Excel.
Data fields
| Field | Description |
|---|---|
name, googleHotelId, propertyToken, url | Hotel identity and its Google Hotels page for your dates |
pricePerNight, totalPrice, currency | Lowest nightly price, and the total for the stay including taxes and fees |
stars, hotelClass, rating, reviewCount | Hotel class and Google guest rating |
latitude, longitude, address | Location (address only with includeVendorPrices) |
amenities, images, description | Amenities, up to 5 image URLs, short description |
vendorPrices[] | vendor, nightly price, totalPrice, direct offer url, isOfficialSite |
rank, query, location, checkIn, checkOut, adults, children, scrapedAt | Search context |
How much does it cost to scrape Google Hotels?
This Actor uses pay-per-event pricing. You only pay for results you get:
| Event | Price | When |
|---|---|---|
hotel | $0.003 | per hotel returned ($3 per 1,000 hotels) |
vendor-prices | $0.002 | per hotel whose booking-site prices were collected (only with includeVendorPrices) |
Example: 1,000 hotels with booking-site prices cost $5.00; without booking-site prices, $3.00. Failed locations are never charged. Platform usage is included in the price.
Tips
- Turn off
includeVendorPricesif you only need the list of hotels and the lowest price. It's cheaper and about 3x faster. - Use
maxResultsPerLocationto cap costs. Google returns about 18 new hotels per page. - Prices depend on the dates, the number of guests and the
country. Keep them fixed when you compare prices over time. - For many dates, run the Actor once per date range (or use Apify Tasks and Schedules).
Limitations
- Results and their order are what Google shows to an anonymous visitor. They can include vacation-rental style listings next to hotels, and the ranking can differ slightly from your personalized browser view.
- Amenity names are always in English. Hotel cards expose the most common amenities (Wi-Fi, pool, parking, breakfast, spa, ...), not the full amenity list from the hotel's "About" page.
- Some listings have no star class, rating or address on Google; those fields are
null. childrenare sent with age 10.- Booking-site links point directly to the offer at the moment of scraping. Offers expire and prices change constantly.
FAQ
Is it legal to scrape Google Hotels? The Actor only collects publicly visible business listing data (hotels, prices, ratings). It doesn't collect personal data and doesn't log in. You're responsible for how you use the data: check the terms of the sites involved and the laws that apply to you.
Something is broken or missing? Please open an issue in the Issues tab with the input you used. We fix problems quickly.