# Viator Review Scraper ⭐ (`shahidirfan/viator-review-scraper`) Actor

Extract reviews from Viator tours and experiences with ease. Collect ratings, review titles, full review text, reviewer names, dates, traveler types, languages, and more. Perfect for market research, reputation monitoring, sentiment analysis, and competitive intelligence.

- **URL**: https://apify.com/shahidirfan/viator-review-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Travel, Automation, Developer tools
- **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/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

### What does Viator Review Scraper do?

Viator Review Scraper collects public reviews from Viator tour and activity product pages. Enter a Viator product URL or product code, choose the number of reviews and sorting order, and receive structured records with review text, ratings, dates, traveler details, photos, and owner responses when available.

The Actor is useful for travel market research, tour comparison, supplier monitoring, customer sentiment analysis, reputation tracking, and hospitality reporting. Results are saved to an Apify dataset that you can download or connect to other tools.

### Why use Viator Review Scraper?

- **Collect review data in a structured format** - Turn public feedback from a Viator activity into records that are easier to filter, compare, and analyze.
- **Study traveler experience** - Review ratings, titles, full text, party types, helpful votes, and publication dates can show recurring strengths and complaints.
- **Monitor tour performance** - Run the Actor again on a schedule to compare recent feedback for a product over time.
- **Support travel research** - Compare activities, destinations, suppliers, and traveler feedback for content, recommendations, or business analysis.
- **Choose the review order** - Collect recent, highly rated, best-match, helpful, or most useful reviews using the available sorting options.
- **Export to your workflow** - Download JSON, CSV, Excel, or XML, or use Apify API access, webhooks, and integrations for automated processing.

### What data can you extract from Viator?

Each dataset item represents one review associated with the selected Viator product.

| Field                        | Type    | Description                                                   |
| ---------------------------- | ------- | ------------------------------------------------------------- |
| `product_code`               | String  | Viator product code.                                          |
| `product_url`                | String  | Viator product URL used for the run.                          |
| `product_title`              | String  | Product or activity title when available.                     |
| `destination_name`           | String  | Primary destination associated with the activity.             |
| `review_id`                  | String  | Unique review identifier.                                     |
| `review_title`               | String  | Review headline when available.                               |
| `review_text`                | String  | Full review text.                                             |
| `review_language`            | String  | Language or locale of the review.                             |
| `rating`                     | Number  | Star rating from 1 to 5.                                      |
| `published_date`             | String  | Review publication date.                                      |
| `reviewer_name`              | String  | Reviewer display name when available.                         |
| `reviewer_id`                | String  | Reviewer identifier when available.                           |
| `helpful_votes`              | Number  | Number of helpful votes.                                      |
| `party_type`                 | String  | Traveler group type, such as couples or family.               |
| `is_provided_by_tripadvisor` | Boolean | Indicates whether the review is provided by Tripadvisor.      |
| `machine_translated`         | Boolean | Indicates whether the review was machine translated.          |
| `photo_count`                | Number  | Number of photos attached to the review.                      |
| `photos`                     | Array   | Available thumbnail and full-size photo URLs with dimensions. |
| `owner_response`             | Object  | Supplier response details when the product owner replied.     |

The `owner_response` object can include the response ID, title, text, language, publication date, and responder details. Empty values are omitted from dataset records, so fields that are not published for a particular review may be absent.

### How to scrape Viator reviews

1. Open Viator Review Scraper in Apify Console.
2. Enter a public Viator product URL, or provide a product code instead.
3. Set the maximum number of reviews and review pages to request.
4. Select the sorting option that fits your research goal.
5. Start the run and inspect the dataset preview.
6. Download the results or connect the dataset to your reporting or data pipeline.

### Input Parameters

| Parameter            | Type    | Required | Default                       | Description                                                                                           |
| -------------------- | ------- | -------- | ----------------------------- | ----------------------------------------------------------------------------------------------------- |
| `startUrl`           | String  | No\*      | Viator sample URL in the form | Public Viator product page URL. The URL should contain a product code, such as `/d511-3731COLOSSEUM`. |
| `product_code`       | String  | No       | -                             | Viator product code. When supplied, it takes priority over the code parsed from `startUrl`.           |
| `results_wanted`     | Integer | No       | `20`                          | Maximum number of review records to save. Minimum value is `1`.                                       |
| `max_pages`          | Integer | No       | `5`                           | Maximum number of review pages to request. Each page can contain up to 50 reviews.                    |
| `sort_by`            | String  | No       | `DATE`                        | Review order: `DATE`, `RATING`, `BEST_MATCH`, `HELPFUL_VOTES`, or `ML_SORTED`.                        |
| `proxyConfiguration` | Object  | No       | Disabled                      | Optional Apify Proxy configuration for runs that need proxy support.                                  |

\* A product URL or product code is recommended. If neither is supplied, the Actor uses its prefilled sample product URL.

### Usage Examples

#### Basic review extraction

Collect up to 20 reviews from a Viator product page, using the default date order:

```json
{
    "startUrl": "https://www.viator.com/tours/Rome/Colosseum-and-Ancient-Rome-Tour-with-Roman-Forum-and-Palatine-Hill/d511-3731COLOSSEUM",
    "results_wanted": 20
}
```

#### Use a Viator product code

If you already know the product code, provide it directly instead of entering a full product URL:

```json
{
    "product_code": "3731COLOSSEUM",
    "results_wanted": 30,
    "sort_by": "RATING"
}
```

#### Collect a larger review sample

Request more reviews and allow additional pages for a broader product-quality or sentiment dataset:

```json
{
    "startUrl": "https://www.viator.com/tours/Rome/Colosseum-and-Ancient-Rome-Tour-with-Roman-Forum-and-Palatine-Hill/d511-3731COLOSSEUM",
    "results_wanted": 100,
    "max_pages": 5,
    "sort_by": "HELPFUL_VOTES"
}
```

#### Configure Apify Proxy

Enable Apify Proxy when you want proxy support for a run or scheduled workflow:

```json
{
    "startUrl": "https://www.viator.com/tours/Rome/Colosseum-and-Ancient-Rome-Tour-with-Roman-Forum-and-Palatine-Hill/d511-3731COLOSSEUM",
    "results_wanted": 50,
    "max_pages": 3,
    "sort_by": "DATE",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
}
```

### Sample Output

The following example shows one dataset item with review metadata, traveler information, photos, and an owner response:

```json
{
    "product_code": "3731COLOSSEUM",
    "product_url": "https://www.viator.com/tours/Rome/Colosseum-and-Ancient-Rome-Tour-with-Roman-Forum-and-Palatine-Hill/d511-3731COLOSSEUM",
    "product_title": "Rome: Colosseum, Roman Forum and Palatine Hill Guided Tour",
    "destination_name": "Rome",
    "review_id": "1069376540",
    "review_title": "Great tour",
    "review_text": "Our guide was knowledgeable and made the visit easy to follow.",
    "review_language": "en",
    "rating": 5,
    "published_date": "2026-07-19T00:00:00Z",
    "reviewer_name": "Maria_A",
    "reviewer_id": "traveler-12345",
    "helpful_votes": 4,
    "party_type": "FAMILY",
    "is_provided_by_tripadvisor": false,
    "machine_translated": false,
    "photo_count": 1,
    "photos": [
        {
            "thumbnail_url": "https://example.com/review-photo-thumb.jpg",
            "thumbnail_width": 320,
            "thumbnail_height": 240,
            "full_size_url": "https://example.com/review-photo.jpg",
            "full_size_width": 1280,
            "full_size_height": 960
        }
    ],
    "owner_response": {
        "response_id": "response-98765",
        "response_title": "Thank you",
        "response_text": "Thank you for sharing your feedback.",
        "response_language": "en",
        "response_date": "2026-07-21T00:00:00Z",
        "responder_name": "Tour Operator"
    }
}
```

### Tips for best results

- Use a complete public Viator product URL containing the product code, or enter the code separately in `product_code`.
- Start with `results_wanted` between 20 and 50 to confirm that the product and review order meet your needs.
- Use `DATE` for recent-feedback monitoring, `RATING` for rating-focused research, and `HELPFUL_VOTES` for reviews other travelers considered useful.
- Increase `max_pages` when you need a broader sample. The available number of reviews depends on the selected product.
- Review the dataset preview before scheduling repeated runs or exporting a large collection.
- Some reviews do not include photos, reviewer IDs, owner responses, or destination details. Missing fields usually reflect information not published for that review.
- Viator pages and publicly available review data can change. Report unexpected results through the Actor's Issues tab.

### Integrations and export formats

- **Google Sheets** - Review, filter, and share collected feedback with a team.
- **Airtable** - Maintain a searchable review database for products or destinations.
- **Webhooks** - Trigger a downstream workflow when a run finishes.
- **Make or Zapier** - Send new review records into reporting, alerts, or customer-experience workflows.
- **Apify API** - Retrieve datasets and automate repeat runs from your own application.

| Format | Useful for                                   |
| ------ | -------------------------------------------- |
| JSON   | Applications, automation, and data pipelines |
| CSV    | Spreadsheet analysis and reporting           |
| Excel  | Business review and sharing                  |
| XML    | Structured system imports                    |

### Frequently Asked Questions

#### Can I collect reviews from any Viator product page?

Yes, use a public Viator product page that contains a recognizable product code, or provide the code in `product_code`. Product pages with unusual URL formats may work more reliably when the code is entered separately.

#### Can I collect more than 20 Viator reviews?

Yes, increase `results_wanted` and set `max_pages` high enough to request the desired sample. The Actor stops when it reaches the requested limit or when no more reviews are available.

#### Which review sorting options are available?

The available options are `DATE`, `RATING`, `BEST_MATCH`, `HELPFUL_VOTES`, and `ML_SORTED`. The default is `DATE`.

#### Can I export Viator reviews to CSV or Excel?

Yes, Apify datasets can be downloaded as CSV, Excel, JSON, XML, and other supported formats. You can also connect the dataset to integrations or retrieve it through the Apify API.

#### Why is a field missing from a review record?

A field may be missing because Viator did not publish that value for the review. The Actor removes empty values from saved records, while preserving the fields that contain data.

#### Can I schedule recurring review collection?

Yes, create a schedule in Apify Console to run the Actor hourly, daily, weekly, or at another interval that fits your monitoring workflow.

#### Is collecting Viator review data legal?

Public data collection can be subject to laws, platform terms, copyright rules, and privacy requirements. You are responsible for using the data lawfully, respecting Viator and Tripadvisor rules where applicable, and collecting only the information needed for a legitimate purpose.

### Related Actors

- [Tripadvisor Reviews Scraper](https://apify.com/shahidirfan/tripadvisor-reviews-scraper) - Collect Tripadvisor reviews, ratings, and traveler feedback.
- [Airbnb Reviews Scraper](https://apify.com/shahidirfan/airbnb-reviews-scraper) - Collect guest reviews and ratings from Airbnb listings.
- [Expedia Reviews Scraper](https://apify.com/shahidirfan/expedia-reviews-scraper) - Collect hotel reviews and guest feedback from Expedia.

### Support

For issues, feature requests, or requests for additional fields, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

This Actor is intended for legitimate collection of publicly available review data. Users are responsible for complying with applicable laws, platform terms, copyright requirements, privacy rules, and any restrictions that apply to Viator or Tripadvisor content.

# Actor input Schema

## `startUrl` (type: `string`):

A Viator product URL, for example a tour page ending in /d511-3731COLOSSEUM.

## `product_code` (type: `string`):

Optional Viator product code. If provided, it overrides the code parsed from the URL.

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

Maximum number of reviews to save.

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

Maximum review pages to request. Each page can contain up to 50 reviews.

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

Review sorting mode.

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

Use Apify Proxy for reliable runs at scale.

## Actor input object example

```json
{
  "startUrl": "https://www.viator.com/tours/Rome/Colosseum-and-Ancient-Rome-Tour-with-Roman-Forum-and-Palatine-Hill/d511-3731COLOSSEUM",
  "results_wanted": 20,
  "max_pages": 5,
  "sort_by": "DATE",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrl": "https://www.viator.com/tours/Rome/Colosseum-and-Ancient-Rome-Tour-with-Roman-Forum-and-Palatine-Hill/d511-3731COLOSSEUM",
    "results_wanted": 20,
    "max_pages": 5,
    "sort_by": "DATE"
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/viator-review-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 = {
    "startUrl": "https://www.viator.com/tours/Rome/Colosseum-and-Ancient-Rome-Tour-with-Roman-Forum-and-Palatine-Hill/d511-3731COLOSSEUM",
    "results_wanted": 20,
    "max_pages": 5,
    "sort_by": "DATE",
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/viator-review-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 '{
  "startUrl": "https://www.viator.com/tours/Rome/Colosseum-and-Ancient-Rome-Tour-with-Roman-Forum-and-Palatine-Hill/d511-3731COLOSSEUM",
  "results_wanted": 20,
  "max_pages": 5,
  "sort_by": "DATE"
}' |
apify call shahidirfan/viator-review-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/HbVXQkP0nvcVdCpqD/builds/wm6K0ggkPBpm8csyZ/openapi.json
