# Tiqets Reviews Scraper (`stealth_mode/tiqets-reviews-scraper`) Actor

Scrape verified traveler reviews from Tiqets.com by tour ID. Collect ratings, reviewer details, review body, media, and aggregated stats — perfect for reputation monitoring, sentiment analysis, and travel market research.

- **URL**: https://apify.com/stealth_mode/tiqets-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, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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

## Tiqets.com Reviews Scraper: Extract Tour & Attraction Reviews at Scale

***

### What Is Tiqets.com?

Tiqets.com is a global booking platform for museums, attractions, and experiences, operating in dozens of countries. Each listing accumulates verified post-visit reviews that contain rich signals about customer satisfaction, product quality, and traveler demographics. Collecting this data manually is impractical at scale — the **Tiqets.com Reviews Scraper** automates extraction from any tour or attraction by ID, returning clean structured records ready for analysis.

***

### Overview

The **Tiqets Reviews Scraper** targets the review section of any Tiqets product page. It is useful for:

- **Travel brands** monitoring reputation across their listings
- **Market researchers** studying traveler sentiment by attraction or region
- **Aggregator platforms** enriching product pages with review data
- **Data analysts** building NLP/sentiment pipelines on tourism content

***

### Input Format

The scraper uses a parameter-based input — no URL required. Identify a product by its **Tour ID**, found in the listing URL:

```
https://www.tiqets.com/en/musee-dorsay-tickets-l141867/ -> Tour ID: 141867
```

```json
{
  "tour_id": "141867",
  "sort_by": "score_desc",
  "page": 2,
  "max_items_per_url": 200,
  "ignore_url_failures": true
}
```

#### Input Field Reference

| Field | Type | Description |
|---|---|---|
| `tour_id` | string | The numeric ID extracted from the Tiqets listing URL (e.g., `141867` from `/en/musee-dorsay-tickets-l141867/`) |
| `sort_by` | string (enum) | Sort order for reviews. Options: `relevance-desc` (Relevance), `date-desc` (New to Old), `date-asc` (Old to New), `rating-desc` (High to Low), `rating-asc` (Low to High) |
| `page` | integer | Page number to start collecting from. Default: `1`. Use `2`+ to resume or skip already-collected pages |
| `max_items_per_url` | integer | Maximum reviews to collect per run. Default: `20`. Set up to `200`+ for bulk collection |
| `ignore_url_failures` | boolean | If `true`, the scraper continues running when a request fails rather than halting the entire run |

> **Tip:** To collect all reviews for a high-volume attraction, set `max_items_per_url` to a high value and start from `page: 1`. Use `sort_by: date-desc` to always capture the most recent reviews first.

***

### Output Format

#### Sample Record

```json
{
  "id": 2291072,
  "date": "2025-10-22",
  "rating": 5.0,
  "reviewer": "Helene",
  "country": {
    "name": "United States",
    "flag_url": "https://aws-tiqets-cdn.imgix.net/images/flags/US.png?auto=format%2Ccompress&fit=crop&q=70&s=7147173af75f7c738e516fee0287f64f"
  },
  "pictures": [],
  "body": "Booking the tickets was very simple and everything went smoothly. Unfortunately, I had to cancel one of the two, and that went just as easily. Would definitely recommend using Tiqets.",
  "language": "en",
  "product": {
    "title": "Musée d'Orsay: Renoir and Love (1865-1885)",
    "url": "/en/things-to-do-in-paris-c66746/tickets-for-orsay-museum-exhibition-p1080858/"
  },
  "media": [],
  "review_hash": "GVM1B0",
  "product_average_rating": 4.440855323020928,
  "product_total_reviews": 6594,
  "total_helpful_reviews": 1,
  "from_url": "https://www.tiqets.com/web_api/reviews/venue/141867?page=2&pageSize=20&language=en&sortDirection=desc&sortField=relevance&sort=score_desc"
}
```

Each review returns the following fields:

#### Review Identity

| Field | Meaning |
|---|---|
| `ID` | Unique internal identifier for the review |
| `Review Hash` | Fingerprint hash for deduplication across runs |
| `Date` | Date the review was submitted |
| `Language` | Language the review was written in |

#### Reviewer Info

| Field | Meaning |
|---|---|
| `Reviewer` | Display name or anonymized identifier of the reviewer |
| `Country` | Reviewer's country of origin |

#### Review Content

| Field | Meaning |
|---|---|
| `Rating` | Numeric score given by the reviewer (typically 1–5) |
| `Body` | Full text of the review |
| `Pictures` | URLs of photos attached by the reviewer |
| `Media` | Additional media assets (videos or supplementary images) |

#### Product & Aggregates

| Field | Meaning |
|---|---|
| `Product` | Name and metadata of the reviewed attraction or tour |
| `Product Average Rating` | Overall average rating across all reviews for this product |
| `Product Total Reviews` | Total number of reviews the product has received |
| `Total Helpful Reviews` | Number of reviews marked as helpful by other users |

***

### How to Use

1. **Find the Tour ID** — Open any Tiqets listing. The ID is the number after the final `-l` in the URL (e.g., `/en/louvre-museum-l98234/` → `98234`).
2. **Set sort order** — Use `date-desc` for fresh reviews; `rating-asc` to surface critical feedback.
3. **Configure page and limit** — Start at `page: 1` with `max_items_per_url` matching your target volume.
4. **Run and export** — Download results as JSON or CSV for use in spreadsheets, BI tools, or NLP pipelines.

**Common issues:**

- If `tour_id` is incorrect, the run returns no data. Double-check the URL pattern.
- Set `ignore_url_failures: true` for uninterrupted bulk runs across multiple tour IDs.

***

### Use Cases & Business Value

- **Reputation management:** Track rating trends over time for your own or competitor listings
- **Sentiment analysis:** Feed `Body` + `Language` fields into NLP models for multilingual insight
- **Content enrichment:** Pull review snippets and ratings into third-party travel platforms
- **Research:** Analyze traveler demographics (`Country`) and satisfaction patterns by attraction type

***

### Conclusion

The **Tiqets.com Reviews Scraper** turns a platform's public review data into a structured, analysis-ready dataset with minimal configuration. With flexible sorting, pagination control, and rich per-review output, it is a practical tool for anyone working with travel reputation data at scale.

# Actor input Schema

## `tour_id` (type: `string`):

Enter Tour ID. For example, /en/musee-dorsay-tickets-l141867/ -> 141867)

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

Select your option to sort reviews

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

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.

## Actor input object example

```json
{
  "tour_id": "141867",
  "page": 1,
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "tour_id": "141867",
    "page": 1,
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/tiqets-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 = {
    "tour_id": "141867",
    "page": 1,
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/tiqets-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 '{
  "tour_id": "141867",
  "page": 1,
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/tiqets-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,stealth_mode/tiqets-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/aQstvKmyhNoq9RLPJ/builds/bNAalvjojILeoCRfO/openapi.json
