# KKday Reviews Scraper ⭐ (`shahidirfan/kkday-reviews-scraper`) Actor

Extract customer reviews and ratings from KKday tours, activities, attractions, and travel experiences. Collect review text, dates, traveler feedback, and product details for sentiment analysis, tourism market research, competitor insights, reputation monitoring, and AI datasets.

- **URL**: https://apify.com/shahidirfan/kkday-reviews-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Stats:** 2 total users, 1 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 Reviews Scraper do?

KKday Reviews Scraper collects public customer reviews from any KKday product page. Paste one or more KKday product URLs, choose how the reviews should be ordered, set a result limit, and the Actor returns a clean dataset with ratings, review text, author names, visit dates, helpful votes, and review photos. It works with KKday locale paths such as `/en/`, `/zh-tw/`, `/ja/`, `/ko/`, and `/en-sg/`, so you can collect reviews in the language your audience reads.

Use it for travel market research, activity and attraction monitoring, destination content, or building AI-ready datasets from public travel reviews.

### Why use KKday Reviews Scraper?

- **Structured review data** - Collect ratings, review titles, review text, author names, visit dates, post dates, and review photos without manual copy-paste.
- **Localized results** - Use a locale URL to collect translated or original review text, and keep both versions in the dataset.
- **Flexible ordering** - Sort by highest rating, lowest rating, most recent, reviews with photos, most helpful, or KKday recommended.
- **Multi-product runs** - Process several product URLs in one run and keep product context on every review.
- **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                                               |
| ---------------------- | --------------------------------------------------------- |
| `review_id`            | KKday review identifier                                   |
| `product_id`           | Product identifier taken from the product URL             |
| `product_title`        | Title of the reviewed product                             |
| `product_url`          | Product URL supplied in the input                         |
| `product_rating`       | Average product rating reported by KKday                  |
| `product_review_count` | Total number of reviews reported by KKday                 |
| `rating`               | Rating given by the reviewer from 1 to 5                  |
| `title`                | Review title, translated when a translation is available  |
| `body`                 | Review text, translated when a translation is available   |
| `title_original`       | Review title in the reviewer's language                   |
| `body_original`        | Review text in the reviewer's language                    |
| `is_translated`        | True when a translated title or review text was available |
| `author_name`          | Display name of the reviewer                              |
| `author_avatar`        | Avatar image URL of the reviewer                          |
| `traveller_type`       | Traveller type code reported with the review              |
| `images`               | Photos attached to the review                             |
| `helpful_count`        | Number of helpful votes for the review                    |
| `go_date`              | Date of the visit in YYYY-MM-DD format                    |
| `post_date`            | Date and time when the review was posted                  |
| `scraped_at`           | ISO timestamp for when the record was collected           |

### How to use KKday Reviews Scraper

1. Open the Actor on Apify Store.
2. Paste one or more KKday product URLs into **KKday product URLs**.
3. Choose a value in **Review sorting**, or keep the default highest rating order.
4. Set **Maximum reviews** and, if needed, **Maximum pages per product**.
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 product URL     | One or more KKday product URLs. Any KKday locale path works.                                                                                                                 |
| `sortBy`             | String  | No       | `RATING_DESC`           | Review order: `RATING_DESC`, `RATING_ASC`, `POSTDATE_DESC`, `IMAGE_DESC`, `HELPFUL_DESC`, or `KKDAY_DESC`.                                                                   |
| `results_wanted`     | Integer | No       | `20`                    | Maximum number of reviews saved across all product URLs. Higher values make the Actor combine review sort orders and tag filters to collect more unique reviews.             |
| `max_pages`          | Integer | No       | `15`                    | Safety cap on pages fetched per sort and tag filter. KKday returns 10 reviews per page and serves at most 15 pages for any single filter, so 15 is the maximum useful value. |
| `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                                   |
| ---------------------- | ------- | --------------------------------------------- |
| `review_id`            | Integer | KKday review identifier                       |
| `product_id`           | Integer | Product identifier taken from the product URL |
| `product_title`        | String  | Title of the reviewed product                 |
| `product_url`          | String  | Product URL supplied in the input             |
| `product_rating`       | Number  | Average product rating                        |
| `product_review_count` | Integer | Total number of reviews for the product       |
| `rating`               | Integer | Rating given by the reviewer                  |
| `title`                | String  | Review title                                  |
| `body`                 | String  | Review text                                   |
| `title_original`       | String  | Review title in the original language         |
| `body_original`        | String  | Review text in the original language          |
| `is_translated`        | Boolean | True when a translation was available         |
| `author_name`          | String  | Reviewer display name                         |
| `author_avatar`        | String  | Reviewer avatar image URL                     |
| `traveller_type`       | String  | Traveller type code                           |
| `images`               | Array   | Review photo URLs                             |
| `helpful_count`        | Integer | Helpful votes for the review                  |
| `go_date`              | String  | Visit date                                    |
| `post_date`            | String  | Review post date and time                     |
| `scraped_at`           | String  | Collection timestamp                          |

### Usage Examples

#### Basic review collection

Collect the first set of reviews from one product page:

```json
{
    "startUrls": ["https://www.kkday.com/en/product/133300-shibuya-sky-observatory-e-ticket-tokyo"],
    "results_wanted": 50
}
```

#### Multiple products in one run

Collect reviews from more than one product in the same run:

```json
{
    "startUrls": [
        "https://www.kkday.com/en/product/133300-shibuya-sky-observatory-e-ticket-tokyo",
        "https://www.kkday.com/en/product/19252-tokyo-disney-resort-disneyland-disneysea"
    ],
    "sortBy": "POSTDATE_DESC",
    "results_wanted": 100,
    "max_pages": 10
}
```

#### Localized, photo-first collection

Use a locale URL and prioritize reviews with photos:

```json
{
    "startUrls": ["https://www.kkday.com/ja/product/133300-shibuya-sky-observatory-e-ticket-tokyo"],
    "sortBy": "IMAGE_DESC",
    "results_wanted": 40,
    "max_pages": 4
}
```

### Sample Output

```json
{
    "review_id": 4552911,
    "product_id": 133300,
    "product_title": "SHIBUYA SKY Observation Deck Tickets in Tokyo",
    "product_url": "https://www.kkday.com/en/product/133300-shibuya-sky-observatory-e-ticket-tokyo",
    "product_rating": 4.7,
    "product_review_count": 14748,
    "rating": 5,
    "title": "Awesome",
    "body": "Overall, it was great. It had lighting and sound effects. It was a bit chilly on the rooftop, so I recommend bringing a jacket.",
    "title_original": "超棒",
    "body_original": "整體來說很棒，有燈光跟音效，頂樓有點冷建議帶外套。",
    "is_translated": true,
    "author_name": "HSINYU",
    "author_avatar": "https://image.kkday.com/v2/image/get/s1.kkday.com/member/default_image/png",
    "traveller_type": "02",
    "images": ["https://image.kkday.com/v2/image/get/s1.kkday.com/recommend_3475998/20261017001731_xjLgB/jpg"],
    "helpful_count": 0,
    "go_date": "2026-10-12",
    "post_date": "2026-10-17 00:17:32",
    "scraped_at": "2026-10-18T11:31:29.663Z"
}
```

### Tips for Best Results

- Paste complete product URLs, for example `https://www.kkday.com/en/product/133300-shibuya-sky-observatory-e-ticket-tokyo`. A product number such as `133300` also works.
- Choose the locale path that matches the review language you need. The `/en/` path usually returns English text, while other locale paths return localized review text.
- Keep the result limit small for a first test, then raise it after you confirm the dataset looks right.
- Use `POSTDATE_DESC` to follow recent feedback, and `IMAGE_DESC` when you need reviews with photos.
- Some reviews have no title or no photos. Those fields stay empty when KKday does not publish them.
- Set `results_wanted` to the number of reviews you want. For large counts, the Actor combines sort orders and tag filters to collect more unique reviews and may take longer.
- KKday serves at most 15 pages for any single sort or tag filter. When the Actor has collected everything the public pages allow, it finishes successfully with the reviews it has instead of failing.
- 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 review 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 reviews 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 reviews from more than one KKday product at once?

Yes. Add multiple product URLs to `startUrls`. Each saved review includes its product ID, product title, and product URL so you can tell the products apart.

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

Yes. Use the locale path in the product URL. For example, `/en/` returns English review text where available, while `/ja/`, `/ko/`, `/zh-tw/`, and other locale paths return that locale's text. The dataset also keeps the original title and text when a translation is available.

#### How many reviews can I collect per product?

KKday returns 10 reviews per page and serves at most 15 pages for any single sort order or tag filter. To collect more than that, the Actor automatically combines every available sort order and tag filter, removes duplicates, and keeps going until it reaches `results_wanted` or exhausts the available combinations. Set `results_wanted` to the total number of reviews you want across all products. KKday's public pages expose only a portion of a product's total review count, so the Actor collects the maximum number of unique reviews the public pages allow. When KKday has no more pages to serve, the Actor keeps the reviews it already collected and finishes successfully.

#### Can I sort reviews by rating, date, or photos?

Yes. Use `sortBy` to choose highest rating, lowest rating, most recent, reviews with photos, most helpful, or KKday recommended order.

#### Why are some fields empty?

KKday does not publish every field for every review. Reviews without a title, without photos, or without a translation leave those fields empty.

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

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

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

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

### Related Actors

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

### 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 review 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 public KKday product URLs. Any KKday locale works, for example /en/, /zh-tw/, /ja/, /ko/, or /en-sg/.

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

Order in which KKday returns the reviews.

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

Maximum number of reviews to save across all product URLs. Higher values make the Actor combine review sort orders and tag filters to collect more unique reviews.

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

Safety cap on review pages fetched for each sort and tag filter. KKday returns 10 reviews per page and serves at most 15 pages for any single filter, so 15 is the maximum useful value. The Actor automatically combines filters to collect more unique reviews.

## `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/product/133300-shibuya-sky-observatory-e-ticket-tokyo"
  ],
  "sortBy": "RATING_DESC",
  "results_wanted": 20,
  "max_pages": 15,
  "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/product/133300-shibuya-sky-observatory-e-ticket-tokyo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/kkday-reviews-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/product/133300-shibuya-sky-observatory-e-ticket-tokyo"] }

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/kkday-reviews-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/product/133300-shibuya-sky-observatory-e-ticket-tokyo"
  ]
}' |
apify call shahidirfan/kkday-reviews-scraper --silent --output-dataset

```

## MCP server setup

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