# KKday Tours Scraper (`shahidirfan/kkday-tours-scraper`) Actor

Scrape KKday tours, travel activities, sightseeing attractions, day trips, and vacation experiences. Extract tour prices, destinations, ratings, reviews, itineraries, availability, and booking links. Ideal for travel data extraction, price tracking, tourism research, and AI datasets.

- **URL**: https://apify.com/shahidirfan/kkday-tours-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does KKday Tours Scraper do?

KKday Tours Scraper collects tour, activity, and attraction-ticket listings from KKday category pages. Paste one or more KKday category listing URLs, choose how the listings should be sorted, set a result limit, and the Actor returns a clean dataset with product titles, prices, ratings, booking counts, images, destinations, and product links. It works with KKday locale paths such as `/en/`, `/zh-tw/`, `/ja/`, `/ko/`, and `/en-sg/`, so you can collect listings in the language your audience reads.

Use it for travel market research, activity and attraction price monitoring, destination content, competitor tracking, or building AI-ready datasets from public KKday listings.

### Why use KKday Tours Scraper?

- **Structured listing data** - Collect product titles, descriptions, prices, currencies, ratings, booking counts, and product URLs without manual copy-paste.
- **Localized results** - Use a locale URL to collect listings in a specific language, including translated product titles and category names.
- **Flexible ordering** - Sort by featured, most popular, price low to high, price high to low, highest rated, or newest.
- **Multi-listing runs** - Process several category listing URLs in one run, across different destinations and locales.
- **Pagination built in** - The Actor follows each listing page by page until it reaches your result limit or the last page.
- **Automation-ready output** - Export results to JSON, CSV, Excel, XML, or send them to other tools through Apify integrations.

### What data can you extract from KKday?

| Field            | Description                                                    |
| ---------------- | -------------------------------------------------------------- |
| `product_id`     | KKday product identifier                                       |
| `title`          | Product title                                                  |
| `description`    | Short product introduction                                     |
| `url`            | Full product page URL                                          |
| `image`          | Primary product image URL                                      |
| `images`         | All product image URLs                                         |
| `price`          | Lowest price for the product                                   |
| `price_min`      | Lowest price for the product                                   |
| `price_max`      | Highest price for the product                                  |
| `original_price` | Official price before discount                                 |
| `currency`       | Currency code for the price                                    |
| `rating`         | Average product rating from 0 to 5                             |
| `rating_count`   | Number of ratings for the product                              |
| `orders`         | Booking count label such as `300K+`                            |
| `destinations`   | Destinations linked to the product, with code and name         |
| `display_tags`   | Labels shown on the listing card, such as Instant Confirmation |
| `category_name`  | Location and category name of the listing                      |
| `location`       | Location name of the listing                                   |

### How to use KKday Tours Scraper

1. Open the Actor on Apify Store.
2. Paste one or more KKday category listing URLs into **KKday listing URLs**.
3. Choose a value in **Sort results by**, or keep the default featured order.
4. Set **Maximum results** and, if needed, **Maximum pages per listing**.
5. Run the Actor.
6. Download the dataset or connect it to your workflow.

### Input Parameters

| Parameter            | Type    | Required | Default                      | Description                                                                                                                                                       |
| -------------------- | ------- | -------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | Array   | No       | Example Tokyo attraction URL | One or more KKday category listing URLs. Any KKday locale path works.                                                                                             |
| `sortBy`             | String  | No       | `prec`                       | Listing order: `prec` (featured), `omdesc` (most popular), `pasc` (price low to high), `pdesc` (price high to low), `sdesc` (highest rated), or `cdesc` (newest). |
| `results_wanted`     | Integer | No       | `20`                         | Maximum number of listings saved across all listing URLs.                                                                                                         |
| `max_pages`          | Integer | No       | `10`                         | Safety cap on pages fetched per listing. KKday returns 10 listings per page.                                                                                      |
| `proxyConfiguration` | Object  | No       | Apify residential proxy      | Proxy settings. Residential proxy is enabled by default because KKday blocks direct requests from datacenter IPs.                                                 |

### Output Data

| Field                 | Type    | Description                                            |
| --------------------- | ------- | ------------------------------------------------------ |
| `product_id`          | Integer | KKday product identifier                               |
| `product_oid`         | Integer | KKday product option identifier                        |
| `title`               | String  | Product title                                          |
| `description`         | String  | Short product introduction                             |
| `url`                 | String  | Full product page URL                                  |
| `image`               | String  | Primary product image URL                              |
| `images`              | Array   | Product image URLs                                     |
| `price`               | Number  | Lowest price for the product                           |
| `price_min`           | Number  | Lowest price for the product                           |
| `price_max`           | Number  | Highest price for the product                          |
| `original_price`      | Number  | Official price before discount                         |
| `discount`            | Number  | Discount ratio reported by KKday                       |
| `currency`            | String  | Currency code                                          |
| `rating`              | Number  | Average product rating from 0 to 5                     |
| `rating_count`        | Integer | Number of ratings                                      |
| `orders`              | String  | Booking count label                                    |
| `sale_status`         | Integer | KKday sale status code                                 |
| `earliest_sale_date`  | String  | Earliest available date in YYYYMMDD format             |
| `is_tourism_product`  | Boolean | True when KKday marks the product as a tourism product |
| `is_kkday_best_route` | Boolean | True when KKday marks the product as a best route      |
| `is_marketplace`      | Boolean | True when the product comes from the KKday marketplace |
| `is_zero_price`       | Boolean | True when the product has a zero price                 |
| `is_display_price`    | Boolean | True when KKday displays a price                       |
| `category`            | String  | KKday main product category code                       |
| `sub_categories`      | Array   | KKday product sub-category codes                       |
| `display_tags`        | Array   | Labels shown on the listing card                       |
| `destinations`        | Array   | Destinations linked to the product, with code and name |
| `recommend_tags`      | Array   | Recommendation labels                                  |
| `listing_url`         | String  | Category listing URL supplied in the input             |
| `location`            | String  | Location name of the listing                           |
| `location_code`       | String  | KKday destination code of the listing                  |
| `category_name`       | String  | Location and category name of the listing              |
| `locale`              | String  | Locale used for the listing                            |
| `sort`                | String  | Sort order used for the listing                        |
| `page`                | Integer | Listing page the product was found on                  |
| `position`            | Integer | Rank of the product within the sorted listing          |
| `scraped_at`          | String  | ISO timestamp for when the record was collected        |

### Usage Examples

#### Basic listing collection

Collect the first set of listings from one category page:

```json
{
    "startUrls": ["https://www.kkday.com/en/category/jp-tokyo/attraction-tickets/list"],
    "results_wanted": 50
}
```

#### Multiple destinations in one run

Collect listings from more than one destination or category in the same run:

```json
{
    "startUrls": [
        "https://www.kkday.com/en/category/jp-tokyo/attraction-tickets/list",
        "https://www.kkday.com/en/category/jp-osaka/attraction-tickets/list",
        "https://www.kkday.com/en/category/jp-tokyo/day-tours/list"
    ],
    "sortBy": "omdesc",
    "results_wanted": 100,
    "max_pages": 5
}
```

#### Localized, price-first collection

Use a locale URL and order by price to compare the cheapest options:

```json
{
    "startUrls": ["https://www.kkday.com/ja/category/jp-osaka/attraction-tickets/list"],
    "sortBy": "pasc",
    "results_wanted": 40,
    "max_pages": 4
}
```

#### Keyword-filtered listing

Add a `keyword` query parameter to the listing URL to narrow results:

```json
{
    "startUrls": ["https://www.kkday.com/en/category/jp-tokyo/attraction-tickets/list?keyword=disney"],
    "sortBy": "sdesc",
    "results_wanted": 30
}
```

### Sample Output

```json
{
    "product_id": 133300,
    "product_oid": 133300,
    "title": "SHIBUYA SKY Observation Deck Tickets in Tokyo",
    "description": "Book SHIBUYA SKY tickets in Tokyo with QR code entry. Compare available time slots, plan sunset views, and check rooftop weather rules before you visit.",
    "url": "https://www.kkday.com/en/product/133300-shibuya-sky-observatory-e-ticket-tokyo",
    "image": "https://image.kkday.com/image/get/w_600%2Cc_fit/s1.kkday.com/product_133300/20220915065553_dvR7F/jpg",
    "images": ["https://image.kkday.com/image/get/w_600%2Cc_fit/s1.kkday.com/product_133300/20220915065553_dvR7F/jpg"],
    "price": 17.09,
    "price_min": 17.09,
    "price_max": 21.52,
    "original_price": 17.09,
    "discount": 0,
    "currency": "USD",
    "rating": 4.7,
    "rating_count": 14748,
    "orders": "300K+",
    "sale_status": 1,
    "earliest_sale_date": "20261019",
    "is_tourism_product": true,
    "is_kkday_best_route": false,
    "is_marketplace": false,
    "is_zero_price": false,
    "is_display_price": false,
    "category": "CATEGORY_002",
    "display_tags": ["Free cancellation 1 day before", "Instant Confirmation"],
    "destinations": [{ "code": "D-JP-3654", "name": "Shibuya" }],
    "recommend_tags": ["5000+ sold in 30 days"],
    "listing_url": "https://www.kkday.com/en/category/jp-tokyo/attraction-tickets/list",
    "location": "Tokyo",
    "location_code": "D-JP-3261",
    "category_name": "Attraction Tickets",
    "locale": "en",
    "sort": "prec",
    "page": 1,
    "position": 1,
    "scraped_at": "2026-10-18T12:48:34.227Z"
}
```

### Tips for Best Results

- Paste complete category listing URLs, for example `https://www.kkday.com/en/category/jp-tokyo/attraction-tickets/list`. The `/category/` and `/category-nuxt/` paths both work.
- Choose the locale path that matches the language you need. The `/en/` path usually returns English titles, while other locale paths return localized titles and category names.
- Keep the result limit small for a first test, then raise it after you confirm the dataset looks right.
- Use `pasc` or `pdesc` for price comparisons, `sdesc` to surface the highest rated products, and `cdesc` to follow newly added products.
- Set `max_pages` high enough to reach your target count. Each page returns 10 listings, and the Actor stops automatically at the last page.
- Some listings have no rating, no booking count, or no sub-category. Those fields stay empty when KKday does not publish them.
- Keep the default residential proxy enabled. KKday blocks direct requests from datacenter IPs, and disabling the proxy can cause blocked or empty runs.

### Integrations

- **Google Sheets** - Send listing data to a spreadsheet for analysis.
- **Webhooks** - Trigger a workflow after each run.
- **Make or Zapier** - Connect results to no-code automations.
- **API** - Read the dataset from your own systems.
- **CSV, Excel, JSON, XML** - Download the dataset in the format you need.

### Frequently Asked Questions

#### Can I export KKday listings to CSV or Excel?

Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML, and other supported formats from the dataset tab.

#### Can I scrape more than one KKday destination at once?

Yes. Add multiple category listing URLs to `startUrls`. Each saved listing includes its listing URL, location, and category name so you can tell the sources apart.

#### Can I get listings in a specific language?

Yes. Use the locale path in the listing URL. For example, `/en/` returns English listing titles, while `/ja/`, `/ko/`, `/zh-tw/`, and other locale paths return that locale's titles and category names.

#### How many listings can I collect per category?

KKday returns 10 listings per page. Raise `max_pages` to reach more pages, and set `results_wanted` to the total number of listings you want across all URLs. The Actor stops automatically at the last page of a category.

#### Can I sort listings by price, rating, or recency?

Yes. Use `sortBy` to choose featured, most popular, price low to high, price high to low, highest rated, or newest order.

#### Can I filter listings by keyword?

Yes. Add a `keyword` query parameter to the listing URL, for example `.../list?keyword=disney`, and the Actor returns matching listings.

#### Why are some fields empty?

KKday does not publish every field for every listing. Listings without a rating, without a booking count, or without a sub-category leave those fields empty.

#### Can I run this Actor on a schedule?

Yes. You can schedule the Actor in Apify Console to refresh listing data hourly, daily, weekly, or at another interval.

#### Is it legal to scrape KKday listings?

Scraping publicly available listing data can be legal, but you are responsible for complying with applicable laws, KKday terms, and privacy rules. Use the data responsibly.

### Related Actors

- [Tripadvisor Hotels Scraper](https://apify.com/shahidirfan/tripadvisor-hotels-scraper) - Collect hotel listings and travel data from Tripadvisor.
- [Tripadvisor Reviews Scraper](https://apify.com/shahidirfan/tripadvisor-reviews-scraper) - Collect public reviews from Tripadvisor listings.
- [Expedia Reviews Scraper](https://apify.com/shahidirfan/expedia-reviews-scraper) - Collect public reviews from Expedia hotel and travel listings.
- [Holidaycheck.de Reviews Scraper](https://apify.com/shahidirfan/holidaycheck-de-reviews-scraper) - Collect hotel reviews from Holidaycheck.de.

### Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

This Actor is designed for legitimate collection of publicly available travel listing data. Users are responsible for using the data responsibly and complying with applicable laws, website terms, and privacy rules.

# Actor input Schema

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

One or more KKday category listing URLs, for example https://www.kkday.com/en/category/jp-tokyo/attraction-tickets/list. Any KKday locale works, such as /en/, /zh-tw/, /ja/, /ko/, or /en-sg/.

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

Order in which KKday returns the listings.

## `results_wanted` (type: `integer`):

Maximum number of listings to save across all listing URLs.

## `max_pages` (type: `integer`):

Safety cap on listing pages fetched for each URL. KKday returns 10 listings per page.

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

Proxy settings. KKday blocks direct requests from datacenter IPs, so Apify residential proxy is enabled by default. You can switch to another proxy option in the editor.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.kkday.com/en/category/jp-tokyo/attraction-tickets/list"
  ],
  "sortBy": "prec",
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        "https://www.kkday.com/en/category/jp-tokyo/attraction-tickets/list"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/kkday-tours-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 = { "startUrls": ["https://www.kkday.com/en/category/jp-tokyo/attraction-tickets/list"] }

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/kkday-tours-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 '{
  "startUrls": [
    "https://www.kkday.com/en/category/jp-tokyo/attraction-tickets/list"
  ]
}' |
apify call shahidirfan/kkday-tours-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shahidirfan/kkday-tours-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/ehxBqGLBOPpZHeFh7/builds/4nntWmAV8XTftsiIz/openapi.json
