The short answer
Google has no public API for the prices it shows in Google Hotels. The old hotel-price programmes were closed to new users years ago, and nothing replaced them. If you need those prices as structured data now — for a rate-shopping tool, a travel app, a competitor check or an AI agent — you have two options: build and maintain your own scraper, or call one that is already maintained.
I built the second option. The Google Hotels Price Scraper is an Apify Actor. You give it a destination and dates, or specific hotels, and it returns one row per property with the lead nightly price, the per-vendor rates behind it (Booking.com, Expedia, Agoda and the rest), star class, guest rating, review count, amenities and coordinates. You call it through Apify's API, its client libraries, or the console.
Why the existing scrapers keep failing
Google's hotel pages don't serve tidy data. Prices, ratings and vendor offers sit in positional arrays, where a field is identified by its index rather than its name. When Google shifts an index, a scraper doesn't crash. It quietly returns the wrong number in the right-looking field, or nothing at all. Keeping one working means fixtures for every response type, golden tests that catch a shifted field, and a daily check that fails loudly when the shape changes.
I can only speak to what is public. The most-used Google Hotels scraper on the Apify Store showed 22,296 successful runs out of 53,949 in its last 30 days, a 41.3% success rate (checked 28 September 2026). Its description documents one input form while the live form is another, and it leaves the proxy setting for the user to choose. Whatever the cause, it means a large share of runs come back empty, and you pay for the attempt.
The design here is the opposite. The Actor manages its own network access, so there is no proxy setting to get wrong. A run that gets nothing back fails with a clear status instead of returning placeholder rows. A daily check runs the public build and fails if the row shape changes.
What the Actor returns
Each row carries:
-
hotelId,name,propertyType,hotelClass -
ratingandreviewCount -
address,latitude,longitude -
checkIn,checkOut,nights,adults,rooms— the searched itinerary, on every row -
leadPrice— nightly price, total for the stay, currency, and, with vendor rates on, which vendor offers it -
vendorRates— one entry per vendor with its cheapest total for the stay and how many offers it covers -
amenitiesandamenityCodes,url,scrapedAt
Prices are pre-tax, as Google's nightly figure is, and they are in the currency you ask for. The Actor never converts them.
A worked example
A search for hotels in Lisbon for 12 to 14 October 2026, with Apify's Python client:
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("yappman/google-hotels-prices").call(
run_input={
"mode": "search",
"searches": [{"destination": "Lisbon", "checkIn": "2026-10-12", "checkOut": "2026-10-14", "adults": 2}],
"maxItems": 20,
"includeVendorRates": True,
}
)
for row in client.dataset(run.default_dataset_id).iterate_items():
lead = row["leadPrice"]
print(row["name"], lead["perNight"], lead["total"], lead["currency"])
The same call as one curl request that waits for the run and returns CSV:
curl -X POST "https://api.apify.com/v2/acts/yappman~google-hotels-prices/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN&format=csv" \
-H "content-type: application/json" \
-d '{"mode":"search","searches":[{"destination":"Lisbon","checkIn":"2026-10-12","checkOut":"2026-10-14"}],"maxItems":20}'
A 20-hotel search takes about 10 seconds. Two real rows from a run on 29 September 2026:
| Name | Stars | Rating (reviews) | Per night | Total, 2 nights |
|---|---|---|---|---|
| Independente Principe Real | 3 | 4.3 (1,020) | $120.76 | $242 |
| Lisbon Wine House - Rooms & Suites | 3 | 3.7 (125) | $74.99 | $150 |
With includeVendorRates on, the first hotel came back with 16 vendors. The four cheapest for the same two nights:
| Vendor | Per night | Total |
|---|---|---|
| Vio.com | $121 | $242 |
| goseek.com | $121 | $242 |
| Super.com | $126 | $253 |
| Evendo | $134 | $267 |
Top comments (0)