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

Scrape tours and experiences from Viator including titles, prices, durations, ratings, review counts, locations, categories and availability. Build datasets of travel activities for price comparison, destination research and tourism market analysis at scale across the full catalog

- **URL**: https://apify.com/parseforge/viator-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Travel, E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN 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/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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🌍 Viator Tours & Activities Scraper

> 🚀 **Export Viator tour listings to CSV, Excel, JSON, or XML in seconds.** Search by destination, keyword, or activity type and get prices, ratings, durations, and more for any Viator tour worldwide.

> 🕒 **Last updated:** 2026-05-22 · **📊 12 fields** per record · **🌍 300,000+ tours** · **🗺️ 190+ countries**

The **Viator Tours & Activities Scraper** collects real-time tour and activity listings from [Viator](https://www.viator.com), the world's largest platform for travel experiences. Every run fetches live data directly from Viator's search results, with no stale caches or synthetic data.

Viator lists over 300,000 tours in 190+ countries, covering everything from city walking tours and museum tickets to adventure activities and day trips. This scraper delivers structured, analysis-ready records for any search query you provide.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Travel agencies, OTA platforms, tour operators, data analysts, travel bloggers, tourism researchers | Competitor pricing, tourism market analysis, content enrichment, top-rated activity discovery, demand and pricing studies |

---

### 📋 What the Viator Scraper does

- 🔎 **Keyword search.** Searches Viator for tours and activities matching any query.
- 📄 **Search result extraction.** Pulls title, price, currency, rating, review count, duration, location, and image per tour.
- 🔁 **Automatic pagination.** Pages through results until your `maxItems` target is reached.
- 🛡️ **Bot protection bypass.** Uses stealth browser fingerprinting and residential proxies for stable access.
- 📥 **Export ready.** CSV, Excel, JSON, or XML downloads available from the dataset tab.

> 💡 **Why it matters:** Viator is the dominant global marketplace for travel experiences. Monitoring prices, ratings, and availability lets agencies, operators, and analysts make smarter decisions about tour offerings and competitive positioning.

---

### 🎬 Full Demo

_🚧 Coming soon: a 3-minute walkthrough showing how to go from sign-up to a downloaded dataset._

---

### ⚙️ Input

<table>
<thead>
<tr><th>Input</th><th>Type</th><th>Default</th><th>Behavior</th></tr>
</thead>
<tbody>
<tr><td><code>searchQuery</code></td><td>string</td><td><code>"Paris tours"</code></td><td>Search term for tours and activities. Accepts destinations, landmarks, or activity types.</td></tr>
<tr><td><code>maxItems</code></td><td>integer</td><td><code>10</code></td><td>Records to return. Free plan caps at 10, paid plan at 1,000,000.</td></tr>
</tbody>
</table>

**Example: search by destination.**

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

**Example: search by activity type.**

```json
{
    "searchQuery": "snorkeling Hawaii",
    "maxItems": 50
}
```

> ⚠️ **Good to Know:** the `searchQuery` field accepts any text you would type into Viator's search bar. Try destination names, activity types, landmark names, or combinations like "Colosseum skip-the-line" or "Tokyo food tour".

***

### 📊 Output

Each tour record contains **12 fields**. Download the dataset as CSV, Excel, JSON, or XML.

#### 🧾 Schema

| Field | Type | Description |
|---|---|---|
| 🖼️ `imageUrl` | string | Tour thumbnail image URL |
| 🔑 `productCode` | string | Unique Viator product identifier |
| 📌 `title` | string | Full tour title |
| ⭐ `rating` | float | Average star rating (0-5) |
| 💬 `reviewCount` | integer | Total number of reviews |
| 💰 `price` | float | Starting price in local currency |
| 💱 `currency` | string | Price currency code (e.g. "USD") |
| ⏱️ `duration` | string | Tour duration (e.g. "2 hours 30 min") |
| 📍 `location` | string | Primary destination |
| 🔗 `url` | string | Full Viator product URL |
| 🕒 `scrapedAt` | string | ISO timestamp of scrape |
| ❌ `error` | string | null | Error message if scrape failed |

#### 📦 Sample records

<details>
<summary><strong>🗼 Guided Notre Dame tour, Paris</strong></summary>

```json
{
    "imageUrl": "https://dynamic-media.tacdn.com/media/photo-o/2e/ae/b8/c3/caption.jpg?w=800&h=600&s=1",
    "productCode": "457596P7",
    "title": "Notre Dame Guided Tour with Scheduled Group Access Option",
    "rating": 4.4,
    "reviewCount": 301,
    "price": 32,
    "currency": "USD",
    "duration": "1 hour",
    "location": "Paris",
    "url": "https://www.viator.com/tours/Paris/Notre-Dame-Outdoor-Walking-Tour/d479-457596P7",
    "scrapedAt": "2026-05-22T01:48:05.376Z",
    "error": null
}
```

</details>

<details>
<summary><strong>🚶 Tip-based walking tour, Paris</strong></summary>

```json
{
    "imageUrl": "https://dynamic-media.tacdn.com/media/photo-o/30/12/46/ce/caption.jpg?w=800&h=600&s=1",
    "productCode": "394285P13",
    "title": "Paris City Center Free Walking Tour (Tip-Based)",
    "rating": 5,
    "reviewCount": 1598,
    "price": 4,
    "currency": "USD",
    "duration": "2 hours 15 min",
    "location": "Paris",
    "url": "https://www.viator.com/tours/Paris/Paris-City-Center-Tip-Based-Tour/d479-394285P13",
    "scrapedAt": "2026-05-22T01:48:05.466Z",
    "error": null
}
```

</details>

<details>
<summary><strong>🗺️ Half day sightseeing tour, Paris</strong></summary>

```json
{
    "imageUrl": "https://dynamic-media.tacdn.com/media/photo-o/2e/a7/25/95/caption.jpg?w=800&h=600&s=1",
    "productCode": "131689P1",
    "title": "Paris Top Sights Half Day Walking Tour with a Fun Guide",
    "rating": 4.9,
    "reviewCount": 3050,
    "price": 75,
    "currency": "USD",
    "duration": "5 hours",
    "location": "Paris",
    "url": "https://www.viator.com/tours/Paris/See-30-Plus-Top-Paris-Sights-in-1-Tour/d479-131689P1",
    "scrapedAt": "2026-05-22T01:48:05.490Z",
    "error": null
}
```

</details>

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 🌐 | **Real-time data.** Every run fetches live Viator listings, no stale cache. |
| 🛡️ | **Stealth browser.** Advanced browser fingerprinting reliably bypasses bot detection. |
| 🌎 | **Residential proxies.** Routes requests through real user IPs for stable access. |
| 🔁 | **Smart pagination.** Automatically pages through results to hit your `maxItems` target. |
| 🧱 | **Structured output.** Clean, analysis-ready JSON with consistent field types. |
| 🗺️ | **Global coverage.** Works for any destination or activity worldwide. |
| 🚫 | **No authentication.** No login or API key needed. |

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Bot bypass | Setup |
|---|---|---|---|---|---|
| **⭐ Viator Scraper** *(this Actor)* | $5 free credit, then pay-per-use | **300,000+** tours | **Live per run** | Built in | ⚡ 2 min |
| Manual browsing | Free | Full | Manual | Yes | 🐢 Hours |
| Generic scrapers | Varies | Limited | Varies | Unreliable | ⏳ Hours |
| Viator partner API | Restricted | Full | Real time | N/A | 🐌 Days, approval gated |

Pick this Actor when you want fast, structured tour data without applying for partner access.

***

### 🚀 How to use

1. 📝 **Sign up.** [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) (takes 2 minutes).
2. 🌐 **Open the Actor.** Go to the Viator Tours & Activities Scraper page on the Apify Store.
3. 🎯 **Set input.** Enter your search query (e.g. "London day trips") and `maxItems`.
4. 🚀 **Run it.** Click **Start** and let the Actor collect your data.
5. 📥 **Download.** Grab your results in the **Dataset** tab as CSV, Excel, JSON, or XML.

> ⏱️ Total time from signup to downloaded dataset: **3-5 minutes.** No coding required.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%" valign="top">

#### 🧭 Travel Agency Competitive Intelligence

- Monitor competitor pricing on Viator by destination
- Track bestseller rankings and rating distributions
- Detect seasonal price shifts and inventory gaps
- Optimize your own Viator listings and positioning

</td>
<td width="50%" valign="top">

#### 🌐 OTA Content Enrichment

- Aggregate structured tour data across destinations
- Power comparison platforms and travel apps
- Link `productCode` and `url` back to live Viator pages
- Refresh content automatically on a schedule

</td>
</tr>
<tr>
<td width="50%" valign="top">

#### 📊 Tourism Market Research

- Count offerings by category and city
- Compare average prices across destinations
- Track review volume as a demand signal
- Support destination management organizations and tourism boards

</td>
<td width="50%" valign="top">

#### 💵 Revenue Management

- Track price changes for specific tour types
- Monitor pricing around peak seasons and holidays
- Build longitudinal pricing histories
- Inform dynamic pricing strategy for tour operators

</td>
</tr>
</table>

***

### 🔌 Automating Viator Scraper

Control the scraper programmatically for scheduled runs and pipeline integrations:

- 🟢 **Node.js.** Install the `apify-client` NPM package.
- 🐍 **Python.** Use the `apify-client` PyPI package.
- 📚 See the [Apify API documentation](https://docs.apify.com/api/v2) for full details.

The [Apify Schedules feature](https://docs.apify.com/platform/schedules) lets you trigger this Actor on any cron interval. Hourly, daily, or weekly refreshes keep downstream databases in sync automatically.

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Tourism pricing studies across global destinations
- Geospatial analysis of tour supply density
- Reproducible datasets for travel economics research
- Cross-country comparisons of experience economies

</td>
<td width="50%">

#### 🎨 Personal and creative

- Travel bloggers building curated destination guides
- Personal travel planning shortlists by rating and price
- Travel writers backing posts with real numbers
- Content creators generating data-driven recommendations

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Eco-tour operators benchmarking sustainable offerings
- NGOs tracking responsible tourism positioning
- Community tourism boards measuring local supply
- Civic tourism transparency reporting

</td>
<td width="50%">

#### 🧪 Experimentation

- Train recommendation models on tour metadata
- Prototype "best value" ranking algorithms
- Build LLM-powered travel planners
- Test conversion hypotheses with real listing data

</td>
</tr>
</table>

***

### 🤖 Ask an AI assistant about this scraper

Open a ready-to-send prompt about this ParseForge actor in the AI of your choice:

- 💬 [**ChatGPT**](https://chat.openai.com/?q=How%20do%20I%20use%20the%20Viator%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🧠 [**Claude**](https://claude.ai/new?q=How%20do%20I%20use%20the%20Viator%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🔍 [**Perplexity**](https://perplexity.ai/search?q=How%20do%20I%20use%20the%20Viator%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🅒 [**Copilot**](https://copilot.microsoft.com/?q=How%20do%20I%20use%20the%20Viator%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)

***

### ❓ Frequently Asked Questions

#### 🌍 What destinations does this scraper support?

Any destination available on Viator. 190+ countries, thousands of cities. Just use the destination name in your `searchQuery` (e.g. "Barcelona", "Tokyo", "New York City").

#### 📦 How many tours can I scrape?

Free users get 10 tours per run as a preview. Paid users can request up to 1,000,000 tours per run. Each Viator search page shows up to 24 results and the scraper paginates automatically.

#### 🔄 How fresh is the data?

Every run fetches live data from Viator in real time. Prices and availability are as current as Viator's own search results.

#### 🔑 What does the `productCode` field contain?

The Viator product code (e.g. "457596P7") is the unique identifier for each tour. You can construct the product URL as `https://www.viator.com/tours/DESTINATION/SLUG/d{DESTID}-{PRODUCTCODE}`.

#### 🌐 Does this work with non-English searches?

Viator's search engine accepts any language. Try "tours Paris" in French or Spanish for localized results.

#### ⏱️ How long does a run take?

For 10 items: roughly 1-2 minutes. For 100 items: 3-5 minutes. For 1,000 items: 20-30 minutes.

#### 🛡️ What if the scraper fails?

The actor includes automatic retry logic and DataDome bypass. If a run fails, retry with the same input. Bot protection challenges are non-deterministic.

#### 🎯 Can I scrape specific tour types?

Yes. Use specific search queries like "sunset cruise Santorini", "skip-the-line Louvre", or "wine tasting Napa Valley".

#### ⏰ Can I schedule regular runs?

Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) to run this Actor on any cron interval (hourly, daily, weekly) and keep downstream databases in sync.

#### ⚖️ Is this legal to use?

Scraping publicly available search results is generally permitted for research and analysis. Review Viator's Terms of Service for your specific use case. This Actor is for informational purposes.

#### 📥 How do I export to Excel?

After the run completes, go to the dataset view and click the Download dropdown. Select "Excel (.xlsx)" for a formatted spreadsheet.

#### 🆘 What if I need help?

Our support team is here to help. Use the Tally form linked below to reach out.

***

### 🔌 Integrate with any app

Viator Scraper connects to any cloud service via [Apify integrations](https://apify.com/integrations):

- [**Make**](https://docs.apify.com/platform/integrations/make) - Automate multi-step workflows
- [**Zapier**](https://docs.apify.com/platform/integrations/zapier) - Connect with 5,000+ apps
- [**Slack**](https://docs.apify.com/platform/integrations/slack) - Get run notifications in your channels
- [**Airbyte**](https://docs.apify.com/platform/integrations/airbyte) - Pipe tour data into your warehouse
- [**GitHub**](https://docs.apify.com/platform/integrations/github) - Trigger runs from commits and releases
- [**Google Drive**](https://docs.apify.com/platform/integrations/drive) - Export datasets straight to Sheets

You can also use webhooks to trigger downstream actions when a run finishes.

***

### 🔗 Recommended Actors

- [**🏨 Booking.com Hotels Scraper**](https://apify.com/parseforge/booking-com-hotels-scraper) - Hotel availability and pricing worldwide
- [**🏠 Airbnb Scraper**](https://apify.com/parseforge/airbnb-scraper) - Short-term rental listings and host data
- [**✈️ OurAirports Global Airport Database Scraper**](https://apify.com/parseforge/ourairports-scraper) - 85,000+ airports for travel routing
- [**🍽️ OpenTable Scraper**](https://apify.com/parseforge/opentable-scraper) - Restaurant availability and reviews
- [**⭐ Yelp Reviews Scraper**](https://apify.com/parseforge/yelp-reviews-scraper) - Reviews and ratings from Yelp

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more travel and reference-data scrapers.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) to request a new scraper, propose a custom data project, or report an issue.

***

> **⚠️ Disclaimer:** this Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Viator or TripAdvisor LLC. All trademarks mentioned are the property of their respective owners. Only publicly available data is collected.

# 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`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## 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("💾 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 '{
  "searchQuery": "Paris tours",
  "maxItems": 10
}' |
apify call parseforge/viator-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Viator Scraper | Tours and Experiences Data",
        "description": "Scrape tours and experiences from Viator including titles, prices, durations, ratings, review counts, locations, categories and availability. Build datasets of travel activities for price comparison, destination research and tourism market analysis at scale across the full catalog",
        "version": "0.1",
        "x-build-id": "FunUXpdMWPM26x0xE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~viator-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-viator-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/parseforge~viator-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-viator-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/parseforge~viator-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-viator-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": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search term for tours and activities (e.g. 'Paris tours', 'Eiffel Tower', 'Rome food tour'). If omitted, a broad destination search is performed."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
