Google Hotels Prices Scraper avatar

Google Hotels Prices Scraper

Pricing

from $6.50 / 1,000 hotel-priceds

Go to Apify Store
Google Hotels Prices Scraper

Google Hotels Prices Scraper

Scrape Google Hotels price comparisons for any hotel and stay. Just add hotel names, URLs or ids and your dates, and get every provider's nightly and total price, cancellation deadline and booking link, plus hotel details, room rates, guest sentiment and amenities. $10 per 1,000 priced hotel-stays.

Pricing

from $6.50 / 1,000 hotel-priceds

Rating

0.0

(0)

Developer

BonCross API

BonCross API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Security

Limited permissions

Share

What is Google Hotels Prices Scraper?

Google Hotels compares one hotel across the sites that sell it, often twenty or more for a large property. Google Hotels Prices Scraper gets you that whole comparison for your dates as a single record: each seller's nightly and total price, the free-cancellation deadline and the booking link. Paste a hotel's Google Hotels link or just type its name.

It's the middle one of three Google Hotels actors. Google Hotels Search Scraper lists the hotels in an area with one price each, and this actor takes a hotel from that list (or any hotel you name) and shows who sells it and for how much. Guest reviews are a third job, done by Google Hotels Reviews Scraper.

What you get here that a single lowest price can't tell you:

  • You pay per hotel and stay, not per seller. On 7 October 2026 one record held 27 sellers for The Plaza in New York and another held 31 for Hotel Adlon Kempinski Berlin. Each cost $0.01.
  • The hotel's own rate has a field to itself. That night the Adlon's site asked $417 while the cheapest seller asked $343, which is the parity gap in two numbers.
  • A typed name lands on the right hotel or you aren't charged. In our test of 7 October 2026, hotels typed in Japanese, Korean and Chinese resolved, three misspelled names did too, and none of the 4 invented names returned a hotel.
  • Prices match the party you're booking for: adults, children by age and up to eight rooms, for as many date ranges as you list.
  • The same record has the hotel details, featured room rates, guest sentiment by topic, amenities and a verified Place ID, at no extra charge.

BonCross Verified means we tested this actor against the live site before release and kept the record:

  • 45 of 45 live checks on its inputs and filters passed on 7 October 2026
  • 17 hotel names run the same day, 4 of them invented: 12 hotels, 255 offers, the 4 invented refused
  • Charges matched the rows
  • A weak name match gets an uncharged row naming both

Revenue and distribution teams use it for rate parity checks each morning, with the seller's deep link as evidence. It also suits best-rate-guarantee checks on a booked stay, metasearch and travel products that need a comparison table, and audits of which sellers list a property at all.

What data is in a price record?

🏷 Seller name and logo💰 Nightly and stay price from each seller
Pre-tax price, where shown🔗 Booking link and the seller's own deep link
Free cancellation and its deadline🏨 The hotel's own direct rate
🛏 Featured room rates with bed typeRoom features and cancellation terms
⭐ Rating and review countRating histogram
Guest sentiment by topicReview sources with a sample review
Amenities, including the ones the hotel lacksEco certification and sustainability practices
📍 Address, phone, website and coordinatesVerified Place ID, entity id and feature id
🕒 Check-in and check-out times📷 Photos
Similar hotels and nearby places📈 Price change since your last run

How much does it cost to scrape Google Hotels prices?

EventFree planStarterScaleBusiness
actor-start, per run$0.002$0.002$0.002$0.002
hotel-resolved, per plain name resolved to a hotel$0.002$0.002$0.002$0.002
hotel-checked, per hotel and stay Google answered, with or without offers$0.0005$0.0005$0.0005$0.0005
hotel-priced, per hotel and stay returned with offers, with all providers, hotel record, sentiment, amenities, review sources, similar hotels and nearby places$0.0095$0.0078$0.0073$0.0065
hotel-about, per hotel and stay when includeAbout is on$0.003$0.0027$0.0024$0.0021

Enterprise plans pay the Business price.

$10.00 per 1,000 hotel-stays with the full seller panel (hotel-checked + hotel-priced) on the Free plan, $7.00 on Business. Nothing is added on top: proxy usage and platform usage are in that price.

What you pay depends on what Google answered:

  • A stay with offers pays hotel-checked and hotel-priced.
  • A stay with no offers pays hotel-checked only. That covers a sold-out stay, one where your provider filter left nothing, and one whose price hasn't moved when you're using the price memory.
  • An error row is free. You still get the row, and it says what went wrong.

Passing links or entity ids skips the $0.002 name fee.

  • 50 hotels by name, three stays each, About tab on: $0.002 + 50 × $0.002 + 150 × $0.0005 + 150 × $0.0095 + 150 × $0.003 = $2.052 ($1.467 on Business). With entity ids and no About tab that run is $0.002 + 150 × $0.0005 + 150 × $0.0095 = $1.502 ($1.052 on Business).
  • A daily monitor of 50 hotels for one stay: day one is $0.002 + 50 × $0.0005 + 50 × $0.0095 = $0.502 ($0.352 on Business). With a price store, a day on which 12 hotels changed costs $0.002 + 50 × $0.0005 + 12 × $0.0095 = $0.141 ($0.105 on Business).

Apify's Free plan comes with $5 of credits each month. Here that's about 490 priced hotel-stays if you pass links or ids, in runs of ten, or about 400 if you type names.

How to scrape Google Hotels prices for a hotel

  1. Sign up for a free Apify account, then open Google Hotels Prices Scraper.
  2. Under Hotels, add one hotel per line: a Google Hotels link, an entity id or a name such as "The Plaza, New York".
  3. Set check-in, check-out, guests and currency.
  4. Press Start. One record per hotel and stay appears in the Output tab.
  5. Download it as JSON, Excel or CSV. JSON keeps the list of sellers nested. The spreadsheet formats flatten it into columns.

⬇️ Input

Give it hotels and a stay. A hotel can be a Google Hotels URL, a bare entity id as returned by Google Hotels Search Scraper, or a plain name. If Google doesn't recognise a name alone, add the city after a comma.

Got a long list of links? Start URLs loads them in bulk from a file, a Google Sheet or a remote list. It's combined with whatever is under Hotels.

"Maximum results for the whole run" caps the run across all hotels. A result is one hotel for one stay, which makes three hotels over two stays six results. Nothing past the cap is fetched or charged for.

Two hotels, one stay, by name

{
"hotels": ["The Plaza, New York", "Hotel Adlon Kempinski Berlin"],
"checkIn": "2026-11-10",
"checkOut": "2026-11-12",
"adults": 2,
"currency": "USD"
}

A family with children and two rooms

{
"hotels": ["https://www.google.com/travel/hotels/entity/ChUIneeg3YDGqvthGgkvbS8wNDJ5N2oQAQ"],
"checkIn": "2026-12-20",
"checkOut": "2026-12-23",
"adults": 2,
"childrenAges": [4, 9],
"rooms": 2,
"currency": "USD"
}

Several stays per hotel, free cancellation only

{
"hotels": ["ChUIneeg3YDGqvthGgkvbS8wNDJ5N2oQAQ", "ChUI2f3tmL_9t_IZGgkvbS8wOG1mdzIQAQ"],
"stays": [
{ "checkIn": "2026-11-10", "checkOut": "2026-11-12" },
{ "checkIn": "2026-11-17", "checkOut": "2026-11-19" }
],
"freeCancellationOnly": true,
"providerInclude": ["Booking.com", "Expedia", "Agoda"]
}

A daily rate monitor that only reports changes

{
"hotels": ["ChUI2f3tmL_9t_IZGgkvbS8wOG1mdzIQAQ"],
"checkInDaysAhead": 30,
"nights": 2,
"priceStoreName": "adlon-berlin-30d",
"onlyNewOrChanged": true,
"includeImages": false,
"includeAmenities": false
}

Prices and nothing else

Switch off amenities and sustainability, and leave similar hotels off, when prices are all you need. The price columns, the hotel record and the Place ID are unchanged. Only the amenity, eco-certification, sustainability and health-and-safety columns are left out.

{
"hotels": ["ChUIneeg3YDGqvthGgkvbS8wNDJ5N2oQAQ"],
"checkInDaysAhead": 30,
"nights": 2,
"includeAmenities": false,
"includeSustainability": false
}

With the About tab, similar hotels and the Maps listing

{
"hotels": ["Raffles Singapore"],
"checkIn": "2026-11-10",
"checkOut": "2026-11-12",
"includeAbout": true,
"includeSimilarHotels": true,
"includeNearbyPlaces": true,
"includeMapsDetails": true
}

All inputs

FieldNotes
hotels, startUrlsThe hotels, as links, entity ids or names, and the bulk loader for links.
maxItemsRun-wide cap on hotel-stays. 0 means no cap.
checkIn, checkOutThe stay, as YYYY-MM-DD. Ignored when stays is set.
checkInDaysAhead, nightsA rolling stay for schedules, used when the dates are empty. Defaults: 30 days ahead, 2 nights.
staysSeveral date ranges, each priced for each hotel.
adults, childrenAges, rooms1 to 8 adults (default 2), one age per child, 1 to 8 rooms.
providerInclude, providerExcludeCase-insensitive pieces of a seller's name to keep (["Booking.com", "Agoda"]) or drop (["Trip.com"]). Empty keeps them all.
freeCancellationOnlyKeep only offers Google marks as free cancellation.
includeRatesRoom-level rates with room name, features, per-night and total price. On by default.
includeImagesUp to 20 photo URLs per hotel. On by default.
includeReviewsThe star histogram and third-party review sources, with one sample review each. On by default.
includeSentimentFor each topic (Service, Location, Breakfast, Cleanliness and so on), the mentions and how many were positive or negative. On by default, no extra charge.
includeAmenities, includeSustainabilityThe grouped amenities list, and eco-certification with sustainability and health-and-safety measures. Both on by default.
includeSimilarHotels, includeNearbyPlacesSimilar hotels priced for the same stay, and nearby attractions, transit and restaurants. Off by default.
includeAboutGoogle's description, review summary, typical price range and location score. Off by default, billed as hotel-about.
includeMapsDetailsThe hotel's Google Maps listing: plus code, categories, editorial text, Maps amenities, times, phone and website. Off by default, no extra charge.
currency, languageDefaults USD and en. Language affects names, address formatting and seller labels.
priceStoreName, onlyNewOrChangedThe price memory, and the switch that returns only hotels whose lowest price moved.
strictNameMatchOn by default. See below.
maxConcurrency, delayMsTuning. See below.

For developers

  • strictNameMatch (default true) applies to hotels given by name. The name you typed is compared with the hotel's name in the run's language, its local-script name and its English name, ignoring case, accents and character width. If they don't look alike you get an uncharged error row with resolvedName and nameMatchScore, and that hotel's other stays aren't fetched. Set it to false to accept whatever Google resolves.
  • hotel-resolved is charged once a stay confirms the match, not when the lookup is made.
  • maxItems counts hotel-stays. Rows reporting an input that couldn't be resolved aren't counted.
  • stays also accepts checkin and checkout in lower case, as do the top-level date inputs.
  • priceStoreName names a key-value store that remembers the lowest price per hotel, stay, occupancy and currency. With onlyNewOrChanged, an unchanged stay is skipped and pays hotel-checked only.
  • maxConcurrency (default 16, 1 to 32) is how many requests run at once. delayMs (default 0) adds a pause before each. We'd lower the first only if a run reports errors.
  • Rows are written in input order. If Apify moves a run to another server, or it restarts, it carries on where it stopped and no hotel-stay is written or charged twice.

⬆️ Output

One record per hotel and stay. This is The Plaza from the first example, run on 7 October 2026, with the long lists and links shortened.

{
"input": "The Plaza, New York",
"resolvedBy": "entity-page-link",
"nameMatchScore": 1,
"id": "ChUIneeg3YDGqvthGgkvbS8wNDJ5N2oQAQ-2026-11-10-2026-11-12",
"url": "https://www.google.com/travel/hotels/entity/ChUIneeg3YDGqvthGgkvbS8wNDJ5N2oQAQ",
"name": "The Plaza",
"hotelClassLabel": "5-star hotel",
"stars": 5,
"address": "768 5th Ave, New York, NY 10019",
"phone": "(212) 759-3000",
"website": "https://www.theplazany.com/?…",
"countryCode": "US",
"lat": 40.7646318,
"lng": -73.9743251,
"checkInFrom": "15:00",
"checkOutUntil": "12:00",
"rating": 4.5,
"ratingScale": 5,
"reviewCount": 6760,
"ratingHistogram": [ { "stars": 5, "percent": 71, "count": 4699 }, { "stars": 4, "percent": 21, "count": 1429 }, "…" ],
"images": ["https://lh3.googleusercontent.com/…"],
"mapsUrl": "https://maps.google.com/maps?…",
"placeId": "ChIJYaVdffBYwokRnTOoCzCq9mE",
"placeIdVerified": true,
"pricesIncludeTax": true,
"hasPricesExcludingTax": true,
"offers": [
{ "provider": "The Plaza", "providerId": 76, "isOfficialSite": true, "pricePerNight": 2017, "pricePerNightText": "$2,017", "pricePerNightExcludingTax": 1770, "priceTotal": 4033, "priceTotalText": "$4,033", "priceTotalExcludingTax": 3541, "pricesIncludeTax": true, "isFreeCancellation": false, "freeCancellationUntil": null, "bookingUrl": "https://www.google.com/travel/lodging/clk?…", "partnerUrl": "https://travel-productads.koddi.com/…", "logo": "https://www.gstatic.com/travel-hotels/branding/…" },
{ "provider": "Expedia.com", "providerId": 89, "isOfficialSite": false, "pricePerNight": 2024, "pricePerNightText": "$2,024", "pricePerNightExcludingTax": 1761, "priceTotal": 4048, "priceTotalText": "$4,048", "priceTotalExcludingTax": 3521, "pricesIncludeTax": true, "isFreeCancellation": false, "freeCancellationUntil": null, "bookingUrl": "https://www.google.com/travel/lodging/clk?…", "partnerUrl": "https://www.expedia.com/Hotel-Search?selected=28044&startDate=2026-11-10&endDate=2026-11-12&…" },
"…",
{ "provider": "Evendo", "providerId": 365615871, "isOfficialSite": false, "pricePerNight": 2336, "pricePerNightText": "$2,336", "pricePerNightExcludingTax": 1918, "priceTotal": 4673, "priceTotalText": "$4,673", "priceTotalExcludingTax": 3837, "pricesIncludeTax": true, "isFreeCancellation": true, "freeCancellationUntil": "Nov 7", "bookingUrl": "https://www.google.com/travel/lodging/clk?…" },
"…"
],
"offerCount": 27,
"lowestPerNight": 2017,
"featuredProviders": [
{ "provider": "Expedia.com", "isOfficialSite": false, "includedAmenities": ["Free Wi-Fi"], "pricePerNightText": "$2,024", "pricePerNight": 2024, "pricePerNightExcludingTax": 1761, "priceTotalText": "$4,048", "pricesIncludeTax": true, "rooms": [ { "roomName": "1 king bed", "features": ["Free cancellation until Nov 8", "2 guests", "…"], "bedType": { "count": 1, "type": "king" }, "isFreeCancellation": true, "pricePerNight": 2367, "priceTotal": 4735, "pricesIncludeTax": true }, "…" ] },
"…"
],
"rates": [ { "provider": "Expedia.com", "roomName": "1 king bed", "features": ["2 guests", "Free Wi-Fi"], "bedType": { "count": 1, "type": "king" }, "isFreeCancellation": false, "pricePerNightText": "$2,024", "pricePerNight": 2024, "pricePerNightExcludingTax": 1761, "priceTotalText": "$4,048", "priceTotal": 4048, "pricesIncludeTax": true, "bookingUrl": "https://www.google.com/aclk?…" }, "…" ],
"ecoCertified": true,
"sustainability": { "ecoCertified": true, "certifications": ["Green Key Eco Rating"], "practices": [ { "group": "Water conservation", "items": ["Water use audited by an independent organization", "Towel and linen reuse program"] }, "…" ] },
"healthAndSafety": [ { "group": "Personal protection", "items": ["Hand-sanitizer and/or sanitizing wipes in common areas", "Masks and/or gloves available for guests"] }, "…" ],
"entityId": "ChUIneeg3YDGqvthGgkvbS8wNDJ5N2oQAQ",
"propertyType": "hotel",
"fid": "0x0:0x61f6aa300ba8339d",
"kgId": "/m/042y7j",
"entityUrl": "https://www.google.com/travel/hotels/entity/ChUIneeg3YDGqvthGgkvbS8wNDJ5N2oQAQ",
"currency": "USD",
"checkIn": "2026-11-10",
"checkOut": "2026-11-12",
"nights": 2,
"adults": 2,
"childrenAges": [],
"rooms": 1,
"sentiment": [ { "topic": "Food and Beverage", "shortLabel": "Dining", "mentions": 581, "positive": 447, "negative": 57, "positiveShare": 0.769, "highlighted": true }, "…" ],
"amenities": {
"popular": [ { "name": "Wi-Fi", "note": "free" }, { "name": "Air conditioning", "note": null }, "…" ],
"groups": [ { "group": "Internet", "items": [ { "name": "Wi-Fi", "note": "free", "isAvailable": true }, { "name": "Wi-Fi in public areas", "note": null, "isAvailable": true } ] }, "…" ],
"all": ["Wi-Fi", "Wi-Fi in public areas", "…"],
"excluded": ["pools", "hot tub", "spa"]
},
"reviewSources": [
{ "source": "Tripadvisor", "rating": 4.5, "ratingScale": 5, "reviewCount": 5721,
"sampleReview": { "author": "970nguyenc", "when": "a week ago", "rating": 5, "ratingScale": 5, "text": "Very high quality hotel & great service.", "url": "https://www.tripadvisor.com/ShowUserReviews-g60763-d675616-r1079244517?…" } },
"…"
],
"lowestTotal": 4033,
"lowestProvider": "The Plaza",
"officialSiteOffer": { "provider": "The Plaza", "providerId": 76, "isOfficialSite": true, "pricePerNight": 2017, "pricePerNightText": "$2,017", "pricePerNightExcludingTax": 1770, "priceTotal": 4033, "priceTotalText": "$4,033", "priceTotalExcludingTax": 3541, "pricesIncludeTax": true, "isFreeCancellation": false, "freeCancellationUntil": null, "bookingUrl": "https://www.google.com/travel/lodging/clk?…", "partnerUrl": "https://travel-productads.koddi.com/…" },
"previousLowestPerNight": null,
"previousScrapedAt": null,
"priceChange": null,
"scrapedAt": "2026-10-07T20:26:03.000Z",
"priceChangePct": null
}

How to read it:

ColumnMeaning
offers, offerCountOne entry per seller. offerCount is the length of the list.
bookingUrl, partnerUrlbookingUrl is Google's click-through and expires after a while. partnerUrl is the seller's own deep link with your dates and occupancy filled in, and it's the durable one.
rates, featuredProvidersThe room-level breakdown from the sellers Google features. It's shorter than offers because only some sellers publish one.
pricesIncludeTaxOn the hotel row and on each offer, featured provider, room rate and similar hotel. Prices include taxes and fees in any language and country, and the flag is null only where there's no price. It was true on every priced offer, rate and similar hotel checked on 2 October 2026 in English, Japanese, German and British English.
hasPricesExcludingTaxWhether Google showed pre-tax figures for this hotel on this request.
officialSiteOfferThe hotel's own direct offer, repeated from offers when Google lists one. Null otherwise.
lowestPerNight, lowestTotal, lowestProviderTaken after your provider and free-cancellation filters. They describe the offers you kept.
nameMatchScore, resolvedByHow closely the resolved hotel matched the name you typed. Null when you gave an id or a URL, because nothing was matched.
previousLowestPerNight, previousScrapedAt, priceChange, priceChangePctThe price memory. Null until a second run reuses the same priceStoreName.
propertyTypehotel or rental.
typicalPricePerNightWith includeAbout only. Google prints it before or after tax depending on the page, and its own pricesIncludeTax says which. It was before tax on most pages measured.
errorPresent in place of the panel when a hotel can't be resolved, resolves to a different property, or its page can't be read.

How many sellers per hotel, and how fast?

Eight hotels for 2 adults and 2 nights, measured on 8 September 2026:

Offers returned184 across 8 hotels, 1 to 31 per hotel
Sellers per hotel19 to 31 for large chains, 1 for a single apartment
Names resolved6 of 6 plain names

Whole runs on Apify at the default settings, 2 adults:

RunRowsRun time
1 hotel, 1 stay14 to 6 s (2 October 2026, two runs)
6 hotels × 3 stays188 to 17 s over four runs (1 October 2026)
12 hotels × 3 stays3630 to 36 s (2 October 2026, two runs in a slow minute, and 10 s in a quiet one)
200 hotels, 1 stay2001.5 to 2.8 min (2 October 2026, four runs)

That's about 75 to 130 hotel-stays a minute, and several thousand fit in the default one-hour run. Google answers some hotel pages slowly, which is why run time depends more on the hotels than on how many you send.

FAQ

How many sellers will I get for my hotel?

However many Google lists for it. Large chain hotels gave 19 to 31 in the reference run and a single apartment gave one. Google decides, and small properties often have one or two.

I typed a name and got an error row. Why?

Either Google found nothing for the name, or it found a hotel that doesn't look like the one you typed. The row names what you typed and what Google offered, and it isn't charged. Add the city after a comma, or paste the hotel's Google Hotels link. A link never needs matching.

Do names in other languages work?

They do. Hotels typed in Japanese, Korean and Chinese matched their hotel in an English run in our test of 7 October 2026. One real name in that test found no hotel at all, a Seoul hotel typed in Korean, because Google's own hotel search returned nothing for it. Use the link for a hotel like that.

How do I check rate parity?

Read officialSiteOffer against lowestPerNight and lowestProvider. Each entry in offers also has isOfficialSite. When the lowest seller isn't the hotel, the partnerUrl of that offer is your evidence.

Can I price for children, several rooms or several date ranges?

childrenAges takes one age per child and rooms goes up to eight. Sellers quote for exactly that party. For several date ranges use stays: each hotel is priced for each range, and each hotel-stay is charged once.

Why is a pre-tax price null?

Google didn't show a pre-tax price for that hotel on that request. The all-in price is always there, and hasPricesExcludingTax tells you which case you're in.

How do I pay only when a price changes?

Name a price memory store and switch on "Only new or changed prices", then schedule the run. A hotel whose lowest price hasn't moved is skipped and pays the $0.0005 hotel-checked fee alone.

Do I need proxies or a Google account?

No account, no key and no proxy to arrange. Proxy usage is part of the price.

What are the limits?

  • Room-level rates come only from the sellers Google features with an expandable room list, typically three or four.
  • Google decides which sellers appear. The set follows where the request comes from, not a setting: asking for the Japanese or the US market returned the same 17 sellers at the same prices.
  • Pre-tax figures are filled only where Google shows them. pricePerNight and priceTotal always include taxes and fees.
  • Amenities, sustainability, health-and-safety measures, eco certification and the location score are read in English. In another interface language they're null, which means "not read", not "none". A room's isFreeCancellation is filled in English, Japanese and German and is null in other languages unless the room says so.
  • Amenities the hotel lacks are in amenities.excluded, and each item in amenities.groups has isAvailable true or false.
  • Description, typical price and location score sit on Google's About tab, which is a separate option and a separate charge.
  • The name check compares names, not places. A same-brand hotel in another city can still get through when most of the name matches. Add the city, or pass the link.
  • Google's own booking links expire after a while.
  • Google publishes no official Hotels API, which means there's no first-party feed to compare this against.

The actor reads what Google serves to a logged-out visitor: prices and listings, not personal data. Scraping public data is generally legal. Complying with Google's terms and your local law in how you use it is your responsibility.

Parity checks on a schedule, or from your code

For a daily parity report, put the monitor example on an Apify Schedule. A webhook can fire when the run ends, and Apify's integrations will pass the changed hotels to Slack, Google Sheets, Zapier or Make.

The API call for a short run is POST https://api.apify.com/v2/acts/boncross~google-hotels-prices/run-sync-get-dataset-items with the input JSON as the body, and it returns the records directly. Use the standard run endpoints or apify-client (NPM or PyPI) for bigger lists.

Through the Apify MCP server at mcp.apify.com the actor is available to AI agents as the tool google-hotels-prices. Give an agent a hotel name and dates and it gets the full comparison, direct rate and deep links included.

More from BonCross

Your feedback

If a seller is missing from a record, or a price doesn't match what Google shows for the same dates, raise it on the Issues tab in Apify Console with the hotel and stay. BonCross reads each report and answers there.