# Google Hotels API: Hotel Prices, Ratings & Every Booking Site (`sauliusautomatesit/google-hotels-api`) Actor

Hotel prices from Google Hotels for any dates and guests: nightly and total price with taxes, rating, reviews, class, amenities, location, plus every booking site's price (Booking.com, Expedia, hotel's own site). By city, area or hotel. $2 per 1,000 hotels.

- **URL**: https://apify.com/sauliusautomatesit/google-hotels-api.md
- **Developed by:** [Saulius AutomatesIT](https://apify.com/sauliusautomatesit) (community)
- **Categories:** Travel, E-commerce, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 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 API: hotel prices, ratings and every booking site

Get hotel prices from [Google Hotels](https://www.google.com/travel/hotels) for any dates and number of guests, in bulk. Search a city, an area or a hotel name, or paste a Google Hotels URL. For every hotel you get the nightly price and the total with taxes, rating and review count, star class, amenities, location and photos. Turn on **booking sites** to also get the price on every site Google compares: Booking.com, Expedia, Hotels.com, Agoda, Trip.com, the hotel's own website and more.

No login, no API key, no browser. **$2 per 1,000 hotels**, and searches that find nothing cost nothing.

### What you can use it for

- **Rate shopping for hotels**: track your own hotel and your competitive set every day, for the next 30, 60 or 90 check-in dates.
- **Revenue management and pricing research**: compare prices across a city by star class, date and length of stay.
- **Parity checks**: see which booking site undercuts the hotel's own website, and by how much.
- **Travel apps and AI agents**: hotel lists with prices, ratings and coordinates in clean JSON.
- **Market research**: every hotel in an area with class, rating, reviews and amenities.

### How to use it

1. Put one search per line in **Searches or Google Hotels URLs**: `hotels in Lisbon`, `Shibuya Tokyo`, `hotels near Times Square`, `Hilton Paris Opera`, or a URL such as `https://www.google.com/travel/hotels/entity/...`.
2. Set the **check-in date** and **nights** (or a check-out date) and the number of **adults**.
3. Optional: **Check-in dates to cover** repeats every search for that many consecutive dates, which gives you a rate calendar.
4. Optional: **Add the price on every booking site**.
5. Run it and download the results as JSON, CSV or Excel, or read them through the API.

To track one exact hotel, search its name and set **Max hotels per search** to `1`, or paste its Google Hotels URL.

#### Input example

```json
{
  "queries": ["hotels in Lisbon", "Hilton Paris Opera"],
  "checkInDate": "2026-12-18",
  "nights": 2,
  "adults": 2,
  "maxHotelsPerQuery": 20,
  "includeBookingSites": true
}
```

### Output

One item per hotel and check-in date. Prices are in US dollars.

```json
{
  "type": "hotel",
  "query": "hotels in London",
  "position": 1,
  "checkInDate": "2026-12-20",
  "checkOutDate": "2026-12-22",
  "nights": 2,
  "adults": 2,
  "name": "The Waldorf Hilton, London",
  "hotelClass": 4,
  "rating": 4.4,
  "reviewsCount": 4522,
  "available": true,
  "currency": "USD",
  "pricePerNight": 321.42,
  "pricePerNightWithTaxes": 383.22,
  "totalPrice": 642.84,
  "totalTaxes": 123.59,
  "totalPriceWithTaxes": 766.44,
  "lowestPriceSite": "KAYAK.com",
  "bookingSitesCount": 31,
  "bookingSites": [
    { "site": "The Waldorf Hilton, London", "isOfficialSite": true, "pricePerNight": 370.06, "pricePerNightWithTaxes": 444.08, "totalPriceWithTaxes": 888.15 },
    { "site": "Booking.com", "isOfficialSite": false, "pricePerNight": 370.06, "pricePerNightWithTaxes": 444.08, "totalPriceWithTaxes": 888.15 }
  ],
  "address": "Aldwych, London WC2B 4DD, United Kingdom",
  "latitude": 51.5126985,
  "longitude": -0.1189512,
  "phone": "+44 20 7836 2400",
  "website": "https://www.hilton.com/en/hotels/lonwahi-the-waldorf-hilton-london/",
  "checkInTime": "3:00 PM",
  "checkOutTime": "12:00 PM",
  "amenities": ["Paid breakfast", "Paid Wi-Fi", "Air conditioning", "Fitness center", "Bar", "Restaurant"],
  "nearbyPlaces": [{ "name": "Covent Garden", "travel": [{ "mode": "walking", "time": "7 min" }] }],
  "hotelId": "ChUI3_-FnbCxhLlLGgkvbS8wNmNna3EQAQ",
  "googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChUI3_-FnbCxhLlLGgkvbS8wNmNna3EQAQ?...",
  "googleMapsUrl": "https://maps.google.com/?cid=5436548297785491423",
  "scrapedAt": "2026-10-03T14:00:00.000Z"
}
```

Each booking site also comes with its total price and a `bookingUrl`. The full address and phone come with the booking sites option or a hotel URL; city searches give coordinates, website and description.

| Field | Meaning |
|---|---|
| `pricePerNight` | Lowest nightly price Google shows, before taxes and fees |
| `pricePerNightWithTaxes` | The same with taxes and fees, per night |
| `totalPriceWithTaxes` | Whole stay with taxes and fees |
| `available` | `false` when Google has no price for those dates (often sold out) |
| `position` | Rank in Google's list for that search |
| `bookingSites` | Every booking site with its nightly and total price (booking sites option) |

### Pricing

Pay per result, no monthly fee:

| Event | Price |
|---|---|
| Hotel (one row per hotel and check-in date) | $0.002 ($2 per 1,000) |
| Booking sites for one hotel (optional) | $0.002 |
| Actor start | $0.00005 |

Apify Store discounts apply on paid plans: Bronze 5%, Silver 10%, Gold and above 15%.

Examples: 100 hotels in a city = $0.20. One hotel tracked across the next 30 check-in dates with every booking site = $0.12. A 20-hotel competitive set every day for a 30-day window = $1.20 per run.

### Tips

- Google lists about 20 hotels per page; the Actor pages on until **Max hotels per search**. Google stops after roughly 700 hotels for one search (New York: 693 of 1,187), so split a big city into areas (`hotels in Midtown Manhattan`, `hotels in Brooklyn`).
- For a rate calendar of a few exact hotels, use their Google Hotels URLs and **Check-in dates to cover**: one row per hotel per date.
- Schedule the Actor in Apify (daily or hourly) and connect the dataset to Google Sheets, Make, Zapier or your own API.
- Results are what Google shows a US visitor for those dates and guests, in US dollars.

### Use it from code or an AI agent

```bash
curl -X POST "https://api.apify.com/v2/acts/sauliusautomatesit~google-hotels-api/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "content-type: application/json" \
  -d '{"queries": ["hotels in Lisbon"], "checkInDate": "2026-12-18", "nights": 2}'
```

AI agents can call it through the Apify MCP server: `https://mcp.apify.com/?tools=sauliusautomatesit/google-hotels-api`.

### Related Actors

- [Google Trends API](https://apify.com/sauliusautomatesit/google-trends-api): search interest for destinations and hotel brands over time.
- [Google Ads Transparency API](https://apify.com/sauliusautomatesit/google-ads-transparency-api): every Google ad a hotel group or booking site runs.

### FAQ

**Is it legal?** It reads public Google Hotels pages that anyone can open without logging in. You are responsible for how you use the data; do not collect personal data you have no lawful basis for.

**Why is a hotel's price missing?** Google shows no price when the hotel is sold out or has no partner rates for those dates. Those rows have `available: false`.

**Can I get prices in euros or pounds?** Not yet: Google returns US dollar prices once dates are set. Convert with your own exchange rate.

**Something broke or you need a field?** Open an issue on the Actor's Issues tab and it will be looked at quickly.

# Actor input Schema

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

One per line. A place (`hotels in Lisbon`, `Shibuya Tokyo`, `hotels near Times Square`) returns the hotels Google lists there. A hotel name (`Hilton Paris Opera`) puts that hotel first, so with `Max hotels per search` = 1 you track one exact hotel. A Google Hotels URL works too: a hotel page (`google.com/travel/hotels/entity/...`) or a search page.

## `checkInDate` (type: `string`):

YYYY-MM-DD. Leave empty for 14 days from today.

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

Length of stay. Ignored when a check-out date is set.

## `checkOutDate` (type: `string`):

Optional, YYYY-MM-DD. Sets the number of nights from the check-in date.

## `checkInDays` (type: `integer`):

Repeat every search for this many consecutive check-in dates, starting at the check-in date. `30` gives a 30-day rate calendar for each hotel. Each date is charged as its own hotel rows.

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

Guests per room. Prices change with the number of guests.

## `maxHotelsPerQuery` (type: `integer`):

Stop after this many hotels for each search and date, in Google's order. Google shows about 20 per page and stops after roughly 700 for a big city; split a large city into areas to get more.

## `includeBookingSites` (type: `boolean`):

Open each hotel's Google page and add every booking site's nightly and total price (Booking.com, Expedia, Hotels.com, Agoda, Trip.com, the hotel's own site and more), the cheapest site, plus the full address and phone. Charged as a separate `booking-sites` event per hotel.

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

Google interface language, for example `en-US`, `de`, `fr`. Affects hotel descriptions and names where Google translates them. Prices are always in US dollars.

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

Two-letter country code Google uses for the searcher, for example `us`, `gb`, `de`.

## `concurrency` (type: `integer`):

How many searches run at the same time.

## `proxyConfiguration` (type: `object`):

Apify Proxy is used by default. You do not need to change this.

## Actor input object example

```json
{
  "queries": [
    "hotels in Lisbon"
  ],
  "nights": 1,
  "checkInDays": 1,
  "adults": 2,
  "maxHotelsPerQuery": 20,
  "includeBookingSites": false,
  "language": "en-US",
  "country": "us",
  "concurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One item per hotel and check-in date. Download as JSON, CSV or Excel, or read it from this API endpoint.

## `summary` (type: `string`):

Searches, hotels delivered, searches without results and failures.

# 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 Lisbon"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sauliusautomatesit/google-hotels-api").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 Lisbon"] }

# Run the Actor and wait for it to finish
run = client.actor("sauliusautomatesit/google-hotels-api").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 Lisbon"
  ]
}' |
apify call sauliusautomatesit/google-hotels-api --silent --output-dataset

```

## MCP server setup

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

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/JXYONIZq0clZKSvHQ/builds/U1GszfFIQYlrZY8LQ/openapi.json
