# Klook Scraper — Activities, Prices & Reviews (`tortuga/klook-scraper`) Actor

Scrape Klook activities, tours and attraction tickets by destination, keyword or URL: title, price, currency, rating, review count, category, location, highlights and URL, plus optional full details (policies, packages, images) and Klook reviews.

- **URL**: https://apify.com/tortuga/klook-scraper.md
- **Developed by:** [Trevor Ortega](https://apify.com/tortuga) (community)
- **Categories:** Travel
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 activities

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Klook Scraper: Activities, Prices & Reviews

Scrape Klook activities, tours and attraction tickets by destination, keyword or URL: title, price, original price, discount, currency, rating, review count, bookings, category, city, coordinates, duration, tags, badges, image and URL for every search result, with optional full details (description, highlights, good-to-know notes, policies, booking options, packages with prices, all images) and Klook reviews (rating, text, English translation, reviewer name as shown, date, visit date, package, photos).

Built for reliability: it reads the same JSON that klook.com's own pages load for anonymous visitors, through plain HTTP with browser TLS fingerprinting. No headless browser, no login, no CAPTCHA solving. You pay only for the activities and reviews you get.

See also: [Viator Scraper](https://apify.com/tortuga/viator-scraper) and [GetYourGuide Scraper](https://apify.com/tortuga/getyourguide-scraper), the companion Actors with the same shape for the other two big tours-and-activities marketplaces.

### What data does Klook Scraper extract?

Every activity from a search (destination, search term, search / city / country URL):

| Field | Description |
|---|---|
| `activityId` | Klook activity ID (the number in the URL) |
| `title` | Activity title |
| `url` | Activity URL on klook.com (with the language prefix of the run, e.g. `/zh-TW/`) |
| `productType` | `activity` for tours, tickets and experiences; search results can also hold `airport_transfer`, `hotel`, `car_rental`, … (those get no details or reviews) |
| `price` | Price shown on the card, number (`null` when the card says "Free Voucher") |
| `originalPrice` | Struck-through price when the activity is on sale, else `null` |
| `currency` | ISO code of the prices (the **Currency** input) |
| `priceText` | Price exactly as displayed, e.g. `US$ 47.05` |
| `discountPercent` | Discount in percent, from the two prices or the "30% off" deal tag |
| `rating` | Average rating 0-5 |
| `reviewCount` | Number of reviews |
| `bookedCount`, `bookedText` | Participants so far, exact number and the label Klook shows ("300K+ booked") |
| `category` | Klook category ("Day trips", "Theme parks", "Museums", …) |
| `city`, `cityId`, `countryId` | Where the activity is |
| `departureFrom` | Departure city for tours ("Tokyo" for a Mt. Fuji day trip) |
| `latitude`, `longitude` | Activity location |
| `duration` | Duration tag ("Up to 3 hrs", "5-7 hrs") |
| `instantConfirmation`, `freeCancellation`, `hotelPickup`, `privateTour`, `smallGroup`, `isBestseller`, `isKlookChoice`, `soldOut` | Booleans from the card's tags and badges (language-independent) |
| `guideLanguages` | Guide language codes from the tags, e.g. `["en"]` |
| `tags` | Card tags as shown: "Instant confirmation", "Free cancellation", "English guided", "Book now for tomorrow", … |
| `badges` | Promotion badges: "Klook's choice", … |
| `deals` | Deal labels: "30% off", "Sale", "Freebies", "1GB eSIM worth JPY600", … |
| `images` | Cover image URL (plus every activity image with details) |
| `language` | Site language of the run |
| `searchQuery`, `sourceUrl`, `scrapedAt` | The search that produced the item, its klook.com search page and the run timestamp |
| `changeType`, `previousValues` | Only with **Only new or changed items** on: `new` or `changed`, and for changed activities the old values of the fields that changed |

With **Include activity details** on (or for an activity URL given as input), each activity also gets:

| Field | Description |
|---|---|
| `subtitle`, `shortDescription`, `description` | Subtitle, meta description and the full description (Markdown) |
| `highlights` | Highlight bullet points |
| `goodToKnow`, `sections` | "Good to know" notes as a list, and every info section as `{title, text}` |
| `operatorNotice` | The operator's current notice (closures, traffic, …) |
| `categoryPath`, `templateName` | Full category path ("Tours & experiences" > "Tours" > "Day trips") and product template |
| `country` | Country name |
| `address`, `latitude`, `longitude`, `placeId` | Meeting point / venue with coordinates and Google place ID |
| `priceFrom`, `priceTo`, `lowestUnitPrice` | Price range across packages and the cheapest unit |
| `confirmationType`, `cancellationPolicy`, `freeCancellation`, `voucherUsage`, `ticketType` | Booking policies as texts and flag |
| `bestPriceGuarantee` | Klook's best-price badge |
| `options` | Booking option groups, e.g. `{"name": "Tour type", "values": [...]}` |
| `packages` | Every bookable package: `packageId`, `name`, `price`, `originalPrice`, `priceFrom`, `priceTo`, `instantConfirmation`, `hasStock`, `availableDate`, `minPax`, `maxPax`, `confirmationType`, `cancellationPolicy`, `ticketType`, `voucherUsage` |
| `labels` | Award and campaign labels ("2026 Best Attractions in Japan", …) |
| `videoUrl`, `lastUpdated`, `published` | Media and freshness |

With **Max reviews per activity** above 0 (or **Only reviews newer than** set), reviews are saved as separate items with `type: "review"`:

| Field | Description |
|---|---|
| `activityId`, `activityTitle`, `activityUrl` | The activity the review belongs to |
| `reviewId` | Klook review ID |
| `rating` | Stars 1-5 |
| `text` | Review text in the reviewer's language |
| `translatedText` | Klook's translation into the site language, when the review is in another language |
| `language` | Language of the review, e.g. `ko-KR` |
| `reviewerName` | Reviewer's name exactly as Klook shows it publicly ("Dominic \*\*\*\*\*\*" or "Klook User"); Klook itself masks surnames |
| `publishedAt` | Date and time of the review |
| `visitDate` | Date of the visit / tour |
| `packageName` | Package the reviewer booked |
| `helpfulVotes` | "Helpful" votes |
| `images` | Reviewer photo URLs |
| `ownerResponse` | The operator's public reply, when there is one |

Reviewer avatars and account IDs are not collected.

### How to scrape Klook activities

1. Type one or more **Destinations** ("Tokyo", "Bali", "Japan") and/or **Search terms** ("sunset cruise", "universal studios singapore"), or paste Klook URLs into **Start URLs**.
2. Set **Max activities** and **Max pages per search** to cap the run (and the cost). Each search page holds 20 activities; Klook stops at 1,000 results per search.
3. Optionally pick **Sort by** (Recommended, Lowest price, Most booked, Recently added, Top rated), **Currency** and **Language**, and switch on **Include activity details**.
4. Click **Start**. Results appear in the **Dataset** tab; export as JSON, CSV or Excel, or read them through the API.

### Input example

```json
{
  "destinations": ["Tokyo", "Kyoto"],
  "searchTerms": ["mount fuji day trip"],
  "startUrls": [
    { "url": "https://www.klook.com/search/result/?query=tokyo&sort=price&front_id=3" },
    { "url": "https://www.klook.com/activity/70672-shibuya-sky-tokyo/" }
  ],
  "maxItems": 200,
  "maxPagesPerSearch": 5,
  "currency": "USD",
  "language": "en",
  "includeDetails": true,
  "maxReviewsPerActivity": 10
}
```

### Output example

```json
{
  "type": "activity",
  "activityId": 93901,
  "title": "Mt. Fuji Instagram-worthy spots day trip: Ladder Town, Oshino Hakkai, Lake Kawaguchi, Lawson convenience store (departing from Tokyo Station or Shinjuku Station)",
  "url": "https://www.klook.com/en-US/activity/93901-mtfuji-one-day-tour-tokyo/",
  "productType": "activity",
  "price": 47.05,
  "originalPrice": null,
  "currency": "USD",
  "priceText": "US$ 47.05",
  "discountPercent": 30,
  "rating": 4.8,
  "reviewCount": 36492,
  "bookedCount": 357569,
  "bookedText": "300K+ booked",
  "category": "Day trips",
  "city": "Fujinomiya",
  "countryId": 12,
  "departureFrom": "Tokyo",
  "latitude": 35.3606255,
  "longitude": 138.7273634,
  "duration": null,
  "instantConfirmation": true,
  "freeCancellation": false,
  "hotelPickup": true,
  "isKlookChoice": true,
  "soldOut": false,
  "tags": ["Hotel pick-up", "Instant confirmation"],
  "badges": ["Klook's choice"],
  "deals": ["30% off", "Sale"],
  "images": ["https://res.klook.com/image/upload/activities/o4x2nesz8ry9tnmzo1md.jpg"],
  "categoryPath": ["Tours & experiences", "Tours", "Day trips"],
  "country": "Japan",
  "address": "Mount Fuji",
  "priceFrom": 67.19,
  "priceTo": 725.29,
  "confirmationType": "Instant confirmation/24-hour confirmation",
  "cancellationPolicy": "Free cancellation (24 hours notice)/Conditional cancellation",
  "highlights": ["Chosen by 300,000+ Travelers | Popular Choice for Mount Fuji Instagram-Worthy Routes: …", "…"],
  "options": [{ "name": "Driver/guide language", "values": ["English", "Chinese"] }, { "name": "Tour type", "values": ["Gather at the designated assembly point", "Private chartered car tour", "…"] }],
  "packages": [{ "packageId": 315236, "name": "Chinese · Gather at the designated assembly point", "price": 67.19, "originalPrice": 70.75, "instantConfirmation": true, "hasStock": true, "availableDate": "2026-11-03", "cancellationPolicy": "Free cancellation (24 hours notice)", "ticketType": "Fixed date booking" }, "…"]
}
```

Review item:

```json
{
  "type": "review",
  "activityId": 70672,
  "activityTitle": "SHIBUYA SKY Ticket",
  "activityUrl": "https://www.klook.com/activity/70672-shibuya-sky-tokyo/",
  "reviewId": 19473250,
  "rating": 5.0,
  "text": "시부야스카이는 반드시 오전10시 첫타임을, 반드시 사전 예약해서 갈 것을 강추합니다. …",
  "translatedText": "I highly recommend booking Shibuya Sky in advance for the very first 10 a.m. slot. …",
  "language": "ko-KR",
  "reviewerName": "Klook User",
  "publishedAt": "2026-10-04T16:23:12",
  "visitDate": "2026-10-04",
  "packageName": "입장권",
  "helpfulVotes": 0,
  "images": ["https://cdn.klook.com/user_review/product/…/….1200*0.jpeg"],
  "ownerResponse": null
}
```

### How much does it cost?

Pay per result: $0.0025 per activity from the search results, plus $0.001 per activity when **Include activity details** is on (one extra request each; an activity URL as input always counts as a detailed activity), plus $0.001 per review. No subscription; Apify's free plan is enough to try it. 1,000 activities cost $2.50, or $3.50 with details.

**Proxy note:** the Actor defaults to Apify's Unblocker proxy group. Klook's bot protection (DataDome) blocked datacenter IPs from the start, and on 2026-11-05 it started denying Apify's RESIDENTIAL group too (every request 403), so Unblocker is now the default. Unblocker is billed per request attempt, about $0.0015 (10 units) on the free plan, including failed attempts; one search request returns a full page of up to 20 activities, so proxy cost stays well under the per-activity price. Unblocker picks its own exit country, so the proxy country can no longer be pinned in **Proxy**; Klook still prices activities by the visitor's country shown in the results. Plain datacenter or RESIDENTIAL proxies are cheaper if you want to try them again later.

### How to scrape Klook reviews

Set **Max reviews per activity** (for example 20) and the Actor saves the newest reviews of every activity as separate dataset items with `type: "review"`, linked to the activity by `activityId`. Use the **Reviews** view of the dataset, or filter by `type`. Each review carries the stars, the text in the reviewer's language, Klook's translation when there is one, the reviewer's name exactly as Klook displays it, the review date, the visit date and the package booked. Reviews are read 20 per request, newest first; Klook serves at most 2,000 per activity. To get only recent reviews, set **Only reviews newer than** to a date or a period such as `7 days`.

### Which Klook URLs work

- Activity pages: `https://www.klook.com/activity/70672-shibuya-sky-tokyo/` (with or without a language prefix such as `/en-US/`). Returns that activity with full details.
- Search pages: `https://www.klook.com/search/result/?query=tokyo&sort=price&front_id=3`. The query, the sort order and the filters `city_id`, `country_id`, `front_id` (category), `start_time`, `price_from`, `price_to` and `instant` are kept, so you can build any filtered listing on klook.com and paste its URL.
- City and country pages: `https://www.klook.com/city/28-tokyo-things-to-do/`, `https://www.klook.com/country/12-japan-things-to-do/`. The destination is searched with its city / country filter.

Anything else (blog posts, hotel search, the home page) is reported in the run's `SUMMARY` and skipped. Hotels, car rentals and eSIMs that show up among the search results are saved as cards with their `productType`, without details or reviews.

### Does it need a login?

No. All data comes from the public JSON endpoints that klook.com itself loads for anonymous visitors: search results, activity details and reviews. No account, cookies, headless browser or CAPTCHA solving is involved. Note that Klook does not show one price per activity: prices differ a little by the visitor's country (market), and each request is answered from one of several price buckets, with or without a platform promo (5-10 % apart) and occasionally with the activity's cheapest unit (a one-way fare, a child ticket) instead of its main price. `price` and `priceText` are exactly what Klook showed in that answer. The Actor fixes the proxy country to the US unless you choose one yourself; keep one proxy country, one **Language** and one **Currency** when you compare prices, and switch on **Include activity details** to get the stable package prices (`priceFrom`, `priceTo`, `packages`).

### Monitor Klook prices on a schedule

Turn on **Only new or changed items** and the Actor remembers what earlier runs of the same input returned: each run outputs only activities that are new in the watched window or whose price, rating or sold-out status changed. Unchanged activities are dropped before any detail or review request is made, so they are not charged. **Max activities** becomes the window that is checked on every run (for example the top 40 of a destination), so a run with nothing new costs only the search pages. With reviews on, only reviews not seen before are saved, also for unchanged activities, and reviews are requested only for activities whose review count moved. Save the input as a task, then add a Schedule to it in Apify Console (Schedules → Create new, for example daily). Every output activity carries `changeType` (`new` or `changed`); changed ones carry `previousValues`, e.g. `{"price": 52.5}` for a tour that now costs 49.

One Klook particularity: the site answers each request from one of several price buckets (the same ticket comes back as US$ 18.75 or US$ 17.15 depending on whether a platform promo is applied, and occasionally as its cheapest unit, e.g. a one-way instead of a round-trip fare), and no setting pins the bucket. The Actor therefore remembers every price it has seen for an activity and reports `changed` only for a price Klook never showed before (beyond 1 %, which absorbs exchange-rate drift); a price that flips back to a known value is not a change. Expect a few such reports in the first two or three runs while the buckets are learned, then only real changes. Rating moves under 0.05 are ignored, and every run uses the same proxy country (US unless you set one). Use **Monitoring key** to keep several schedules on the same input separate.

### Integrations and API

Use the run in Zapier, Make, n8n, Google Sheets, or call it from Python/Node with the Apify client. See the **API** tab for ready-made snippets. Schedule it to track prices, discounts, new activities or new reviews in a destination.

### Is it legal to scrape Klook?

This Actor collects only data that Klook shows publicly to logged-out visitors: activity listings, prices, ratings, booking counts, descriptions, policies, review texts and the reviewer's name exactly as Klook displays it (Klook itself masks surnames, e.g. "Dominic \*\*\*\*\*\*", and shows "Klook User" for many reviewers). It does not collect avatars, account IDs, contact details or anything behind a login. Reviewer names are personal data under GDPR and similar laws: make sure you have a lawful basis for processing them, and do not use them to contact or profile individuals. You are responsible for how you use the data and for complying with Klook's terms and applicable law.

### Support

Found a bug or need a field added? Open an issue in the **Issues** tab; it is usually answered within a day.

### Related scrapers

- [Tripadvisor Scraper](https://apify.com/tortuga/tripadvisor-scraper): Reviews, Hotels, Restaurants, Attractions
- [OpenTable Scraper](https://apify.com/tortuga/opentable-scraper): Restaurants, Availability & Reviews
- [Eventbrite Scraper](https://apify.com/tortuga/eventbrite-scraper): Events, Tickets & Organizers
- [Viator Scraper](https://apify.com/tortuga/viator-scraper): Tours, Prices, Ratings & Reviews
- [GetYourGuide Scraper](https://apify.com/tortuga/getyourguide-scraper): Tours, Prices & Ratings

### Found it useful?

A ★ review on this Actor's Apify Store page helps other users find it and tells us what to improve. Issues and feature requests are welcome in the Actor's **Issues** tab.

# Actor input Schema

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

City, region or country names to get things to do for, e.g. "Tokyo", "Bali", "Hong Kong", "Japan". Each name is searched like the Klook search box (Recommended order, 20 activities per page).

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

Free-text searches, e.g. "sunset cruise", "universal studios singapore", "mount fuji day trip". Combine with Destinations as you like; the same activity is never saved twice in a run.

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

Klook URLs. Activity pages (https://www.klook.com/activity/70672-shibuya-sky-tokyo/) return that activity with full details. Search pages (https://www.klook.com/search/result/?query=tokyo\&sort=price\&front_id=3) keep their query, sort order and filters (city_id, country_id, front_id, start_time, price_from, price_to, instant). City and country pages (https://www.klook.com/city/28-tokyo-things-to-do/) list that destination's activities. A language prefix such as /en-US/ or /zh-TW/ is fine.

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

3-letter ISO code of the prices (USD, EUR, GBP, JPY, HKD, SGD, AUD, …). Klook converts its prices into the chosen currency itself; USD is the site's base currency and the most stable choice for comparisons and monitoring.

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

Klook site language for titles, categories, tags, details and reviews. Klook prices its activities per market (the visitor's country, see Proxy), so keep one language and one proxy country when you compare or monitor prices.

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

Order of the search results, like the sort menu on klook.com. Leave empty for Recommended. A sort in a search URL wins for that URL.

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

Stop after this many activities in total (across all destinations, search terms and URLs; duplicates are removed). Reviews do not count towards this limit, they are capped per activity. Each search page holds 20 activities.

## `maxPagesPerSearch` (type: `integer`):

Search pages read per destination, search term or search URL (20 activities each; at most 50 pages, because Klook caps a search at 1,000 results).

## `includeDetails` (type: `boolean`):

Also fetch every activity's detail record: description, highlights, good-to-know notes, address with coordinates, category path, cancellation and confirmation policy, voucher and ticket type, all images, booking options and the package list with per-package prices. One extra request and a small extra charge per activity (see pricing).

## `maxReviewsPerActivity` (type: `integer`):

Save up to this many of the newest customer reviews per activity as separate items (type "review"): rating, text, English translation when Klook provides one, language, reviewer name as shown, date, visit date, package, helpful votes and photos. 0 = no reviews. 20 reviews per request; Klook serves at most 2,000 per activity. Charged per review (see pricing).

## `reviewsNewerThan` (type: `string`):

Only reviews newer than: a date (YYYY-MM-DD) or a period such as '7 days' or '24 hours'. Turns reviews on (20 per activity unless Max reviews per activity says otherwise). Reviews are read newest first and reading stops at the first page that is entirely older.

## `onlyNewOrChanged` (type: `boolean`):

Remember what earlier runs of this search returned and output only new items or items whose price/status changed. Use with a Schedule; unchanged items are not charged. With this on, Max activities is the number of activities checked each run (the watched window, e.g. the top 40 of a destination), so a run never digs deeper than the first one. Compared: price, rating and sold-out status. Klook shows one of several prices per request (with or without a platform promo, sometimes the cheapest unit), so the Actor remembers every price it has seen for an activity and reports a change only for a price never shown before (beyond 1 %); expect a few such reports in the first runs, then only real changes. Rating moves under 0.05 are ignored. With reviews on, only reviews not seen before are saved (also for unchanged activities, whose reviews are only requested when their review count moved).

## `monitoringKey` (type: `string`):

Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input.

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

Klook's pages sit behind DataDome, which started denying Apify's RESIDENTIAL proxy group on 2026-11-05 as well as datacenter IPs, so Apify's Unblocker proxy (group UNBLOCKER) is now the default. Unblocker is billed to your Apify account per request attempt, about $0.0015 (10 units) on the free plan, including failed attempts; one search request returns a full page of up to 20 activities, so proxy cost stays well under the per-activity price. Unblocker picks its own exit country, so the proxy country can no longer be pinned here; Klook prices still depend on the visitor's country shown in the results. Plain datacenter or RESIDENTIAL proxies are cheaper if DataDome relaxes again.

## Actor input object example

```json
{
  "destinations": [
    "Tokyo"
  ],
  "currency": "USD",
  "language": "en",
  "maxItems": 20,
  "maxPagesPerSearch": 1,
  "includeDetails": false,
  "maxReviewsPerActivity": 0,
  "onlyNewOrChanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

## `results` (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": [
        "Tokyo"
    ],
    "currency": "USD",
    "maxItems": 20,
    "maxPagesPerSearch": 1,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tortuga/klook-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 = {
    "destinations": ["Tokyo"],
    "currency": "USD",
    "maxItems": 20,
    "maxPagesPerSearch": 1,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tortuga/klook-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 '{
  "destinations": [
    "Tokyo"
  ],
  "currency": "USD",
  "maxItems": 20,
  "maxPagesPerSearch": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call tortuga/klook-scraper --silent --output-dataset

```

## MCP server setup

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