Google Hotels Scraper: Prices by Date & Site
Pricing
from $2.40 / 1,000 hotel results
Google Hotels Scraper: Prices by Date & Site
Google Hotels prices for any city, hotel and dates: rates from every booking site with links, taxes, ratings, amenities and photos, plus price calendars and changes-only price monitoring. Hotel price comparison from $3 per 1,000 hotels; compact JSON for AI agents.
Pricing
from $2.40 / 1,000 hotel results
Rating
0.0
(0)
Developer
CleanPull
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Share
Get Google Hotels prices for any city, area or hotel and any dates: the nightly and total price with and without taxes, every booking site (Booking.com, Expedia, Agoda, Hotels.com, the hotel's own site and more) with booking links, room-level rates with free-cancellation deadlines, ratings, review breakdowns, amenities, location and photos. Price whole calendars of dates in one run, and monitor prices with a changes-only mode that returns just what moved since the last run. Fast, reliable HTTP requests (no browser), from $3 per 1,000 hotels.
What you can do with it
- Compare hotel prices for a trip: "Hotels in Lisbon for 10–13 November, 2 adults, 4 stars and up, under €200 a night, sorted by price."
- Price a whole calendar: "Cheapest night to stay in Rome in December" — price every check-in date in a range, for one or several lengths of stay, in one run.
- Watch your competitors' rates (revenue management): list your hotel and your competitive set by name, schedule the run daily with
+30(30 days ahead), and get only the price changes. - Check rate parity: every booking site's price for a hotel next to the hotel's own site, flagged with
isOfficial, pluscheapestSourceandofficialSiteRatePerNightWithTaxes. - Find deals and drops: Google's deal labels ("25% less than usual") and price-drop alerts from monitoring.
- Research a market: hundreds of hotels per city with star class, rating, review counts, review sentiment by topic (service, location, breakfast…), amenities and coordinates.
- Vacation rentals: apartments and houses with bedrooms, beds, bathrooms and capacity.
- Feed an AI agent, sheet or dashboard: flat rows (one per hotel and booking site), only the fields you choose, and a run summary with the outcome of every search.
Why this actor
- It works, and tells you when it can't. Plain HTTP calls to Google Hotels' own data endpoint with automatic session rotation and proxy escalation (direct → datacenter → residential only when needed). A blocked or failed search is retried, then reported in
RUN_SUMMARY— never returned as "0 hotels". A place Google doesn't recognise is reported instead of silently returning hotels from somewhere else (Google falls back to hotels near the caller). - Switch without changing your code. Already using a Google Hotels actor? The input keys
locations,checkInDate,checkOutDate,adults,currency,languageCode,countryCode,maxResults,requestTimeoutSecsandproxyConfigurationwork the same here, and every record also carries that actor's record field names (name,price,priceValue,rating,reviewCount,hotelClass,starRating,latitude,longitude,placeId,hotelDescription,imageUrl,googleMapsUrl,googleHotelsUrl,location,checkInDate,checkOutDate,currency,scrapedAt). Change the actor id and keep your schedules and parsers. - Changes-only monitoring. With
monitorMode, each run is compared with the last run of the same search: you get price drops and rises (above your threshold), hotels selling out or coming back, and new or removed hotels — and unchanged hotels cost a sixth of a result. - Dates that keep working on a schedule. Write
+30instead of a date and a daily schedule always looks 30 days ahead (monitoring compares "the stay 30 days ahead" day after day). - Every filter Google Hotels has: sort, price range, guest rating, star classes, 19 amenities, 9 hotel types, hotel brands by name, free cancellation, special offers, children with ages, vacation rentals.
- Taxes both ways. Every price comes with and without taxes and fees, as numbers and as Google displays them.
Input
| Field | Type | What it does |
|---|---|---|
locations | array of strings | Places to search: "Lisbon", "Shibuya, Tokyo", "near Times Square". Each runs "hotels in |
searchQueries | array of strings | Free-form Google Hotels searches, as typed in Google |
hotels | array of strings | Specific hotels by name, e.g. "Avenida Palace Lisbon" |
startUrls | array of URLs | Google Hotels hotel pages or search pages |
propertyType | hotels, vacation-rentals | What to search (default hotels) |
checkInDate, checkOutDate | YYYY-MM-DD or +N | The stay; +N is N days after the run date (default check-in +14, 1 night) |
nights | array of integers | Lengths of stay to price, e.g. [1, 3, 7] |
checkInDates | array of dates | More check-in dates |
checkInDateTo, dateStep | date, integer | Price every check-in date up to this date, every dateStep days |
adults, childrenAges | integer, array | Guests (up to 30 adults), e.g. 2 and [4, 9] |
sortBy | relevance, lowest-price, highest-rating, most-reviewed | Google's sort order |
minPrice, maxPrice | integers | Price per night range, in currency |
minRating | 3.5, 4, 4.5 | Minimum guest rating |
hotelClass, hotelClasses | integer, array | Minimum stars, or exact star classes |
amenities | array | free-wifi, free-breakfast, pool, spa, pet-friendly, free-parking, ev-charger… (19) |
hotelTypes | array | hostel, bed-and-breakfast, boutique-hotel, spa-hotel, beach-hotel, apartment-hotel… |
brands | array of strings | Brand names, e.g. "Marriott Bonvoy" (with all its brands) or "Moxy" |
freeCancellation, specialOffers | boolean | Only free-cancellation offers / only hotels with offers |
maxResults | integer | Hotels per search and stay (default 20, up to 1,000) |
maxItems | integer | Stop after this many results in the run (a cost cap) |
includeBookingSources | boolean | Every booking site's price and link, and review scores by site (one extra request per hotel) |
includeRoomRates | boolean | Room-level rates with cancellation terms |
monitorMode, monitorName | boolean, string | Changes only, compared with the last run under the same name |
changeTypes | array | new, price-drop, price-rise, sold-out, back-in-stock, removed |
priceChangePercent, priceChangeMinAmount | numbers | Ignore smaller price moves (default 1%) |
removedAfterRuns | integer | Missing runs in a row before a hotel counts as removed (default 2) |
currency, languageCode, countryCode | strings | EUR, de, de: prices, language and the region Google searches from |
outputFormat | nested, flat | One record per hotel, or flat rows (one per hotel and booking site) |
fields | array of strings | Return only these fields (dotted paths allowed) |
Example inputs
A trip search with filters:
{"locations": ["Lisbon"],"checkInDate": "2026-11-10","checkOutDate": "2026-11-13","currency": "EUR","sortBy": "lowest-price","hotelClass": 4,"maxPrice": 200,"amenities": ["free-wifi", "pool"],"maxResults": 50,"includeBookingSources": true}
A daily competitor-rate monitor (schedule it once a day):
{"hotels": ["Hotel Mundial Lisbon", "Avenida Palace Lisbon", "Hotel Avenida Lisbon"],"checkInDate": "+30","nights": [1, 2],"currency": "EUR","includeBookingSources": true,"monitorMode": true,"monitorName": "lisbon-compset","changeTypes": ["price-drop", "price-rise", "sold-out", "back-in-stock"],"priceChangePercent": 3}
A price calendar: every Friday-to-Sunday stay in December:
{"locations": ["Rome"],"checkInDate": "2026-12-04","checkInDateTo": "2026-12-25","dateStep": 7,"nights": [2],"sortBy": "lowest-price","maxResults": 10}
Output
One record per hotel and stay (shortened; a real record from 5 October 2026):
{"hotelName": "Hotel Mundial","hotelId": "16189655629992449383","propertyType": "hotel","position": 1,"searchQuery": "hotels in Lisbon","location": "Lisbon","resolvedLocation": "Lisbon","checkInDate": "2026-11-10","checkOutDate": "2026-11-13","nights": 3,"adults": 2,"currency": "EUR","available": true,"pricePerNight": 99.59,"pricePerNightDisplay": "€100","pricePerNightWithTaxes": 114,"totalRate": 299,"totalRateWithTaxes": 341,"deal": "25% less than usual","hotelDescription": "Straightforward rooms in a relaxed hotel offering a traditional restaurant & a rooftop bar.","hotelClass": "4-star hotel","starRating": 4,"overallRating": 4.3,"reviewCount": 7199,"ratingsBreakdown": [{ "stars": 5, "percent": 54, "count": 3705 }],"reviewsBreakdown": [{"name": "Breakfast","sentiment": 0.43,"total_mentioned": 276,"positive": 188,"negative": 60}],"gpsLatitude": 38.7150471,"gpsLongitude": -9.1369825,"address": "Praça Martim Moniz 2, 1100-341 Lisboa, Portugal","phone": "+351 21 884 2000","website": "https://www.hotel-mundial.pt/","amenities": ["Breakfast ($)","Free Wi-Fi","Parking ($)","Air conditioning","Bar","Restaurant"],"nearbyPlaces": [{"name": "Tram 28","category": "attraction","transportations": [{ "type": "transit", "duration": "1 min" }]}],"googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChgIrYeF1aLy5vM5GgwvZy8xamt2dDlkdmcQAQ/prices?hl=en&gl=us&curr=EUR&checkin=2026-11-10&checkout=2026-11-13","bookingSources": [{"vendorName": "Hotel Mundial","isOfficial": true,"isSponsored": false,"numGuests": 2,"ratePerNight": 100,"ratePerNightWithTaxes": 114,"totalRate": 299,"totalRateWithTaxes": 341,"bookingUrl": "https://www.google.com/travel/lodging/clk?..."},{"vendorName": "Expedia.com","isOfficial": false,"ratePerNight": 146,"ratePerNightWithTaxes": 163,"totalRate": 439,"bookingUrl": "https://www.google.com/travel/lodging/clk?..."}],"bookingSourceCount": 27,"cheapestSource": "Hotel Mundial","cheapestBasis": "with-taxes","cheapestRatePerNightWithTaxes": 114,"officialSiteRatePerNightWithTaxes": 114,"roomRates": [{"vendorName": "Hotel Mundial","roomName": "Classic Room - Standard rate Room Only","ratePerNight": 99.59,"ratePerNightWithTaxes": 113.57,"totalRate": 298.78,"totalRateWithTaxes": 340.71,"freeCancellation": false,"freeCancellationUntil": null}],"scrapedAt": "2026-10-05T19:53:46.724Z"}
location is what you asked for; resolvedLocation is the place Google searched. cheapestSource compares sites on one basis (cheapestBasis): including taxes among the sites that show it, otherwise before taxes. fields paths reach into lists too: ["hotelName", "bookingSources.vendorName", "bookingSources.ratePerNightWithTaxes"].
available: false with null prices means Google shows no price for those dates (sold out or not bookable). Vacation rentals add essentialInfo (for example "Entire apartment", "Sleeps 4", "2 bedrooms").
In monitoring mode each record starts with the change: changeType, previousPricePerNight, priceChange, priceChangePercent and previouslySeenAt. Removed hotels come as a short record with what was last known.
Every run also writes RUN_SUMMARY to the key-value store: the outcome (COMPLETE, PARTIAL, NO_CHANGES, EMPTY or FAILED), counts of results, changes and booking-source lookups, warnings, and the reason for any failed search.
Pricing
Pay only for results delivered. Blocked or failed searches are never charged.
| Event | Free and Bronze | Silver | Gold |
|---|---|---|---|
| Hotel result (one hotel for one stay, with price and listing data) | $3.00 | $2.70 | $2.40 |
| Booking sources and room rates (add-on per hotel, when switched on) | $2.00 | $1.80 | $1.60 |
| Change (monitoring mode: one changed hotel) | $3.00 | $2.70 | $2.40 |
| Unchanged hotel checked (monitoring mode) | $0.50 | $0.45 | $0.40 |
Prices are per 1,000; your tier depends on your Apify plan. Each run also has a $0.00005 start fee. Flat mode is billed per hotel, not per row.
How monitoring works
Each search (place or hotel × stay × filters) keeps its own memory under your monitorName. The first run reports every hotel as new and sets the baseline; later runs report only changes. Prices compare per night before taxes. A hotel counts as removed only after it is missing from removedAfterRuns searches in a row that reached the end of Google's results. With a maxResults cap, Google's ranking reshuffles which hotels make the top N, so hotels entering your top N show as new: for exact watch lists, list hotels by name (hotels), or sort by price.
Limits
- Google shows a few hundred hotels per search at most (about 200 when sorted by price). For larger
maxResultsthe actor runs extra passes (other sort orders and price bands, or continuing from the last price when sorted by price), so big cities return up to 1,000 hotels; later passes follow the first in the results. - Prices are what Google Hotels shows a logged-out visitor in the chosen region and currency; booking sites can show different prices to signed-in members.
reviewSourcesholds each site's rating and review count with the few sample reviews Google includes; it is not a full review export.- Amenity filters are the ones Google Hotels offers; any amenity Google lists for a hotel is returned in
amenities. - Google answers a place it doesn't recognise with hotels near the caller; this actor asks again, then reports that search as failed instead.
- Check-in dates already past are skipped with a warning (a scheduled run keeps its other dates); use
+Ndates in schedules. - Two runs with the same
monitorNameand search at the same time share one memory; schedule them apart. - Nothing found: a place Google does not recognise, or a hotel name with no match, is not a failure: when no search finds anything, the run still succeeds, with one free
recordType: "unreadable"row per search giving thereason; nothing is charged. A run near its time limit stops starting searches, delivers what it found and lists the rest in RUN_SUMMARY.
Changelog
- 0.1.x, reliability (2026-10-24): runs that find nothing (places Google does not know, hotel names with no match, invalid dates) end SUCCEEDED with a free
unreadablerow saying why, instead of FAILED; dates and currency are checked in the input form; a run stops starting searches before its time limit, never TIMED-OUT. A run whose every search Google blocked still fails. Prices and events unchanged. - 0.1 (October 2026): searches by place, query, hotel name and URL; every Google Hotels filter; booking sources and room rates; price calendars; vacation rentals; changes-only monitoring; flat output and field selection; input compatible with other Google Hotels actors.