Google Hotels Scraper - Prices, Booking Sites, No Login
Pricing
from $2.40 / 1,000 hotels
Google Hotels Scraper - Prices, Booking Sites, No Login
Returns the hotels Google Hotels lists for a place and your dates: price per night and for the stay with taxes, rating, reviews, class, amenities by name, coordinates and photos. Optionally every booking site's price, address and phone. Filters, any currency. No browser, no login.
Pricing
from $2.40 / 1,000 hotels
Rating
0.0
(0)
Developer
Ben
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
🏨 Google Hotels Scraper
Returns the hotels and vacation rentals Google Hotels lists for a place and your dates, without a browser or a login. One row per property: the price per night and for the whole stay with taxes and fees, rating and number of reviews, hotel class, amenities by name, coordinates, photos and the link. Switch on the booking sites and each row also carries the price of every site Google lists for the stay (Booking.com, Expedia, the hotel's own site ...), the address and the phone number.
Price: $3.00 per 1,000 hotels on the Apify Free plan, down to $2.40 from the Gold plan up. With booking sites, address and phone: $5.00 per 1,000, down to $4.10. A place without hotels costs nothing. Export to JSON, CSV or Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.
🔎 What is the Google Hotels Scraper?
Google Hotels pages load their results through two data calls. This Actor makes the same two calls: one for the list of a search, 18 to 20 properties an answer, and one for a single hotel with its booking sites. No browser runs, so 512 MB of memory is enough and a default run of 20 hotels takes a few seconds.
A search is a text as you would type it into Google Hotels: "hotels in Paris", "hostels near Shibuya", "resorts in Cancun". A hotel's name with its city returns that one hotel. A link to a hotel on Google Hotels works too.
What data does it extract?
- Prices: per night and for the stay, both with taxes and fees, the taxes and fees on their own, in the currency you choose
- Deal note: Google's "37% less than usual" when it shows one
- Rating: guest rating, number of reviews, reviews per star, and what reviews mention (service, cleanliness, location ...) with the share of positive mentions
- Property: name, type (hotel, hostel, resort hotel, vacation rental ...), star class, Google's description, check-in and check-out time, website
- Amenities: by name ("Free Wi-Fi", "Pool", "Pet-friendly"), not only as numbers
- Place: coordinates, country, nearby sights, stations and airports with travel times
- Photos: a thumbnail and Google's first pictures
- With the booking-sites option: every booking site's price per night and for the stay, whether it can be cancelled free of charge, its link; the street address, the neighbourhood, the phone number and the full amenity list with "free" and "extra charge"
What users report on other Google Hotels Actors, and what this one does
The four most used Google Hotels Actors on Apify were read on October 7, 2026: their descriptions, inputs and issue pages.
| Reported or stated there | Here |
|---|---|
A run fails with "check_in_date cannot be in the past" | A past date is moved to today with a note in the log. Without any date the stay starts 30 days from the day of the run, so a schedule never grows old |
| "Some dates are missing" | Every row carries the stay it was priced for (checkInDate, checkOutDate); a property without a free room on those dates is listed with an empty price instead of being dropped |
| "Add currency IDR" | Any currency Google Hotels offers is passed through as its three-letter code; USD, EUR, JPY and MXN were run |
| Amenities come as code numbers with a table of seven of them | amenities holds the names, amenityCodes Google's numbers. 130 numbers are named |
| Check-in and check-out dates are required | Optional; checkInDays and nights describe a stay relative to the day of the run |
| One search text per run | Any number of searches, hotel names and links in one run, four side by side |
| The most used one shows 36% succeeded runs on its Store page | About one new connection in five is answered by Google with a short list of other properties or with nothing. This Actor knows that answer and asks again on a new connection, see "Limits" |
⬇️ Input
| Field | Type | Default | What it does |
|---|---|---|---|
searches | array | ["hotels in New York"] in the form | Places, searches or hotel names, one search each |
links | array | Google Hotels links to a hotel or to a search | |
checkInDate | string | First night (YYYY-MM-DD) | |
checkOutDate | string | Day of departure, 1 to 30 nights later | |
checkInDays | integer | 30 | Without a check-in date: the stay starts this many days from today |
nights | integer | 1 | Without a check-out date: length of the stay |
adults | integer | 2 | Prices are for all guests together |
childrenAges | array | One age per child (0 to 17) | |
currency | string | USD | Three-letter currency code |
country | string | us | Google market (gl) |
language | string | en | Language of names, classes and descriptions (hl) |
sortBy | string | relevance | relevance, lowest_price, highest_rating, most_reviewed |
maxResults | integer | 20 | Hotels per search, up to 1,000 |
minPrice, maxPrice | integer | Price per night in the chosen currency | |
minRating | string | 3.5, 4 or 4.5 | |
hotelClass | array | Star classes 2 to 5 | |
freeCancellation | boolean | false | Only offers that can be cancelled free of charge |
amenities | array | free_parking, pool, fitness_center, restaurant, free_breakfast, spa, beach_access, kid_friendly, bar, pet_friendly, room_service, free_wifi, accessible | |
includeBookingSources | boolean | false | Adds booking sites, address, phone and the full amenity list; one more request and a second charge per hotel |
debug | boolean | false | Logs every request with its size and time |
All filters are applied by Google, not afterwards, so the limit per search counts hotels that match.
Example input
{"searches": ["hotels in Lisbon", "Hotel Adlon Kempinski Berlin"],"checkInDate": "2026-11-10","checkOutDate": "2026-11-13","adults": 2,"currency": "EUR","sortBy": "lowest_price","minRating": "4","hotelClass": ["4", "5"],"freeCancellation": true,"maxResults": 50,"includeBookingSources": true}
Coming from another Google Hotels Actor?
These names are read as well: searchQuery, q, locations (each becomes "hotels in ..."), check_in_date, check_out_date, children_ages, gl, hl, maxItems, and the numbers sortBy 3, 8, 13, minRating 7, 8, 9 and a single hotelClass as "this class and above". amenities takes this Actor's names, not code numbers.
Row names follow the most used Actor: hotelName, propertyType, hotelDescription, gpsLatitude, gpsLongitude, hotelClass, starRating, overallRating, reviewCount, checkInTime, checkOutTime, pricePerNight, pricePerNightDisplay, totalRate, totalRateDisplay, currency, amenityCodes, images, ratingsBreakdown, reviewsBreakdown, nearbyPlaces, detailToken, bookingSources with vendorName, vendorIcon, numGuests, ratePerNight, ratePerNightDisplay, totalRate, totalRateDisplay, bookingUrl. Not in a booking source here: isSponsored. Added: freeCancellation per booking site, amenities, taxesAndFees, deal, address, neighborhood, phone, website, countryCode, thumbnail, hotelId, url, location, position, searchQuery, adults, children.
⬆️ Output
One row of a run with the booking-sites option (pictures and lists shortened):
{"searchQuery": "hotels in berlin","location": "Berlin","checkInDate": "2026-11-03","checkOutDate": "2026-11-05","adults": 2,"children": 0,"position": 1,"hotelName": "Hotel Big Mama","propertyType": "hotel","hotelDescription": "Minimalist rooms, apartments & dorms in a hip hotel, plus a cafe/bar, a roof terrace & free Wi-Fi.","hotelClass": null,"starRating": null,"overallRating": 4.4,"reviewCount": 1860,"pricePerNight": 40.25,"pricePerNightDisplay": "$40","totalRate": 80.5,"totalRateDisplay": "$81","taxesAndFees": 10.19,"currency": "USD","deal": "41% less than usual","address": "Koloniestraße 24, 13359 Berlin, Germany","neighborhood": "Mitte","countryCode": "DE","phone": "+49 30 484787870","website": "https://www.bigmamahotels.com/berlin","gpsLatitude": 52.5582474,"gpsLongitude": 13.3803733,"checkInTime": null,"checkOutTime": null,"amenities": ["Wi-Fi (free)", "Wi-Fi in public areas", "Bar", "Room service", "Smoke-free property", "Bicycle rental (extra charge)"],"amenityCodes": [28, 162, 4, 24, 25, 41],"thumbnail": "https://lh3.googleusercontent.com/...=s150-w92-h150-n-k-no","images": ["https://lh3.googleusercontent.com/...=s287-w287-h192-n-k-no-v1"],"ratingsBreakdown": [{"stars": 5, "percent": 63, "count": 1128}, {"stars": 4, "percent": 25, "count": 480}],"reviewsBreakdown": [{"name": "Service", "sentiment": 0.8, "total_mentioned": 111, "positive": 104, "negative": 5}],"nearbyPlaces": [{"name": "Brandenburg Gate", "transportations": [{"type": 0, "duration": "24 min"}, {"type": 3, "duration": "28 min"}]}],"bookingSources": [{"vendorName": "Booking.com", "vendorIcon": "https://www.gstatic.com/travel-hotels/branding/icon_184.png", "numGuests": 2, "ratePerNight": 40.25, "ratePerNightDisplay": "$40", "totalRate": 80.5, "totalRateDisplay": "$81", "freeCancellation": false, "bookingUrl": "https://www.google.com/travel/lodging/clk?pc=..."},{"vendorName": "Hostelworld", "vendorIcon": "https://www.gstatic.com/travel-hotels/branding/icon_100372930.png", "numGuests": 2, "ratePerNight": 44.66, "ratePerNightDisplay": "$45", "totalRate": 89.32, "totalRateDisplay": "$89", "freeCancellation": true, "bookingUrl": "https://www.google.com/travel/lodging/clk?pc=..."}],"hotelId": "0x47a8523a95c2b06b:0xd9f5e822abe7cf8e","detailToken": "ChkIjp-f36qE-vrZARoML2cvMTJ2cjI1ZmwwEAE","url": "https://www.google.com/travel/hotels/entity/ChkIjp-f36qE-vrZARoML2cvMTJ2cjI1ZmwwEAE?hl=en&gl=us&curr=USD","scrapedAt": "2026-10-07T09:40:11.120000+00:00"}
Without the option address, neighborhood and phone are usually empty, bookingSources is null and amenities holds the handful Google shows on the result card ("Free Wi-Fi", "Breakfast ($)", "Parking ($)").
How the prices fit together. pricePerNight is the stay's total divided by its nights, and the total includes taxes and fees: $40.37 a night, $80.73 for two nights, of which $10.22 are taxes. It is the price Google prints on the result card. 15 rows from Berlin (USD), Paris (EUR) and Tokyo (JPY) were compared with Google's own page for the same three nights: price per night, total, rating and review count were the same on all 15. Prices are for all guests together. A property that has no free room on the dates has empty prices.
The run's key-value store holds a SUMMARY record: searches read, hotels per search, searches without hotels, notes about the input, and why the run stopped.
💰 What a run costs
| Free | Bronze | Silver | Gold and above | |
|---|---|---|---|---|
| Per hotel | $0.0030 | $0.0028 | $0.0026 | $0.0024 |
| Added per hotel with booking sites, address and phone | $0.0020 | $0.0019 | $0.0018 | $0.0017 |
| Per run | $0.00005 | $0.0000475 | $0.000045 | $0.0000425 |
Not charged: a place without hotels, a link that is no Google Hotels link, a search Google did not answer. A hotel whose own record could not be read is saved from the list and charged as a plain row. The run stops at the maximum charge you set and says so in its status message.
⏱️ Measured (October 7, 2026)
These times are from a test server outside Apify, asking Google directly. Times on Apify will differ and are measured before publication.
| Run | Rows | Time |
|---|---|---|
| Empty input (sample search) | 20 | 2 to 5 s |
| One city to the limit of 1,000 (Berlin, 56 requests) | 1,000 | 141 s |
| Two cities, 200 each, side by side | 400 | 26 s |
| One city with booking sites (Cancun, 21 requests) | 20 | 9 s |
| Two cities with booking sites, 150 each (16 list and 300 hotel requests) | 300 | 44 s |
| A filtered search: price range, rating, class, free cancellation, two amenities, lowest price first | 25 | 4 s |
| A hotel by name | 1 | 3 s |
An answer of the list call is about 230 KB (about 50 KB packed), one of the hotel call 150 to 235 KB. In the 300-hotel run 298 rows had booking sites (14 at the median), 268 an address and 260 a phone number; the process peaked at 167 MB. One address made 70 list calls in a row in 257 s without a refusal. Of the 1,000 Berlin rows 845 had a price for the dates, 921 a rating, 974 amenities; 408 were vacation rentals.
A run of two searches that was killed after twelve seconds with 249 rows and started again ended with 400 rows, none twice, in their order. A run with booking sites killed after seven seconds ended with 60 of 60. A run given 14 seconds stopped by itself with 197 rows and a status message.
🤖 For AI agents
Smallest useful call:
{"searches": ["hotels in Lisbon"], "checkInDate": "2026-11-10", "checkOutDate": "2026-11-13", "maxResults": 10, "sortBy": "lowest_price"}
Each row is one property with hotelName, pricePerNight, totalRate, currency, overallRating, reviewCount, starRating, amenities, gpsLatitude, gpsLongitude and url. Prices include taxes and fees and are for all guests. Add "includeBookingSources": true for bookingSources, address and phone. For one hotel, put its name and city into searches. A place without hotels returns no rows; the status message and the SUMMARY record name it. No credentials are needed.
💡 Use cases
- 📉 Price monitoring: a daily schedule over your places and a stay 30 days ahead, in your currency.
- 🏷️ Rate parity: what each booking site asks for the same hotel and nights, next to the hotel's own site.
- 🗺️ Market research: every 4- and 5-star hotel of a city with rating, reviews, amenities and coordinates.
- 🧳 Travel apps and agents: real offers with taxes for an itinerary, with a link to book.
⚠️ Limits, stated plainly
- Google's count is not the list. Google said 9,672 hotels for Berlin; the list was read to this Actor's limit of 1,000 properties per search in 56 requests. To reach others, narrow the search with class, price or rating, or search districts.
- One connection in five gets another answer. Of 39 new connections 9 were answered with a short list of other properties (Google counted 24 hotels in Berlin there), with a place and no hotels, or with no place at all, and every later answer on that connection was the same. Google marks such an answer, so the Actor asks a first answer of that kind again on up to three new connections and takes it only when they all agree. A place that really has no hotels therefore costs four small requests.
- A text Google does not understand ("qwertz") is answered with hotels across the United States.
locationon each row says what Google searched. - Vacation rentals are in the list as Google mixes them in (408 of 1,000 in Berlin). They have
propertyType"vacation rental", nohotelId, no star class, and theirwebsiteis the listing on a rental site. - Hotel class is filled only where Google shows one (101 of 592 hotels and hostels in Berlin).
- Hotel amenity names are English in every language; a vacation rental's come in the language of the run. 130 of Google's numbers are named; a number without a name is in
amenityCodesonly. - The link opens the hotel on Google Hotels with your language, country and currency, not with your dates.
- Children without ages (a number from another Actor's input) are searched as 8 years old, with a note.
- Not included: guest review texts, all photos, room types, price history, a calendar of prices over many dates in one call.
- Times above are from a test server; on Apify the Actor asks directly first and moves to proxy addresses when Google does not answer.
❓ FAQ
Do I need a Google account, cookies or a proxy? No. Nothing is logged in and no browser runs.
Are taxes included? Yes, in pricePerNight and totalRate, as on Google's result card. taxesAndFees gives the part of the stay's total that is taxes and fees.
Why is a price empty? The property has no free room for those dates and guests, or Google has no offer for it. The row still carries everything else.
Why does the same hotel show another price than in my browser? Prices follow currency, dates, guests and the Google market. Check checkInDate, checkOutDate, adults, children and currency on the row, and set country to your own.
How do I get one specific hotel? Put its name with the city into searches, or its Google Hotels link into links. You get one row from the hotel's own record, with address and phone.
How many hotels can one search return? Up to 1,000. Use several searches (districts, classes, price ranges) for more.
Can I monitor prices over time? Yes: leave the dates empty, set checkInDays and nights, and schedule the run. hotelId and detailToken stay the same between runs.
What happens when a run is interrupted? It continues where it stopped and saves no property twice.
Is this legal? The Actor reads what Google Hotels shows every visitor without a login: hotel listings and public prices. It collects no personal data. You are responsible for how you use the data, for Google's terms and for the laws that apply to you, including GDPR where rows are combined with personal data.
🔗 You might also like
- Google Flights Scraper: fares, price history and fare calendars
- Google Maps Business Scraper: places with phone, website, hours and reviews
- Tripadvisor Reviews Scraper: the review texts of a hotel
Keywords: google hotels scraper, google hotels api, hotel prices api, hotel price monitoring, hotel rates scraper, booking site price comparison, rate parity, hotel data export, hotel prices csv, google travel scraper, hotels by city, hotel amenities data, hotel ratings data, vacation rental prices, travel data api, hotel price tracker, no login scraper