# Getyourguide Tours Search Scraper (`stealth_mode/getyourguide-tours-search-scraper`) Actor

Scrape structured tour and activity listings from GetYourGuide.com — including titles, prices, reviews, photos, categories, and availability. Perfect for travel aggregators, market researchers, and tour operators benchmarking the competition.

- **URL**: https://apify.com/stealth_mode/getyourguide-tours-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Travel
- **Stats:** 1 total users, 0 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

## GetYourGuide Tours Scraper: Extract Travel Activity Data at Scale

***

### What Is GetYourGuide.com?

GetYourGuide is one of the world's largest online marketplaces for travel experiences, tours, and activities. From skip-the-line museum tickets in Paris to guided hikes in Patagonia, the platform hosts hundreds of thousands of listings across virtually every destination on earth. For travel businesses, researchers, and developers, this represents an enormous dataset — but manually collecting it is impractical.

The **GetYourGuide Tours Scraper** solves this by automatically extracting structured activity data from any GetYourGuide destination or category search page, delivering clean, analysis-ready records at scale.

***

### Overview

The **GetYourGuide Tours Search Scraper** targets destination or category listing pages (e.g., `/paris-l16/`) and extracts detailed records for each tour or activity displayed. It is built for:

- **Travel aggregators** feeding content into comparison or booking platforms
- **Tour operators** benchmarking pricing and offerings against competitors
- **Market researchers** analyzing activity trends by destination or category
- **Developers** building travel recommendation engines or datasets

Key capabilities include configurable item limits per URL, fault-tolerant execution via `ignore_url_failures`, and broad coverage of activity metadata including reviews, pricing, and availability signals.

***

### Input Format

The scraper accepts a simple JSON configuration:

```json
{
  "urls": [
    "https://www.getyourguide.com/paris-l16/"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 50
}
```

#### Field Reference

| Field | Type | Default | Description |
|---|---|---|---|
| `urls` | `array` | — | One or more GetYourGuide destination or category listing URLs to scrape. Supports single entry or bulk list. Example: `https://www.getyourguide.com/paris-l16/` |
| `max_items_per_url` | `integer` | `20` | Maximum number of tour listings to collect per URL. Increase for broader coverage, reduce for faster runs. |
| `ignore_url_failures` | `boolean` | `true` | When `true`, the scraper continues processing remaining URLs if one fails, rather than stopping the entire run. Recommended for bulk jobs. |

> **Tip:** To scrape multiple destinations in one run, add each destination URL as a separate entry in the `urls` array (e.g., `https://www.getyourguide.com/rome-l173/`, `https://www.getyourguide.com/barcelona-l45/`). The `max_items_per_url` limit applies independently to each.

***

### Output Format

#### Sample Output Record

```json
{
  "id": 395320,
  "tour_id": 395320,
  "title": "Disneyland® Paris 1-Day Ticket",
  "activity_abstract": "Step into a world of wonder at Disneyland® Paris. Explore magical lands, thrilling rides, and meet beloved Disney characters.",
  "url": "/paris-l16/disneyland-paris-2-parks-ticket-1-2-3-4-5-day-t395320/",
  "review_statistics": {
    "quantity": 53233,
    "rating": 4.6382008
  },
  "price": {
    "base_price": 1655800,
    "booking_fee": null,
    "currency": "VND",
    "currency_symbol": "₫",
    "discount_percentage": "",
    "formatted_base_price": "₫1,655,800",
    "formatted_starting_price": "₫1,655,800",
    "price_category": "individual",
    "price_category_label": "per person",
    "starting_price": 1655800,
    "unformatted_booking_fee": 0,
    "unformatted_discount_percentage": 0
  },
  "photos": [
    {
      "urls": [
        {
          "url": "https://cdn.getyourguide.com/img/tour/fea1f058382affdd2d631301246d665ee1005bb0b412acb3281a06f777f2191a.jpg/53.jpg",
          "size": "thumb"
        },
        {
          "url": "https://cdn.getyourguide.com/img/tour/fea1f058382affdd2d631301246d665ee1005bb0b412acb3281a06f777f2191a.jpg/132.jpg",
          "size": "medium"
        },
        {
          "url": "https://cdn.getyourguide.com/img/tour/fea1f058382affdd2d631301246d665ee1005bb0b412acb3281a06f777f2191a.jpg/68.jpg",
          "size": "mobile"
        }
      ]
    }
  ],
  "category": "entryTicket",
  "attributes": [
    {
      "type": "validity",
      "label": "1 day"
    },
    {
      "type": "certifiedPartner"
    },
    {
      "type": "wheelchairAccessible",
      "label": "Wheelchair accessible"
    },
    {
      "type": "entryTicketIncluded",
      "label": "Entry ticket included"
    },
    {
      "type": "validityPeriod",
      "label": "Valid 1 day"
    },
    {
      "type": "bookedIn24Hours",
      "label": "Booked 232 times yesterday"
    },
    {
      "type": "bookedIn24HoursValue",
      "label": "232"
    }
  ],
  "availability": {
    "message": "Available today and tomorrow",
    "type": "positive",
    "next_available_date_time": "2026-05-22T09:30:00+02:00",
    "metadata": {
      "pattern": "pActivityCardBanner available today_tomorrow",
      "date": "2026-05-22"
    }
  },
  "activity_type": "entryTicket",
  "from_url": "https://www.getyourguide.com/paris-l16/"
}
```

Each scraped tour or activity returns a structured record with the following fields:

#### Core Identification

| Field | Meaning |
|---|---|
| `ID` | Internal scraper-assigned record identifier |
| `Tour ID` | GetYourGuide's unique identifier for the activity listing |
| `Title` | Full display name of the tour or activity as shown on the listing page |
| `URL` | Direct link to the activity's detail page on GetYourGuide |

#### Content & Description

| Field | Meaning |
|---|---|
| `Activity Abstract` | Short summary or teaser description of the activity, typically used in listing cards |
| `Activity Type` | Classification of the experience format (e.g., tour, transfer, class, rental, ticket) |
| `Category` | Thematic grouping of the activity (e.g., Sightseeing, Food & Drink, Outdoor Activities, Museums) |
| `Attributes` | Structured tags and features associated with the listing, such as "Free cancellation", "Skip the line", "Small group", "Guided", "Duration" ranges, or "Language" options |

#### Pricing

| Field | Meaning |
|---|---|
| `Price` | Displayed pricing information, typically including the base price per person, currency, and any promotional or "from" pricing indicators |

#### Social Proof & Ratings

| Field | Meaning |
|---|---|
| `Review Statistics` | Aggregated review data for the activity, which may include overall rating score, total number of reviews, and rating distribution — useful for quality benchmarking and filtering |

#### Media

| Field | Meaning |
|---|---|
| `Photos` | Collection of image URLs associated with the listing, typically including the primary thumbnail and gallery images used on the activity card and detail page |

#### Scheduling

| Field | Meaning |
|---|---|
| `Availability` | Signals about scheduling availability, which may include available dates, time slots, or availability status indicators shown on the listing |

***

### How to Use

1. **Find destination URLs** — Navigate to GetYourGuide.com, search for a destination or category, and copy the resulting listing page URL (e.g., `https://www.getyourguide.com/london-l13/`).
2. **Configure the input** — Paste your URLs into the `urls` array. Adjust `max_items_per_url` based on how many listings you need per destination.
3. **Set fault tolerance** — Keep `ignore_url_failures: true` for multi-URL runs to prevent a single bad URL from stopping the job.
4. **Run the scraper** — Start the actor and monitor progress in the run log.
5. **Export results** — Download the dataset as JSON, CSV, or Excel for use in spreadsheets, databases, or BI tools.

**Best practices:**

- Use destination-level URLs (e.g., `/paris-l16/`) rather than individual tour pages for broad collection.
- For category-specific extraction, use filtered GetYourGuide URLs (e.g., food tours, walking tours) to narrow results before scraping.
- Set `max_items_per_url` to `50` or higher for comprehensive destination coverage.

**Common issues:**

- If results are empty, confirm the URL is a *listing/search* page, not an individual activity detail page.
- Destination slugs vary by region — verify the correct URL format on the GetYourGuide website before adding to your input.

***

### Use Cases & Business Value

- **Price monitoring:** Track how competitor operators price similar tours across shared destinations
- **Content aggregation:** Power travel comparison sites or apps with rich, up-to-date activity data
- **Demand analysis:** Identify which activity categories and attributes correlate with high review volume
- **Inventory research:** Discover gaps in a destination's tour offerings to inform new product development
- **SEO & content strategy:** Understand how top-ranked listings describe and categorize their activities

The GetYourGuide Tours Scraper replaces hours of manual browsing with automated, consistent data collection — enabling teams to focus on analysis and strategy rather than copy-paste work.

***

### Conclusion

The **GetYourGuide Tours Search Scraper** is an efficient, configurable tool for extracting structured travel activity data at scale. With 12 output fields covering pricing, reviews, media, availability, and categorization, it delivers the depth needed for competitive research, platform development, and market analysis. Configure your destination URLs, set your item limit, and start turning GetYourGuide listings into actionable intelligence.

# Actor input Schema

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

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

## `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
{
  "urls": [
    "https://www.getyourguide.com/paris-l16/"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.getyourguide.com/paris-l16/"
    ],
    "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/getyourguide-tours-search-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.getyourguide.com/paris-l16/"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/getyourguide-tours-search-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 '{
  "urls": [
    "https://www.getyourguide.com/paris-l16/"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/getyourguide-tours-search-scraper --silent --output-dataset

```

## MCP server setup

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