# Google Hotels Scraper & API - Prices, Deals & Insights (`surefeed/google-hotels-scraper`) Actor

Scrape Google Hotels: prices with taxes, all booking partners, price insights, ratings and coordinates for any city and dates, or the hotels nearest any address or landmark. Local prices by country, verified accuracy, agent-ready.

- **URL**: https://apify.com/surefeed/google-hotels-scraper.md
- **Developed by:** [gianluca de dominicis](https://apify.com/surefeed) (community)
- **Categories:** Travel, Agents, Automation
- **Stats:** 2 total users, 0 monthly users, 98.8% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.00 / 1,000 hotels

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Google Hotels Scraper & API - Prices, Deals & Insights

Get **hotel prices from Google Hotels** for any city, hotel or address: price per night and total stay **with taxes**, **every booking site's offer** and the cheapest deal, as a spreadsheet, JSON or a live API.

> ⭐ **Found this Actor useful?** [Leave a review](https://apify.com/surefeed/google-hotels-scraper/reviews) — it takes 30 seconds and helps other people find it.
>
> 🛠️ **Something not working?** [Open an issue](https://apify.com/surefeed/google-hotels-scraper/issues) with the run link and we'll fix it within 24–48 hours.

**What you get for each hotel**

- 💶 **Price per night and total stay, taxes included**, in your currency — as travelers in the country you choose see them
- 🏷️ **Every booking site's price** (Booking.com, Expedia, Agoda, the official site…), the cheapest one, the typical price range and Google's *low / typical / high* verdict (optional)
- ⭐ Guest rating, number of reviews, hotel class (stars), amenities, coordinates and the Google Hotels link
- 📍 Or the **hotels closest to any address or landmark**, sorted by distance

**Quick start:** click **Start** without changing anything to get 20 hotels in Rome for a 2-night stay two weeks from today (about $0.06). Then type your own destination, dates and currency. No login, cookies or Google account needed — you pay only per hotel returned.

Real results — hotels close to Madison Square Garden, 2 adults, Oct 22–24, 2026:

| Rank | Hotel | Distance | Per night (incl. taxes) | Total stay | Rating | Stars |
|---|---|---|---|---|---|---|
| 1 | Fairfield by Marriott Inn & Suites Midtown Manhattan/Penn Station | 0.23 km | $582 | $1,164 | 4.2 | 4 |
| 2 | Renaissance New York Midtown Hotel | 0.25 km | $641 | $1,282 | 4.4 | 4 |
| 3 | The New Yorker Hotel | 0.25 km | $694 | $1,387 | 3.9 | 4 |

#### Why this Google Hotels scraper?

| Typical scrapers | This Actor |
|---|---|
| Frequent failed runs, unverified data | **Verified accuracy**: we checked **156 prices by hand against Google Hotels in a browser — 153 identical**; the other 3 were a price that changed between checks and two offers personalized by the booking site. Incomplete pages are retried automatically from a new IP |
| One price per hotel, often before taxes | **Nightly price and total stay, taxes included** — plus the before-tax price when Google shows it |
| Only the price Google highlights | **All booking partners** and the **truly cheapest offer** (Google's highlighted price is not always the lowest) |
| Prices from a random server location | **Choose the visitor's country**: partners, taxes and prices match what local travelers see |
| Just the first page, or "thousands" that are mostly duplicates | **1,000+ unique hotels per destination**: deep pagination plus related searches (B\&Bs, hostels, apartments, 5-star, city center…), merged without duplicates |
| Only "hotels in a city" | **Hotels near any address or landmark** ("Colosseum", "Via Nazionale 22, Rome", "Madison Square Garden"), sorted by distance, within the radius you choose |
| A specific hotel name returns a *different* hotel | **Single-hotel searches return that hotel** — ideal for rate parity checks |
| No context on whether a price is good | **Typical price range** for your dates and Google's **price insight** (low / typical / high) |

#### Google Hotels API vs this scraper

Google does not offer a public Google Hotels API. This Actor works as one: send a destination and dates (via the Apify API, MCP or x402) and get structured JSON back — prices with taxes, every booking partner, ratings and more.

#### Use cases

- **AI travel agents**: find and compare hotels for a user's exact dates and party size, with booking links.
- **Price monitoring**: track rates for a city or a list of hotels and get alerted when they drop.
- **Trips around an event or a place**: hotels within walking distance of a venue, a conference center, a hospital or an office.
- **Hotel revenue management**: see your own and competitors' rates on every booking site (rate parity).
- **Market research**: average prices, availability and ratings by destination and season.

#### How to use

1. Enter one or more **destinations or hotels** (e.g. `hotels in Rome`, `Hotel Artemide Rome`) — or an address or landmark in **Near an address or landmark** (e.g. `Colosseum, Rome`) plus a **Max distance (km)**.
2. Set **check-in / check-out** dates, **adults**, **currency** and the **country** to search from.
3. Optional: turn on **Include all booking offers & price insights** for partner-by-partner prices.
4. Click **Start** and export the results as JSON, CSV or Excel, or fetch them via API.

#### Input

```json
{
    "queries": ["hotels in Rome"],
    "checkIn": "2026-11-20",
    "checkOut": "2026-11-23",
    "adults": 2,
    "currency": "EUR",
    "country": "IT",
    "language": "en",
    "maxResultsPerQuery": 20,
    "includeDetails": true
}
```

##### Hotels near a place

```json
{
    "near": "Colosseum, Rome",
    "maxDistanceKm": 1,
    "onlyAvailable": true,
    "currency": "EUR",
    "country": "IT",
    "maxResultsPerQuery": 20
}
```

The place is located with OpenStreetMap (coordinates like `41.8902, 12.4922` also work). Results come sorted by straight-line distance, each with `distanceKm`, and `nearResolvedTo` shows the exact place that was matched. In our tests the 20 hotels returned around the Colosseum were all within 240 m, and hotel coordinates matched Google Maps exactly.

#### Output

One item per hotel (real example, details included):

```json
{
    "query": "hotels in Rome",
    "position": 5,
    "name": "Caravel Hotel - 4 stars",
    "type": "hotel",
    "available": true,
    "pricePerNight": 78,
    "totalPrice": 234,
    "currency": "EUR",
    "nights": 3,
    "pricesIncludeTaxes": true,
    "rating": 4.1,
    "reviewCount": 2000,
    "reviewCountIsRounded": true,
    "stars": 4,
    "amenities": ["Free breakfast", "Free Wi-Fi", "Parking", "Air conditioning", "Pet-friendly"],
    "checkIn": "2026-11-20",
    "checkOut": "2026-11-23",
    "adults": 2,
    "country": "IT",
    "googleHotelsUrl": "https://www.google.com/travel/hotels/entity/...",
    "details": {
        "address": "Via Cristoforo Colombo, 124, 00147 Roma RM",
        "phone": "06 518 0789",
        "lowestPricePerNight": 78,
        "lowestTotalPrice": 234,
        "lowestPriceProvider": "Priceline",
        "typicalPriceRange": { "min": 95, "max": 121 },
        "priceInsight": "low",
        "offers": [
            { "provider": "Priceline", "pricePerNight": 78, "totalPrice": 234 },
            { "provider": "Billabook.com", "pricePerNight": 82, "totalPrice": 245 },
            { "provider": "Trip.com", "pricePerNight": 88, "totalPrice": 265 },
            { "provider": "TUI.com", "pricePerNight": 93, "totalPrice": 280 },
            { "provider": "Booking.com", "pricePerNight": 112, "totalPrice": 335 }
        ]
    }
}
```

| Field | Meaning |
|---|---|
| `pricePerNight` / `totalPrice` | Price per night and for the whole stay, **taxes and fees included** |
| `pricePerNightIsDerived` | `true` when Google showed a before-tax nightly price and we derived the after-tax one from the total (±1 rounding) |
| `available` | `false` when no partner offers a room for these dates and number of adults (turn on **Only hotels with rooms available** to skip them) |
| `latitude` / `longitude` | Hotel location as on Google Maps; `address` and `phone` when Google lists them on the results page |
| `distanceKm` | Only with **Near**: straight-line distance from the place, in km |
| `type` | `hotel` or `vacation_rental` (apartments and houses listed on Google Hotels) |
| `stars` | Official hotel class (1–5 stars); `rating` is the guest review score out of 5 |
| `reviewCountIsRounded` | Google abbreviates large counts (e.g. "2K") |
| `details.lowestPriceProvider` | Booking site with the cheapest offer |
| `details.priceInsight` | Google's verdict on the current price for your dates (e.g. low, typical, high) |

#### How much does it cost?

**Pay per event** — no monthly rental, no start fee, no proxy or compute surcharge:

- **Hotel** — each hotel in the results: **$3.00 per 1,000** (volume discounts on higher Apify plans).
- **Hotel details** — only if you enable *Include all booking offers & price insights*: **$5.00 per 1,000 hotels**.

Example: 100 hotels in Rome with all offers ≈ $0.80. Set **Max cost per run** for a hard cap on spending.

#### Automate & integrate

Schedule daily runs to monitor prices, trigger webhooks, or send results to Google Sheets, Slack, Make, Zapier or n8n. Call it from any language through the Apify API.

#### Use with AI assistants (MCP)

Add this Actor as a tool to Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server (`https://mcp.apify.com`). Your assistant can then search hotels and compare booking offers on demand.

#### Agent-ready: autonomous payments (x402 & Skyfire)

AI agents can discover, run and pay for this Actor on their own — no Apify account or API key needed — using x402 (USDC on Base) or Skyfire.

#### FAQ

**Why do prices depend on the "Search from country" setting?**
Google Hotels shows different booking partners and displays taxes differently depending on where the traveler is. This Actor fetches results from a residential IP in the country you choose, so prices match what local travelers see.

**Can I include children?**
Not yet: Google Hotels ignores children passed through search links. Use the number of adults for now.

**How many hotels can I get?**
Google says "15,000 results" for a city like Rome, but a single search only shows ~700–750 different hotels — deeper pages repeat the same ones. With **Find more hotels with related searches** on (default), the Actor adds related searches and merges them without duplicates: in our test, Rome reached **1,131 unique hotels** in one run (the run's spending cap stopped it there). For large runs, raise **Max cost per run** in the run options: 1,000 hotels cost about $3.

Tested in October 2026 with a cap of 1,000 per city — every run succeeded on the first try:

| Destination | Unique hotels | With price for the dates |
|---|---|---|
| Milan, Florence, Naples | 1,000 each | 83–87% |
| Berlin | 1,000 | 85% |
| New York | 1,000 | 87% |
| Tokyo | 1,000 | 74% |
| Dublin | 686 (everything Google lists) | 61% |

**Why do I sometimes get fewer hotels than requested?**
The destination may have fewer hotels with offers for your dates, or your **Max cost per run** was reached. The run's status message tells you which.

**How does "Near an address or landmark" work?**
The Actor finds the place on OpenStreetMap, searches Google Hotels around it, measures the straight-line distance to every hotel (from the hotel's own coordinates) and returns the closest ones first, up to **Max distance (km)**. Distance is "as the crow flies", not walking time: a hotel 400 m away is usually a 5–7 minute walk. Check `nearResolvedTo` if the place name is ambiguous, or pass coordinates instead.

**Is the price "live"?**
Yes — every run fetches current prices. Hotel prices can change within minutes, so compare runs made at the same time.

**Something looks wrong?**
Open an issue on the **Issues** tab with the run link. We usually fix problems within 24–48 hours.

#### More tools from us

- [Kleinanzeigen Scraper & API](https://apify.com/surefeed/kleinanzeigen-scraper) — every listing for any search on Kleinanzeigen.de, past the 1,250 limit, with price drops and only-new monitoring.
- [Google Flights Scraper & API](https://apify.com/surefeed/google-flights-scraper) — fares, stops, layovers and CO2 emissions for any route, flexible dates.
- [Google Trends Scraper & API](https://apify.com/surefeed/google-trends-scraper) — interest over time, by region, related queries and trending searches.
- [Google Play Scraper & API](https://apify.com/surefeed/google-play-scraper) — Android app data, star histograms and reviews.
- [App Store Scraper & API](https://apify.com/surefeed/app-store-scraper) — iPhone app data, star histograms, top charts and reviews in 150+ countries.
- [Workday Jobs Scraper & API](https://apify.com/surefeed/workday-jobs-scraper) — every job from any Workday careers site, with exact posting date, salary range and remote status.
- [Eventbrite Scraper & API](https://apify.com/surefeed/eventbrite-scraper) — every event in any city or online, with ticket prices, sold out and organizer details.

#### Legal

**Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Google LLC. It only collects publicly available information from Google Hotels. All trademarks belong to their respective owners.

# Actor input Schema

## `queries` (type: `array`):

What to search on Google Hotels, one per line: a city, area or hotel name (e.g. "hotels in Rome", "Hotel Artemide Rome"). Ignored when "Near an address or landmark" is filled in.

## `near` (type: `string`):

Find the hotels closest to a place: a landmark, an address, a venue or coordinates (e.g. "Colosseum, Rome", "Via Nazionale 22, Rome", "Madison Square Garden", "41.8902, 12.4922"). Results are sorted by straight-line distance and each hotel gets a distanceKm field. The place is located with OpenStreetMap; the run log and the nearResolvedTo field show what it was matched to.

## `maxDistanceKm` (type: `number`):

Only with "Near an address or landmark": keep hotels within this straight-line distance.

## `checkIn` (type: `string`):

YYYY-MM-DD. Defaults to 14 days from today.

## `checkOut` (type: `string`):

YYYY-MM-DD, 1–30 nights after check-in. Defaults to check-in + 2 nights.

## `adults` (type: `integer`):

Number of adult guests (1–8). Prices and availability depend on it. Children are not supported (Google ignores them in shared search links).

## `currency` (type: `string`):

3-letter currency code.

## `country` (type: `string`):

Prices, booking partners and tax display depend on the visitor's country. Results are fetched as a visitor from this country would see them.

## `language` (type: `string`):

Language of hotel names, amenities and labels.

## `maxResultsPerQuery` (type: `integer`):

How many hotels to return per query (up to 3,000). Results are collected across pages (~20 per page, fetched in parallel) and de-duplicated.

## `onlyAvailable` (type: `boolean`):

Skip hotels that show no price for your dates and number of adults (no booking partner has a room). Skipped hotels are not charged.

## `expandResults` (type: `boolean`):

A single Google Hotels search shows at most ~700–750 different hotels (deeper pages repeat the same ones). When you ask for more, related searches are added automatically (B\&Bs, hostels, apartments, 5-star, city center…) and merged without duplicates. Each hotel's matchedQuery tells which search found it.

## `includeDetails` (type: `boolean`):

Opens each hotel page: every booking site's price (Booking.com, Expedia, official site…), the cheapest offer, the typical price range for your dates, Google's price insight (low / typical / high), address and phone. Charged as an extra "Hotel details" event per hotel.

## `proxyType` (type: `string`):

"local" fetches from a residential IP in the chosen country (matches what local travelers see). "datacenter" is faster but partners and tax display may differ from the chosen country.

## Actor input object example

```json
{
  "queries": [
    "hotels in Rome"
  ],
  "maxDistanceKm": 2,
  "adults": 2,
  "currency": "USD",
  "country": "US",
  "language": "en",
  "maxResultsPerQuery": 20,
  "onlyAvailable": false,
  "expandResults": true,
  "includeDetails": false,
  "proxyType": "local"
}
```

# Actor output Schema

## `hotels` (type: `string`):

One item per hotel: prices with taxes, rating, reviews, stars, amenities and (optionally) all booking offers.

## `runSummary` (type: `string`):

Duration, charged events and whether the spending limit was reached.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "hotels in Rome"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("surefeed/google-hotels-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "queries": ["hotels in Rome"] }

# Run the Actor and wait for it to finish
run = client.actor("surefeed/google-hotels-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "hotels in Rome"
  ]
}' |
apify call surefeed/google-hotels-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,surefeed/google-hotels-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/XQQnXXM6JvLxxbxpH/builds/CZJYGvxOvJczhGDtf/openapi.json
