# Google Hotels Prices: Rates, Ratings and Deals (`docfoundry/google-hotels-prices`) Actor

Hotel prices from Google Hotels for any city or landmark and your dates: nightly rate, total with taxes, rating, reviews, star class, deals, location and photos. Fast, reliable, pay per hotel.

- **URL**: https://apify.com/docfoundry/google-hotels-prices.md
- **Developed by:** [Nick Nguyen](https://apify.com/docfoundry) (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 $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.

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 Prices: Rates, Ratings and Deals

Hotel prices from Google Hotels for any city, neighborhood or landmark, for your dates and number of guests:
nightly rate, total with taxes and fees, guest rating and review count, star class, deals, coordinates,
website, photos and nearby places. One clean record per hotel.

- **Reliable.** Tested on 200 varied searches (50 cities and landmarks, 1-5 night stays up to 4 months out,
  1-4 guests, 6 currencies): 199 returned hotels on the first try, every date and currency as requested.
- **Your dates, your guests, your currency**, set exactly, not guessed from the query text.
- **Fast.** Median 3.6 seconds per search.
- **Pay per hotel, about 40% below the usual price.** Searches that fail or find nothing are never charged.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `locations` | array | `[]` | Cities, areas or landmarks: `Lisbon`, `Shibuya, Tokyo`, `near Times Square`. One search each. Empty = a free format example. |
| `checkIn` | date | today + 14 days | `YYYY-MM-DD`. |
| `nights` | integer | `2` | 1-30. |
| `adults` | integer | `2` | 1-12. |
| `currency` | string | `USD` | Any 3-letter code Google Hotels supports (USD, EUR, GBP, JPY, AUD, CAD ...). |
| `maxHotelsPerLocation` | integer | `20` | 1-20 (Google's first results page). |

```json
{
    "locations": ["Lisbon", "near Times Square"],
    "checkIn": "2026-12-10",
    "nights": 2,
    "adults": 2,
    "currency": "USD",
    "maxHotelsPerLocation": 20
}
```

### Output (one record per hotel)

```json
{
    "status": "ok",
    "location": "Lisbon",
    "rank": 2,
    "name": "Brown's | Avenue Hotel",
    "hotelClass": 5,
    "hotelClassText": "5-star hotel",
    "rating": 4.6,
    "reviewCount": 283,
    "currency": "USD",
    "pricePerNight": 171,
    "pricePerNightText": "$171",
    "pricePerNightWithTaxesText": "$190",
    "totalPrice": 341.53,
    "taxesAndFees": 38.46,
    "totalPriceWithTaxes": 379.99,
    "deal": "19% less than usual",
    "checkIn": "2026-12-10",
    "checkOut": "2026-12-12",
    "latitude": 38.7220236,
    "longitude": -9.1456424,
    "countryCode": "PT",
    "website": "https://www.brownshotelgroup.com/browns-avenue/",
    "googleUrl": "https://www.google.com/travel/hotels/entity/ChkIhLCQwvjO2IYWGg0vZy8xMXE0bTZieDkyEAE",
    "description": "Polished adults-only hotel offering a lounge & a restaurant, plus a rooftop pool with city views.",
    "photos": ["https://lh3.googleusercontent.com/..."],
    "nearby": [{"name": "Avenida", "travelTime": "5 min"}],
    "searchCheckIn": "2026-12-10",
    "searchCheckOut": "2026-12-12",
    "adults": 2,
    "searchCurrency": "USD"
}
```

`pricePerNight` is the nightly rate before taxes as Google shows it; `totalPriceWithTaxes` is the whole
stay including taxes and fees. Hotels with no availability for your dates keep their details with empty
prices. A search with no hotels gives one record with `status: "no-results"`; a search that could not be
completed gives `status: "failed"` and an `error`. Neither is charged.

### Pricing

Pay per event, no subscription.

| Event | Price | When it is charged |
|---|---|---|
| Hotel | **$0.003** | Once per hotel delivered. 20 hotels for one location = $0.06. |

Set a maximum charge in the run options and the actor stops before it would go over. Apify's standard
run-start event adds $0.00005 per run.

### Limits, stated plainly

- Up to 20 hotels per location: Google's first results page, in Google's order. For more hotels, split a city
  into areas ("Lisbon Alfama", "Lisbon Belem").
- Prices are what Google Hotels shows for the dates, guests and currency you set, from its partner sites;
  they change often and can differ from a booking site's final checkout price.
- About 3% of hotels come back without a price (no availability for your dates).
- Public data only: no login, no personal data.

### Privacy

Only your search terms are sent to Google. Results are stored only in your run's dataset. The actor runs with
limited permissions and reads nothing else in your account.

# Actor input Schema

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

Cities, areas or landmarks, one per line: "Lisbon", "Shibuya, Tokyo", "near Times Square". Each one is one Google Hotels search. Leave empty for a free format example.

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

YYYY-MM-DD. Empty = 14 days from today.

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

Length of stay (1-30).

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

Guests (1-12). Prices are for this many adults.

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

3-letter code: USD, EUR, GBP, JPY, AUD, CAD ...

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

Up to 20 (Google's first results page). Each hotel is one charged result.

## Actor input object example

```json
{
  "locations": [
    "Lisbon",
    "near Times Square"
  ],
  "nights": 2,
  "adults": 2,
  "currency": "USD",
  "maxHotelsPerLocation": 20
}
```

# Actor output Schema

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

Every hotel with prices, ratings, location, photos and nearby places.

## `resultsCsv` (type: `string`):

The same hotels as CSV.

# 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": [
        "Lisbon",
        "near Times Square"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("docfoundry/google-hotels-prices").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": [
        "Lisbon",
        "near Times Square",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("docfoundry/google-hotels-prices").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": [
    "Lisbon",
    "near Times Square"
  ]
}' |
apify call docfoundry/google-hotels-prices --silent --output-dataset

```

## MCP server setup

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

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/c52N79KbRc3MLi9NX/builds/qZyaadR6ueP8NVxYN/openapi.json
