Google Hotels Prices Scraper: Booking.com, Expedia, Agoda Rates avatar

Google Hotels Prices Scraper: Booking.com, Expedia, Agoda Rates

Pricing

from $3.49 / 1,000 hotel with prices

Go to Apify Store
Google Hotels Prices Scraper: Booking.com, Expedia, Agoda Rates

Google Hotels Prices Scraper: Booking.com, Expedia, Agoda Rates

Scrape Google Hotels prices for your dates: one row per hotel with every booking site's price per night and for the stay, taxes in and out, free cancellation and a booking link, plus address, coordinates, stars, rating, reviews and amenities. Search a city or name hotels. No login.

Pricing

from $3.49 / 1,000 hotel with prices

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

6 hours ago

Last modified

Share

20 Barcelona hotels priced in 16 seconds

From The Mine Works, makers of Threads Scraper and B2B Leads Finder, with over 140,000 runs across 170+ public actors.

Why choose this actor?

  • Every booking site's price for your dates, in one row per hotel. Booking.com, Expedia, Hotels.com, Agoda, Trip.com, the hotel's own website and the rest Google Hotels lists, each with its price per night and for the whole stay, before and with taxes, free cancellation terms and its own booking link. Our proof run priced 20 Barcelona hotels in 16 seconds, with 16 to 30 booking sites per hotel (24 on average). No Google account, no API key, no cookies of yours.
  • Only your exact stay, checked before delivery. Google quietly answers dates it will not price with other dates. The actor compares the stay Google priced with the one you asked for and never delivers a mismatch as yours, and never charges for it.
  • You pay only for hotels that have prices. One charge per hotel row, all booking sites included. Hotels Google shows no price for, places that are not hotels, names Google cannot find, duplicates and refused pages are never charged.

Run it on Apify

Part of The Mine Works More tools family: Tennis Match & Player Data Scraper, LandWatch Scraper.

Try it in one minute

Paste this input and press Start. It prices about 10 Lisbon hotels for a two night stay 30 days from today:

{
"locations": ["Lisbon"],
"checkIn": "30",
"checkOut": "32",
"currency": "EUR",
"maxHotels": 10
}

You can say what to price in four ways, and mix them in one run:

  • Cities, districts or landmarks (locations): Lisbon, Shoreditch London, near Eiffel Tower. Each is searched as "hotels in ..."; text that already names a kind of stay, such as hostels in Berlin or resorts near Cancun, is searched as typed.
  • Hotel names (hotels): Park Hyatt Tokyo. Add the city when the name is common. The first hotel Google Maps finds for the name is priced, and the row shows which one.
  • Google Hotels links or hotel ids (hotels): a link such as https://www.google.com/travel/hotels/entity/ChcI1b68wq3V66lAGgsvZy8xdHRkbTljaxAB, or a hotel_id from an earlier run.
  • Google Maps links (hotels): a link to the hotel's place on Google Maps.

Dates are either a calendar date (2026-11-20) or a number of days from today (30), so a scheduled run keeps pricing the same distance ahead.

Apify's free plan includes $5 of credit every month, which covers about 1,000 hotels at this actor's Free plan price.

Copy to your AI assistant

themineworks/google-hotels-prices-scraper on Apify. Returns one row per hotel with every booking site Google Hotels lists for your dates (price per night and for the stay, before and with taxes, free cancellation, booking link), plus address, coordinates, star class, rating, reviews and amenities. Call ApifyClient("TOKEN").actor("themineworks/google-hotels-prices-scraper").call(run_input={"locations": ["Lisbon"], "checkIn": "2026-11-20", "checkOut": "2026-11-22", "currency": "EUR", "maxHotels": 20}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: locations (cities or areas) or hotels (names, Google Hotels links, hotel ids or Google Maps links). Optional: checkIn (YYYY-MM-DD or days from today; default 14 days from today), checkOut (default one night after check-in; up to 30 nights), adults (default 2, 1 to 10), currency (default USD), country (Google country code, default us), maxHotels (per city, default 20, up to 300), includeHotelsWithoutPrices (default false). Skip the last row if it has "_type": "info". Full spec: GET https://api.apify.com/v2/acts/themineworks~google-hotels-prices-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations

Key features

  • 47 fields per hotel, grouped as the stay, the price summary (lowest price per night and for the stay, with and without taxes, the cheapest site and its link, the hotel's own site price), every booking site's offer, the hotel (address, coordinates, star class, rating, reviews per star, phone, website, description, photo), amenities and check-in times, and Google ids and links.
  • 13 fields per booking site offer: position, site name and id, official site or not, ad or not, price per night and for the stay before and with taxes, free cancellation and its deadline, the booking link and the site's logo.
  • Up to 50 cities and 500 named hotels per run, and up to 300 hotels with prices per city, in Google's order. A hotel found twice in a run is priced and charged once.
  • Any stay up to 30 nights, up to 365 days ahead, 1 to 10 adults. 54 currencies in the Console list, and any 3 letter code Google Hotels supports through the API.
  • Google country versions (country): gb, in, de and so on change which booking sites Google lists for the same hotel.
  • Plain HTTP, no browser, 512 MB of memory, five hotel pages at a time. A run summary (status per city and hotel, pages read, attempts, robots.txt state, the dates check) is saved as the OUTPUT record.

How to use it

Basic: one city

{
"locations": ["Barcelona"],
"checkIn": "2026-11-13",
"checkOut": "2026-11-15",
"currency": "EUR",
"maxHotels": 20
}

This is the input of our proof run: 20 hotels, all priced for 13 to 15 November, in 16 seconds.

Several cities and named hotels at once

Every city and hotel in a run is priced for the same stay:

{
"locations": ["Lisbon", "Shoreditch London", "hostels in Berlin"],
"hotels": ["Park Hyatt Tokyo", "https://www.google.com/travel/hotels/entity/ChcI1b68wq3V66lAGgsvZy8xdHRkbTljaxAB"],
"checkIn": "2026-11-20",
"checkOut": "2026-11-22",
"adults": 2,
"currency": "EUR",
"maxHotels": 50
}

maxHotels counts per city: this run returns up to 50 hotels for each of the three areas, plus the two named hotels.

Rate parity check for your hotel

Revenue managers compare the hotel's own website price with what the travel agencies show. Put the hotel in hotels and read its providers: official_site_price_per_night is what your own site asks, and every agency's price for the same stay sits next to it.

{
"hotels": ["Hotel Adlon Kempinski Berlin"],
"checkIn": "2026-11-20",
"checkOut": "2026-11-21",
"currency": "EUR",
"country": "de"
}

Any offer cheaper than official_site_price_per_night is a parity gap. Schedule it daily and you have a parity log.

Daily price tracking for a city, 30 days ahead

Analysts and travel startups build price histories by pricing the same distance ahead every day. Write the dates as days from today and add a schedule (Apify Console, Schedules, Add schedule):

{
"locations": ["Barcelona"],
"checkIn": "30",
"checkOut": "31",
"currency": "EUR",
"maxHotels": 100
}

Each run prices the night 30 days ahead, so the datasets build a calendar of prices over time. Join them on hotel_id.

Watch a competitive set

List your hotel and the hotels you compete with, same dates for all:

{
"hotels": ["The Savoy London", "The Ritz London", "Claridge's London", "The Langham London"],
"checkIn": "45",
"checkOut": "47",
"currency": "GBP",
"country": "gb"
}

Sort by lowest_price_per_night_with_taxes to see where you sit in the set, and by rating and review_count to see why.

Prices around an event

Hotels reprice for conferences, concerts and holidays. Run the event week and a normal week side by side, one run each, and compare lowest_total_price_with_taxes per hotel_id:

{
"locations": ["Las Vegas Strip"],
"checkIn": "2027-01-05",
"checkOut": "2027-01-08",
"currency": "USD",
"maxHotels": 60
}

One row per booking site, for a spreadsheet

Ask Apify's dataset API to unwind the offers: https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&unwind=providers. Each booking site becomes its own line, with the hotel's columns repeated.

Input parameters

ParameterTypeDefaultWhat it does
locationsarray of stringsnone (Console prefill Lisbon)Cities, districts or landmarks, one per line. Each is searched as "hotels in ..." unless it already names a kind of stay (hostels, resorts, inns and so on). Up to 50 per run.
hotelsarray of stringsnoneOne hotel per line: a name, a Google Hotels link, a hotel_id from an earlier run, or a Google Maps link to the hotel. Up to 500 per run.
checkInstring14 days from today (Console prefill 30)A date such as 2026-11-20, or a number of days from today such as 30. Up to 365 days ahead.
checkOutstringone night after check-in (Console prefill 32)A date, or a number of days from today. Up to 30 nights after check-in.
adultsinteger2Guests the room is priced for, 1 to 10.
currencystringUSDCurrency for every price. The Console offers 54 codes; through the API any 3 letter code Google Hotels supports works.
countrystringusTwo letter Google country version (us, gb, in, de, fr ...). It changes which booking sites Google lists; in, for example, adds Indian sites.
maxHotelsinteger20Most hotels with prices per city or area, 1 to 300, in the order Google Maps lists them. Hotels without a price do not count toward it. Named hotels are not limited by it.
includeHotelsWithoutPricesbooleanfalseAlso add a free row for each hotel Google shows no price for on your dates (sold out, no room for your party, or not bookable through Google).

Give locations, hotels or both; a run with neither stops at once with a note and charges nothing for hotels. A date that is in the past, a check-out before check-in, a stay over 30 nights or a check-in over 365 days ahead stops the run the same way, with the reason in the note.

Input names used by other hotel scrapers are understood too: searchQueries, checkInDate, checkOutDate, entity, maxResults and countryCode.

What data do you get?

One row per hotel. Fields Google has no value for are left out of the row instead of being sent as null; empty lists stay as [].

The stay

  • check_in, check_out, nights, adults, currency (the stay and currency Google actually priced, which the actor has checked against yours)

The price summary

  • prices_found, lowest_price_per_night, lowest_price_per_night_with_taxes, lowest_total_price, lowest_total_price_with_taxes (each the lowest of that column across all booking sites, so two of them can come from different sites)
  • cheapest_provider and cheapest_booking_url (the site with the lowest price per night with taxes and fees; the lowest price before taxes when no site gives taxes)
  • official_site_price_per_night, official_site_price_per_night_with_taxes (the hotel's own website, when Google lists it)
  • providers_count

Every booking site (providers, one entry per site)

  • position, provider, provider_id, is_official_site, is_ad
  • price_per_night, price_per_night_with_taxes, total_price, total_price_with_taxes
  • free_cancellation (true, false or null when Google does not say), free_cancellation_until
  • booking_url (the booking site's own link, with your dates in it), logo

The hotel

  • hotel_name, address, latitude, longitude, country_code
  • star_class, hotel_class (for example 4-star tourist hotel), property_type (hotel, hostel and so on)
  • rating, review_count, rating_histogram (reviews per star)
  • phone, website, description, photo

Amenities and policies

  • amenities (one flat list), popular_amenities, amenity_groups (Google's groups such as Internet or Policies & payments, each with its group and items), languages_spoken, check_in_time, check_out_time

Ids, links and search context

  • hotel_id, place_id, google_hotels_url, google_maps_url
  • country, input, input_type (location or hotel), search_query, search_position (the hotel's place in Google's list for a city search), scraped_at

Each run also ends with one row that has "_type": "info" and a short message. It is never billed; filter it out by _type.

Stable fields for automations

These fields were present in every one of the 23 hotel rows of our proof runs on 1 Oct 2026, and their names will not change:

FieldWhat it holds
hotel_nameHotel name as Google shows it
addressFull street address
latitudeLatitude of the hotel
longitudeLongitude of the hotel
ratingGoogle rating, 1 to 5
review_countNumber of Google reviews
check_inCheck-in date Google priced (YYYY-MM-DD)
check_outCheck-out date Google priced
currencyCurrency of every price in the row
lowest_price_per_nightLowest price per night across all booking sites, before taxes
cheapest_providerBooking site with the lowest price with taxes and fees
providers_countNumber of booking sites with a price
providersList of every booking site's offer
hotel_idGoogle Hotels id, the same in every run; reuse it as input
scraped_atWhen the row was read (ISO 8601)

The price fields are in every row with prices. A row you asked for with includeHotelsWithoutPrices has prices_found: false, an empty providers list and no price fields. star_class was in 22 of the 23 rows (a hostel had no star class), check_in_time in 21, and official_site_price_per_night in 20: Google did not list the hotel's own site for the other three.

Output examples

Real rows from our proof runs on 1 Oct 2026, trimmed: booking sites are cut to the first few, amenities to a few, and long links are shortened with "...".

A city search row (Barcelona, 13 to 15 Nov 2026, in EUR). 30 booking sites; the cheapest with taxes was pricetravel.com, while the hotel's own site matched the lowest price before taxes:

{
"hotel_name": "W Barcelona",
"address": "Plaça Rosa Del Vents 1, Final, Pg. de Joan de Borbó, 08039 Barcelona, Spain",
"latitude": 41.368437,
"longitude": 2.1901534,
"country_code": "ES",
"star_class": 5,
"hotel_class": "5-star hotel",
"property_type": "hotel",
"rating": 4.4,
"review_count": 19008,
"rating_histogram": { "1": 1201, "2": 447, "3": 1140, "4": 3654, "5": 12566 },
"check_in": "2026-11-13",
"check_out": "2026-11-15",
"nights": 2,
"adults": 2,
"currency": "EUR",
"prices_found": true,
"lowest_price_per_night": 389.25,
"lowest_price_per_night_with_taxes": 423.96,
"lowest_total_price": 778.5,
"lowest_total_price_with_taxes": 847.93,
"cheapest_provider": "pricetravel.com",
"cheapest_booking_url": "https://www.pricetravel.com/es/hotel/w-barcelona?source=google-ha-usa&currency=USD&ct=US&room1.adults=2...",
"official_site_price_per_night": 389.25,
"official_site_price_per_night_with_taxes": 454.56,
"providers_count": 30,
"providers": [
{
"position": 1,
"provider": "W Barcelona",
"provider_id": 100231600,
"is_official_site": true,
"is_ad": false,
"price_per_night": 389.25,
"price_per_night_with_taxes": 454.56,
"total_price": 778.5,
"total_price_with_taxes": 909.13,
"free_cancellation": false,
"free_cancellation_until": null,
"booking_url": "https://marriottclk.koddi.com/clk?destination=https%3A%2F%2Fad.doubleclick.net%2Fclk...",
"logo": "https://www.gstatic.com/travel-hotels/branding/2428381527581661883.png"
},
{
"position": 2,
"provider": "pricetravel.com",
"provider_id": 130944901,
"is_official_site": false,
"is_ad": false,
"price_per_night": 396.86,
"price_per_night_with_taxes": 423.96,
"total_price": 793.71,
"total_price_with_taxes": 847.93,
"free_cancellation": null,
"free_cancellation_until": null,
"booking_url": "https://www.pricetravel.com/es/hotel/w-barcelona?source=google-ha-usa&currency=USD&ct=US&room1.adults=2..."
}
],
"popular_amenities": ["Wi-Fi (free)", "Air conditioning", "Breakfast (extra charge)", "Restaurant"],
"hotel_id": "ChYIi974-4CPg_RZGgovbS8waGdyNjU2EAE",
"place_id": "0x12a4a3b185625025:0x59e80c780f7e2f0b",
"google_maps_url": "https://www.google.com/maps?cid=6478441773767995147",
"country": "us",
"input": "Barcelona",
"input_type": "location",
"search_query": "hotels in Barcelona",
"search_position": 2,
"scraped_at": "2026-10-01T13:29:38.618Z"
}

A hostel where the hotel's own site was the cheapest (same run):

{
"hotel_name": "Generator Barcelona",
"address": "Carrer de Còrsega, 373, Gràcia, 08037 Barcelona, Spain",
"star_class": 1,
"property_type": "hostel",
"rating": 4.5,
"review_count": 9049,
"currency": "EUR",
"lowest_price_per_night": 52.8,
"lowest_price_per_night_with_taxes": 66,
"lowest_total_price_with_taxes": 132,
"cheapest_provider": "Generator Barcelona",
"official_site_price_per_night": 52.8,
"providers_count": 16,
"providers": [
{ "position": 1, "provider": "Generator Barcelona", "is_official_site": true, "price_per_night": 52.8, "price_per_night_with_taxes": 66, "total_price_with_taxes": 132 },
{ "position": 2, "provider": "Hostelworld", "is_official_site": false, "price_per_night": 62.38, "price_per_night_with_taxes": 75.64, "total_price_with_taxes": 151.29, "free_cancellation": false }
],
"check_in_time": "3:00 PM",
"check_out_time": "10:00 AM",
"phone": "+34 932 20 03 77",
"hotel_id": "ChkIw6Cs3c_U5LTCARoML2cvMWhqaDh4bmxoEAE",
"input": "Barcelona",
"search_position": 3
}

A hotel given by name, priced in GBP on Google's UK version (country gb). Google listed 4 sites and not the hotel's own, so there is no official_site_price_per_night:

{
"hotel_name": "The Ritz London",
"address": "150 Piccadilly, London W1J 9BR",
"star_class": 5,
"rating": 4.6,
"review_count": 7889,
"check_in": "2026-11-13",
"check_out": "2026-11-15",
"currency": "GBP",
"lowest_price_per_night": 1563.98,
"lowest_price_per_night_with_taxes": 1876.77,
"lowest_total_price_with_taxes": 3753.54,
"cheapest_provider": "Tripadvisor.com",
"providers_count": 4,
"providers": [
{ "position": 2, "provider": "Bookhotel.direct", "price_per_night": 2041.63, "price_per_night_with_taxes": 2450, "total_price_with_taxes": 4900, "free_cancellation": true, "free_cancellation_until": "2026-11-11" },
{ "position": 3, "provider": "Tripadvisor.com", "price_per_night": 1563.98, "price_per_night_with_taxes": 1876.77, "total_price_with_taxes": 3753.54, "free_cancellation": null }
],
"languages_spoken": ["English"],
"check_in_time": "3:00 PM",
"check_out_time": "12:00 PM",
"phone": "020 7493 8181",
"website": "https://www.theritzlondon.com/",
"hotel_id": "ChUIlICR8JGwzbBZGgkvbS8wNDd6cnYQAQ",
"country": "gb",
"input": "The Ritz London",
"input_type": "hotel",
"search_query": "The Ritz London"
}

A hotel given as a Google Hotels link (same run). The lowest price before taxes (Evendo, 188.64) and the cheapest with taxes (Super.com) came from different sites:

{
"hotel_name": "Villa Panthéon",
"address": "41 Rue des Écoles, 75005 Paris, France",
"hotel_class": "4-star tourist hotel",
"rating": 4.3,
"review_count": 840,
"currency": "GBP",
"lowest_price_per_night": 188.64,
"lowest_price_per_night_with_taxes": 213.82,
"cheapest_provider": "Super.com",
"official_site_price_per_night": 206.61,
"official_site_price_per_night_with_taxes": 242.19,
"providers_count": 21,
"hotel_id": "ChcI1b68wq3V66lAGgsvZy8xdHRkbTljaxAB",
"input": "https://www.google.com/travel/hotels/entity/ChcI1b68wq3V66lAGgsvZy8xdHRkbTljaxAB",
"input_type": "hotel"
}

The info row that ends every run (never billed):

{
"_type": "info",
"delivered": 20,
"message": "20 hotels delivered. This row is informational: it is never billed.",
"scraped_at": "2026-10-01T13:29:47.292Z"
}

The run's summary (status per city and hotel, pages read, attempts, robots.txt state, the dates check) is in the key-value store record OUTPUT, not in the dataset.

Pricing

You pay per hotel delivered with prices, plus a flat $0.005 per run whatever memory you choose. Every booking site's price for a hotel comes inside its one row.

EventFree planStarter (Bronze)Scale (Silver)Business (Gold) and above
Hotel with prices (hotel-scraped), per hotel$0.00499$0.00449$0.00399$0.00349
Same, per 1,000 hotels$4.99$4.49$3.99$3.49
Run start (run-start), once per run$0.005$0.005$0.005$0.005

The run start is our own flat event, charged once when the run starts. It is not Apify's per GB start fee, so it stays $0.005 at any memory size. No other pricing change is scheduled.

Never charged:

  • hotels Google shows no price for on your dates (sold out, no room for your party, not bookable through Google), including the free rows includeHotelsWithoutPrices adds;
  • places that are not a kind of lodging, and names Google cannot find;
  • hotels Google answers with other dates than yours;
  • the same hotel found twice in a run;
  • pages Google refused;
  • the info row at the end of the dataset, and the OUTPUT run summary.

To cap what a run can cost, set a maximum total charge in the run options. The actor stops before a hotel the budget cannot pay for. The Pricing tab always shows the rate for your own plan; if this table and the Pricing tab ever disagree, the Pricing tab is right.

FAQ

What is Google Hotels, and what does this actor read?

Google Hotels is Google's hotel search: for a hotel and a stay, it lists the prices of the booking sites and the hotel's own website side by side. This actor reads the same hotel pages a visitor who is not signed in sees, for your dates, and turns each one into a row.

How much does it cost to price 1,000 hotels?

1,000 times your plan's price per hotel, plus $0.005 for the run: $4.99 on the Free plan, down to $3.49 on Business. All booking sites for a hotel come in its one row, and hotels without prices are not charged.

How many hotels can I get in one run?

Up to 300 hotels with prices for each city or area, up to 50 cities, and up to 500 named hotels. A city search returns the hotels Google Maps lists for "hotels in ...", in that order. For a very large city, search districts separately; the same hotel found twice is priced and charged once.

How fresh are the prices, and can I track them over time?

Every run reads Google Hotels live; nothing comes from a cache. Booking sites change prices often, so treat each row as a reading at scraped_at. For a price history, write the dates as days from today ("checkIn": "30") and add a schedule in Apify Console: each run prices the same distance ahead, and hotel_id stays the same from run to run. Each run prices one stay for every hotel in it; run once per stay for several dates.

Do I need a Google account, an API key, cookies or a proxy?

No. The actor reads Google Hotels as a visitor who is not signed in, through Apify's datacenter proxies, which are included in the price. There is nothing to set up.

How does it work without a browser, and does it follow robots.txt?

In two steps. First it finds the hotels: a city is searched the way Google Maps searches it, 20 places a page, and places that are not lodging are dropped; a hotel name is searched the same way and the first hotel found is used; a link needs no search. Then it opens each hotel's Google Hotels page for your stay, which carries every booking site's offer and the hotel's details in one block of data.

Every address is checked against google.com's robots.txt, read fresh at the start of each run, before it is opened. Google Hotels' own city search (/travel/search) is closed to crawlers there, so the actor does not use it; the Google Maps search it uses instead is explicitly allowed (Allow: /search?*tbm=map), and hotel pages are not restricted. We checked the file again on 1 Oct 2026.

On 29 Sep 2026, 11 test runs from Apify datacenter IPs (Paris, New York, Mumbai, London, Lisbon and named hotels, 288 hotel rows) made 354 page requests, and all 354 were answered on the first try. Our two proof runs on 1 Oct made 28 more, all answered. No captcha, consent page or "unusual traffic" page appeared. A refused page is tried up to 4 times, each retry on a new IP, and a run stops early if Google keeps refusing.

Why did a hotel I asked for come back with no row?

The OUTPUT record says why for each city and hotel: Google had no price for your dates or party size, the name matched a place that is not a hotel, Google answered other dates, Google found nothing by that name, or the page was refused. None of these are charged. Turn on includeHotelsWithoutPrices to get a free row for each hotel without prices.

Why can the lowest price and the cheapest site differ?

Each lowest_* field is the lowest value of that column across all booking sites, so lowest_price_per_night and lowest_price_per_night_with_taxes can come from different sites. cheapest_provider is the site with the lowest price per night with taxes and fees, which is what a guest pays. In the Villa Panthéon example above, Evendo had the lowest price before taxes and Super.com the lowest with taxes.

No. Google's own click links are tied to a session and closed to crawlers, so the actor never opens them. booking_url is the booking site's own link that Google carries inside its click link, with your dates in it. A handful of offers have no link of their own (2 of 522 in our proof runs).

What happens with dates Google will not price?

Google answers some dates (usually more than about 11 months ahead) with tomorrow's prices instead of yours. The actor compares the stay Google priced with yours and never delivers such a row as yours. When the first 3 hotels of a run all come back with other dates, the run stops early: no hotels are charged, only the $0.005 run start.

What else should I know?

  • Google quotes one room. Large parties (for example 6 adults) often get no price at many hotels.
  • Some booking sites give no price with taxes; those fields are then null in that site's entry.
  • Requests come from Apify datacenter IPs, which are mostly in the United States. country changes the booking sites Google lists, not where the visitor appears to be.
  • If Google prices in another currency than the one you asked for, the rows carry the currency Google used and the OUTPUT record notes it.

Which formats can I export?

JSON, CSV, Excel, XML, HTML table and RSS from the dataset page in Apify Console, or through the Apify API. Add unwind=providers to the API link for one line per booking site.

Can I use it from Claude, ChatGPT or another AI agent?

  • Connector URL: https://mcp.apify.com/?tools=themineworks/google-hotels-prices-scraper.
  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http google-hotels-prices-scraper "https://mcp.apify.com/?tools=themineworks/google-hotels-prices-scraper".

The actor collects publicly visible business data (hotel prices and details), never signs in, and follows google.com's robots.txt. You are responsible for how you use the data, including Google's terms and data protection laws such as GDPR and CCPA. This actor is an independent tool and is not affiliated with Google, Booking.com, Expedia, Agoda or any other company named here; all names are trademarks of their owners.

Integrations

  • Google Sheets: send each run's hotels to a sheet with Apify's Google Sheets integration.
  • Make, Zapier and n8n: start runs and receive the rows in your workflows.
  • Webhooks: get a call when a run finishes, for example to post price drops to Slack.
  • API: start runs and read datasets from any language with the Apify API or the Python and JavaScript clients.
  • MCP clients: Claude, ChatGPT and other agents through Apify's MCP server.

More from The Mine Works

More tools

Social media and video

Leads and business directories

Marketing, SEO and reviews

LinkedIn

Real estate

Science, health and government data

Jobs and hiring

E-commerce and marketplaces

Company and business data

Food and local services

Developer and AI tools

Support

Found a problem or need a field? Open an issue on the actor's Issues tab and we will answer there. For a new source or a custom build, email dmineworks@gmail.com.

Google Hotels Prices Scraper turns a city or a list of hotels into one row per hotel with every booking site's price for your exact dates, checked and charged only when Google has prices.