Google Hotels Scraper — Prices by Date, All Booking Sites
Pricing
from $2.00 / 1,000 hotels
Google Hotels Scraper — Prices by Date, All Booking Sites
Google Hotels prices for any city or hotel and your dates, guests and currency. Every booking site's offer with total, taxes and free cancellation, plus stars, rating, amenities, address and map point. Price-watch mode returns only changed prices.
Pricing
from $2.00 / 1,000 hotels
Rating
0.0
(0)
Developer
Dottti
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Google Hotels Scraper: Prices by Date, All Booking Sites
Get hotel prices from Google Hotels for your dates, guests and currency. Search a city or area, or give a list of hotels. Each hotel row lists every booking site Google shows, with the nightly price, the stay total with taxes and fees, and free cancellation.
It works for any city. It is tested on Dubai, Abu Dhabi, Riyadh, Jeddah, Makkah, Doha and London.
Who uses it
- Travel agencies: compare what each booking site charges for the same stay.
- Hotel revenue managers: track your hotel and your competitors every day. See when a rival drops its price, and on which site.
- Price comparison sites: fill a database of hotels, prices and booking sites for chosen dates.
- Analysts: study prices by city, star class, season or event dates.
What you get per hotel
- Name, Google hotel id and Google Hotels link
- Star class, guest rating and number of reviews
- Price for your stay: nightly, total, before taxes, taxes, fees, currency
- Google's deal label when shown, for example "22% less than usual"
- Every booking site offer: site name, the hotel's own site flag, nightly price, stay total, free cancellation and its deadline, member-rate note, booking link
- Address, phone, coordinates, country, website, Google place id
- Amenities (Free Wi-Fi, Outdoor pool, Spa, Free parking and more), check-in and check-out times, short description, photo
Each search also gives one free status row. It says how many hotels Google returned and whether anything failed.
Input examples
A city for fixed dates
{"searches": ["Dubai"],"checkIn": "2026-10-30","checkOut": "2026-11-01","adults": 2,"currency": "AED","maxHotelsPerSearch": 100}
Several GCC cities in Saudi riyal, two weeks ahead
{"searches": ["Riyadh", "Jeddah", "Makkah"],"checkInDaysFromNow": 14,"nights": 2,"adults": 2,"childrenAges": [6],"currency": "SAR","country": "sa","maxHotelsPerSearch": 50}
A fixed list of hotels
Open the hotel on Google Hotels and copy the address bar. Paste one link per line.
{"hotelUrls": ["https://www.google.com/travel/hotels/entity/ChUIrOmZudHNsKo4GgkvbS8wYnk3dDgQAQ","https://www.google.com/travel/hotels/entity/ChYIxZWB1JjIlsoFGgovbS8wMnI5aDBqEAE"],"checkInDaysFromNow": 7,"nights": 1,"currency": "USD"}
Search tips
- Any place name works: a city, an area ("Downtown Dubai"), or a landmark ("hotels near Kingdom Centre Riyadh").
- Arabic queries work, for example "فنادق مكة".
- Filters: minimum star class, minimum guest rating and maximum nightly price.
Output example
This row comes from a real run on 2026-10-21: Riyadh, 2 nights, 2 adults, SAR. The offers list is cut to 3 of 4 here, and the booking links are left out to keep it short.
{"type": "hotel","searchQuery": "Riyadh","position": 2,"name": "Ramada by Wyndham Riyadh King Fahd Road","hotelId": "ChkI4__x66_Dv7EhGg0vZy8xMXQ2bDBiZzJ2EAE","googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChkI4__x66_Dv7EhGg0vZy8xMXQ2bDBiZzJ2EAE?hl=en&gl=sa&ts=CAESCgoCCAMKAggDEAEaGgoAEhYSFAoHCOoPEAoYHxIHCOoPEAsYAhgCKgcKBToDU0FS","hotelClass": 5,"hotelClassText": "5-star hotel","rating": 4.4,"reviewCount": 2059,"checkIn": "2026-10-31","checkOut": "2026-11-02","nights": 2,"adults": 2,"childrenAges": [],"currency": "SAR","price": {"currency": "SAR","nightly": 400.28,"nightlyText": "SAR 400","total": 800.56,"totalText": "SAR 801","beforeTaxes": 663,"taxes": 137.56,"fees": 0,"includesTaxesAndFees": true},"deal": "22% less than usual","lowestOffer": { "provider": "Agoda", "nightly": 400.28, "total": 800.56, "freeCancellation": false },"offersCount": 4,"offersStatus": "ok","offers": [{"provider": "Agoda","providerId": 100337601,"isOfficialSite": false,"nightly": 400.28,"nightlyText": "SAR 400","total": 800.56,"totalText": "SAR 801","freeCancellation": false,"freeCancellationUntil": null,"guests": 2,"memberRateNote": null},{"provider": "Ramada by Wyndham Riyadh King Fahd Road","providerId": 1195673994,"isOfficialSite": true,"nightly": 447.38,"nightlyText": "SAR 447","total": 894.75,"totalText": "SAR 895","freeCancellation": false,"freeCancellationUntil": null,"guests": 2,"memberRateNote": "Get 5% off with free enrollment"},{"provider": "Booking.com","providerId": 184,"isOfficialSite": false,"nightly": 447.38,"nightlyText": "SAR 447","total": 894.75,"totalText": "SAR 895","freeCancellation": false,"freeCancellationUntil": null,"guests": 2,"memberRateNote": null}],"freeCancellationAvailable": null,"address": "King Fahd Rd, An Namudhajiyah, Riyadh 12734","phone": "011 506 0111","coordinates": { "lat": 24.660253599999997, "lng": 46.700370299999996 },"countryCode": "SA","amenities": ["Breakfast ($)", "Free Wi-Fi", "Free parking", "Indoor pool", "Hot tub", "Air conditioning", "Fitness center", "Bar", "Restaurant", "Room service", "Airport shuttle", "Full-service laundry", "Accessible"],"amenityCodesUnknown": [7],"checkInTime": "2:00 PM","checkOutTime": "12:00 PM","description": "Skyscraper hotel with polished rooms, casual restaurants & a rooftop lounge, plus an indoor pool.","placeId": "ChIJj4qPtTYDLz4R4398_Rr-YiE","language": "en","country": "sa","scrapedAt": "2026-10-21T14:25:52.654Z"}
Field notes:
nightlyis the average nightly price with taxes and fees.totalis the whole stay.freeCancellationistrue,false, ornullwhen Google shows nothing about it for that site.freeCancellationUntilgives the deadline, for example "Oct 30 6:00 PM".freeCancellationAvailableistruewhen at least one site offers it,falsewhen every site says no, andnullotherwise.amenityCodesUnknownholds Google amenity codes this actor has no name for yet.
The status row for the same search:
{"type": "search_status","query": "Riyadh","googleQuery": "hotels in Riyadh","resolvedPlace": "Riyadh","status": "ok","checkIn": "2026-10-31","checkOut": "2026-11-02","hotelsFound": 20,"hotelsDelivered": 20,"hotelsWithoutPrice": 0,"hotelsFilteredOut": 0,"offerLookupsFailed": 0,"pages": 1,"error": null,"seconds": 14.4,"charged": false}
status is ok, partial (some pages or offer lookups failed), no_results or failed. One failed search never stops the other searches in the run.
Turn on Also output one row per booking-site offer to get flat offer rows. Each has the hotel id, hotel name, stay dates and one site's price. The dataset also has an "Offers per booking site" view that unwinds the offers from the hotel rows.
Daily price tracking
- Fill in your searches or hotel URLs.
- Leave Check-in date empty. Set Check-in in N days, for example 7, and Nights.
- Turn on Price watch: only output changed prices and give a Watch list name, for example
riyadh-competitors. - Save the input as a task. Add a schedule in Apify, for example every day at 06:00 Riyadh time.
The first run outputs every hotel with priceWatch.status = new. Later runs output only hotels whose stay total or any booking-site price changed, plus hotels seen for the first time. Each changed row lists the old value, the new value and the difference per site:
"priceWatch": {"status": "changed","previousCheckAt": "<time of the previous run>","changes": [{ "field": "total", "previous": "<old total>", "current": "<new total>", "difference": "<new - old>", "percent": "<change in %>" },{ "field": "offer", "provider": "Booking.com", "previous": "<old>", "current": "<new>", "difference": "<new - old>" }]}
Unchanged hotels are skipped and not charged. The saved state lives in the key-value store google-hotels-price-watch. Runs compare the same hotel, the same stay dates, guests and currency. Stays whose check-in date has passed are removed from the state.
Google reorders search results between runs. For a stable list, track hotels by URL.
Pricing
Pay per result:
- $2.00 per 1,000 hotels (event
hotel). A hotel is charged only when it has a price for your dates. - $0.25 per 1,000 offer rows (event
offer), only when you turn on flat offer rows. Offers inside the hotel row are included in the hotel price. - Free: status rows, unpriced hotels, hotels removed by your filters, unchanged hotels in price-watch mode, failed searches.
Example: 3 cities with 100 hotels each, every booking site included, costs $0.60.
You can set a maximum cost per run in Apify. The actor stops fetching when the next hotel would go over it.
Speed and limits
- About 0.7 seconds per hotel with every booking site, measured on 200 Dubai hotels (141 seconds). About 0.2 seconds per hotel with Include prices from every booking site off.
- Google shows about 18 new hotels per page. Up to 500 hotels per search.
- The input accepts stays of 1 to 30 nights, check-in up to 330 days ahead, and up to 12 adults and 8 children in one room. Google may show fewer prices for dates far ahead.
- Prices depend on the country the request comes from. To see the price a guest in Saudi Arabia sees, set Country to
saand pick an Apify residential proxy in Saudi Arabia. - Google sometimes shows member prices or prices for a different room type on different sites. The actor reports what Google shows.
- Room-by-room rates and reviews are out of scope for now.
Reliability
- Requests start at least 400 ms apart. Hotel lookups run 4 at a time by default.
- When Google answers with errors or a consent page, the actor waits longer, starts a new session, and then moves up the proxy ladder: no proxy, Apify datacenter, Apify residential.
- The run summary (key-value store record
RUN_SUMMARY) shows requests, HTTP status codes, retries, the proxy tier used and bytes per hotel.
Data and privacy
The actor reads public Google Hotels pages. It does not log in, and it does not solve captchas. Hotel rows hold business information only. Check the rules that apply to your use of the data, such as Google's terms and data protection law in your country.