DEV Community

Cover image for Google Hotels prices for your exact dates, without a browser
Agnes Maina
Agnes Maina

Posted on

Google Hotels prices for your exact dates, without a browser

24 booking sites priced one Marriott for the same two nights. The hotel's own website came 21st.

The problem

I wanted hotel prices for specific dates. Not tonight's rates, not "from $79". Three nights in Paris, two adults, 12 to 15 November.

Google Hotels has exactly that data. Every booking site that sells a room, its price for your dates, the total for the stay. The page just doesn't want to give it to a script.

The first thing I tried was adding checkin=2026-11-12 to the URL. Google ignored it and showed its default dates. curr=USD got ignored too; I got a currency I hadn't asked for, because Google goes by where the request comes from. The dates, the guests and the currency all live inside one encoded parameter, and nothing else counts.

So if you track hotel prices, for work or for a trip, you end up with one of three options: click through it by hand, run a headless browser that breaks every few weeks, or pay for an API that charges by the call.

The solution

I built a small actor on Apify for it: Google Hotels Scraper. No browser. It writes the encoded parameter itself, asks Google for the page, and reads the hotel data Google already sends inside it.

It does two things:

  • Search a place. "Paris" gives you the first results page, about 20 hotels, each with the nightly price for your dates, the total for the stay, rating and review count, plus star class, coordinates and website when Google lists them.
  • Price one hotel at every booking site. Give it a hotel's Google link and you get one row with every site Google lists, cheapest first, with the hotel's own website flagged.

The second one is where it got interesting.

What 3 hotels cost across 66 offers

Two adults each. The two Paris hotels came from one run for 12 to 15 November in dollars, the Courtyard from a second run for 10 to 12 December in euros. Prices are per night, and each site's price is its cheapest listing for those dates.

Hotel Sites Cheapest per night Most expensive per night Hotel's own site
Courtyard by Marriott Paris Gare de Lyon 24 €224.67, KAYAK €298.90, Hotel prive €251.20, 21st
Glint Paris 19 $79.56, Booking.com $153.32, Qantas Hotels $130.15, 10th
The People Belleville 23 $73.40, own site $213.01, Qantas Hotels cheapest

The Courtyard is the clean comparison: an ordinary hotel, 24 sites, and Marriott's own website came 21st, €26.53 a night above the cheapest. Belleville and Glint also sell dorm beds, so part of their spread is a cheaper kind of room on some sites, not a cheaper price for the same room. Even so, booking direct was the best deal only once in three. That's the kind of thing you only see when you pull every site at once.

Quick start (3 minutes)

  1. Open the actor page and click Try for free.
  2. Put a city in Locations, pick your dates, adults and currency. Leave the dates empty and it searches a stay 30 days out, which is handy for a scheduled task that should never go stale.
  3. Run it. Each hotel comes back as a row. Copy a hotel's googleHotelsUrl into Hotel links on the next run to get its price at every booking site.

Code example

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("agnes.developer.queen/google-hotels-scraper").call(run_input={
    "locations": ["Paris"],
    "checkIn": "2026-11-12",  # your own dates
    "checkOut": "2026-11-15",
    "adults": 2,
    "currency": "USD",
})

for hotel in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(hotel["name"], hotel["pricePerNight"], hotel["totalPrice"], hotel["rating"])
Enter fullscreen mode Exit fullscreen mode

For booking site prices, swap locations for hotelUrls and read lowestPricePerNight, lowestPriceProvider and offers on each row.

Use cases

  • Rate checks for a hotel. Your own property and five competitors, every morning, same dates. If your direct price sits 21st out of 24 like the Courtyard's did, you want to know before your guests do.
  • Travel content and deal alerts. Cheapest site per hotel for the dates your readers care about.
  • Price history. Schedule the same input daily and you get a dated series per hotel and per site.
  • Sanity checks before you book. One run, 24 sites, done.

One thing to know before you build a tracker: Google changes which 20 hotels it shows from one search to the next. Two identical requests from my laptop shared only 10 of their 20 hotels. For a fixed set of hotels, use hotel links, not a city search.

Pricing

$2 per 1,000 hotels with a price from a search, and $0.008 per hotel you link for booking site prices. Rows without a price are free. A one city search usually returns 20 priced hotels, about $0.04. Pricing every site for 10 hotels is $0.08.

FAQ

Do I need a Google account or cookies?

No. It reads the public pages.

What if I misspell the city?

Google doesn't say "not found", it shows hotels near wherever the request came from. The actor compares the place Google matched with what you typed, and if they don't fit, those rows are free and the run's status message says so.

How far ahead can I search?

Stays of up to 30 nights, starting within 330 days.

Can I get more than 20 hotels for a city?

Not from one search yet. Search smaller areas ("Le Marais, Paris", "Montmartre, Paris") and combine.

Get started

Google Hotels Scraper on Apify. Put in one city and your dates; a run takes a few seconds.

Top comments (0)