# Klook Activities Scraper: Tours, Tickets, Reviews & Price Drops (`getascraper/klook-activities-scraper`) Actor

Scrape Klook tours, attraction tickets and activities by city, country or pasted link. Filter by price, rating and free cancellation, add packages, customer reviews and day-by-day calendar prices, and track price drops and sell-outs. Export JSON, CSV or Excel. No login or API key.

- **URL**: https://apify.com/getascraper/klook-activities-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Travel, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 klook rows

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 Activities Scraper: Tours, Tickets, Reviews & Price Drops

<table width="100%" style="margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#FFF4EC;border:1px solid #FBD3B8;border-top:4px solid #E8590C;border-radius:12px 12px 0 0">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Every Klook tour and ticket in a city, with prices, reviews and dates</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Type a city or country name and get the activities on sale, ready to filter and sort. Add full package details, customer reviews and day-by-day prices when you need them. Schedule it and only price drops and sell-outs come back.</span>
</td>
</tr>
</table>
<table width="100%" style="margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FBD3B8;border-radius:0 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C2410C">🌏 Names, not IDs</span><br>
<span style="font-size:12px;color:#57534E">Type Osaka or Japan, or paste a Klook link. No numeric city codes to look up.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FBD3B8;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C2410C">📦 Packages in full</span><br>
<span style="font-size:12px;color:#57534E">Every option with its price, what is included, meeting point, itinerary and cancellation rules.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FBD3B8;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C2410C">📅 Prices by date</span><br>
<span style="font-size:12px;color:#57534E">Calendar prices and stock per package, with the cheapest and the first bookable date.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FBD3B8;border-left:none;border-radius:0 0 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#C2410C">🔔 Only what changed</span><br>
<span style="font-size:12px;color:#57534E">Price drops, sell-outs and back-on-sale activities, with the old value next to the new one.</span>
</td>
</tr>
</table>

**Scrape Klook tours, attraction tickets and experiences and download them as JSON, CSV or Excel.** Search by city or country name, by keyword, or paste Klook links. Each row gives the title, price, rating, review count, how many people booked it, cancellation and confirmation labels, and photos. Optional extras add package details, customer reviews and calendar prices. No login, no account and no key.

***

### 🔍 What can you do with it?

- **I publish travel guides or run a deals site** and want the best-rated, best-priced activities in a destination, sorted and filtered, without copying listings by hand.
- **I sell or resell tours** and need to see what rivals in my city charge, which options they offer and how their reviews read.
- **I track prices** and want a weekly list of activities that dropped in price, sold out or came back on sale.
- **I plan a trip or run a travel agency** and want the cheapest bookable date for a ticket over the next weeks.
- **I do market research** and need review counts, ratings and booking numbers by city and category.

***

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FFF4EC;border:1px solid #FBD3B8;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#E8590C;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Say where and what</span><br>
<span style="font-size:12px;color:#57534E">Type cities or countries, add keywords, or paste Klook activity, destination, category or search links.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF4EC;border:1px solid #FBD3B8;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#E8590C;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Filter and add extras</span><br>
<span style="font-size:12px;color:#57534E">Set price, rating and cancellation filters. Switch on details, reviews or calendar prices if you need them.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF4EC;border:1px solid #FBD3B8;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#E8590C;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Download or schedule</span><br>
<span style="font-size:12px;color:#57534E">Export the table, or turn on monitor mode and schedule the run to get only the changes.</span>
</td>
</tr>
</table>

**Good to know before you start**

- The pre-filled example (Osaka, 20 activities) works as is. Raise the limit when you are happy with the filters.
- Klook lists tours and attraction tickets separately. By default both are searched and shown side by side. Pick one side with Listing type.
- Details, reviews and calendar prices are off by default. Each one adds requests per activity, so turn on only what you need.
- Reviews come back as their own rows next to the activity rows. The Output tab has a view for each kind.
- Prices follow the currency and language you choose. Klook shows market-specific offers, so the starting price can differ by language.
- To track a fixed list, paste the activity links or IDs and turn on monitor mode.

***

### ⚙️ Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| Destinations | array of text | No | City or country names such as `Osaka`, `Bali` or `Japan`. A name Klook does not know is searched as a keyword. |
| Search keywords | array of text | No | For example `snorkeling` or `food tour`. With destinations set, each keyword is searched inside each destination. |
| Klook links | array of URLs | No | Activity, destination, city, category or search links. |
| Activity IDs | array of text | No | Numeric Klook activity IDs, handy for tracking a fixed set. |
| Listing type | enum | No | Both tours and attraction tickets, tours only, or attractions only. |
| Categories | array of text | No | Category names such as `Theme parks`, `Museums` or `Day trips`. |
| Bookable on | date | No | Keep only activities that can be booked for this date. |
| Minimum / maximum price | number | No | Starting price range in the chosen currency. 0 means no limit. |
| Minimum rating | number | No | Stars out of 5. |
| Minimum reviews | integer | No | Skip brand-new listings. |
| Hide sold-out | boolean | No | Leave out sold-out activities. |
| Free cancellation only | boolean | No | Keep activities with Klook's free cancellation label. |
| Instant confirmation only | boolean | No | Keep activities that confirm immediately. |
| Required labels | array of text | No | Labels such as `Private tour`, `Hotel pick-up` or `Small group`. |
| Add full details | boolean | No | Adds description, address, photos, FAQ, review summary and every package in depth. Off by default. |
| Packages per activity | integer | No | How many packages are read in depth. |
| Add customer reviews | boolean | No | Delivers reviews as separate rows. Off by default. |
| Reviews per activity | integer | No | The most reviews delivered per activity. Klook shows at most the latest 2000. |
| Review order | enum | No | Newest, most relevant, highest or lowest rated. |
| Reviews with photos only | boolean | No | Keep reviews that have traveler photos. |
| Add calendar prices | boolean | No | Adds prices and stock per package and date. Off by default. |
| Calendar days | integer | No | How many days the calendar covers. |
| Compare currencies | array of text | No | Extra currency codes. Each activity gets its starting price in each one. |
| Monitor mode | boolean | No | Return only new or changed activities since the last run of the same watchlist. |
| Watchlist name | text | No | Name of the saved memory. Use one per saved search. |
| Ignore price moves below (%) | number | No | Small price changes are skipped. |
| Review jump threshold | integer | No | Report an activity when its review count grows by this much. |
| Maximum activities | integer | No | Upper limit of activity rows. The default is 20. |
| Activities to check | integer | No | How many matching activities are looked at before the run stops. In monitor mode this is also the size of the watchlist. |
| Sort by | enum | No | Relevance, most booked, highest rated, newest, lowest price, highest price or most reviews. |
| Currency | enum | No | The currency for all prices and price filters. |
| Language | enum | No | Language of titles, descriptions and translated reviews. |
| Proxy | object | No | Connection settings. The default works for most runs. |

***

### 📦 Output

Each activity is one row. Fields with no data are left out, never filled with placeholders.

```json
{
  "recordType": "activity",
  "activityId": 46604,
  "url": "https://www.klook.com/en-US/activity/46604-universal-studios-japan-e-ticket-osaka-qr-code-direct-entry/",
  "title": "Universal Studios Japan Studio Pass",
  "productType": "attractions",
  "destination": "Osaka, Japan",
  "price": 59.4,
  "currency": "USD",
  "priceText": "US$ 59.40",
  "isFromPrice": true,
  "discountLabels": ["50% off", "3GB eSIM per booking", "Freebies"],
  "soldOut": false,
  "rating": 4.8,
  "reviewCount": 90386,
  "bookedText": "6M+ booked",
  "instantConfirmation": true,
  "labels": ["Book now for today", "Instant confirmation"],
  "imageUrl": "https://res.klook.com/image/upload/activities/q0mcamsusra4q1y6nzvp.jpg"
}
```

#### 📋 Data table

| Field | Type | Description |
| --- | --- | --- |
| recordType | string | `activity` or `review`. |
| activityId, url, title | number, string | The activity and its Klook link. |
| productType | string | `tours` or `attractions`. |
| destination | string | The destination you searched for. |
| price, originalPrice, currency, priceText | number, string | Starting price per person, the crossed-out price when there is a discount, and Klook's own price text. |
| isFromPrice, discountLabels | boolean, array | Whether the price is a "from" price, and the deal labels shown. |
| soldOut, rating, reviewCount | boolean, number | Availability, star rating and review count. |
| bookedText, bookedCount | string, number | How many people booked it. The exact count is given for tours. |
| freeCancellation, instantConfirmation, labels | boolean, array | Cancellation and confirmation labels and the other tags Klook shows. |
| imageUrl, imageUrls | string, array | Photos from the listing. |
| changeType, changes | string, array | Monitor mode: `new`, `price_drop`, `price_increase`, `sold_out`, `back_on_sale` or `reviews_jump`, with a list of what changed. |
| previousPrice, previousSoldOut, previousReviewCount, priceChangePercent | number, boolean | The earlier values next to the new ones. |
| firstSeenAt, lowestPriceSeen, highestPriceSeen | string, number | Monitor mode history for the activity. |
| description, highlights, goodToKnow, faq | string, array | With full details: the text parts of the activity page. |
| city, country, address, latitude, longitude | string, number | With full details: where the activity is. |
| images, languages, departureCities, categoryPath | array | With full details. |
| aiReviewSummary | array | With full details: Klook's summary of what travelers say. |
| packages | array | With full details: each package with options, price, inclusions, exclusions, eligibility, meeting points, itinerary, cancellation and change rules. |
| calendar, cheapestDate, cheapestPrice, cheapestPackageName | array, string, number | With calendar prices: prices and stock per date and package, and the cheapest date. |
| firstAvailableDate, availableDateCount, unavailableDates | string, number, array | With calendar prices: when you can book, and the days in the window with no inventory. |
| currencyPrices | array | With compare currencies: the starting price in each extra currency. |

Review rows (`recordType: review`) carry the activity title and link, star rating, text, translation, language, date, traveler name as shown by Klook, photos, the operator reply, likes and the package booked.

**What is not included:** Klook does not publish the traveler type on reviews, and shows at most the latest 2000 reviews per activity. Open-dated tickets have no day-by-day calendar, so they show per-package dates where Klook lists them.

***

### 💰 Pricing

Pay per result. An empty run costs nothing and there are no subscriptions. Every activity row and every review row counts as one result. Details and calendar prices are part of the activity row, so they cost nothing extra. Reviews are separate rows, so 20 activities with 20 reviews each is 420 results. See the pricing box at the top of this page for the current rates.

**Free plan:** up to 25 rows per run, 3 runs per day, with a 30 minute pause between runs.

***

### ⭐ Enjoying Klook Activities Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#FFF4EC;border:1px solid #FBD3B8;border-left:5px solid #E8590C;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Stop copying Klook listings by hand and get a clean table of prices, reviews and price changes.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other travel teams find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#E8590C;border:1px solid #FBD3B8;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/klook-activities-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

***

### ✨ Tips and best practices

- Start with the pre-filled 20 activities to see the shape of the data, then raise the limit.
- Combine keywords with a destination to find, for example, every snorkeling trip in Bali.
- For the best deals, set a minimum rating and review count, then sort by lowest price. Price sorting checks the whole pool, so raise Activities to check for big cities.
- Switch on reviews with a small per-activity limit first. Reviews are separate rows, so the row count grows quickly.
- For a weekly price watch, keep the same Watchlist name and the same searches on every scheduled run. The first run sets the baseline and returns everything it finds.
- If you change the currency, the watchlist starts a fresh baseline instead of reporting false price changes.

***

### ❓ FAQ

##### Does it need a Klook account or API key?

No. It reads only public information, so there is nothing to log in to and no key to enter.

##### How do I get only price drops and sell-outs every week?

Turn on Monitor mode, give the search a Watchlist name and schedule the run. Each run returns new activities and the ones whose price, sold-out state or review count moved, with the previous value.

##### Can I get reviews as well as prices?

Yes. Turn on Add customer reviews and set how many per activity. Reviews are delivered as their own rows with text, translation, rating, date, photos and the operator reply.

##### Can I see the cheapest date for a ticket?

Yes. Turn on Add calendar prices. Each activity gets prices and stock per package and date, the cheapest date and the first bookable date.

##### Why does the price change when I switch the language?

Klook shows market-specific offers. Tours with a Chinese or Korean guide, for example, can start at a different price than English ones.

***

### 🛡️ Disclaimers and support

This Actor is an independent tool and is not affiliated with Klook. It collects publicly available listing information. You are responsible for using the data in line with the law and Klook's terms. Questions or feature ideas are welcome in the Issues tab of this Actor.

***

### 🔗 Other actors

- [Ostrovok Hotels Scraper: Отели Островок](https://apify.com/getascraper/ostrovok-hotels-scraper) ↗ - Hotel listings and rates from Ostrovok for the stays that go with the tours.
- [Trip.com & Ctrip 携程酒店 Hotel Scraper: Prices, Reviews, Changes](https://apify.com/getascraper/ctrip-hotel-rate-intelligence) ↗ - Hotel prices and reviews from Trip.com and Ctrip.
- [Ctrip Attractions & Tickets Scraper 携程景点门票: Prices and Ratings](https://apify.com/getascraper/ctrip-attractions-ticket-catalog) ↗ - Attraction tickets with prices and ratings from Ctrip.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/klook-activities-scraper/changelog.md

# Actor input Schema

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

Type city or country names such as Tokyo, Osaka, Bali or Japan and the Actor finds the matching Klook destination for you, no numeric IDs needed. Names that Klook does not recognise are reported in the run summary.

## `searchQueries` (type: `array`):

Optional keywords such as universal studios, snorkeling or food tour. When destinations are also set, each keyword is searched inside each destination; without destinations it searches all of Klook.

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

Paste Klook links: activity pages, city or country destination pages, category list pages or search result links. Each link is turned into the matching activity list or a single activity.

## `activityIds` (type: `array`):

Optional numeric Klook activity IDs, for example 46604. Handy for tracking a fixed set of activities in monitor mode.

## `listingType` (type: `string`):

Klook lists attraction tickets and passes separately from tours and experiences. Pick one side or search both.

## `categories` (type: `array`):

Optional category names such as Theme parks, Museums, Day trips or Food tours. Names are matched against Klook's own category list for the destination. Leave empty for all categories.

## `availableOn` (type: `string`):

Only keep activities that can be booked for this date. Leave empty to skip the date check.

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

Hide activities whose starting price is below this amount, in the currency chosen under Output and limits. 0 means no minimum.

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

Hide activities whose starting price is above this amount, in the currency chosen under Output and limits. 0 means no maximum.

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

Keep only activities rated at least this many stars out of 5. 0 keeps everything, including activities with no reviews yet.

## `minReviews` (type: `integer`):

Keep only activities with at least this many reviews. Useful to skip brand-new listings.

## `hideSoldOut` (type: `boolean`):

Skip activities that Klook marks as sold out.

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

Keep only activities that carry Klook's free cancellation label.

## `instantConfirmationOnly` (type: `boolean`):

Keep only activities that confirm the booking immediately.

## `requiredTags` (type: `array`):

Optional Klook labels an activity must show, for example Private tour, Hotel pick-up, Small group or English guided. Matching ignores upper and lower case and uses the language you picked.

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

Adds highlights, description, address and coordinates, photos, the list of packages with prices, inclusions, exclusions, meeting point, cancellation rules and a review summary to each activity. Slower, because several extra pages are read per activity.

## `maxPackagesPerActivity` (type: `integer`):

How many packages (ticket or tour options) are read in depth for details and calendar prices. Raise it for activities with many options.

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

Delivers customer reviews as separate rows with the text, translation, star rating, date, language, photos and the operator's reply when there is one.

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

The most reviews delivered for each activity. Klook exposes at most the latest 2000 reviews per activity.

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

Newest first is best for tracking fresh feedback. Most relevant matches Klook's default order. In monitor mode reviews are always read newest first so only unseen ones are delivered.

## `reviewsWithPhotosOnly` (type: `boolean`):

Keep only reviews that have traveler photos.

## `includeAvailability` (type: `boolean`):

Adds a day-by-day price and stock calendar for each package, the cheapest date, the first bookable date and the days with no inventory. Activities without a date calendar (open-dated tickets) are marked as such.

## `availabilityDays` (type: `integer`):

How many days the calendar covers, counting from today. If you picked a date under Filters, the calendar starts on that date instead.

## `compareCurrencies` (type: `array`):

Optional list of currency codes such as JPY or EUR. Each activity gets its starting price in every listed currency next to the main one. One small extra request per currency and activity.

## `monitorMode` (type: `boolean`):

Only delivers activities that are new or changed since the last run of the same watchlist: price drops, price increases, sold out, back on sale and review count jumps. Unchanged activities are skipped, which also keeps the run cheap. Schedule it to track a market.

## `watchlistName` (type: `string`):

Name of the saved memory used by monitor mode. Use a different name for each separate list you track so their baselines do not mix.

## `minPriceChangePercent` (type: `number`):

Price moves smaller than this percentage are ignored. Currency rounding can move prices by a fraction of a percent.

## `reviewJumpThreshold` (type: `integer`):

Report an activity when its review count grows by at least this many reviews since the last run.

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

The run stops after this many activity rows. Review rows are counted separately by their own per-activity limit.

## `maxActivitiesToScan` (type: `integer`):

How many matching activities are looked at before the run stops. Filters and monitor mode skip activities, so this can be higher than the number delivered.

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

Relevance, most booked, highest rated and newest are sorted by Klook before collecting. Price and most reviews sorting read the whole checked pool (see the scan limit below) before delivering, so they take a little longer but are always exact.

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

Currency for all prices and for the price filters.

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

Language of titles, descriptions and translated review text. Klook shows market-specific offers, so the starting price can differ by language (for example tours with a Chinese or Korean guide).

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

Runs work without a proxy. If Klook starts refusing requests the Actor switches to Apify proxies on its own. Set your own proxy here only if you need a specific one.

## Actor input object example

```json
{
  "destinations": [
    "Osaka"
  ],
  "searchQueries": [],
  "startUrls": [],
  "activityIds": [],
  "listingType": "all",
  "categories": [],
  "minPrice": 0,
  "maxPrice": 0,
  "minRating": 0,
  "minReviews": 0,
  "hideSoldOut": false,
  "freeCancellationOnly": false,
  "instantConfirmationOnly": false,
  "requiredTags": [],
  "includeDetails": false,
  "maxPackagesPerActivity": 5,
  "includeReviews": false,
  "maxReviewsPerActivity": 20,
  "reviewSort": "newest",
  "reviewsWithPhotosOnly": false,
  "includeAvailability": false,
  "availabilityDays": 30,
  "compareCurrencies": [],
  "monitorMode": false,
  "watchlistName": "default",
  "minPriceChangePercent": 1,
  "reviewJumpThreshold": 50,
  "maxResults": 20,
  "maxActivitiesToScan": 100,
  "sortBy": "relevance",
  "currency": "USD",
  "language": "en_US",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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": [
        "Osaka"
    ],
    "searchQueries": [],
    "startUrls": [],
    "activityIds": [],
    "listingType": "all",
    "categories": [],
    "minPrice": 0,
    "maxPrice": 0,
    "minRating": 0,
    "minReviews": 0,
    "hideSoldOut": false,
    "freeCancellationOnly": false,
    "instantConfirmationOnly": false,
    "requiredTags": [],
    "includeDetails": false,
    "maxPackagesPerActivity": 5,
    "includeReviews": false,
    "maxReviewsPerActivity": 20,
    "reviewSort": "newest",
    "reviewsWithPhotosOnly": false,
    "includeAvailability": false,
    "availabilityDays": 30,
    "compareCurrencies": [],
    "monitorMode": false,
    "watchlistName": "default",
    "minPriceChangePercent": 1,
    "reviewJumpThreshold": 50,
    "maxResults": 20,
    "maxActivitiesToScan": 100,
    "sortBy": "relevance",
    "currency": "USD",
    "language": "en_US",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/klook-activities-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": ["Osaka"],
    "searchQueries": [],
    "startUrls": [],
    "activityIds": [],
    "listingType": "all",
    "categories": [],
    "minPrice": 0,
    "maxPrice": 0,
    "minRating": 0,
    "minReviews": 0,
    "hideSoldOut": False,
    "freeCancellationOnly": False,
    "instantConfirmationOnly": False,
    "requiredTags": [],
    "includeDetails": False,
    "maxPackagesPerActivity": 5,
    "includeReviews": False,
    "maxReviewsPerActivity": 20,
    "reviewSort": "newest",
    "reviewsWithPhotosOnly": False,
    "includeAvailability": False,
    "availabilityDays": 30,
    "compareCurrencies": [],
    "monitorMode": False,
    "watchlistName": "default",
    "minPriceChangePercent": 1,
    "reviewJumpThreshold": 50,
    "maxResults": 20,
    "maxActivitiesToScan": 100,
    "sortBy": "relevance",
    "currency": "USD",
    "language": "en_US",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/klook-activities-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": [
    "Osaka"
  ],
  "searchQueries": [],
  "startUrls": [],
  "activityIds": [],
  "listingType": "all",
  "categories": [],
  "minPrice": 0,
  "maxPrice": 0,
  "minRating": 0,
  "minReviews": 0,
  "hideSoldOut": false,
  "freeCancellationOnly": false,
  "instantConfirmationOnly": false,
  "requiredTags": [],
  "includeDetails": false,
  "maxPackagesPerActivity": 5,
  "includeReviews": false,
  "maxReviewsPerActivity": 20,
  "reviewSort": "newest",
  "reviewsWithPhotosOnly": false,
  "includeAvailability": false,
  "availabilityDays": 30,
  "compareCurrencies": [],
  "monitorMode": false,
  "watchlistName": "default",
  "minPriceChangePercent": 1,
  "reviewJumpThreshold": 50,
  "maxResults": 20,
  "maxActivitiesToScan": 100,
  "sortBy": "relevance",
  "currency": "USD",
  "language": "en_US",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call getascraper/klook-activities-scraper --silent --output-dataset

```

## MCP server setup

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