# Google Hotels Scraper - Prices for Your Dates (`mambo_melon/google-hotels-scraper`) Actor

Hotels from Google Hotels for any destination and dates: nightly and total price with taxes, deal badges, star class, rating and review count, amenities, GPS, website, check-in times. Several cities per run, any currency.

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

## Pricing

from $3.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 - Prices for Your Dates

Get hotels from Google Hotels for any destination and any dates: the nightly price, the total for your stay with taxes and fees, Google's deal badges ("17% less than usual"), star class, rating and review count, amenities, GPS coordinates, the hotel's website and check-in/check-out times. Several destinations per run, prices in the currency you choose.

I wrote it for price tracking. The part that usually breaks with Google Hotels scrapers is the dates: Google ignores simple date parameters in the URL and keeps showing tomorrow's prices. This one sets the stay dates the same way Google's own date picker does, so every price in the output is for the nights you asked for. It doesn't run a browser, which keeps it fast (100 hotels in about 25 seconds) and cheap.

### Example

Input:

```json
{
  "locations": ["Paris", "Lisbon"],
  "checkIn": "2026-10-15",
  "checkOut": "2026-10-18",
  "currency": "EUR",
  "maxHotelsPerLocation": 100
}
```

200 hotels came back in about 55 seconds. One of them (real output, Sep 29 2026):

```json
{
  "name": "ibis Styles Paris Hippodrome de Vincennes",
  "location": "Paris",
  "position": 2,
  "checkIn": "2026-10-15",
  "checkOut": "2026-10-18",
  "nights": 3,
  "adults": 2,
  "currency": "EUR",
  "pricePerNight": 102,
  "pricePerNightText": "€102",
  "totalPrice": 355,
  "totalPriceText": "€355",
  "totalIncludesTaxes": true,
  "dealBadge": "DEAL",
  "priceVsUsual": "17% less than usual",
  "hotelClass": 3,
  "propertyType": "hotel",
  "rating": 4.2,
  "reviewsCount": 850,
  "amenities": ["Breakfast ($)", "Free Wi-Fi", "Free parking", "Air conditioning", "Pet-friendly", "Bar", "Accessible", "Smoke-free property"],
  "latitude": 48.818248,
  "longitude": 2.4617728,
  "website": "https://all.accor.com/hotel/B7A3/index.fr.shtml",
  "checkInTime": "2:00 PM",
  "checkOutTime": "11:30 AM",
  "countryCode": "FR",
  "entityId": "ChkIgI2TqOnT0rVVGg0vZy8xMXdodjYxeG5wEAE",
  "googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChkIgI2TqOnT0rVVGg0vZy8xMXdodjYxeG5wEAE?q=hotels+in+Paris&hl=en&gl=us&curr=EUR&ts=..."
}
```

Every row has the same fields; anything Google doesn't show for a property is `null`. The **Hotels & prices** view is a price table; **Hotel details** has amenities, location, website and check-in times.

### Input

| Field | What it does | Default |
|---|---|---|
| `locations` | Destinations as you'd type them on Google Hotels: `Paris`, `Lisbon Alfama`, `hotels near Heathrow` | required |
| `checkIn` / `checkOut` | Stay dates, `YYYY-MM-DD` | 14 days from today, 2 nights |
| `adults` | Number of adult guests (prices change with it) | 2 |
| `currency` | `USD`, `EUR`, `GBP`... | `USD` |
| `country` | Two-letter country Google should use; it can change which offers and prices appear | `us` |
| `maxHotelsPerLocation` | Google shows about 20 per page; the scraper pages through up to this number | 100 |

### Good to know

- `pricePerNight` and `totalPrice` are the price Google highlights for the property on the results page (usually its cheapest offer). `totalIncludesTaxes` tells you whether Google marked the total as including taxes and fees.
- `pricePerNight` is `null` when Google shows no price for your dates, usually because the property is sold out.
- `position` is the order Google listed the property in. Paid "Sponsored" placements are left out.
- Private apartments listed on Google Hotels come back as `propertyType: "vacation rental"`, often with fewer details than hotels.

### Use cases

Tracking hotel rates for a destination over time (schedule it daily for the same dates), comparing prices between cities or weekends, spotting discounted properties via `priceVsUsual`, building a hotel list with coordinates and websites for a travel product, or giving an AI agent live hotel prices through the Apify MCP server.

### FAQ

**Does it get prices from each booking site (Booking.com, Expedia...)?**
Not yet. It returns the price Google highlights for each property on the results page. Open an issue if per-site prices would help you.

**What does it cost?**
See the Pricing tab: you pay per hotel returned.

**Something looks wrong for a destination.**
Open an issue with the input you used. I run a daily test on this Actor, so layout changes on Google's side usually get caught quickly.

**Can I get every booking site's price for one hotel?**
Yes, with [Google Hotels Price Comparison](https://apify.com/mambo_melon/google-hotels-price-comparison): per-site prices for chosen hotels and dates, including a price calendar.

### Notes

Only the public Google Hotels search page is read, no login. Not affiliated with Google.

# Actor input Schema

## `locations` (type: `array`):

Cities, areas or free-text searches as you'd type them on Google Hotels, e.g. 'Paris', 'Lisbon Alfama', 'hotels near Heathrow'.

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

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

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

YYYY-MM-DD. Defaults to two nights after check-in.

## `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 Google should use (affects which booking sites and prices appear).

## `maxHotelsPerLocation` (type: `integer`):

Google shows about 20 hotels per page; the scraper pages through until it reaches this number.

## Actor input object example

```json
{
  "locations": [
    "Paris"
  ],
  "adults": 2,
  "currency": "USD",
  "country": "us",
  "maxHotelsPerLocation": 100
}
```

# Actor output Schema

## `prices` (type: `string`):

No description

## `details` (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 = {
    "locations": [
        "Paris"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mambo_melon/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 = { "locations": ["Paris"] }

# Run the Actor and wait for it to finish
run = client.actor("mambo_melon/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 '{
  "locations": [
    "Paris"
  ]
}' |
apify call mambo_melon/google-hotels-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mambo_melon/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/JMbDjzfGb5hIXBMMh/builds/4wEwcHTdelBe7dVZg/openapi.json
