# Google Hotels Prices Scraper: Price Comparison of Booking Sites (`plainrows/google-hotels-prices`) Actor

Hotel scraper and hotel price API for Google Hotels: nightly rates by city and dates (stars, rating, GPS, link), or every booking site's price for given hotels (Booking.com, Expedia, official site) with a daily price calendar. No browser or proxies. Pay per hotel.

- **URL**: https://apify.com/plainrows/google-hotels-prices.md
- **Developed by:** [PlainRows](https://apify.com/plainrows) (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 $0.80 / 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 Prices Scraper: Price Comparison of Booking Sites

Get **Google Hotels prices** for any city and dates: **nightly rate, estimated stay total, star class, guest rating, reviews count, GPS coordinates, photo and Google Hotels link** for every hotel. Type a destination (`Paris, France`), pick dates and guests, and get up to 140 hotels per search as clean JSON, CSV or Excel.

**New: price comparison mode.** Give hotel names (`Hyatt Regency Lisbon`), hotel IDs or Google Hotels links and get, for each hotel, **the price of every booking site Google lists** (Booking.com, Expedia, Agoda, the hotel's own website...) for your dates, plus **a daily price calendar for the coming months**, in one row per hotel.

It calls a commercial travel data API instead of driving a browser: **results in seconds, no proxies, no blocked runs, no Google account.** **You pay only per hotel returned**, plus a small fee per results page fetched (see Pricing).

### Typical uses

- **Hotel price tracking**: schedule a daily run on your city and dates and follow the price of each hotel (`hotelId` is stable).
- **Revenue management and rate shopping**: see where your hotel's price sits against every competitor of the same class.
- **Travel apps and AI agents**: give an assistant live hotel prices for "3 nights in Lisbon next month for 2 adults".
- **Market research and price indexes**: average nightly price by city, star class or date, cheapest hotel per city (`sortBy: lowest_price`).
- **Automations**: send the results to Google Sheets, Airtable, a database or Slack with n8n, Make or Zapier.

### What you get for each hotel

| Field | Description |
|---|---|
| `name`, `hotelId`, `propertyType` | Hotel name, Google hotel identifier (stable across runs), `hotel` or `vacation_rental` |
| `pricePerNight`, `currency` | Lowest nightly price Google shows for your dates and guests |
| `priceBeforeDiscount`, `discountText` | Deal information when Google shows one, e.g. `"33% less than usual"` |
| `estimatedTotalPrice` | `pricePerNight × nights` (calculated, not quoted by Google) |
| `checkIn`, `checkOut`, `nights`, `adults` | The stay the price is for |
| `hotelClass` | Official star class 1 to 5 (`null` when Google shows none, e.g. many hostels and rentals) |
| `rating`, `reviewsCount` | Average guest rating out of 5 and number of reviews |
| `latitude`, `longitude` | GPS coordinates |
| `imageUrl`, `imagesCount` | Main photo and number of photos |
| `googleHotelsUrl`, `searchUrl` | Hotel page on Google Hotels and the Google Hotels search with your dates |
| `freeCancellation` | `true` when you used the free-cancellation filter, otherwise `null` |
| `rank`, `destination`, `observedAt` | Position in the results, the destination searched and when (UTC) |

Missing values are always `null`, never guessed. Each hotel appears once per destination.

### Price comparison mode: every booking site + a price calendar

Fill in **hotels** instead of destinations, one per line: a **hotel name with its city** (`Hyatt Regency Lisbon`), a Google hotel ID from the `hotelId` column of a search run, or a link such as `https://www.google.com/travel/hotels/entity/ChoIy_fo59Ha34akARoNL2cvMTFmeTVnazZ0YxAB`. A name is first looked up on Google Hotels; the hotel found is checked only if its name contains **every word you typed** (accents and case ignored; words such as *hotel* or *the* don't count; local and English city names such as `Lisboa` / `Lisbon` or `Wien` / `Vienna` are the same), otherwise nothing is checked (`found: false`, `reason: hotel-not-found`): type the name as Google shows it (`Hotel Adlon Kempinski Berlin`). The same hotel entered twice is checked once (`reason: duplicate`); an ID Google refuses gives `reason: invalid-hotel-id` and the run goes on. By default (`speed: "standard"`) each hotel waits in the data provider's queue (about 10-20 seconds when measured, longer at busy times) at no extra fee; `speed: "fast"` answers in seconds for a small extra fee (handy for AI agents). Each hotel gives one row:

| Field | Description |
|---|---|
| `lowestPrice`, `lowestPriceSite` | Cheapest booking site for your dates |
| `officialSitePrice` | Price on the hotel's own website, when Google lists it |
| `highestPrice`, `sitesCount` | Price spread and number of sites with a price |
| `sites` | Every site, cheapest first: `site`, `price`, `officialSite`, `freeCancellationUntil`, `domain`, `url` |
| `priceCalendar` | Lowest price per night from the check-in date, over `priceCalendarRange` (`month`, `three_months`, `six_months`, `year`; with `year`, Google returned about 280-290 nights on 2026-10-09) |
| `calendarLowestPrice`, `calendarLowestPriceCheckIn` | Cheapest night in the calendar and its date |
| `name`, `hotelClass`, `rating`, `reviewsCount`, `address`, `latitude`, `longitude` | Hotel details |
| `query`, `hotelId` | What you entered and the Google hotel ID (reuse it to skip the name lookup) |

Example (Iberostar Selection Lisboa, 1 night on 2026-11-12, 2 adults, EUR, checked on 2026-10-09): 32 booking sites from 105 to 185 EUR, official site 119 EUR, cheapest night of the next three months 94 EUR on 2026-11-30. All prices are **nightly prices** as Google shows them for the market (`country`), so taxes may be excluded. Sponsored offers are removed (they repeat the same sites). Use it for **rate parity checks** (is my hotel cheaper on Booking.com than on my own site?), **competitor rate shopping** and **finding the cheapest dates**.

```json
{ "hotels": ["Hyatt Regency Lisbon", "ChoIy_fo59Ha34akARoNL2cvMTFmeTVnazZ0YxAB"], "checkInDate": "2026-11-12", "nights": 1, "currency": "EUR", "priceCalendarRange": "three_months" }
```

### Input

```json
{
  "destinations": ["Paris, France", "Lisbon, Portugal"],
  "checkInDate": "2026-12-18",
  "nights": 2,
  "adults": 2,
  "currency": "EUR",
  "maxHotelsPerDestination": 20,
  "sortBy": "relevance",
  "propertyType": "hotels"
}
```

- **destinations**: up to 500 per run. Write them as in Google Hotels; **adding the country** (`Lisbon, Portugal`) avoids ambiguity. If the hotels returned for a destination are spread over more than 200 km, the run warns you that Google may not have recognised it.
- **checkInDate** (optional): leave empty for 30 days from today, useful for scheduled tracking. **nights**: 1 to 30. **adults**: 1 to 6.
- **currency**: any three-letter code (`USD`, `EUR`, `GBP`, `CHF`...).
- **maxHotelsPerDestination**: 1 to 140 (default 20). Google returns about 20 hotels per results page.
- **sortBy**: `relevance`, `lowest_price`, `highest_rating`, `most_reviewed`.
- **country**: the Google market the search is made from (US, GB, CA, AU, IE, IN, DE, AT, CH, FR, BE, ES, MX, IT, NL, PT, BR, PL, SE, JP). It changes how Google shows prices (for example with or without taxes), not where the hotels are. **languageCode** (optional) sets the language of names and labels.
- **Free filters, applied by Google**: `propertyType` (`any`, `hotels` = rentals removed and not billed, `vacation-rentals`), `hotelClass` (e.g. `["4","5"]`), `minRating`, `minPrice` / `maxPrice` per night, `freeCancellationOnly`, `amenities` (`pool`, `free_breakfast`, `free_wifi`, `spa`, `pets_allowed`, `free_parking`...).

### Output example

Real row from a run on 2026-10-07 (destination `Paris, France`, US market, check-in 30 days ahead, 2 nights, 2 adults, USD):

```json
{
  "destination": "Paris, France",
  "found": true,
  "rank": 1,
  "name": "MOB HOUSE",
  "hotelId": "ChkIwbex3tvknL0EGg0vZy8xMWhfY2NkMGZqEAE",
  "propertyType": "hotel",
  "hotelClass": 4,
  "rating": 4.3,
  "reviewsCount": 1134,
  "pricePerNight": 69,
  "priceBeforeDiscount": null,
  "discountText": "39% less than usual",
  "estimatedTotalPrice": 138,
  "currency": "USD",
  "checkIn": "2026-11-06",
  "checkOut": "2026-11-08",
  "nights": 2,
  "adults": 2,
  "freeCancellation": null,
  "latitude": 48.9048814,
  "longitude": 2.3376201,
  "imageUrl": "https://lh3.googleusercontent.com/gps-cs-s/ANWiy9STzfpG18IP5pB-BZwkN1w5UIpKfSq7BXyTJ_xszZmzLWAG2DpBbeWy1T6Ahpvi6t_9tKTwS64DwtD1GpqU0cy5dEsUdhuB8G0YLyJY9nZK9KAqZnxH1qOTNVc4KphPM3HmAjkWeXG6fhc=s287-w287-h192-n-k-no-v1",
  "imagesCount": 9,
  "googleHotelsUrl": "https://www.google.com/travel/hotels/entity/ChkIwbex3tvknL0EGg0vZy8xMWhfY2NkMGZqEAE?hl=en&gl=us",
  "searchUrl": "https://www.google.com/travel/search?q=Paris%2c+France&hl=en&gl=US&ap=KigKEgkAO_5UCcjfvxF6JcpeJvNkwBISCXxjUQVVq1JAEewNRBbN0zfAMAA&ts=CAESCAoCCAMKAggDGlkKOxIPOg1QYXJpcywgRnJhbmNlGigKEgkAO_5UCcjfvxF6JcpeJvNkwBISCXxjUQVVq1JAEewNRBbN0zfAEhoSFAoHCOoPEAsYBhIHCOoPEAsYCBgCMgIQACoJCgU6A1VTRBoA",
  "searchCountry": "US",
  "languageCode": "en",
  "sortBy": "relevance",
  "observedAt": "2026-10-07T13:18:30.144Z",
  "schemaVersion": "1.0"
}
```

### Pricing

Pay per use, no subscription, no proxy costs. See the **Pricing** tab for current prices. Destination search uses two events:

- **Hotel found**: one per hotel returned with its price. Cheaper on higher Apify plans.
- **Results page**: one per Google Hotels results page fetched (about 20 hotels), charged once Google Hotels has answered, at the cost of our data provider. A 20-hotel search uses 1 page; 100 hotels use 5 pages.

Example: one destination with 20 hotels costs 1 page + 20 hotels. A destination that returns no hotel (for example filters that are too strict) still uses its page, but no hotel is billed. Hotels without a price, vacation rentals removed by `propertyType: "hotels"`, duplicates and input mistakes cost nothing. The run never spends more than the maximum cost you set.

**Price comparison mode** uses one event, **Hotel price check**: one per hotel compared, with all its booking sites and its price calendar, whatever the calendar range. From October 25, 2026, with `speed: "fast"` (answers in seconds instead of waiting in the data provider's queue), each hotel compared also uses one **Fast mode** event; until then `fast` runs at standard speed. The default `standard` speed has no extra fee. A hotel given **by name** also uses one **results page** to find it (charged even if no matching hotel is found); IDs and links skip this step. A hotel is billed when Google has a price for it, for your dates or in its price calendar; a hotel with neither is reported with `found: false` and is free. In the rare case the data provider's queue is very slow, a hotel may come back with `reason: "provider-slow"`: it is free, run it again later. Like every PlainRows tool, a run stops early if it keeps calling the data provider without anything billable (after about $0.01 of such calls; in price comparison mode up to 25 hotels are checked at once, so a few more may be checked before it stops, at our cost, not yours).

Price change on October 25, 2026: results page $0.004 to $0.006 (all plans); hotel price check $0.008 (FREE) / $0.007 (BRONZE) / $0.005 (GOLD+), down from $0.02 / $0.017 / $0.013; new Fast mode event $0.01 per hotel; hotel found does not change.

**Free Apify plan:** price comparison is limited to 3 hotels per run; each search run returns up to 20 hotels for up to 2 destinations, so you can check the output. A paid Apify plan removes these limits.

### Use it from code, automations or AI agents

**API (one call, results returned directly):**

```bash
curl -X POST "https://api.apify.com/v2/acts/plainrows~google-hotels-prices/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"destinations": ["Lisbon, Portugal"], "checkInDate": "2026-12-18", "nights": 2, "currency": "EUR"}'
```

**n8n, Make, Zapier:** use the Apify integration, pick `plainrows/google-hotels-prices`, and map the dataset items to Google Sheets, Airtable or your database. Schedule the Actor on Apify to track prices every day.

**AI agents (MCP):** add `https://mcp.apify.com?tools=plainrows/google-hotels-prices` to Claude, Cursor or any MCP client. The agent gets a typed tool and pays per result; for price comparisons use `"speed": "fast"` so it gets the answer in seconds.

### What this is not

- **Destination search gives one price per hotel** (the lowest Google shows); use the **price comparison mode** for every booking site's price. Neither mode gives individual room rates.
- **No phone or amenity list**, and **no reviews text or reviewer names**.
- **Not a booking tool**: prices are a snapshot at `observedAt` and change often. Whether taxes are included depends on the Google market (`country`).
- Not affiliated with Google.

### Run summary

Each run stores a summary in the key-value store (`OUTPUT`): destinations run, destinations with no priced hotel, hotels billed, results pages charged, hotels skipped without a price, rentals and duplicates removed, destinations that may not have been recognised, invalid destinations, and anything skipped because of the free-plan or budget limit. In price comparison mode: hotels compared, hotels with no price, sponsored offers removed, names looked up and names not found.

### FAQ

**How do I track hotel prices in a city?**
Enter the destination with its country (`Lisbon, Portugal`), leave **checkInDate** empty (30 days from today) and schedule the run daily: each row is one hotel with its nightly rate, stay total, stars and rating.

**How many hotels per destination?**
1 to 140 (**maxHotelsPerDestination**); Google shows about 20 per results page.

**Can I filter 4 and 5 star hotels or free cancellation?**
Yes: **hotelClass**, **minRating**, **minPrice** / **maxPrice**, **freeCancellationOnly** and **propertyType** are Google's own filters; hotels they remove are not billed.

**Do I get Booking.com or Expedia prices?**
Yes, in the **price comparison mode**: fill in **hotels** with hotel names (`Hyatt Regency Lisbon`), hotel IDs or Google Hotels links and you get the price of every booking site Google lists, plus a daily price calendar.

**How do I find the cheapest dates for a hotel?**
Price comparison mode, `priceCalendarRange: "year"`: `priceCalendar` lists the lowest price for each night Google has (about 9 to 10 months ahead on 2026-10-09) and `calendarLowestPriceCheckIn` gives the cheapest one.

**Which currency?**
Any three-letter code (`USD`, `EUR`, `GBP`, `CHF`...). Whether taxes are included depends on the Google market (**country**).

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Ideas Generator](https://apify.com/plainrows/keyword-ideas-generator) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Google Trends Explorer](https://apify.com/plainrows/google-trends-explorer) · [Website Organic Traffic & Top Keywords](https://apify.com/plainrows/domain-seo-overview) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode)](https://apify.com/plainrows/ai-search-brand-visibility) · [Google Maps Rank Tracker (Geo-Grid Local SEO)](https://apify.com/plainrows/google-maps-rank-tracker)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/plainrows/ats-job-postings) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Google Ads Scraper (Transparency Center)](https://apify.com/plainrows/google-ads-transparency) · [Company Registry Lookup (SIRENE, LEI, Brreg)](https://apify.com/plainrows/company-registry-lookup) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Amazon Product Search Scraper](https://apify.com/plainrows/amazon-product-search) · [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Tripadvisor Reviews Scraper](https://apify.com/plainrows/tripadvisor-reviews)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [YouTube Comments Scraper](https://apify.com/plainrows/youtube-comments-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [Google Maps Reviews Scraper](https://apify.com/plainrows/google-maps-reviews) · [App Store & Google Play Reviews Scraper](https://apify.com/plainrows/app-reviews-scraper)

**Compared with other APIs:** [Hotel prices on every booking site, as JSON (rate parity check)](https://nadaho.github.io/plainrows/hotel-prices-every-booking-site/)

### Support

Missing a field or found a bug? Open an issue on this page. Issues are read and answered.

# Actor input Schema

## `destinations` (type: `array`):

Cities or areas to search, one per line, written as you would in Google Hotels: "Paris, France", "Lisbon, Portugal", "hotels near Times Square". Adding the country avoids ambiguity. Up to 500 per run. Leave empty when you fill in "Hotels to compare".

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

Optional. Hotel names with their city ("Hyatt Regency Lisbon"), Google hotel IDs (the hotelId column of a search run) or Google Hotels links (google.com/travel/hotels/entity/...), one per line. When filled in, the Actor returns for each hotel the price of every booking site Google lists for your dates (official site included) and a daily price calendar, instead of searching destinations. A name is first looked up on Google Hotels (one results page). Up to 500 per run.

## `priceCalendarRange` (type: `string`):

Price comparison mode only: how many days of nightly prices to return from the check-in date. Same price whatever the range.

## `speed` (type: `string`):

Price comparison mode only. Standard waits in the data provider's queue (about 10-20 seconds per hotel when measured, longer at busy times; a hotel still queued after 12 minutes is answered the fast way at no extra charge). Fast answers in about 5-15 seconds and adds one Fast mode event per hotel compared: use it for AI agents or interactive tools.

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

YYYY-MM-DD. Leave empty for 30 days from today (handy for scheduled price tracking).

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

Length of stay. Check-out = check-in + nights.

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

Guests per room (Google prices change with the number of guests).

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

Three-letter currency code for prices, e.g. USD, EUR, GBP, CHF.

## `maxHotelsPerDestination` (type: `integer`):

Google Hotels returns up to about 140 hotels per search, in pages of about 20. Each hotel returned and each results page are billed; see Pricing.

## `sortBy` (type: `string`):

Order of the results, as in Google Hotels.

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

Google market the search is made from (Google's country). It changes how prices are shown, e.g. with or without taxes. It does not limit where the hotels are.

## `languageCode` (type: `string`):

Two-letter language code, e.g. "en" or "fr". Leave empty to use the country's main language (for example German for Switzerland, French for Belgium).

## `propertyType` (type: `string`):

Google mixes some vacation rentals into hotel results. Choose "Hotels only" to drop them, or search rentals only.

## `hotelClass` (type: `array`):

Keep only these star classes. Empty = all.

## `minRating` (type: `number`):

Google's guest-rating filter, e.g. 4 or 4.5 (0 = no filter).

## `minPrice` (type: `integer`):

In the chosen currency. Empty = no minimum.

## `maxPrice` (type: `integer`):

In the chosen currency. Empty = no maximum.

## `freeCancellationOnly` (type: `boolean`):

Google's free-cancellation filter. Rows then have freeCancellation = true.

## `amenities` (type: `array`):

Keep only hotels that have all of these amenities (Google filter).

## Actor input object example

```json
{
  "destinations": [
    "Paris, France"
  ],
  "priceCalendarRange": "three_months",
  "speed": "standard",
  "nights": 1,
  "adults": 2,
  "currency": "USD",
  "maxHotelsPerDestination": 20,
  "sortBy": "relevance",
  "country": "US",
  "propertyType": "any",
  "minRating": 0,
  "freeCancellationOnly": false
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "destinations": [
        "Paris, France"
    ],
    "currency": "USD",
    "country": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/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 = {
    "destinations": ["Paris, France"],
    "currency": "USD",
    "country": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/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 '{
  "destinations": [
    "Paris, France"
  ],
  "currency": "USD",
  "country": "US"
}' |
apify call plainrows/google-hotels-prices --silent --output-dataset

```

## MCP server setup

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