# Google Hotels Scraper | Stay Prices & Offers (`danthedataman/google-hotels-stay-ledger`) Actor

Export Google Hotels and vacation rentals with prices for selected dates, occupancy and currency. Get room offers, property details, reviews and photo links.

- **URL**: https://apify.com/danthedataman/google-hotels-stay-ledger.md
- **Developed by:** [Eli J](https://apify.com/danthedataman) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.08 / 1,000 results

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

### What you can export

Use this **Google Hotels scraper and stay-price API** to compare hotels and vacation rentals for selected dates, occupancy and currency. Export available property details and nested room offers, or collect reviews, full-size photo links and autocomplete suggestions. Prices are source observations, not booking guarantees.

For hotel search and details, one result is one property for one stay, including its returned room offers. With prices requested, hotels without returned offers are omitted by default; in cards mode, a numeric nightly card price determines whether a hotel is priced. Set `includeUnpriced: true` to emit and bill unpriced rows. The key-value store's **COVERAGE** record always counts unique unpriced property/stay records encountered as `unpricedHotels`, including omitted rows. Metadata-only `includePrices: false` still emits hotel rows and does not count them as unpriced. Reviews, photos and autocomplete each produce one dataset row per record. Failed inputs appear only in the key-value store's **ERRORS** record. Dataset exports are available as JSON, CSV and Excel through Apify.

### Try the shipped prefill

The input form supplies these example values. Prefills are not API defaults; check the billing and limits before running.

```json
{
  "mode": "search",
  "queries": [
    "Austin, Texas"
  ],
  "checkInDate": "tomorrow",
  "checkOutDate": "+2days",
  "currency": "USD",
  "maxResults": 20
}
```

Dates resolve in UTC at run start, so this example remains current. For search-page prices without per-property detail requests, add `"offerLevel": "cards"`. This keeps the hotel row schema and billing event, using the selected-stay amounts Google includes in each card. Detail-only scalars such as phone and website remain null when absent from the card; offers, vendors, types, photos and reviews are empty arrays. Outside English, hotel cards have empty amenities and excludedAmenities labels; amenityCodes are retained. Rental amenity labels come directly from the card when present. This mode requires destination search without hotelNames, hotelUrls, includeReviews or freeCancellationOnly; use rooms or sources for those inputs.

To compare fixed stays, use:

```json
{
  "mode": "details",
  "hotelNames": ["Austin Motel"],
  "stays": [
    {"checkInDate": "2026-12-14", "checkOutDate": "2026-12-17", "adults": 2, "childrenAges": [7], "rooms": 1},
    {"checkInDate": "2026-12-21", "checkOutDate": "2026-12-24", "adults": 4, "rooms": 2}
  ],
  "currency": "EUR",
  "languageCode": "fr",
  "countryCode": "fr",
  "includeReviews": true,
  "maxReviews": 20
}
```

For reviews or photos, set `mode` to `reviews` or `photos` and supply `hotelUrls` or `hotelNames`. Use `maxResults` to cap individual records; `maxResults: 0` follows source pagination within your time and charge budgets. These modes process each input once, regardless of stays or sweepDays. For autocomplete, use `{"mode":"autocomplete","queries":["Austin Mot"],"maxResults":10}`.

### Output

Selected fields from a recorded property/stay row; prices are a snapshot:

```json
{
  "recordType": "hotel",
  "name": "Aloft by Marriott Austin Northwest",
  "checkInDate": "2026-10-08",
  "checkOutDate": "2026-10-09",
  "adults": 2,
  "currency": "USD",
  "nightlyPrice": 90.70703,
  "totalPrice": 90.70703
}
```

Every row has `recordType`, `query`, `position` (one-based), `sourceUrl` and `scrapedAt` (UTC ISO timestamp). Hotel, review and photo rows identify the requested property with `entityToken` and resolved stay context: `checkInDate`, `checkOutDate`, `nights`, `adults`, `childrenAges`, `rooms`, `currency`, `languageCode` and `countryCode`.

| Output fields | Meaning |
| --- | --- |
| `hotelId`, `placeId`, `cidHex`, `cidDecimal`, `hotelUrl`, `mapsUrl` | Google identifiers as strings and source links. |
| `name`, `propertyType`, `description`, `address`, `phone`, `website`, `country` | Published property identity; propertyType is hotel or vacationRental. Description includes the source's longer paragraphs. |
| `latitude`, `longitude` | Degrees. |
| `types`, `totalResults`, `children` | Published Google Maps subtype labels, Google search total (null for direct lookup), and selected child count. |
| `hotelClass`, `hotelClassLabel`, `rating`, `reviewCount` | Hotel stars, label, five-point guest rating and count. |
| `reviewHistogram`, `reviewTopics`, `reviewSources` | Histogram stars/percent/count; topic mentions, positiveCount, negativeCount and original sourceSentiment (unscaled); each review source's name/icon/rating/valueScale/reviewCount. |
| `checkInTime`, `checkOutTime` | Published local clock strings. |
| `amenities`, `excludedAmenities`, `amenityCodes`, `essentialInformation` | Available/unavailable labels, original numeric codes with availability/qualifier/note, and source notes. |
| `nearbyPlaces`, `locationRating` | Nearby name/image/travelTimes (modeId and display duration)/rating/reviewCount/description/coordinates/CID/type/url; neighborhood and score categories on a five-point scale. |
| `thumbnail`, `images`, `photos` | Image links; photo metadata described below. |
| `nightlyPrice`, `nightlyPriceWithTaxes`, `totalPrice`, `totalPriceWithTaxes`, `taxes`, `fees` | Numeric amounts in the selected currency. Total is for the whole stay; nightly gross uses the source nightly value, or total gross divided by nights when absent. Null means Google did not provide that component. |
| `nightlyPriceDisplay`, `totalPriceDisplay`, `bookingLink`, `deal` | Original formatted price strings, booking link and source deal marker. Links are returned without visiting booking destinations. |
| `offers`, `vendors` | All returned source/room rates: vendor/sourceId/icon, official/sponsored flags (null when absent), roomName/images, selected currency, nightly/total amounts and display strings, bookingLink, decoded partnerUrl where present, lowest (each source's cheapest rate), freeCancellation, cancellationText, cancellationDateText, cancellationShortDate, cancellationTime, cancellationDeadline and maxGuests (null on the captured rate route). Cancellation deadlines use the measured English month/day or French day/month order and check-in year; other locale orders remain null. Original display and short-date text are retained. |
| `reviews`, `reviewsExtracted` | Optional nested reviews and their count. |
| `bedrooms`, `bathrooms`, `beds`, `maxGuests` | Source rental counts, absent for many hotels. |
| `markdownContent` | Property name and complete description as Markdown. |

Review rows contain `reviewId`, full `text`, `rating` and its `valueScale`, `relativeDate`, `date` (always null; the captured Google review route supplies relative dates), `source`/`sourceIcon`, `user` (name/link/photo), `subRatings` (categoryId/rating/valueScale), and `ownerResponse` (text/relativeDate). The source's relative dates are preserved rather than converted into guessed timestamps.

Photo rows contain `photoId`, `thumbnail`, `imageUrl` (source full-size dimensions), `width`/`height` and `thumbnailWidth`/`thumbnailHeight` in pixels, `caption`, `sections`, `source` (name/link/photo), `date` and the original numeric `timestamp` when available. Image bytes are not downloaded by the Actor.

Autocomplete rows contain `value`, `type` (original Google kind), `highlights`, `location`, `thumbnail` and `propertyToken` (Google knowledge identifier). Autocomplete uses no price context.

### Inputs

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `search` | search, details, reviews, photos or autocomplete. |
| `queries` | array | \[] | Batch destination searches; exact hotel names in direct modes; prefixes in autocomplete. |
| `hotelUrls` | array | \[] | Google Hotels entity URLs/tokens, Google Maps place/CID URLs, Place IDs or Maps short links. |
| `hotelNames` | array | \[] | Batch exact hotel names. Ambiguous names produce ERRORS; use a property URL or Place ID. |
| `checkInDate` | string | tomorrow | ISO date or today, tomorrow, +Ndays/weeks/months/years; UTC. Omitted or blank: tomorrow. |
| `checkOutDate` | string | check-in +1 day | ISO or relative date. Omitted or blank: one day after check-in. |
| `stays` | array | top-level stay | Batch objects with checkInDate, checkOutDate, adults, childrenAges and rooms; omitted uses top-level stay, \[] does no work. |
| `currency` | string | `USD` | Three-letter currency code. Returned price context must match. |
| `languageCode` | string | `en` | Google language code such as en, fr or pt-BR. |
| `countryCode` | string | `us` | Two-letter Google market code such as us or fr. |
| `adults` | integer | `2` | Adult occupancy per stay; 1–50. |
| `childrenAges` | array | `[]` | Child ages in years, each 0–17; at most 50 children. |
| `rooms` | integer | `1` | Rooms per stay; 1–8. |
| `sweepDays` | integer | `0` | Add daily shifted stays through this offset; 0 means only the original stay, maximum 60. |
| `maxResults` | integer | `20` | Maximum billable rows per input and stay (once per input for reviews/photos/autocomplete); 0 drains source within time/charge budget. |
| `maxPages` | integer | `0` | Maximum source pages per input/stay or nested review collection; 0 drains within time/charge budget. |
| `includePrices` | boolean | `true` | Return selected-stay prices from OTA sources/rooms or search cards. False leaves price fields null and offers empty. |
| `includeUnpriced` | boolean | `false` | With prices requested, emit and bill hotels without returned offers (or a nightly card price in cards mode). Both choices count them in COVERAGE. |
| `offerLevel` | string | `rooms` | rooms includes room-level offers; sources selects one cheapest source-level rate per sourceId; cards returns destination search cards and list prices without detail hydration. |
| `maxOffers` | integer | `0` | Return the N cheapest nested offers per hotel; 0 includes all source-returned offers, maximum 500. |
| `includeReviews` | boolean | `false` | Include nested reviews in hotel rows; standalone reviews mode emits one row per review. |
| `maxReviews` | integer | `20` | Nested review cap; 0 drains within page/time budgets, maximum 5000. |
| `reviewSort` | string | `helpful` | Source review ordering. |
| `reviewCategory` | string | \`\` | Source review topic filter, such as Service or Bar. |
| `sort` | string | `relevance` | Google search ordering: relevance, price, rating or reviewCount. |
| `minPrice` | number | `0` | Minimum numeric nightly price in selected currency; 0 disables. |
| `maxPrice` | number | `0` | Maximum numeric nightly price in selected currency; 0 disables. |
| `minRating` | number | `0` | Minimum Google guest rating on a five-point scale; 0 disables. |
| `hotelClass` | array | `[]` | Allowed hotel star classes, integers 1–5. |
| `amenities` | array | `[]` | Google amenity filter labels listed below; Google search classification; direct targets ignore filters. |
| `propertyKinds` | array | `hotel`, `vacationRental` | Allowed hotel/vacationRental families; \[] does no work. |
| `propertyTypes` | array | `[]` | Google search subtype IDs 1–24; \[] allows all. Applies to destination searches. |
| `minBedrooms` | integer | `0` | Minimum source-reported rental bedrooms; 0 disables. |
| `minBathrooms` | integer | `0` | Minimum source-reported rental bathrooms; 0 disables. |
| `freeCancellationOnly` | boolean | `false` | Search for a refundable rate and quote that selected rate; requires includePrices for searches. |
| `specialOffers` | boolean | `false` | Search for a source-marked deal; requires includePrices for searches. |
| `maxRetriesPerRequest` | integer | `3` | Ordinary request attempts including first, 1–8. Default direct blocks have the separate cap of ten datacenter fallback attempts. |
| `maxRunSeconds` | integer | `270` | HTTP work budget in seconds; 1–86400. Partial results remain in dataset, unfinished work in ERRORS. |
| `rotateAfterRequests` | integer | `0` | Retire proxy session after N reads; 0 disables proactive rotation. |
| `proxyConfiguration` | object | direct | Optional Apify proxy configuration. Omitted uses anonymous direct egress, with block-triggered datacenter fallback; explicit configurations are honoured. |

Search subtypes: 12 beach hotel, 13 boutique, 14 hostel, 15 inn, 16 motel, 17 resort, 18 spa hotel, 19 B\&B, 20 other and 21 apartment hotel. Google rental subtype IDs occupy 1–11. These subtype and sort controls apply to destination searches; direct-property inputs retain their exact identity.

Amenity labels: Free Wi-Fi, Free breakfast, Restaurant, Bar, Kid-friendly, Pet-friendly, Free parking, Parking, EV charger, Room service, Fitness center, Spa, Pool, Indoor pool, Outdoor pool, Air-conditioned, Wheelchair accessible, Beach access, All-inclusive available. Search uses Google's filter classifications. Price/rating/class/bedroom/bathroom, amenity, cancellation and deal filters apply to destination searches. Exact hotel targets are returned regardless of these filters. Filters do not apply to standalone reviews, photos or autocomplete.

### Coverage and limits

Public Google Hotels properties and vacation rentals, Google-provided OTA room rates, review/gallery continuations and autocomplete. Supply Google Travel entity URLs/tokens, Google Maps Place IDs/CIDs/URLs/short links, or exact hotel names. Names must match one unique autocomplete or search property exactly; unresolved or ambiguous names go to ERRORS with candidate names and guidance. No OTA website crawling, login or bookings.

Different stays are separate hotel rows. Duplicate properties across searches are emitted once per stay. Reviews and photos are deduplicated per property within a run. Limits are per input/stay, and 0 drains what the source exposes within the other budgets. Google may stop pagination or offer fewer results than a limit. Source availability, prices and field presence vary by stay, occupancy, market and locale; empty arrays and nulls are preserved. Returned price context is checked against requested dates, occupants, rooms and currency before billing.

English property metadata and room offers use Google's compact batched RPC route. Other locales retain property HTML for their published amenity labels. Published Maps subtypes are read concurrently. Enrichment windows contain at most 20 properties and are bounded by maxResults and the native charging manager's remaining dataset-event allowance.

Default egress is anonymous direct. A Google HTTP 403/429, a redirect to consent, interstitial or /sorry/, a cross-host redirect from a data request, or a challenge body containing upgrade your browser or /sorry/ triggers Google-capable datacenter BUYPROXIES94952 retries with fresh sessions, at most ten fallback attempts per request. The next request returns to direct egress. COVERAGE records the attempt count as `datacenterFallbacks`. Redirect status, Location and request class are logged; same-route redirects follow at most five hops within the run deadline. Valid framed RPC data is parsed as data even when property or guest text mentions a challenge. Other transient or malformed responses follow maxRetriesPerRequest. Explicit proxyConfiguration is honoured, with no automatic proxy substitution. Residential proxies can be explicitly selected and increase your cost. Photo links beginning with // are normalized to HTTPS.

A binding maximum-charge limit stops further fetching. Successfully written rows remain available; handled failures go to ERRORS. If dataset delivery cannot be confirmed, fetching stops and the run fails; inspect ERRORS and any delivered rows. If every attempted input fails, the run fails with a short status message. Valid empty results and `{}` exit successfully; empty input prints guidance and starts no source work. Partial work may remain when time, pages or charge budget stops a deep collection. There is no guarantee that every Google property, offer, review or photo is exposed.

### Billing

One result event bills one hotel or rental per stay, review, photo or autocomplete row; nested offers are included in the hotel row. Current rates per 1,000 rows are $0.09 on FREE, $0.089 on BRONZE, $0.08 on SILVER and $0.075 on GOLD, PLATINUM and DIAMOND. Apify also applies the $0.00005 Actor Start event, one event per allocated GB of memory with a minimum of one. Check the current Pricing tab before running.

### Support

Include the run URL, mode, affected input and expected source observation when reporting a problem through the Actor's Issues tab.

Search cursors stay on one session by default. A classified session change restarts discovery and deduplicates previously emitted properties.

# Changelog

This Actor's version history is a separate document: https://apify.com/danthedataman/google-hotels-stay-ledger/changelog.md

# Actor input Schema

## `mode` (type: `string`):

search, details, reviews, photos or autocomplete.

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

Batch destination searches; exact hotel names in direct modes; prefixes in autocomplete.

## `hotelUrls` (type: `array`):

Google Hotels entity URLs/tokens, Google Maps place/CID URLs, Place IDs or Maps short links.

## `hotelNames` (type: `array`):

Batch exact hotel names. Ambiguous names produce ERRORS; use a property URL or Place ID.

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

ISO date or today, tomorrow, +Ndays/weeks/months/years; UTC. Omitted: tomorrow.

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

ISO or relative date. Omitted: one day after check-in.

## `stays` (type: `array`):

Batch objects with checkInDate, checkOutDate, adults, childrenAges and rooms; omitted uses top-level stay, \[] does no work.

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

Three-letter currency code. Returned price context must match.

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

Google language code such as en, fr or pt-BR.

## `countryCode` (type: `string`):

Two-letter Google market code such as us or fr.

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

Adult occupancy per stay; 1–50.

## `childrenAges` (type: `array`):

Child ages in years, each 0–17; at most 50 children.

## `rooms` (type: `integer`):

Rooms per stay; 1–8.

## `sweepDays` (type: `integer`):

Add daily shifted stays through this offset; 0 means only the original stay, maximum 60.

## `maxResults` (type: `integer`):

Maximum billable rows per input and stay; 0 drains source within time/charge budget.

## `maxPages` (type: `integer`):

Maximum source pages per input/stay or nested review collection; 0 drains within time/charge budget.

## `includeUnpriced` (type: `boolean`):

Emit and bill hotels without returned offers (or without a nightly card price in cards mode). Otherwise omit and count them in COVERAGE. Applies when includePrices is true.

## `includePrices` (type: `boolean`):

Return selected-stay prices from OTA sources/rooms or search cards. False leaves price fields null and offers empty.

## `offerLevel` (type: `string`):

rooms includes room-level offers; sources selects source-level rates; cards returns destination search cards and list prices without property hydration. cards requires search mode with no exact hotel targets, nested reviews or cancellation-only rates.

## `maxOffers` (type: `integer`):

Cap nested offers per hotel; 0 includes all source-returned offers, maximum 500.

## `includeReviews` (type: `boolean`):

Include nested reviews in hotel rows; standalone reviews mode emits one row per review.

## `maxReviews` (type: `integer`):

Nested review cap; 0 drains within page/time budgets, maximum 5000.

## `reviewSort` (type: `string`):

Source review ordering.

## `reviewCategory` (type: `string`):

Source review topic filter, such as Service or Bar.

## `sort` (type: `string`):

Google search ordering: relevance, price, rating or reviewCount.

## `minPrice` (type: `number`):

Minimum numeric nightly price in selected currency; 0 disables.

## `maxPrice` (type: `number`):

Maximum numeric nightly price in selected currency; 0 disables.

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

Minimum Google guest rating on a five-point scale; 0 disables.

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

Allowed hotel star classes, integers 1–5.

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

Google amenity filter labels listed below; Google search classification. Direct targets ignore filters.

## `propertyKinds` (type: `array`):

Allowed hotel/vacationRental families; \[] does no work.

## `propertyTypes` (type: `array`):

Google search subtype IDs 1–24; \[] allows all. Applies to destination searches.

## `minBedrooms` (type: `integer`):

Minimum source-reported rental bedrooms; 0 disables.

## `minBathrooms` (type: `integer`):

Minimum source-reported rental bathrooms; 0 disables.

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

Require a returned offer with freeCancellation=true; requires includePrices.

## `specialOffers` (type: `boolean`):

Require a source-marked deal; requires includePrices.

## `maxRetriesPerRequest` (type: `integer`):

Ordinary request attempts including first, 1–8. Default direct blocks have the separate cap of ten datacenter fallback attempts.

## `maxRunSeconds` (type: `integer`):

HTTP work budget in seconds; 1–86400. Partial results remain in dataset, unfinished work in ERRORS.

## `rotateAfterRequests` (type: `integer`):

Retire proxy session after N reads; 0 disables proactive rotation.

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

Optional Apify proxy configuration. Omitted uses anonymous direct egress with block-triggered datacenter fallback; explicit configurations are honoured. No automatic residential fallback.

## Actor input object example

```json
{
  "mode": "search",
  "queries": [
    "Paris, France"
  ],
  "hotelUrls": [
    "https://www.google.com/travel/hotels/entity/ChkIy5GZ0o_g66VJGg0vZy8xMWI3eHBmcGJsEAE"
  ],
  "hotelNames": [
    "Austin Motel"
  ],
  "checkInDate": "2026-12-14",
  "checkOutDate": "2026-12-17",
  "stays": [
    {
      "checkInDate": "tomorrow",
      "checkOutDate": "+3days",
      "adults": 2,
      "childrenAges": [
        7
      ],
      "rooms": 1
    }
  ],
  "currency": "USD",
  "languageCode": "en",
  "countryCode": "us",
  "adults": 2,
  "childrenAges": [],
  "rooms": 1,
  "sweepDays": 0,
  "maxResults": 20,
  "maxPages": 0,
  "includeUnpriced": false,
  "includePrices": true,
  "offerLevel": "rooms",
  "maxOffers": 0,
  "includeReviews": false,
  "maxReviews": 20,
  "reviewSort": "helpful",
  "reviewCategory": "",
  "sort": "relevance",
  "minPrice": 0,
  "maxPrice": 0,
  "minRating": 0,
  "hotelClass": [],
  "amenities": [],
  "propertyKinds": [
    "hotel",
    "vacationRental"
  ],
  "propertyTypes": [],
  "minBedrooms": 0,
  "minBathrooms": 0,
  "freeCancellationOnly": false,
  "specialOffers": false,
  "maxRetriesPerRequest": 3,
  "maxRunSeconds": 270,
  "rotateAfterRequests": 0
}
```

# Actor output Schema

## `coverage` (type: `string`):

Unique unpriced property/stay records and block-triggered datacenter fallback attempt count; unpriced rows are omitted by default or billed when explicitly included.

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

Hotel, review, photo or autocomplete rows. JSON and CSV exports are available from the dataset.

## `errors` (type: `string`):

Unresolvable inputs and source failures with reasons, when present; never dataset rows.

# 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 = {
    "mode": "search",
    "queries": [
        "Austin, Texas"
    ],
    "checkInDate": "tomorrow",
    "checkOutDate": "+2days",
    "currency": "USD",
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("danthedataman/google-hotels-stay-ledger").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 = {
    "mode": "search",
    "queries": ["Austin, Texas"],
    "checkInDate": "tomorrow",
    "checkOutDate": "+2days",
    "currency": "USD",
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("danthedataman/google-hotels-stay-ledger").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 '{
  "mode": "search",
  "queries": [
    "Austin, Texas"
  ],
  "checkInDate": "tomorrow",
  "checkOutDate": "+2days",
  "currency": "USD",
  "maxResults": 20
}' |
apify call danthedataman/google-hotels-stay-ledger --silent --output-dataset

```

## MCP server setup

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

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/qGFiFnp4PufeWztbC/builds/Ij8OOCj88luVZwYGn/openapi.json
