# Klook Activity Details Scraper (`boncross/klook-activity-details`) Actor

Scrape full Klook activity records. Just add activity ids or URLs and get the name, rating, review count, every package with its price and highlights, description sections, FAQs, photo counts and the review summary. Add related activities too. $2.00 per 1,000 activities.

- **URL**: https://apify.com/boncross/klook-activity-details.md
- **Developed by:** [BonCross API](https://apify.com/boncross) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 activity-scrapeds

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

## Klook Activity Details Scraper

### What is Klook Activity Details Scraper?

Give Klook Activity Details Scraper the link to a Klook activity and it hands back the whole page as one structured record. For Hong Kong Disneyland on 7 October 2026 that meant 28 packages in 8 groups with their prices, the rating behind 192,032 reviews, 10 FAQs, the what's-included list, the opening hours and location, and a dozen traveller photos.

Why people pick it over a listing scrape:

- **Each package, not one "from" price.** You get the name, price, crossed-out price, group, badges and sale status of each option the activity sells.
- **Lists you can use as they are.** What's included, what isn't, eligibility, validity and how to redeem arrive as plain headings and strings. You don't have to parse a description to find them.
- **Things most Klook data leaves out**: the day-by-day itinerary of a tour with coordinates for each stop, the attractions a Klook Pass covers, and the good-to-know notes on refunds and confirmation.
- **Fast enough for a catalogue.** 150 activities came back in 32 seconds, 12 in 4 to 5.
- **$2.00 per 1,000 activities** on the Free plan and $1.40 on Business, whichever sections you switch on. There's no proxy to set up and no usage charge on top.

**BonCross Verified** means we tested this actor against the live site before release and kept the record:

- 32 of 32 live checks on its inputs and filters passed on 8 October 2026
- 14 activities run on 7 October 2026: 13 activities, 1 error row
- Charges matched the rows: 13 scraped, 1 checked
- An unknown or unavailable activity gets a row saying why, at the checked fee only

This actor describes an activity. It doesn't search for one and it doesn't price a date. If you need to find activities first, [Klook Search Scraper](https://apify.com/boncross/klook-search) lists them by keyword or city and gives you the ids to feed in here. Prices and places left for a particular day come from [Klook Activity Availability & Prices](https://apify.com/boncross/klook-availability), and the reviews themselves from [Klook Activity Reviews Scraper](https://apify.com/boncross/klook-reviews).

### What data can you extract from a Klook activity?

| | |
|---|---|
| 🏷️ Activity name and id | 🔗 Activity link and canonical link |
| ⭐ Rating out of five and its wording | Review count |
| Klook's review summary | 👥 Number booked |
| 🎟️ Package list with each package's price | Crossed-out list price |
| Package grouping and badges | Highlights per package |
| Sale status per package: on sale, suspended or coming soon | Combo flag and version per package |
| Ticket type per package: fixed date, open or flexible | Quantity limits per package |
| 💰 Lowest and highest price, price from and price to | 💱 Currency and symbol |
| ✅ What's included and what isn't | Each titled content block |
| 📄 Description sections | ❓ FAQs |
| 🗺️ Day-by-day tour itinerary with places and coordinates | Good-to-know notes: refunds, confirmation, validity |
| Attractions a Klook Pass covers | Klook Pass options and their choices |
| 📷 Traveller photo count and a sample of photo links | Reviews with photos |
| Related activities, with prices and ratings | Highlights of the activity |
| 🏙️ City, city id and country | Category, leaf category and sub-category id |
| 🖼️ Main image | Sold-out flag and first package id |

### How to scrape Klook activity details

There's no code to write. You fill in a form and download a table.

1. [Open a free Apify account](https://console.apify.com/sign-up) and go to [Klook Activity Details Scraper](https://apify.com/boncross/klook-activity-details).
2. Paste Klook activity links, one per line. An activity number on its own works too.
3. Leave the sections switched on, or turn off the ones you don't need to make the run quicker.
4. Press Start, and download the result as JSON, Excel or CSV when it finishes.

### ⬇️ Input

All you have to supply is the list of activities. Each section of the record has its own switch, and the price per activity is the same whichever you leave on. Only related activities are billed on top.

There's one limit, "Maximum activities for the whole run", which stops the run after that many activities (default 0, no limit). One activity is one row, so there's no per-target limit to set.

#### One activity with everything, related activities included

```json
{
  "activities": ["https://www.klook.com/en-GB/activity/39-hong-kong-disneyland-park-ticket/"],
  "includeRelated": true
}
```

#### Several activities, packages and prices only

```json
{
  "activities": ["39", "3021", "69622"],
  "includePackages": true,
  "includeDescription": false,
  "includeFaq": false,
  "includePhotos": false,
  "includeItinerary": false
}
```

#### A tour with its itinerary and good-to-know notes

```json
{
  "activities": ["https://www.klook.com/en-GB/activity/145211-sri-lanka-10-days-tour-with-4-star-hotels-and-private-transportation/"],
  "includeItinerary": true
}
```

`itinerary` lists each day's stops (pick-up, transport, attractions) with a description and the places visited, each with coordinates. `importantInfo` has the lead package's good-to-know notes. For a Klook Pass, `passAttractions` lists the attractions the pass covers.

#### Prices in Singapore dollars, description in Japanese

```json
{
  "activities": ["69622"],
  "currency": "SGD",
  "language": "ja_JP"
}
```

| Field | Notes |
|---|---|
| `activities` | Klook activity links or activity numbers. |
| `startUrls` | The same links loaded in bulk from a file, a Google Sheet or a remote list. Combined with `activities`. |
| `maxItems` | Stop after this many activities. Related-activity rows don't count. Default 0. |
| `includePackages`, `includeDescription`, `includeFaq`, `includePhotos`, `includeItinerary` | The sections of the record. All on by default. |
| `includeRelated` | Adds the activities Klook recommends alongside. Default off, charged separately. |
| `resolveActivityCard` | "Include the activity summary" in the form: booked count, city, category and main image. Default on. |
| `currency` | Default `USD`. Package prices are quoted in it. |
| `language` | Default `en_GB`. Sets the language of the description sections, the FAQ, the rating label and the review summary. |
| `maxConcurrency`, `delayMs` | Advanced. See below. |

#### For developers

- `includeDescription` also fills `importantInfo` and the top-level `highlights`. With it off, both are empty.
- `includeItinerary` and `resolveActivityCard` each add one lookup per activity. Turn `resolveActivityCard` off only if packages and prices are all you need.
- `packagesListedBy` says how Klook lists the activity's packages. `spu` is an activity sold as one product with options, where `firstPackageName` and the content groups describe its first package. `package` is one sold as separate packages, where `firstPackageName` is null. It's null when no package list was returned.
- `missingSections` names any section that couldn't be read on that run. Check it before you treat a row as complete.
- An id that Klook answers with no activity, or with an activity it doesn't offer in the requested language, is billed `activity-checked` in place of `activity-scraped`. An id that fails for any other reason isn't charged.
- `maxConcurrency` (default 64, from 1 to 64) sets how many requests run at once, and `delayMs` (default 0, up to 10,000) adds a pause before each. We'd change them only if a run reports errors.
- When Apify moves a run to another server part-way through, it resumes where it stopped. Rows already delivered aren't written or charged again.

### ⬆️ Output

One activity is one row, with the packages, description, FAQs and related activities nested inside it. Here's Hong Kong Disneyland, shortened where you see "…":

```json
{
  "input": "https://www.klook.com/en-GB/activity/39-hong-kong-disneyland-park-ticket/",
  "id": "39",
  "activityId": "39",
  "url": "https://www.klook.com/en-GB/activity/39-activity/",
  "name": "Hong Kong Disneyland Park Ticket",
  "firstPackageName": "Silver Magic Access Membership",
  "packagesListedBy": "spu",
  "rating": 4.8,
  "ratingScale": 5,
  "ratingText": "Fantastic",
  "reviewCount": 192032,
  "reviewCountText": "192.0K reviews",
  "aiSummaryTitle": "Reviews summary",
  "aiSummary": [
    {
      "id": "2074404",
      "type": "overall_impression",
      "title": "Overall impression",
      "content": "Visitors enjoyed convenient, quick entry with hassle-free QR code use. Many found booking and purchasing tickets easy and often at better prices. Park experiences included short queue times, clean facilities, and memorable shows, contributing to fun and magical visits."
    }
  ],
  "packageCount": 28,
  "lowestPrice": 15.79,
  "highestPrice": 656.55,
  "priceFrom": 15.79,
  "priceTo": 656.55,
  "priceListed": 659.15,
  "isSoldOut": false,
  "bookedCount": 8935773,
  "bookedText": "8M+ booked",
  "cityId": "2",
  "cityName": "Hong Kong",
  "countryId": "2",
  "countryName": "Hong Kong",
  "category": "Theme parks",
  "leafCategoryId": "416",
  "imageUrl": "https://res.klook.com/image/upload/activities/xzttq28djjq1k4ewfbeu.jpg",
  "canonicalUrl": "https://www.klook.com/en-GB/activity/39-hong-kong-disneyland-resort-hong-kong/",
  "subTitle": "Theme parks • Hong Kong",
  "subCategoryId": 415,
  "firstPackageId": "420090",
  "inclusions": [
    "1 Silver Magic Access Membership ticket(s)",
    "Valid admission days: Most weekdays excluding public holidays. All park visits require advance reservations via a valid membership card and are subject to limited quotas and the park’s operating schedule",
    "…"
  ],
  "exclusions": [
    "Other personal expenses"
  ],
  "highlights": [
    "Disney Halloween Time (18 Sep-1 Nov 2026)",
    "Experience magical discovery at World of Frozen",
    "Unmissable magical attractions and themed lands"
  ],
  "contentGroups": [
    {
      "heading": "What's included",
      "sectionTitle": "About this package",
      "sectionType": "",
      "items": [
        "1 Silver Magic Access Membership ticket(s)",
        "…"
      ]
    },
    "…"
  ],
  "currency": "USD",
  "currencySymbol": "US$",
  "packageGroups": [
    {
      "groupId": 34477,
      "groupName": "Limited-time offers",
      "groupDesc": "",
      "groupTag": "Klook recommended"
    },
    "…"
  ],
  "packages": [
    {
      "packageId": "773086",
      "packageName": "Midweek Getaway Ticket (Wednesday entry)",
      "packageDesc": "Save more with a special rate on a fixed Wednesday date!",
      "groupId": 34477,
      "groupName": "Limited-time offers",
      "groupTag": "Klook recommended",
      "price": 70.09,
      "priceText": "US$ 70.09",
      "priceListed": 85.25,
      "hasStock": true,
      "isCombo": false,
      "comboVersion": null,
      "bestSkuId": "828952554941",
      "highlights": [
        "Valid on the selected date",
        "No cancellation",
        "Instant confirmation"
      ],
      "ticketType": null,
      "ticketTypeCode": null,
      "minQuantity": null,
      "maxQuantity": null,
      "saleStatus": "on_sale",
      "saleStatusCode": 1,
      "saleStatusText": null,
      "onSaleFrom": null,
      "spec": null
    },
    "…"
  ],
  "descriptionSections": [
    {
      "title": "Attraction info",
      "sectionType": "attraction_info",
      "components": [
        {
          "type": "address",
          "data": {
            "title": "Location",
            "address": {
              "address": "22.312957,114.040701",
              "address_desc": "Hong Kong Disneyland",
              "…": "…"
            },
            "…": "…"
          }
        },
        "…"
      ]
    },
    "…"
  ],
  "importantInfo": [
    "No cancellations, or refunds can be made",
    "You'll get confirmation within 48 hours. If you don't receive a confirmation email, reach out to our customer support.",
    "…"
  ],
  "itinerary": null,
  "itineraryDisclaimers": null,
  "passAttractions": null,
  "faq": [
    {
      "question": "Which ticket type has access to \"World of Frozen\"?",
      "answer": "All admission tickets, including 1-Day and 2-Day Tickets, can visit \"World of Frozen\" and any other attractions during the Park's opening hour."
    },
    "…"
  ],
  "faqUrl": "https://www.klook.com/en-GB/web3/activity/39/faq/",
  "photoCount": 311830,
  "reviewsWithPhotos": 90661,
  "samplePhotos": [
    "https://cdn.klook.com/user_review/product/1949722/8ca56b67-808b-4f36-4ec6-6cf170bfe91d.0*1200.jpeg",
    "https://cdn.klook.com/user_review/product/1949722/0b60d50e-a7ab-432d-501f-2892c2042f1a.1200*0.jpeg",
    "…"
  ],
  "relatedCount": null,
  "related": [],
  "missingSections": [],
  "scrapedAt": "2026-10-07T20:33:43.052Z"
}
```

`descriptionSections` keeps the page's own structure. Each section has a `title`, a `sectionType` and a list of `components`, and each component has a `type` (opening hours, location, text, highlights) and its content as Klook provides it, display settings and icon links included. The shape varies by component type and by activity. If you want plain lists, read `contentGroups`, `inclusions` and `exclusions`: the same kind of content as simple headings and strings.

`inclusions` and `exclusions` describe the package Klook shows first, the one named by `firstPackageId` and `firstPackageName`. Other packages include different things, and `contentGroups` holds each titled block (here What's included, Not included, Eligibility, Additional information, Usage validity, Reservation required, How to redeem, Address and How to get there).

### How many activities can you get, and how fast?

| Run | Rows | Packages | Time | Price |
|---|---|---|---|---|
| One activity with all sections and 12 related activities on | 1 | 30 | 2 s | $0.0076 |
| Three activities (Universal Studios Japan, a Mt Fuji tour, a Japan eSIM), default options | 3 | 174 | 8 s | $0.008 |
| Twelve activities (theme parks, tours, an eSIM, a pass), default options | 12 | 277 | 4 to 5 s | $0.026 |
| 150 products from Klook search results (incl. 10 hotel cards), default options | 150 | 462 | 32 s | $0.302 |

Times are whole runs, start to finish. That's about 280 activities a minute, and a one-hour run covers well over 10,000.

Related activities stop at the dozen Klook recommends.

### How much does it cost to scrape Klook activity details?

| Event | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| `actor-start`, once per run | $0.002 | $0.002 | $0.002 | $0.002 |
| `activity-scraped`, per activity | $0.002 | $0.0018 | $0.0016 | $0.0014 |
| `activity-related`, per related activity, only when that option is on | $0.0003 | $0.00027 | $0.00024 | $0.00021 |
| `activity-checked`, per id Klook answered with no activity or with an activity it does not offer in the requested language (the row says which), instead of `activity-scraped` | $0.0005 | $0.0005 | $0.0005 | $0.0005 |

Enterprise plans pay the Business price.

**$2.00 per 1,000 activities** on the Free plan, $1.40 on Business. It's the whole price, with no proxy charges or usage fees added, and it doesn't change with the sections you turn on.

- One activity with its 12 related activities: $0.002 + $0.002 + 12 × $0.0003 = **$0.0076** ($0.00592 on Business).
- A hundred activities without related: $0.002 + 100 × $0.002 = **$0.202** ($0.142 on Business).

Apify gives Free plan accounts $5 of credits each month, which is about 2,400 activity records at the size of the second example.

### FAQ

#### Do I need proxies or a Klook account?

There's nothing to configure. You don't need an account, and no proxy charge is added to the per-activity price.

#### Where do I find the activity number?

In the address of the activity page: 39 in `klook.com/en-GB/activity/39-hong-kong-disneyland-park-ticket/`. Paste the whole address if that's easier.

#### Why is `priceFrom` lower than any ticket I can see?

It's the cheapest package the activity sells, and many activities sell add-ons next to admission. On Hong Kong Disneyland the lowest price was US$15.79, a child meal set, while the 1-Day Ticket was US$78.69. Klook's own listing card shows the same "from" figure. Read `packages` for the price of each option.

#### Can I get the price for a specific date?

Not from this actor. Package prices here are Klook's headline price per option. Dated prices and stock per time slot are what Klook Activity Availability & Prices returns.

#### Does the language setting translate everything?

Part of it. The description sections, FAQ, rating label and review summary follow the language you set (checked in Japanese on 7 October 2026). The activity name, category, city, package names and the included and not-included lists stay in English.

#### Why did I get a row with an `error` and nothing else?

Klook lists some activities without offering them in the language you asked for. That includes a sold-out or withdrawn listing with no packages. You get its id, its link and a note saying it isn't available, at the `activity-checked` fee. An id Klook doesn't know at all is reported the same way. Where Klook gives a message of its own, the note quotes it. An activity that couldn't be read at all gets a row saying what happened and what to do about it, and that row is free.

#### What won't it return?

- `highlights` at the top level is filled only where Klook publishes a Highlights block: 6 of 18 activities tested on 7 October 2026, all attraction tickets and passes. Each package has its own `highlights` either way.
- Itineraries are published for part of Klook's tours only. Others leave `itinerary` empty.
- Photos are a sample, 12 links on most activities, plus the full counts. In one check 12 of 13 activities had them.
- A package's ticket type and quantity limits are given for tours, passes and eSIMs. Ticket-style packages leave them empty. Sale status and combo flags are given where Klook lists them.
- The number booked, city, country and main image come from the activity card when Klook recommends the activity elsewhere, and from the activity page otherwise. The category and card subtitle come from the card only.
- A Klook Pass lists each option it sells (204 options across the six Klook Passes tested, 74 for Singapore) with the option's choices in `spec`. `spec` is empty for other activities.
- Hotel cards that Klook search returns aren't activities and come back with empty sections. Use the `activityId` of an `activity` row.
- If one section fails, you still get the row, and `missingSections` lists what's absent.

#### Is it legal to scrape Klook?

Everything the actor reads is on Klook's public activity pages, visible without logging in, and none of it is personal data. Scraping public data is generally lawful. You're responsible for how you use it and for respecting Klook's terms and the law that applies to you.

### Feed a catalogue, or call it from code

The usual pipeline is two steps: Klook Search Scraper produces activity ids for a city, and this actor turns each id into a record for your catalogue, comparison site or pricing audit. Re-run it on an Apify Schedule and you can see when an operator adds a package or changes a headline price.

`POST https://api.apify.com/v2/acts/boncross~klook-activity-details/run-sync-get-dataset-items` with the input JSON as the body runs it and returns the records in the same request. For an AI agent, add the Apify MCP server at `mcp.apify.com` and the actor appears as the tool `boncross/klook-activity-details`. It can then answer "what does this ticket include?" from the record.

### More from BonCross

- [Klook Activity Availability & Prices](https://apify.com/boncross/klook-availability): Klook availability and prices.
- [Klook Activity Reviews Scraper](https://apify.com/boncross/klook-reviews): Every review Klook shows for an activity.
- [Trip.com Attraction Reviews Scraper](https://apify.com/boncross/tripcom-reviews): Trip.com reviews for any attraction.
- [KKday Product Availability & Prices](https://apify.com/boncross/kkday-availability): KKday availability and prices for any product.
- [Trip.com Hotel Search Scraper](https://apify.com/boncross/tripcom-hotel-search): Every hotel Trip.com lists for a destination and your dates.
- [Accor Hotel Details Scraper](https://apify.com/boncross/accor-hotel-details): Full Accor hotel records.

### Your feedback

Is there something on a Klook activity page that isn't in the record? Open an issue on the Issues tab in Apify Console and paste the link. We read them all, and missing fields are what we add first.

# Changelog

This Actor's version history is a separate document: https://apify.com/boncross/klook-activity-details/changelog.md

# Actor input Schema

## `activities` (type: `array`):

Klook activity URLs, or activity ids. The activity number is the one in the address, such as 39 for Hong Kong Disneyland.

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

Klook page addresses, with the option to load them in bulk from a file, a Google Sheet or a remote list. Use this when you have more links than you want to paste. Combined with anything in the list above.

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

Stop after this many activities have been returned. Related-activity rows do not count. 0 means no limit.

## `includePackages` (type: `boolean`):

List every bookable option with its name, price and highlights.

## `includeDescription` (type: `boolean`):

Add the activity description sections as they appear on the page. Also adds the lead package’s “good to know” notes (refunds, confirmation, validity) as importantInfo.

## `includeFaq` (type: `boolean`):

Add the question and answer pairs shown on the activity.

## `includePhotos` (type: `boolean`):

Add how many traveller photos the activity has and a sample of them.

## `includeItinerary` (type: `boolean`):

For tours, the day-by-day itinerary: each stop with its description and the places visited, with coordinates. Klook publishes itineraries for part of its tours; others leave the field empty. One extra lookup per activity.

## `includeRelated` (type: `boolean`):

Add the activities Klook recommends alongside this one, with their prices and ratings. Charged separately.

## `resolveActivityCard` (type: `boolean`):

Fill in the activity's name, booked count, city, category and main image. Adds a moment per activity. Leave on unless you only need packages and prices.

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

ISO currency code. Package prices come back quoted in it. Default USD.

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

Klook locale code, such as en_GB, en_US or ja_JP. It sets the language of the description sections, FAQ, rating label and review summary; names, packages and the included lists stay in English.

## `maxConcurrency` (type: `integer`):

How many requests run at once across the whole run. The default is the fastest level measured clean; lower it only if a run reports refusals or errors.

## `delayMs` (type: `integer`):

Optional pause before each call, in milliseconds. 0 (the default) runs as fast as the parallel limit allows.

## Actor input object example

```json
{
  "activities": [
    "https://www.klook.com/en-GB/activity/39-hong-kong-disneyland-park-ticket/"
  ],
  "startUrls": [],
  "maxItems": 0,
  "includePackages": true,
  "includeDescription": true,
  "includeFaq": true,
  "includePhotos": true,
  "includeItinerary": true,
  "includeRelated": false,
  "resolveActivityCard": true,
  "currency": "USD",
  "language": "en_GB",
  "maxConcurrency": 64,
  "delayMs": 0
}
```

# Actor output Schema

## `dataset` (type: `string`):

Klook activities: every row the run returned.

## `stats` (type: `string`):

Counts for the run: what was resolved, fetched, filtered and returned.

# 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 = {
    "activities": [
        "https://www.klook.com/en-GB/activity/39-hong-kong-disneyland-park-ticket/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("boncross/klook-activity-details").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 = { "activities": ["https://www.klook.com/en-GB/activity/39-hong-kong-disneyland-park-ticket/"] }

# Run the Actor and wait for it to finish
run = client.actor("boncross/klook-activity-details").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 '{
  "activities": [
    "https://www.klook.com/en-GB/activity/39-hong-kong-disneyland-park-ticket/"
  ]
}' |
apify call boncross/klook-activity-details --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,boncross/klook-activity-details"
        }
    }
}
```

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/hsZerqzfjucDVJyHl/builds/LsBHsOQdMNH8uztkR/openapi.json
