# Google Travel Hotels Scraper (`parseforge/google-travel-scraper`) Actor

Scrape Google Travel hotel listings with prices, star ratings, the full 1-5 star review breakdown and what guests praised or complained about. Export to CSV, JSON, Excel or XML.

- **URL**: https://apify.com/parseforge/google-travel-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Travel, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.60 / 1,000 property 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🏨 Google Travel Hotels Scraper

> 🚀 **Export Google Travel hotel data in seconds.** 43 fields per property, including the full 1-5 star review breakdown and the exact number of guests who praised or complained about each amenity.

This Actor turns a Google Travel search into a clean dataset. Give it a destination and a pair of stay dates, and it returns the properties Google shows, each with its live price for that stay, its star class, its guest rating, its street address and phone, its official website, its photos, and the review intelligence Google buries behind hover states.

Data comes straight from google.com/travel, the same surface a traveller sees when they compare hotels. The Actor reads Google's own embedded data payload rather than scraping styled HTML, so field names stay stable through Google's redesigns and every one of the 27 supported languages returns the same 43 columns.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Revenue managers and hotel owners | Track competitor rates for specific stay dates |
| OTAs and travel startups | Seed a property catalogue with ratings, GPS and contact details |
| Market researchers and consultants | Benchmark guest sentiment across a city or a district |
| Travel agencies and DMCs | Build client-ready shortlists with real prices and reviews |
| Data teams and AI builders | Feed grounded hotel context into a travel assistant |

### 📋 What the Google Travel Hotels Scraper does

- Searches google.com/travel by destination, neighbourhood, landmark or hotel name.
- Prices a real trip. Set a check-in and check-out date and every price returned is the rate for that stay, with the night count on the row.
- Returns **43 fields per property**: identity, price, location, contact, content and review intelligence.
- Reports **`totalResultsEstimate`** on every row, so you always know how many properties Google matched against how many it published.
- Opens each property's own Google Travel page to add street address, phone, official website, check-in and check-out times, nearby places and guest review excerpts. Switch it off for a faster listing-only run.
- Accepts pasted Google Travel URLs, both search pages and single property pages.
- Answers in **27 languages**, translating property class, descriptions and review text.

> 💡 **Why it matters:** every Google Hotels scraper returns a rating and a review count. This one returns the shape of that rating. A 4.1 built on 47% five-star and 17% one-star reviews is a completely different property from a 4.1 built on a smooth curve, and only one of those two is a problem you can sell a solution to.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Every run produces one row per property. Arrays and objects come through intact in JSON and XML, and flatten into columns in CSV and Excel.

| Field | Type | Description |
|---|---|---|
| 🖼 `imageUrl` | string | Primary property photo |
| 🏨 `name` | string | Property name as Google publishes it |
| 🔗 `hotelUrl` | string | Google Travel page for the property |
| 🔑 `entityKey` | string | Google Travel entity id, stable across runs |
| 📌 `placeId` | string | Google Maps place id, for joining to Maps data |
| 🧭 `featureId` | string | Google feature id (hex pair) |
| 🗺 `googleMapsUrl` | string | Direct Google Maps link |
| ⭐ `hotelClass` | string | Official class, for example "3-star hotel" |
| 🌟 `starRating` | number | Class as a number |
| 🏷 `propertyType` | string | `hotel`, `vacation_rental` and similar |
| 💰 `price` | string | Formatted price for the requested stay |
| 💵 `priceValue` | number | Same price as a number |
| 💱 `currency` | string | ISO currency of the quote |
| 📅 `checkInDate` | string | Stay start, ISO date |
| 📅 `checkOutDate` | string | Stay end, ISO date |
| 🌙 `nights` | number | Nights in the quoted stay |
| 🌟 `rating` | number | Google guest rating out of 5 |
| 🗣 `reviewCount` | number | Number of Google reviews |
| 📍 `address` | string | Street address |
| 🗺 `area` | string | Narrowest area Google assigns, usually the neighbourhood |
| 🌍 `countryCode` | string | ISO country code |
| 📐 `latitude` / `longitude` | number | GPS coordinates |
| ☎️ `phone` | string | Public phone number |
| 🌐 `officialSiteUrl` | string | The hotel's own booking link |
| 🕐 `checkInTime` / `checkOutTime` | string | Published desk times |
| 📝 `description` | string | Google's one-line summary |
| 📖 `editorialSummary` | string | Google's full editorial write-up |
| 🏘 `neighborhoodDescription` | string | What the surrounding area is like |
| 🔎 `searchQuery` | string | The query that produced the row |
| 📊 `totalResultsEstimate` | number | Properties Google matched for that query |
| 🖼 `photoCount` | number | Photos Google publishes |
| 📈 `ratingBreakdown` | object | Percentage and count for each of 1-5 stars |
| 💬 `amenityHighlights` | array | Per category: mentions, positive, negative, sentiment |
| 🌐 `reviewSources` | array | Each review platform with its own rating and count |
| 🗨 `reviewExcerpts` | array | Guest review texts with author, date and source |
| 🧭 `locationHierarchy` | array | Region, city and district, broadest first |
| 📍 `nearbyPlaces` | array | Named nearby places with type and place id |
| 🚇 `nearbyTravelTimes` | array | Landmarks, stations and airports with travel times |
| 🖼 `photos` | array | Photo URLs |
| 🕒 `scrapedAt` | string | ISO timestamp of collection |
| ❌ `error` | string | Populated only on a failed row |

#### Real sample records

```json
{
  "imageUrl": "https://lh3.googleusercontent.com/gps-cs-s/AHRPTWnfqYIEjYimXF24poOhrWAFqXBvRkjCdoD7ugTVYSbqJ9G1Gqn_6OWQAzrvdApKLkqwNZYlclpmZqF2UuB4CBHpi95ltsZys9AebmLOkUsdM_NDcemhJcFGhwvOSTEJ89k6aR2P=s150-w92-h150-n-k-no",
  "name": "Bruc & Bruc",
  "hotelUrl": "https://www.google.com/travel/entity/key/ChkI44_nu6ir1IVxGg0vZy8xMWJ0djY2ZmdrEAE",
  "placeId": "ChIJu5ChX-iipBIR48d5h1pRC3E",
  "hotelClass": "3-star hotel",
  "starRating": 3,
  "propertyType": "hotel",
  "price": "$85",
  "priceValue": 84.802086,
  "currency": "USD",
  "checkInDate": "2026-11-10",
  "checkOutDate": "2026-11-13",
  "nights": 3,
  "rating": 3.7,
  "reviewCount": 148,
  "address": "Carrer de Mallorca, 290",
  "area": "Dreta de l'Eixample",
  "countryCode": "ES",
  "latitude": 41.3964619,
  "longitude": 2.1663277,
  "phone": "+34 605 93 21 31",
  "officialSiteUrl": "https://www.brucandbruc.es/",
  "description": "Breezy rooms, some with balconies, in a casual hotel offering complimentary Wi-Fi.",
  "searchQuery": "Barcelona",
  "totalResultsEstimate": 1472,
  "photoCount": 9,
  "ratingBreakdown": {
    "oneStar": { "percent": 17, "count": 26 },
    "twoStar": { "percent": 4, "count": 6 },
    "threeStar": { "percent": 11, "count": 17 },
    "fourStar": { "percent": 21, "count": 32 },
    "fiveStar": { "percent": 47, "count": 67 }
  },
  "amenityHighlights": [
    { "category": "Cleanliness", "mentions": 15, "positiveMentions": 11, "negativeMentions": 3, "sentiment": 0.588 },
    { "category": "Sleep", "mentions": 10, "positiveMentions": 5, "negativeMentions": 5, "sentiment": 0 },
    { "category": "Bathroom and toiletries", "mentions": 9, "positiveMentions": 4, "negativeMentions": 4, "sentiment": 0 }
  ],
  "reviewSources": [{ "source": "Trip.com", "rating": 4.3, "ratingScale": 5, "reviewCount": 34 }],
  "reviewExcerpts": [
    {
      "source": "Trip.com",
      "author": "Trip.com Member",
      "relativeDate": "a month ago",
      "rating": 3,
      "ratingScale": 5,
      "text": "The location is excellent, it is near all the major tourist spots. However, amenities were limited."
    }
  ],
  "locationHierarchy": ["Catalonia", "Barcelona", "Barcelona", "Dreta de l'Eixample"],
  "nearbyTravelTimes": [
    { "name": "Basílica de la Sagrada Família", "type": "N/A", "travelTimes": ["8 min", "14 min"] },
    { "name": "Casa Batlló", "type": "N/A", "travelTimes": ["10 min", "10 min"] }
  ],
  "scrapedAt": "2026-09-01T15:43:57.901Z",
  "error": null
}
```

```json
{
  "name": "Hotel Riu Plaza Manhattan Times Square",
  "hotelClass": "4-star hotel",
  "propertyType": "hotel",
  "checkInDate": "2026-11-10",
  "checkOutDate": "2026-11-13",
  "nights": 3,
  "rating": 4.7,
  "reviewCount": 2352,
  "area": "Theater District",
  "countryCode": "US",
  "checkInTime": "3:00 PM",
  "checkOutTime": "12:00 PM",
  "searchQuery": "Times Square, New York",
  "totalResultsEstimate": 108,
  "scrapedAt": "2026-09-01T15:39:54.334Z",
  "error": null
}
```

```json
{
  "name": "イビス パリ トゥール エッフェル カンブロンヌ 15区",
  "hotelClass": "3 つ星の観光客向けホテル",
  "starRating": 3,
  "placeId": "ChIJH-R_1yJw5kcR5vQPk8C3W0Y",
  "rating": 3.8,
  "reviewCount": 6627,
  "countryCode": "FR",
  "latitude": 48.8470547,
  "longitude": 2.3013411,
  "ratingBreakdown": {
    "oneStar": { "percent": 10, "count": 671 },
    "twoStar": { "percent": 7, "count": 477 },
    "threeStar": { "percent": 15, "count": 1039 },
    "fourStar": { "percent": 29, "count": 1943 },
    "fiveStar": { "percent": 39, "count": 2497 }
  },
  "error": null
}
```

### ✨ Why choose this Actor

- **The review breakdown, not just the average.** Percentage and count for each of the five star buckets, on every property, in one column.
- **Amenity sentiment with real counts.** Google tracks how many reviewers mentioned Cleanliness, Sleep, Location, Bathroom, Service and more, and how many were positive or negative. That is a ready-made competitive gap analysis.
- **Prices for a real stay.** Set your dates and every quote is for those exact nights, with the night count on the row so you can normalise to a nightly rate.
- **Joinable identifiers.** `placeId` links straight to Google Maps data, `entityKey` is stable across runs, `featureId` covers legacy Maps joins.
- **Honest coverage reporting.** `totalResultsEstimate` tells you how many properties Google matched, so you know exactly what share of a market a run covers.
- **Built on Google's own data payload,** not on styled markup with rotating class names.
- **27 languages, one schema.** Field names never change; only the values are translated.
- **No proxy required.** Google Travel answers this Actor directly, so proxy is off by default and available when you need volume.

### 📈 How it compares to alternatives

| | This Actor | Typical Google Hotels scrapers | Google Hotels by hand |
|---|---|---|---|
| Fields per property | 43 | Name, price, rating, address | Whatever you copy |
| 1-5 star review breakdown | ✅ percent and count | ❌ | ❌ hover only |
| Amenity sentiment counts | ✅ per category | ❌ | ❌ |
| Guest review excerpts | ✅ with author and source | Rarely | Manual |
| Nearby places and travel times | ✅ | ❌ | Manual |
| Stay-date pricing | ✅ | Sometimes | ✅ |
| Google Maps `placeId` | ✅ | Rarely | ❌ |
| Coverage reported per run | ✅ `totalResultsEstimate` | ❌ | ❌ |
| Languages | 27 | Usually English only | Any |
| Properties per search query | ~20, matching Google's public page | ~20, same public page | ~20 per scroll |

**About that last row.** Google publishes roughly 20 properties per search query to a logged-out visitor, no matter who is asking. That is a property of the source, not of this Actor, and any tool claiming otherwise is either paginating a different surface or repeating queries. This Actor is explicit about it: run several narrow destinations ("Le Marais, Paris", "Montmartre, Paris", "hotels near Gare du Nord") instead of one broad one, and read `totalResultsEstimate` to see how much of the market you have.

### 🚀 How to use

1. **Create a free Apify account.** New accounts get $5 in free credit, no card needed: [console.apify.com/sign-up](https://console.apify.com/sign-up?fpr=vmoqkp).
2. **Open the Actor** and click Try for free.
3. **Add your destinations.** One per line: a city, a district, a landmark or a hotel name. Narrow beats broad.
4. **Set your stay dates** if you want prices for a specific trip. Leave them empty for Google's default one-night rate.
5. **Pick a language** if you need something other than English.
6. **Set Max Items** to cap the run.
7. **Click Start** and watch the log name each property as it lands.
8. **Download** the dataset as CSV, Excel, JSON or XML, or pull it from the API.

Prefer to paste URLs? Drop any `google.com/travel/search?q=...` or `google.com/travel/entity/key/...` link into the URLs field and skip the search terms entirely.

### 💼 Business use cases

#### Competitive rate monitoring for hoteliers

Run your own property plus the six hotels you actually compete with, for the dates that matter: the conference week, the long weekend, the shoulder season. Each row carries `price`, `nights`, `checkInDate` and `checkOutDate`, so a daily schedule builds a rate history without any manual entry. Add `ratingBreakdown` and you can see whether a rival's premium is backed by guest satisfaction or is just optimistic pricing.

#### Guest sentiment gap analysis

`amenityHighlights` gives you, per property, how many reviewers mentioned Cleanliness or Sleep and how many were negative. Pull twenty hotels in a district and you can rank the whole market on the dimension you are about to invest in. If every competitor is bleeding negative mentions on Sleep and you are not, that is your next campaign line, sourced from their reviews rather than your assumptions.

#### Building a travel product catalogue

`placeId`, `latitude`, `longitude`, `address`, `phone`, `officialSiteUrl` and `photos` are enough to stand up a property database, and `entityKey` gives you a stable primary key to refresh against. `locationHierarchy` lets you group by region, city and district without geocoding anything yourself.

#### Grounding a travel AI assistant

An assistant that recommends hotels needs facts, not vibes. Feed it `description`, `editorialSummary`, `neighborhoodDescription`, `ratingBreakdown`, `amenityHighlights` and `nearbyTravelTimes`, and it can answer "quiet 4-star near the Sagrada Família where nobody complains about the beds" with citations instead of hallucinations.

### 🔌 Automating Google Travel Hotels Scraper

- **Make** and **Zapier**: trigger on a finished run and push new rows into Sheets, Airtable, Notion or a CRM.
- **Slack**: post a daily digest when a tracked competitor's price moves.
- **Airbyte**: sync the dataset into Snowflake, BigQuery or Postgres on a schedule.
- **GitHub Actions**: call the Actor from a workflow and commit the CSV to a repo for versioned rate history.
- **Google Drive**: drop each run's export into a shared folder for the revenue team.
- **Apify Scheduler**: run every morning before rates move, with no code at all.

### 🌟 Beyond business use cases

- **Research.** Tourism economists can measure how published rates and guest sentiment vary by district, season and property class, across cities, using one consistent schema.
- **Personal.** Planning a trip? Run your shortlist with your real dates and compare the review breakdown side by side instead of trusting five different averages.
- **Non-profit.** Event and conference organisers can build an honest accommodation guide for attendees, with prices for the event dates and accessibility-relevant contact details.
- **Experimentation.** The `amenityHighlights` and `ratingBreakdown` columns are an unusually clean dataset for teaching sentiment analysis or building a rating-distribution model.

### 🤖 Ask an AI assistant about this scraper

Point ChatGPT, Claude or Gemini at this page and ask questions like:

- "Using the Google Travel Hotels Scraper output, which of these hotels has the most polarised reviews?"
- "Write a Python script that turns `ratingBreakdown` into a stacked bar chart per property."
- "From `amenityHighlights`, which amenity is the biggest weakness across this district?"
- "Convert this dataset into a Postgres schema keyed on `entityKey`."

### ❓ Frequently Asked Questions

**❓ How many properties do I get per search?**
Around 20, which is what Google publishes to a logged-out visitor for any one query. `totalResultsEstimate` tells you how many Google matched in total. To cover more of a market, run several narrower destinations rather than one city name.

**❓ Can I get prices for specific dates?**
Yes. Set Check-in date and Check-out date and every price is the rate for that exact stay. The row carries the dates and the night count so you can normalise to a nightly figure.

**❓ Which currency are prices in?**
Google chooses the currency from the location of the request, and it ignores any currency parameter in the URL. Prices come back in US dollars by default. To force another currency, switch on the proxy and pick the matching country.

**❓ Do I need a proxy?**
No. Google Travel answers this Actor directly, so proxy is off by default. Switch it on for large runs or to control the price currency.

**❓ Why is Spanish missing from the language list?**
Google serves a page with no embedded data for `es`, so no scraper can read Spanish results from that surface. Rather than ship a language that silently returns nothing, it is left out. The 27 languages offered all return the full 43 fields.

**❓ What is the difference between `hotelClass` and `rating`?**
`hotelClass` is the official star classification of the property ("3-star hotel"). `rating` is the guest score out of 5 from Google reviews. A 2-star hotel can carry a 4.6 guest rating, and often does.

**❓ Why do some fields say "Not Disclosed"?**
Because Google does not publish that value for that property. An independent hotel often has no listed check-in time, and a hostel has no star class. The field stays in the schema with a sentinel rather than disappearing, so your columns are the same on every row.

**❓ How do I join this to Google Maps data?**
Use `placeId`. It is the standard Google Maps place identifier and works directly with the Places API and with Maps datasets. `featureId` covers older Maps joins, and `entityKey` is the stable key inside Google Travel itself.

**❓ Can I scrape a single hotel I already have the link for?**
Yes. Paste the `google.com/travel/entity/key/...` URL into the URLs field. You get the full detail record for that property with no search step.

**❓ Does it collect vacation rentals too?**
Google mixes apartments and rentals into hotel results, and they come through with `propertyType` set accordingly, so you can keep or filter them.

**❓ Is the data live?**
Yes. Every run fetches Google Travel at that moment. Prices and ratings change, so schedule the Actor if you need a time series.

**❓ Is any of this behind a login?**
No. The Actor only reads what Google publishes to a logged-out visitor. No accounts, no cookies, no personal data.

### 🔌 Integrate with any app

Everything the Actor produces is available through the [Apify API](https://docs.apify.com/api/v2), so you can start runs, poll status and pull the dataset from any language. Official clients exist for JavaScript and Python, and the dataset endpoint serves CSV, Excel, JSON and XML directly, which means a spreadsheet or a BI tool can point at a URL and refresh itself.

### 🔗 Recommended Actors

- [Booking.com Hotels Scraper](https://apify.com/parseforge/booking-com-hotels-scraper) - the same properties priced by a different channel, for rate parity checks.
- [Kayak Hotel Price Scraper](https://apify.com/parseforge/hotel-booking-sites-direct-hotel-websites-scraper) - direct hotel website rates alongside the aggregators.
- [TripAdvisor Reviews Scraper](https://apify.com/parseforge/tripadvisor-reviews-scraper) - deeper review volume once Google's excerpts point you at a property.
- [Airbnb Listings Scraper](https://apify.com/parseforge/airbnb-scraper) - the short-term rental side of the same market.
- [Google Maps Shared List Scraper](https://apify.com/parseforge/google-maps-shared-list-scraper) - join on `placeId` to enrich with Maps detail.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** This is an independent tool and is not affiliated with, endorsed by, or connected to Google. It collects only publicly available data from google.com/travel.

# Actor input Schema

## `searchTerms` (type: `array`):

Where to look. A city, a neighbourhood, a landmark or a hotel name - anything you would type into the Google Travel search box. Google publishes about 20 properties per query, so several narrow destinations return far more than one broad one.

## `startUrls` (type: `array`):

Paste Google Travel URLs directly. Both a search page (google.com/travel/search?q=...) and a single property page (google.com/travel/entity/key/...) work.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

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

Stay start, as YYYY-MM-DD. Leave both dates empty and Google quotes its default one-night stay starting tomorrow.

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

Stay end, as YYYY-MM-DD. Ignored unless a check-in date is set as well.

## `scrapePropertyDetails` (type: `boolean`):

On by default. Opens every property's own Google Travel page to add street address, phone, official website, check-in and check-out times, nearby places and review excerpts. Turn it off for a faster, listing-only run.

## `includeReviewExcerpts` (type: `boolean`):

Include the guest review texts Google shows on the property page, with author, relative date and source platform.

## `maxReviewExcerptsPerProperty` (type: `integer`):

How many review texts to keep per property.

## `maxPhotosPerProperty` (type: `integer`):

How many photo URLs to keep per property.

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

Language Google answers in. Property class, descriptions and review text come back translated. Spanish is not offered because Google serves a data-free page for it.

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

Google Travel answers this Actor without a proxy, so it is off by default. Switch it on for high volume, or pick a country to control which currency Google quotes prices in - the currency follows the exit IP, not a URL parameter.

## Actor input object example

```json
{
  "searchTerms": [
    "Paris"
  ],
  "maxItems": 10,
  "scrapePropertyDetails": true,
  "includeReviewExcerpts": true,
  "maxReviewExcerptsPerProperty": 5,
  "maxPhotosPerProperty": 10,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key property, price and rating fields

## `fullData` (type: `string`):

Complete dataset with all 43 fields

# 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 = {
    "searchTerms": [
        "Paris"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/google-travel-scraper").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 = {
    "searchTerms": ["Paris"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/google-travel-scraper").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 '{
  "searchTerms": [
    "Paris"
  ],
  "maxItems": 10
}' |
apify call parseforge/google-travel-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/p4eFmF1UUu7g5AIZ5/builds/iyHbd6h6WZDjPM569/openapi.json
