# Google Hotels API

> Google Hotels returns hotel prices, property details, booking offers, and guest reviews as a workflow and API.

Search hotels returns prices, ratings, amenities, and addresses for a location and stay dates; it needs a location, check-in, and check-out. Compare hotel prices returns booking-site offers and cancellation details; it needs a city, hotel name, and stay dates. Get hotel reviews returns guest feedback and ratings; it needs a hotel name and city.

- Page: https://fous.com/workflows/google-hotels
- Handle: `@google-hotels`
- Category: [Travel](https://fous.com/workflows/category/travel)
- Source website: https://google.com/travel/hotels
- Last verified: Sep 28, 2026
- Fous is not affiliated with Google Hotels.

## Methods

### Compare hotel prices

Operation `compare_hotel_prices`, version 1. 1 credit per call.

Compare booking-site prices for one hotel on your dates, including stay totals, cancellation and booking links. Google Hotels supports up to six adults for this search and may not show prices for every site.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `city` | string | yes | `"Paris"` | City where the hotel is located, for example Paris. |
| `adults` | integer | no |  | Number of adult guests, for example 2. |
| `check_in` | string | yes | `"2026-10-20"` | Arrival date, for example 2026-10-15. |
| `currency` | string | no | `"EUR"` | Three-letter price currency, for example USD. |
| `check_out` | string | yes | `"2026-10-22"` | Departure date, for example 2026-10-18. |
| `hotel_name` | string | yes | `"Ritz Paris"` | Hotel name, for example Hotel Lutetia. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "hotel_name",
    "city",
    "check_in",
    "check_out"
  ],
  "properties": {
    "city": {
      "type": "string",
      "description": "City where the hotel is located, for example Paris.",
      "examples": [
        "Paris"
      ]
    },
    "adults": {
      "type": "integer",
      "default": 2,
      "maximum": 10,
      "minimum": 1,
      "description": "Number of adult guests, for example 2."
    },
    "check_in": {
      "type": "string",
      "format": "date",
      "description": "Arrival date, for example 2026-10-15.",
      "examples": [
        "2026-10-20",
        "2026-10-15"
      ]
    },
    "currency": {
      "type": "string",
      "default": "USD",
      "description": "Three-letter price currency, for example USD.",
      "examples": [
        "EUR"
      ]
    },
    "check_out": {
      "type": "string",
      "format": "date",
      "description": "Departure date, for example 2026-10-18.",
      "examples": [
        "2026-10-22",
        "2026-10-18"
      ]
    },
    "hotel_name": {
      "type": "string",
      "description": "Hotel name, for example Hotel Lutetia.",
      "examples": [
        "Ritz Paris",
        "Hotel Lutetia"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "city": "Paris",
      "check_in": "2026-10-20",
      "currency": "EUR",
      "check_out": "2026-10-22",
      "hotel_name": "Ritz Paris"
    },
    {
      "city": "Paris",
      "check_in": "2026-10-15",
      "check_out": "2026-10-18",
      "hotel_name": "Hotel Lutetia"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `offers` | array |  |  |
| `offers[].total` | number |  |  |
| `offers[].currency` | string |  |  |
| `offers[].booking_link` | string |  |  |
| `offers[].price_per_night` | number |  |  |
| `offers[].booking_site_name` | string |  |  |
| `offers[].free_cancellation` | boolean |  |  |
| `address` | string | `"15 Pl. Vendôme, 75001 Paris, France"` |  |
| `currency` | string | `"EUR"` |  |
| `hotel_link` | string | `"https://www.google.com/travel/hotels/entity/ChUImcGKtLfWgL9OGgkvbS8wNTZuODEQAQ?hl=en&curr=EUR&ts=CAEaIAoCGgASGhIUCgcI6g` |  |
| `hotel_name` | string | `"Ritz Paris"` |  |
| `lowest_price_site` | string or null |  |  |
| `lowest_total_price` | number or null |  |  |
| `google_property_token` | string | `"ChUImcGKtLfWgL9OGgkvbS8wNTZuODEQAQ"` |  |

**Example input**

```json
{
  "city": "Paris",
  "check_in": "2026-10-20",
  "currency": "EUR",
  "check_out": "2026-10-22",
  "hotel_name": "Ritz Paris"
}
```

**Example output**

```json
{
  "offers": [],
  "address": "15 Pl. Vendôme, 75001 Paris, France",
  "currency": "EUR",
  "hotel_link": "https://www.google.com/travel/hotels/entity/ChUImcGKtLfWgL9OGgkvbS8wNTZuODEQAQ?hl=en&curr=EUR&ts=CAEaIAoCGgASGhIUCgcI6g8QChgUEgcI6g8QChgWGAIyAggBKgkKBToDRVVSGgA&ap=MAE",
  "hotel_name": "Ritz Paris",
  "lowest_price_site": null,
  "lowest_total_price": null,
  "google_property_token": "ChUImcGKtLfWgL9OGgkvbS8wNTZuODEQAQ"
}
```

### Get hotel reviews

Operation `get_hotel_reviews`, version 1. 1 credit per call.

Find a hotel by name and city and return its guest reviews, Google rating, and available topic ratings. Topic ratings are averages from the returned reviews when guests supplied them.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `city` | string | yes | `"New York"` | City where the hotel is located, for example New York. |
| `sort` | string | no | `"newest"` | Review order, for example newest. |
| `hotel_name` | string | yes | `"The Plaza"` | Hotel name, for example The Plaza. |
| `max_reviews` | integer | no | `25` | Maximum reviews to return, for example 20. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "hotel_name",
    "city"
  ],
  "properties": {
    "city": {
      "type": "string",
      "description": "City where the hotel is located, for example New York.",
      "examples": [
        "New York"
      ]
    },
    "sort": {
      "enum": [
        "most_relevant",
        "newest"
      ],
      "type": "string",
      "default": "most_relevant",
      "description": "Review order, for example newest.",
      "examples": [
        "newest"
      ]
    },
    "hotel_name": {
      "type": "string",
      "description": "Hotel name, for example The Plaza.",
      "examples": [
        "The Plaza",
        "The Hotel Chelsea"
      ]
    },
    "max_reviews": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum reviews to return, for example 20.",
      "x-fous-developer": true,
      "examples": [
        25,
        5
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "city": "New York",
      "hotel_name": "The Plaza"
    },
    {
      "city": "New York",
      "sort": "newest",
      "hotel_name": "The Plaza",
      "max_reviews": 25
    },
    {
      "city": "New York",
      "hotel_name": "The Hotel Chelsea",
      "max_reviews": 5
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `address` | string or null | `"222 W 23rd St, New York, NY 10011"` | Street address of the matched hotel. |
| `reviews` | array |  | Guest reviews in the chosen order. |
| `reviews[].site` | string or null | `"Google"` |  |
| `reviews[].stars` | integer or null | `5` |  |
| `reviews[].page_link` | string | `"https://www.google.com/travel/hotels/entity/ChkI0-XZ1bHaofsfGg0vZy8xMXRmMzlwbWxoEAE?hl=en&gl=us"` |  |
| `reviews[].review_date` | string or null | `"2026-06-30"` | Estimated date for relative dates, YYYY-MM-DD. |
| `reviews[].review_text` | string or null | `"Brilliant experience! The building is beautiful and was sensitively renovated. The interior design is a big success, qu` |  |
| `reviews[].reviewer_name` | string or null | `"Angela Gagauf"` |  |
| `page_link` | string | `"https://www.google.com/travel/hotels/entity/ChkI0-XZ1bHaofsfGg0vZy8xMXRmMzlwbWxoEAE?hl=en&gl=us"` | Hotel page on Google Hotels. |
| `hotel_name` | string | `"The Hotel Chelsea"` | Matched hotel name. |
| `total_reviews` | integer or null | `691` | Number of Google reviews shown for this hotel. |
| `overall_rating` | number or null | `4.7` | Google review rating out of 5. |
| `ratings_by_topic` | array |  | Ratings out of 5 averaged only from the returned reviews that rate each topic; not the whole-hotel rating. |
| `ratings_by_topic[].topic` | string | `"Rooms"` |  |
| `ratings_by_topic[].rating` | number | `5` |  |
| `ratings_by_topic[].review_count` | integer | `3` |  |
| `google_property_token` | string | `"ChkI0-XZ1bHaofsfGg0vZy8xMXRmMzlwbWxoEAE"` | Google Hotels property token. |

**Example input**

```json
{
  "city": "New York",
  "hotel_name": "The Hotel Chelsea",
  "max_reviews": 5
}
```

**Example output**

```json
{
  "address": "222 W 23rd St, New York, NY 10011",
  "reviews": [
    {
      "site": "Google",
      "stars": 5,
      "page_link": "https://www.google.com/travel/hotels/entity/ChkI0-XZ1bHaofsfGg0vZy8xMXRmMzlwbWxoEAE?hl=en&gl=us",
      "review_date": "2026-06-30",
      "review_text": "Our stay at Hotel Chelsea was absolutely fabulous. This iconic hotel, originally built in the late1800s, has been beautifully restored and updated while preserving its historic charm and character. Th…",
      "reviewer_name": "Angela Gagauf"
    },
    {
      "site": "Trip.com",
      "stars": 5,
      "page_link": "https://www.trip.com/hotels/detail?hotelid=22981168&Allianceid=810504&Sid=1394411&utm_medium=cpc&utm_campaign=HPA&utm_source=google#review",
      "review_date": "2025-11-02",
      "review_text": "Brilliant experience! The building is beautiful and was sensitively renovated. The interior design is a big success, quirky and enhancing the historic charm of the building at the same time. The spa a…",
      "reviewer_name": "Trip.com Member"
    }
  ],
  "page_link": "https://www.google.com/travel/hotels/entity/ChkI0-XZ1bHaofsfGg0vZy8xMXRmMzlwbWxoEAE?hl=en&gl=us",
  "hotel_name": "The Hotel Chelsea",
  "total_reviews": 691,
  "overall_rating": 4.7,
  "ratings_by_topic": [
    {
      "topic": "Rooms",
      "rating": 5,
      "review_count": 3
    },
    {
      "topic": "Service",
      "rating": 4,
      "review_count": 3
    }
  ],
  "google_property_token": "ChkI0-XZ1bHaofsfGg0vZy8xMXRmMzlwbWxoEAE"
}
```

### Search hotels

Operation `search_hotels`, version 1. 1 credit per call.

Find places to stay in a city or area for your dates, with Google Hotels prices and guest details. Prices and availability can change.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `adults` | integer | no | `3` | Adults, for example 2. |
| `check_in` | string | yes | `"2026-12-02"` | Check-in, for example 2026-11-12. |
| `currency` | string | no |  | Three-letter currency code, for example USD. |
| `location` | string | yes | `"Tokyo"` | City or area, for example Paris. |
| `check_out` | string | yes | `"2026-12-04"` | Check-out, for example 2026-11-15. |
| `min_stars` | integer | no | `3` | Minimum hotel class, for example 4. |
| `max_results` | integer | no | `10` | Maximum hotels, for example 20. |
| `min_guest_rating` | number | no | `4` | Minimum rating out of five, for example 4.2. |
| `max_price_per_night` | number | no | `300` | Maximum nightly price, for example 250. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "location",
    "check_in",
    "check_out"
  ],
  "properties": {
    "adults": {
      "type": "integer",
      "default": 2,
      "maximum": 10,
      "minimum": 1,
      "description": "Adults, for example 2.",
      "examples": [
        3
      ]
    },
    "check_in": {
      "type": "string",
      "format": "date",
      "description": "Check-in, for example 2026-11-12.",
      "examples": [
        "2026-12-02",
        "2026-11-12"
      ]
    },
    "currency": {
      "type": "string",
      "default": "USD",
      "description": "Three-letter currency code, for example USD."
    },
    "location": {
      "type": "string",
      "description": "City or area, for example Paris.",
      "examples": [
        "Tokyo",
        "Paris"
      ]
    },
    "check_out": {
      "type": "string",
      "format": "date",
      "description": "Check-out, for example 2026-11-15.",
      "examples": [
        "2026-12-04",
        "2026-11-15"
      ]
    },
    "min_stars": {
      "type": "integer",
      "maximum": 5,
      "minimum": 1,
      "description": "Minimum hotel class, for example 4.",
      "examples": [
        3
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 20,
      "maximum": 50,
      "minimum": 1,
      "description": "Maximum hotels, for example 20.",
      "x-fous-developer": true,
      "examples": [
        10
      ]
    },
    "min_guest_rating": {
      "type": "number",
      "maximum": 5,
      "minimum": 1,
      "description": "Minimum rating out of five, for example 4.2.",
      "examples": [
        4
      ]
    },
    "max_price_per_night": {
      "type": "number",
      "minimum": 0,
      "description": "Maximum nightly price, for example 250.",
      "examples": [
        300
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "adults": 3,
      "check_in": "2026-12-02",
      "location": "Tokyo",
      "check_out": "2026-12-04",
      "min_stars": 3,
      "max_results": 10,
      "min_guest_rating": 4,
      "max_price_per_night": 300
    },
    {
      "check_in": "2026-11-12",
      "location": "Paris",
      "check_out": "2026-11-15"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `hotels` | array |  | Hotels in Google order. |
| `hotels[].name` | string |  | Hotel name. |
| `hotels[].stars` | integer or null |  | Hotel class. |
| `hotels[].currency` | string |  | Currency of prices. |
| `hotels[].latitude` | number or null |  | Latitude. |
| `hotels[].amenities` | array |  | Main amenities. |
| `hotels[].longitude` | number or null |  | Longitude. |
| `hotels[].total_price` | number or null |  | Stay total with taxes and fees. |
| `hotels[].guest_rating` | number or null |  | Guest rating out of five. |
| `hotels[].review_count` | integer or null |  | Number of reviews. |
| `hotels[].price_per_night` | number or null |  | Nightly price. |
| `hotels[].google_hotels_link` | string |  | Property link on Google Hotels. |
| `hotels[].cheapest_booking_site` | string or null |  | Booking site with lowest quoted price. |
| `hotels[].google_property_token` | string or null |  | Google property token. |
| `hotels[].neighborhood_or_address` | string or null |  | Address or neighborhood. |
| `search_link` | string |  | Google Hotels search link. |

## Quick start

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@google-hotels",
  "visibility": "public",
  "operation": "compare_hotel_prices",
  "version": 1,
  "input": {
    "city": "Paris",
    "check_in": "2026-10-20",
    "currency": "EUR",
    "check_out": "2026-10-22",
    "hotel_name": "Ritz Paris"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

body = json.loads("{\n  \"api\": \"@google-hotels\",\n  \"visibility\": \"public\",\n  \"operation\": \"compare_hotel_prices\",\n  \"version\": 1,\n  \"input\": {\n    \"city\": \"Paris\",\n    \"check_in\": \"2026-10-20\",\n    \"currency\": \"EUR\",\n    \"check_out\": \"2026-10-22\",\n    \"hotel_name\": \"Ritz Paris\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=120) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_000),
  body: JSON.stringify({
  "api": "@google-hotels",
  "visibility": "public",
  "operation": "compare_hotel_prices",
  "version": 1,
  "input": {
    "city": "Paris",
    "check_in": "2026-10-20",
    "currency": "EUR",
    "check_out": "2026-10-22",
    "hotel_name": "Ritz Paris"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

Or describe the data in plain language: send `{"api":"@google-hotels","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## Use cases

- Find hotels within a nightly budget
- Compare booking offers for a hotel stay
- Check guest ratings before choosing a property
- Review guest feedback by topic
- Shortlist hotels by location and dates

## FAQ

### Is Fous affiliated with Google Hotels?

No. Fous is not affiliated with Google Hotels. This workflow reads the public google.com website and returns its data.

### How much does it cost?

Each run costs 1 credit. With pay-as-you-go, a credit costs 1¢; monthly plans cost less per credit.

### Do I need a Google Hotels account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from google.com when you run it; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check on Sep 28, 2026.

### What hotels are available in a city for my dates?

Search hotels returns hotel names, prices, ratings, and details for a location and stay dates.

### Which booking site has the lowest price for a hotel?

Compare hotel prices returns booking offers and identifies the site with the lowest quoted total.

### What do guests say about a hotel?

Get hotel reviews returns guest review text, review dates, overall rating, and available topic ratings.

## Related

- [Kayak API](https://fous.com/workflows/kayak.md): Kayak compares flight and hotel prices across booking sites and current rental car offers; hotel rates assume two adults per room and cover public location pages, while prices and availability can change at booking.
- [Expedia API](https://fous.com/workflows/expedia.md): Expedia helps travelers find hotels, vacation stays, and travel deals, with hotel prices and flight options for selected destinations and dates; flight listings may be limited.
- [Agoda API](https://fous.com/workflows/agoda.md): Agoda finds stays and room prices for selected dates; displayed prices exclude taxes and fees, and availability, prices, and cancellation terms may change before booking.
- [Booking.com API](https://fous.com/workflows/booking-com.md): Booking.com helps find stays, property details and public guest reviews; prices and cancellation terms depend on selected dates, and displayed prices may exclude taxes and fees.
- [Google Flights API](https://fous.com/workflows/google-flights.md): Google Flights returns route schedules, public fares, monthly lowest prices, and flight or destination options with times, stops, emissions, and fares that may change.
- [Trip.com API](https://fous.com/workflows/trip-com.md): Trip.com offers hotel and flight bookings, with hotel listings limited to initial public results and prices and fares subject to change.
- [Priceline API](https://fous.com/workflows/priceline.md): Priceline finds travel deals and returns publicly priced hotel options with ratings, USD prices and cancellation details, plus rental-car offers whose prices may change at checkout.
- [Tripadvisor API](https://fous.com/workflows/tripadvisor.md): Tripadvisor provides traveler-ranked first-page city listings of attractions, restaurants and hotels, plus latest reviews; hotel prices and booking sites depend on supplied stay dates and availability.
- [All Travel workflows](https://fous.com/workflows/category/travel)
