# Tiket Reviews Scraper (`stealth_mode/tiket-reviews-scraper`) Actor

Scrape hotel reviews from Tiket.com including ratings, comments, customer names, images, and engagement metrics. Supports sorting, pagination, and bulk URL input — perfect for hospitality analysts, OTA researchers, and reputation managers.

- **URL**: https://apify.com/stealth\_mode/tiket-reviews-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Tiket.com Reviews Scraper: Extract Hotel Reviews & Ratings at Scale

---

### What Is Tiket.com?

Tiket.com is one of Southeast Asia's leading online travel agencies (OTAs), offering hotel bookings, flights, and experiences primarily serving the Indonesian market. Its review system provides valuable guest feedback data covering ratings, travel context, and user-generated content. Collecting this data manually is impractical at scale — the **Tiket.com Reviews Scraper** automates extraction from any hotel review page, delivering structured records ready for analysis.

---

### Overview

The **Tiket.com Reviews Scraper** collects guest reviews from hotel listing pages on Tiket.com. It supports:

- **Reputation managers** monitoring guest sentiment across properties
- **Hospitality analysts** benchmarking hotel performance
- **OTA researchers** studying review patterns and traveler behavior
- **Developers** feeding review data into CRM or BI pipelines

Key features include flexible sort order, pagination control, configurable item limits, and fault-tolerant URL handling.

---

### Input Format

```json
{
  "ignore_url_failures": true,
  "max_items_per_url": 200,
  "urls": [
    "https://www.tiket.com/en-us/review?product_type=TIXHOTEL&searchType=INVENTORY&inventory_id=nikhila-seminyak-bali-503001647484278823&reviewSubmitColumn=RATING_SUMMARY&currency=USD"
  ],
  "page": 2,
  "sort_by": "RATING_SUMMARY-DESC"
}
````

| Field | Type | Description |
|---|---|---|
| `urls` | `array` | Review page URLs for target hotels. Navigate to a hotel's review tab on Tiket.com and copy the full URL. Supports bulk input. |
| `sort_by` | `string` | Sort order for reviews. Options: `REVIEW_DATE-DESC` *(Newest)*, `HELPFULNESS-DESC` *(Most helpful)*, `RATING_SUMMARY-DESC` *(Highest rating)*, `RATING_SUMMARY-ASC` *(Lowest rating)* |
| `page` | `integer` | Page number to start scraping from. Default: `1`. Use `2`+ to skip already-collected pages in incremental runs. |
| `ignore_url_failures` | `boolean` | If `true`, the scraper continues when a URL fails instead of stopping the entire run. Recommended for bulk jobs. |
| `max_items_per_url` | `integer` | Maximum reviews collected per URL. Default: `20`. Increase up to your needed volume (e.g., `200`). |

> **Tip:** To collect reviews for multiple hotels, add each hotel's review URL as a separate entry in the `urls` array.

***

### Output Format

**Sample output**

```json
{
  "submit_id": "69c0303dcbb93d44963b0fbb",
  "start_journey": 1765497600000,
  "end_journey": 1765756800000,
  "rating_summary": 5,
  "customer_name": "Prisilia Febriyanti",
  "fake": false,
  "label": "Couple Trip",
  "comments": [
    {
      "question_code": "comment",
      "question_title": "Your Review:",
      "value": "Cleanliness is striking. Comfortable rooms."
    }
  ],
  "user_review_answers": [
    {
      "question_type": "RATING",
      "question_code": "cleanliness",
      "question_title": "Cleanliness",
      "answer_code": "option_5",
      "answer_string": "Fantastic",
      "answer_integer": 5
    },
    {
      "question_type": "RATING",
      "question_code": "service",
      "question_title": "Service",
      "answer_code": "option_5",
      "answer_string": "Fantastic",
      "answer_integer": 5
    },
    {
      "question_type": "RATING",
      "question_code": "location",
      "question_title": "Location",
      "answer_code": "option_5",
      "answer_string": "Fantastic",
      "answer_integer": 5
    },
    {
      "question_type": "RATING",
      "question_code": "facilities",
      "question_title": "Facilities",
      "answer_code": "option_5",
      "answer_string": "Fantastic",
      "answer_integer": 5
    },
    {
      "question_type": "RATING",
      "question_code": "value_for_money",
      "question_title": "Value",
      "answer_code": "option_5",
      "answer_string": "Fantastic",
      "answer_integer": 5
    },
    {
      "question_type": "IMAGE_OPTION",
      "question_code": "type_of_traveler",
      "question_title": "What trip did you take during your stay?",
      "answer_code": "couple",
      "answer_string": "Couple Trip",
      "answer_integer": null
    }
  ],
  "user_images": [],
  "total_like": 0,
  "reported": false,
  "total_items": 1,
  "liked_by_me": null,
  "review_date": 1774202941731,
  "review_source": {
    "name": "TIKET",
    "label": "Verified review from tiket.com"
  },
  "from_url": "https://www.tiket.com/en-us/review?product_type=TIXHOTEL&searchType=INVENTORY&inventory_id=nikhila-seminyak-bali-503001647484278823&reviewSubmitColumn=RATING_SUMMARY&currency=VND"
}
```

Each review returns a record with the following fields:

#### Review Identity

| Field | Meaning |
|---|---|
| `Submit ID` | Unique identifier for the review submission |
| `Review Date` | Date the review was posted on Tiket.com |
| `Review Source` | Platform or channel through which the review was submitted |

#### Reviewer Info

| Field | Meaning |
|---|---|
| `Customer Name` | Display name of the reviewer |
| `Fake` | Flag indicating whether the review has been flagged as potentially inauthentic |
| `Reported` | Whether the review has been reported by other users |

#### Travel Context

| Field | Meaning |
|---|---|
| `Start Journey` | Check-in or trip start date associated with the stay |
| `End Journey` | Check-out or trip end date |
| `Label` | Travel type label (e.g., couple, family, solo) if provided |

#### Review Content

| Field | Meaning |
|---|---|
| `Rating Summary` | Overall numeric rating given by the reviewer |
| `Comments` | Free-text review body written by the guest |
| `User Review Answers` | Structured Q\&A responses (e.g., answers to prompted review questions) |
| `User Images` | Array of image URLs uploaded by the reviewer |

#### Engagement Metrics

| Field | Meaning |
|---|---|
| `Total Like` | Number of likes the review has received from other users |
| `Liked By Me` | Whether the authenticated session liked this review (typically `false` in scraping context) |
| `Total Items` | Total number of reviews available for the property at time of scrape |

***

### How to Use

1. **Get the review URL** — Open a hotel page on Tiket.com, navigate to the Reviews tab, and copy the URL from your browser.
2. **Configure input** — Paste URLs into `urls`, set `sort_by` and `page` as needed.
3. **Set item limit** — Use `max_items_per_url` to control volume per hotel (e.g., `200` for comprehensive collection).
4. **Run the scraper** — Start the actor and monitor progress in the run log.
5. **Export** — Download results as JSON, CSV, or Excel.

**Common issues:**

- If no data is returned, verify the URL contains `product_type=TIXHOTEL` and a valid `inventory_id`.
- Use `page: 1` for initial full collection; increment for subsequent runs to capture new reviews only.
- Set `ignore_url_failures: true` when processing multiple hotel URLs to avoid interruptions.

***

### Use Cases & Business Value

- **Reputation monitoring:** Track guest sentiment trends over time for one or multiple properties
- **Competitor analysis:** Compare rating distributions across competing hotels in the same destination
- **Content analysis:** Extract guest language patterns for marketing copy or service improvement
- **Academic research:** Study traveler behavior and review authenticity in Southeast Asian OTA markets

***

### Conclusion

The **Tiket.com Reviews Scraper** delivers structured, comprehensive hotel review data without manual effort. With support for sorting, pagination, and bulk URL input, it scales from single-property monitoring to market-wide research. Start collecting today and turn guest feedback into actionable intelligence.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Hotels details urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `sort_by` (type: `string`):

Select your option to sort reviews

## `page` (type: `integer`):

The page to start from

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## `proxy` (type: `object`):

Select proxies to be used by your scraper.

## Actor input object example

```json
{
  "urls": [
    "https://www.tiket.com/en-us/review?product_type=TIXHOTEL&searchType=INVENTORY&inventory_id=nikhila-seminyak-bali-503001647484278823&reviewSubmitColumn=RATING_SUMMARY&currency=USD"
  ],
  "page": 1,
  "ignore_url_failures": true,
  "max_items_per_url": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "SG"
  }
}
```

# 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 = {
    "urls": [
        "https://www.tiket.com/en-us/review?product_type=TIXHOTEL&searchType=INVENTORY&inventory_id=nikhila-seminyak-bali-503001647484278823&reviewSubmitColumn=RATING_SUMMARY&currency=USD"
    ],
    "page": 1,
    "ignore_url_failures": true,
    "max_items_per_url": 20,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "SG"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/tiket-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 = {
    "urls": ["https://www.tiket.com/en-us/review?product_type=TIXHOTEL&searchType=INVENTORY&inventory_id=nikhila-seminyak-bali-503001647484278823&reviewSubmitColumn=RATING_SUMMARY&currency=USD"],
    "page": 1,
    "ignore_url_failures": True,
    "max_items_per_url": 20,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "SG",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/tiket-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.tiket.com/en-us/review?product_type=TIXHOTEL&searchType=INVENTORY&inventory_id=nikhila-seminyak-bali-503001647484278823&reviewSubmitColumn=RATING_SUMMARY&currency=USD"
  ],
  "page": 1,
  "ignore_url_failures": true,
  "max_items_per_url": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "SG"
  }
}' |
apify call stealth_mode/tiket-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=stealth_mode/tiket-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tiket Reviews Scraper",
        "description": "Scrape hotel reviews from Tiket.com including ratings, comments, customer names, images, and engagement metrics. Supports sorting, pagination, and bulk URL input — perfect for hospitality analysts, OTA researchers, and reputation managers.",
        "version": "0.0",
        "x-build-id": "7Di3jIzoyi7ebO7o7"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~tiket-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-tiket-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/stealth_mode~tiket-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-tiket-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/stealth_mode~tiket-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-tiket-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "URLs of the Hotels details urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the Hotels details urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sort_by": {
                        "title": "Sort by",
                        "enum": [
                            "REVIEW_DATE-DESC",
                            "HELPFULNESS-DESC",
                            "RATING_SUMMARY-DESC",
                            "RATING_SUMMARY-ASC"
                        ],
                        "type": "string",
                        "description": "Select your option to sort reviews"
                    },
                    "page": {
                        "title": "Page",
                        "type": "integer",
                        "description": "The page to start from"
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxies to be used by your scraper."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
