Google Hotels Scraper — Prices & Booking Site Comparison
Pricing
from $1.50 / 1,000 hotel listings
Google Hotels Scraper — Prices & Booking Site Comparison
Google Hotels prices for any city or hotel and dates: nightly and total price, star class, rating, reviews, amenities, coordinates and links, plus optional Booking.com / Expedia / official-site price comparison and date-by-date price tracking. Pay only for hotels with prices.
Pricing
from $1.50 / 1,000 hotel listings
Rating
0.0
(0)
Developer
Dustin Griffie
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
Get Google Hotels results for any city, neighbourhood or landmark — nightly price, price with taxes, total stay price, star class, guest rating, review count, amenities, address, coordinates, photos and links — and optionally every booking site's price for each hotel (Booking.com, Expedia, Hotels.com, Agoda, Trip.com, the hotel's official site…) with direct booking links.
No browser: the Actor talks to the same data endpoint the Google Hotels page uses, so it is fast (about 1,000 hotels in 4 minutes) and cheap to run, with automatic retries and a residential-proxy fallback.
What you can do
| Use case | How |
|---|---|
| All hotels in a city for your dates, cheapest first | locations: ["Lisbon, Portugal"], sortBy: "lowest_price" |
| 4–5 star hotels rated 4.5+ with a pool under €300 | hotelClass: [4,5], minRating: "4.5", amenities: ["pool"], maxPrice: 300 |
| Compare Booking.com vs Expedia vs official site | includeOtaPrices: true (search) or list hotels in hotels |
| Track one hotel's price for every night of a month | hotels: ["Avenida Palace, Lisbon"], checkIn + dateRangeEnd, nights: 1 |
| Rate parity / revenue management for your property and competitors | hotels = your property + competitor set, dateRangeEnd, dateStepDays: 7 |
| Families | adults: 2, childrenAges: [4, 9] |
| Any currency / market | currency: "JPY", country: "jp" |
How to scrape Google Hotels
- Click Try for free and enter one or more cities or areas (for example
Austin, TX), or hotel names or Google Hotels links. - Pick check-in and check-out dates, guests and currency. Add filters (stars, rating, price, amenities) if you need them.
- Turn on booking-site price comparison if you want Booking.com, Expedia, the official site and others side by side.
- Click Start. Download the results as JSON, CSV or Excel, or get them through the Apify API, integrations or a schedule.
Input
- Cities or areas – one per line. Each place × stay is a search, paginated up to Max hotels per location (Google serves ~20 per page).
- Hotels to price-check – names (add the city), Google Hotels links or entity ids. One row per hotel × stay with all booking sites.
- Dates – check-in / check-out, or a date sweep: Check-in → Repeat until with Nights per stay and a Step.
- Guests, currency, market, filters (price range, stars, minimum rating, amenities, free cancellation, hotels vs vacation rentals, hotels only) and sort (relevance, lowest price, highest rating, most reviewed).
- Amenity filters:
free_wifi,free_breakfast,free_parking,pool,indoor_pool,outdoor_pool,fitness_center,restaurant,bar,spa,beach_access,kid_friendly,pet_friendly,room_service,air_conditioning,all_inclusive,wheelchair_accessible,ev_charger.
Example:
{"locations": ["Austin, TX", "Shibuya, Tokyo"],"checkIn": "2026-12-04","checkOut": "2026-12-06","adults": 2,"currency": "USD","sortBy": "lowest_price","maxResultsPerLocation": 40,"includeOtaPrices": true,"maxOtaHotelsPerLocation": 10}
Output
Every row has a status and a human-readable statusMessage.
Hotel row (recordType: "hotel"):
{"status": "ok", "location": "Austin, TX", "position": 2, "checkIn": "2026-12-04", "checkOut": "2026-12-06", "nights": 2,"name": "HomeTowne Studios Austin", "entityId": "ChcIzo2q98CXwpFGGgsvZy8xdGp6OGM5MRAB","pricePerNight": 37, "pricePerNightWithTaxes": 44, "totalPrice": 74, "totalPriceWithTaxes": 88, "currency": "USD","propertyKind": "hotel", "hotelClass": 2, "rating": 2.8, "reviewCount": 852, "reviewsByStars": {"1": 315, "2": 82, "3": 115, "4": 110, "5": 230},"amenities": ["Free Wi-Fi", "Free parking", "Air conditioning", "Fitness center", "Kitchen in rooms"],"amenitiesNotAvailable": ["Breakfast"],"address": "12621 Hymeadow Dr", "latitude": 30.4577, "longitude": -97.7903, "phone": "(512) 331-4747","website": "https://www.redroof.com/…", "checkInTime": "3:00 PM", "checkOutTime": "11:00 AM","description": "Traditional all-suite hotel with kitchenettes…", "thumbnail": "https://lh3.googleusercontent.com/…", "images": ["…"],"nearbyPlaces": [{"name": "Austin Aquarium", "travel": [{"mode": "car", "duration": "4 min"}]}],"googleMapsCid": "14130573527917797695","googleHotelsUrl": "https://www.google.com/travel/hotels/entity/…?ts=…","cheapestProvider": "Super.com", "cheapestPricePerNightWithTaxes": 44, "officialSitePricePerNightWithTaxes": 59, "providerCount": 21,"providers": [{"provider": "Super.com", "pricePerNight": 37, "pricePerNightWithTaxes": 44, "totalPriceWithTaxes": 88, "isOfficialSite": false, "sponsored": false, "bookingUrl": "https://www.super.com/…"}]}
The cheapest… / providers fields appear when price comparison is on. Hotel lookups (recordType: "hotel_prices") have the same fields plus hotelInput.
Statuses
| status | meaning | charged |
|---|---|---|
ok | hotel with a price (and, for lookups, at least one booking-site price) | yes |
no_price | Google lists the hotel but has no price for these dates (sold out / not bookable) | no |
no_availability | search or lookup with no priced result | no |
invalid | unknown location, rejected filters, or dates Google ignored | no |
not_found | no Google Hotels property matches the hotel name | no |
failed | still blocked after all retries | no |
Dataset views: Hotels, Booking-site price comparison, Price by date, Statuses. Run statistics (success rate, requests, retries, proxy tier, bytes, timings) are in the RUN_STATS key-value record.
How much does it cost to scrape Google Hotels?
Pay per event. You pay only for results with prices.
| Event | Free / Bronze | Silver and higher |
|---|---|---|
hotel-listing – one hotel row with a price | $0.002 | $0.0015 |
hotel-prices – one hotel × stay with at least one booking-site price (price comparison or hotel lookup) | $0.005 | $0.004 |
| Actor start | $0.00005 | $0.00005 |
Example: 1,000 priced hotels with no price comparison cost $2.00 on the Free plan. Adding price comparison for 100 of them costs $0.50 more. Apify's free plan includes $5 of monthly usage, which is enough for about 2,500 priced hotels a month.
Unpriced hotels, duplicates and every non-ok row are free. The Actor respects your Max cost per run: it stops before starting work it can't pay for.
Tips & limits
- Write places the way you would on Google:
"Austin, TX","Lisbon, Portugal","near Times Square". Unknown places return aninvalidrow (Google would otherwise silently show hotels from somewhere else). - Google only prices stays up to ~11 months ahead and at most 30 nights. Past dates are rejected up front.
- Prices are what Google shows to a signed-out visitor in the chosen market (
country) — member/mobile-only rates may differ, and the set of booking sites varies by hotel, date and market. - Hotel lookups by name use Google's own match; add the city or paste the Google Hotels link for exact results.
- Family searches (
childrenAges) return fewer priced hotels, because many rooms can't fit the whole party (in London, 2 adults + 2 kids got prices for about 40% of hotels, against 95% for 2 adults). Unpriced hotels are still listed with statusno_priceand are free. - Some hotels never show prices on Google, only "Check availability" (for example The Plaza, New York). These come back as
no_availability/no_priceand are not charged. - Filters work exactly like Google Hotels' own filters. Every amenity, star class, guest rating, price range, free cancellation and sort option was checked on 2026-10-23 against the request Google's site sends and against the hotels returned. Amenity filters return hotels that have that amenity (the price range applies to the nightly price before taxes). Google's result counts can jump between searches. That is Google, not the Actor.
- Google mixes some vacation rentals into hotel results, especially with amenity filters (for example free parking in Miami Beach). Every row has
propertyKind(hotel/vacation_rental). Turn on Hotels only (excludeVacationRentals: true) to drop rentals. Dropped rentals aren't saved or charged. - The amenity list comes from Google's card/detail data; amenities Google doesn't label are omitted (
amenityCodeskeeps the raw codes).
FAQ
Do I need a proxy? The default Apify datacenter proxy is used first; the Actor switches to residential automatically if Google starts blocking (keep Fall back to residential on).
Is it legal? The Actor collects publicly available prices. You are responsible for how you use the data; don't collect personal data without a legal basis.