# Viator Tours and Experiences Scraper (`parseforge/viator-scraper`) Actor

Scrapes Viator tour and activity listings by destination or activity search query. Returns each tour as a flat row with title, price, rating, review count, duration, and direct booking URL.

- **URL**: https://apify.com/parseforge/viator-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Travel, E-commerce, Other
- **Stats:** 7 total users, 2 monthly users, 90.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $19.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?

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Viator Tours and Experiences Scraper

**Scrape Viator tours and experiences by destination or activity, up to a million per run.** Every listing returns its title, price, rating, review count, duration, and direct booking link. No API key required. Export to CSV, JSON, Excel, or XML.

Viator's official API requires partnership approval and rate limits that slow down market research. This actor reads the public tour and activity search feeds directly, filtered by any destination or activity keyword you provide, and returns each matching listing in one consistent flat schema. It is built for travel analysts, tour operators, and affiliate marketers who need bulk tour data without writing a single line of code.

| Who uses it | What they scrape Viator for |
|---|---|
| Travel affiliate marketers | Build a searchable database of Viator tours with direct booking links for content sites. |
| Tour operators | Monitor competitor pricing and review scores across a destination. |
| Destination marketing organizations | Catalog every bookable experience in their region to spot gaps in the local tourism offering. |
| Data journalists | Analyze pricing trends and review distributions across popular tourist cities. |

### What it does

This Actor collects Viator tour and activity listings by destination or activity search query and returns each one as a flat row with its title, price, rating, review count, duration, and booking URL.

- 🔍 **Destination or activity search:** enter any term like 'Paris tours', 'Eiffel Tower', or 'Rome food tour' and the actor returns every matching listing.
- 📊 **Flat row output:** each tour comes as one row with title, price, rating, review count, duration, and a direct Viator booking link.
- ⚡ **High volume ready:** set maxItems up to 1,000,000 to pull every tour in a destination in a single run.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Viator data

**📈 Monitor competitor tours in a destination.**

A tour operator searches 'Barcelona walking tours' weekly, collects every listing, and tracks which competitors raised prices or gained reviews.

**🛠️ Build a tour search widget for a travel blog.**

An affiliate marketer scrapes all 'Thailand island tours', stores the flat rows in a database, and powers an on-site search widget with direct Viator booking links.

**🗺️ Catalog every experience in a region.**

A destination marketing organization searches their city name, pulls every tour, and identifies experience categories that are underserved by local operators.

**📰 Report on tourism pricing trends.**

A data journalist scrapes the same five major cities each quarter, compares average tour prices and review counts, and publishes a seasonal pricing index.

### Why choose this scraper

| | What you get |
|---|---|
| **No API approval needed** | Reads the public Viator search feeds directly, no partnership application or OAuth flow. |
| **One flat schema** | Every tour returns the same fields so you can append runs and compare destinations without cleaning. |
| **Direct booking links** | Each row includes the Viator listing URL so you can drive traffic or check availability manually. |
| **Runs in the cloud** | Schedule daily or weekly runs on the Apify platform and get fresh data without keeping a machine on. |

### How it compares

This actor focuses on fast, high-volume tour search scraping with a simple destination or activity query. Here is how it compares to other Viator scrapers on Apify Store based on their public listings.

| Feature | ParseForge | Viator Tours Intelligence | Viator Reviews Scraper | Viator Tour Search Scraper |
|---|---|---|---|---|
| Search by destination or activity keyword | Yes | Yes | Not listed | Yes |
| Returns tour price | Yes | Yes | Not listed | Yes |
| Returns rating and review count | Yes | Yes | Yes | Yes |
| Returns tour duration | Yes | Yes | Not listed | Not listed |
| Returns direct booking URL | Yes | Not listed | Not listed | Not listed |
| Filter by minimum rating before output | Not listed | Yes | Not listed | Not listed |
| Scrapes customer reviews | Not listed | Not listed | Yes | Not listed |

### Configure the run

Drive the Actor with a single destination or activity search query, and set a maximum number of tours to collect per run. The Input tab lists every parameter.

A first run with the defaults:

```json
{
 "searchQuery": "Paris tours",
 "maxItems": 10
}
```

A larger pull:

```json
{
 "searchQuery": "Paris tours",
 "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.021 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $2.10 |
| 1,000 results | $21.00 |
| 10,000 results | $210.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Viator Tours and Experiences Scraper](https://apify.com/parseforge/viator-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Viator through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/viator-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check your search query spelling. Viator search works best with destination names or specific activity phrases like 'Paris tours' or 'Eiffel Tower'. Very broad single-word queries may return zero results. Try a more specific phrase.

**The actor returned fewer tours than my maxItems setting.**

This is normal. The actor stops when Viator has no more matching listings for your query. If you searched a niche activity in a small town, there may be fewer tours available than your limit.

**Some tours are missing prices or ratings.**

Viator listings sometimes show 'from' prices or omit ratings for new tours with no reviews yet. The actor returns whatever Viator displays publicly. Missing fields will be empty in your output.

**The run timed out.**

Large searches with high maxItems values can take time. Increase the run timeout in your actor settings, or reduce maxItems and run multiple smaller searches.

**I need reviews, not tour listings.**

This actor scrapes tour and activity search results only. For customer reviews, search Apify Store for a dedicated Viator reviews scraper that extracts review text, ratings, and traveler photos.

### FAQ

| Question | Answer |
|---|---|
| Do I need a Viator API key or login? | No. This actor reads the public Viator search pages that anyone can visit in a browser. No API key, no OAuth, and no Viator account are required. |
| What data does each tour row include? | Every row returns the tour title, price, average rating, total review count, duration, and the direct Viator listing URL. The exact fields are shown in the sample output above. |
| Can I scrape tours from multiple destinations in one run? | One run handles one search query. To cover multiple destinations, run the actor once per query, or set up multiple scheduled tasks, one for each destination you track. |
| How many tours can I collect? | You set the maximum with the maxItems field, up to 1,000,000 per run. The actor stops when it hits your limit or when Viator has no more matching listings. |
| Does this actor scrape reviews? | No. This actor collects tour and activity listings from Viator search results. If you need customer reviews, look for a dedicated Viator reviews scraper on Apify Store. |
| Can I filter by price or rating? | The actor returns every listing that matches your search query. Filtering by price, rating, or review count is done after the run, in your spreadsheet, database, or code. |
| What output formats are supported? | You can export your dataset to CSV, JSON, Excel, or XML directly from the Apify platform. |
| Can I schedule this to run automatically? | Yes. Apify supports scheduled runs. Set it to daily or weekly and your dataset updates with the latest Viator listings without any manual work. |
| Is this an official Viator product? | No. This is an unofficial scraper built on Apify that reads publicly available Viator search pages. It is not affiliated with or endorsed by Viator, Inc. |
| What is the difference between this and the Viator API? | The official Viator API requires a partnership application and has rate limits. This actor reads the public search pages directly, so you can start collecting data immediately with no approval process. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Viator, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `searchQuery` (type: `string`):

Search term for tours and activities (e.g. 'Paris tours', 'Eiffel Tower', 'Rome food tour'). If omitted, a broad destination search is performed.

## `maxItems` (type: `integer`):

How many tours to collect per run.

## Actor input object example

```json
{
  "searchQuery": "Paris tours",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (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 = {
    "searchQuery": "Paris tours",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/viator-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 = {
    "searchQuery": "Paris tours",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/viator-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 '{
  "searchQuery": "Paris tours",
  "maxItems": 10
}' |
apify call parseforge/viator-scraper --silent --output-dataset

```

## MCP server setup

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