# Google Hotels Price Comparison - Every Booking Site (`mambo_melon/google-hotels-price-comparison`) Actor

For each hotel and date, the price on every booking site Google Hotels lists (Booking.com, Expedia, Hotels.com, the hotel's own site...): nightly and total, with and without taxes, direct booking links, cheapest offer flagged. Scan many dates for a price calendar.

- **URL**: https://apify.com/mambo\_melon/google-hotels-price-comparison.md
- **Developed by:** [Joran Morgan](https://apify.com/mambo_melon) (community)
- **Categories:** Travel, E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 price offers

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 Price Comparison - Every Booking Site

Give it one or more hotels and dates, and it returns what every booking site listed on Google Hotels charges for that stay: Booking.com, Expedia, Hotels.com, Priceline, KAYAK, the hotel's own website and the rest. Nightly and total prices, with and without taxes, a direct link to book each offer, and the offers ranked from cheapest to most expensive. Scan several check-in dates in one run and you have a price calendar.

I use it to see where a hotel is cheapest and how its rate moves across the month. Hotels often undercut the booking sites on their own site, and Google Hotels is the one place that shows all of them side by side for the exact dates. You can pass hotel names; the Actor finds the hotel on Google Hotels for you.

### Example

Input:

```json
{
  "hotels": ["ibis Styles Paris Hippodrome de Vincennes"],
  "checkIn": "2026-10-20",
  "nights": 2,
  "currency": "EUR"
}
```

That run returned 19 offers in about 7 seconds. The cheapest one, which was the hotel's own website (real output, links shortened):

```json
{
  "hotelName": "ibis Styles Paris Hippodrome de Vincennes",
  "entityId": "ChkIgI2TqOnT0rVVGg0vZy8xMXdodjYxeG5wEAE",
  "checkIn": "2026-10-20",
  "checkOut": "2026-10-22",
  "nights": 2,
  "adults": 2,
  "currency": "EUR",
  "provider": "ibis Styles Paris Hippodrome de Vincennes",
  "isOfficialSite": true,
  "rankByPrice": 1,
  "isCheapest": true,
  "offersForDate": 19,
  "nightlyPrice": 119.36,
  "nightlyPriceWithTaxes": 137.8,
  "totalPrice": 238.73,
  "totalPriceWithTaxes": 275.59,
  "bookingUrl": "https://travel-productads.koddi.com/PropertyAdvocateAPI/ClickRedirect?client=Accor&...",
  "googleRedirectUrl": "https://www.google.com/travel/lodging/clk?pc=..."
}
```

Expedia for the same stay came in 10th, at €132.25 a night and €303.97 in total with taxes.

Every row has the same fields. The **Offers by site** view is a price-comparison table per hotel and date.

### Input

| Field | What it does | Default |
|---|---|---|
| `hotels` | Hotel names, Google Hotels URLs or entity ids. Names use the first Google Hotels match, so add the city for common names | required |
| `checkIn` | First check-in date, `YYYY-MM-DD` | 14 days from today |
| `nights` | Length of each stay | 1 |
| `datesToScan` | How many consecutive check-in dates to check. 30 gives you a month-long price calendar | 1 |
| `adults` | Number of adult guests | 2 |
| `currency` | `USD`, `EUR`, `GBP`... | `USD` |
| `country` | Two-letter market for Google; which sites appear and their prices can differ by country | `us` |
| `includeSponsored` | Also return offers that appear only as ads | off |

### Good to know

- One row per booking site per check-in date. A hotel with 19 sites scanned over 30 dates gives up to 570 rows.
- `nightlyPrice` / `totalPrice` are before taxes and fees; the `...WithTaxes` fields include them (some sites don't report the taxed price, then it's `null`).
- `bookingUrl` is the site's own link with your dates already filled in. Links can carry session parameters, so use them soon after the run.
- If Google shows no prices for a date (sold out, or only a "check availability" button), you get one row with an explanation in `error`. Those rows aren't charged, and neither are hotels that can't be found.
- `isOfficialSite` marks the hotel's own booking engine when Google lists it.

### Use cases

Rate shopping and parity checks for hotels and revenue managers, finding the cheapest site and night for a trip, tracking a set of competitor hotels every morning, and feeding travel apps or AI agents (via the Apify MCP server) with live multi-site prices.

### FAQ

**How is this different from a Google Hotels search scraper?**
A search scraper lists many hotels in a city with one headline price each. This goes into specific hotels and returns every site's offer, for one date or many. For city-wide lists see my [Google Hotels Scraper](https://apify.com/mambo_melon/google-hotels-scraper).

**What does it cost?**
See the Pricing tab. You pay per offer row returned.

**A hotel name matched the wrong property.**
Use the hotel's Google Hotels URL instead, or add the city and street to the name.

### Notes

Only public Google Hotels pages are read, no login. Not affiliated with Google or any booking site.

# Actor input Schema

## `hotels` (type: `array`):

Hotel names (e.g. 'ibis Styles Paris Hippodrome de Vincennes'), Google Hotels URLs, or entity ids. Names are matched to the first Google Hotels result, so include the city for common names.

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

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

## `nights` (type: `integer`):

Length of each stay.

## `datesToScan` (type: `integer`):

1 = only the first check-in date. 30 = every day for a month (a price calendar).

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

Number of adult guests.

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

ISO currency code, e.g. USD, EUR, GBP.

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

Two-letter country code; booking sites and prices differ by market.

## `includeSponsored` (type: `boolean`):

Also return offers shown as ads (only for sites that don't also have a regular listing).

## Actor input object example

```json
{
  "hotels": [
    "The Ritz London",
    "Hotel Arts Barcelona"
  ],
  "nights": 1,
  "datesToScan": 1,
  "adults": 2,
  "currency": "USD",
  "country": "us",
  "includeSponsored": false
}
```

# Actor output Schema

## `offers` (type: `string`):

No description

## `cheapest` (type: `string`):

No description

# 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 = {
    "hotels": [
        "The Ritz London",
        "Hotel Arts Barcelona"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mambo_melon/google-hotels-price-comparison").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 = { "hotels": [
        "The Ritz London",
        "Hotel Arts Barcelona",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("mambo_melon/google-hotels-price-comparison").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 '{
  "hotels": [
    "The Ritz London",
    "Hotel Arts Barcelona"
  ]
}' |
apify call mambo_melon/google-hotels-price-comparison --silent --output-dataset

```

## MCP server setup

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

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/BzNYnIsQfAz0DvVDz/builds/vVAXMclvCcUfJjEWY/openapi.json
