# GetYourGuide Scraper - Tours, Prices, Ratings & Duration (`scrapewise/getyourguide-scraper`) Actor

Scrape GetYourGuide tours and activities by destination, search link or activity link: price and discount, rating, review count, duration, cancellation, guide languages, highlights, inclusions, meeting point and supplier. Any currency, real filters. Error rows are free.

- **URL**: https://apify.com/scrapewise/getyourguide-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Travel, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.47 / 1,000 activity delivereds

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 Scraper: tours and activities with prices, ratings, reviews and duration

GetYourGuide Scraper collects **tours, tickets and activities from GetYourGuide** for any destination, search or
activity link, without an account, cookies or a browser. Each activity comes back as one clean row: title, city and
country, price and the struck-through original price, discount, rating and review count, duration, free
cancellation, live guide languages, highlights, what is included and excluded, meeting point with coordinates,
itinerary stops and the supplier company that runs it.

It is used by tour operators and destination marketers to benchmark prices and ratings against competitors, by
travel agencies and OTAs to build catalogs, by revenue managers to watch discounts by date, and by analysts to map
which suppliers lead each city.

### At a glance

| What | Price |
|---|---|
| Activity delivered | **US$ 2.90 per 1,000 activities** (US$ 0.0029 each) |
| Run start | US$ 0.005 per run |

- 200 activities of a city = **US$ 0.585**.
- Error rows and duplicates are never charged. `maxItems` is a hard cap for the whole run, and a spending limit set
  on the run stops it cleanly with everything delivered so far.
- GetYourGuide refuses Apify datacenter IPs, so the run goes through a US residential proxy by default.

### Quick start

The most popular activities of a destination:

```json
{
  "searchQueries": ["Rome"],
  "maxItems": 100
}
```

Cheapest skip-the-line activities in Paris rated 4.5+, under 3 hours, in euros:

```json
{
  "searchQueries": ["Paris"],
  "currency": "EUR",
  "sortBy": "price_asc",
  "minRating": "4.5",
  "durations": ["0-3h"],
  "features": ["skip_the_line"],
  "maxItems": 50
}
```

Activities with availability on given dates, with a German-speaking guide:

```json
{
  "searchQueries": ["Barcelona"],
  "dateFrom": "2026-12-27",
  "dateTo": "2026-12-30",
  "languages": ["de"],
  "maxItems": 100
}
```

Single activities and a destination page:

```json
{
  "startUrls": [
    { "url": "https://www.getyourguide.com/rome-l33/rome-vatican-museums-sistine-chapel-basilica-tour-t429439/" },
    { "url": "https://www.getyourguide.com/barcelona-l45/" }
  ]
}
```

### Input

| Field | What it does |
|---|---|
| `searchQueries` | What you would type in the GetYourGuide search box: a city, a landmark or a keyword. One search per line. |
| `startUrls` | Search result links, destination pages (`/rome-l33/`), category pages, or activity links (`...-t429439/`). Filters already in a link are kept. |
| `currency` | Currency of every price (USD default; EUR, GBP, AUD, CAD, CHF, JPY, INR, BRL, MXN and more). |
| `sortBy` | `popularity` (GetYourGuide's recommended order), `rating`, `price_asc` or `price_desc`. |
| `minRating` | `3.0`, `3.5`, `4.0`, `4.5` or `any`. |
| `durations` | `0-3h`, `3-5h`, `5-7h`, `full_day`, `2_days`, `3_days`, `4_days`, `5_days_plus`. |
| `features` | `private_tour`, `skip_the_line`, `small_group`, `wheelchair_accessible`, `hotel_pickup`, `gyg_originals`. |
| `languages` | Two-letter codes of the guide language, like `en`, `es`, `de`. |
| `priceMin`, `priceMax` | Price range per person in the chosen currency. |
| `dateFrom`, `dateTo` | Only activities available on these dates (YYYY-MM-DD); card prices follow the dates. |
| `includeDetails` | On (default): opens each activity page for the full fields when the proxy allows it (see Limitations). Off: search card fields only. |
| `maxItems` | Cap for the whole run (default 50; 0 = no cap). Links run before searches. |
| `onlyNew` | Skip activities already delivered for the same search in earlier runs of your account. |
| `proxyConfiguration` | Apify Proxy by default (US residential, see Limitations). |

`query`, `destination`, `location`, `searchTerms`, `urls`, `maxResults` and `limit` are accepted too, so inputs
written for other GetYourGuide tools keep working.

### Output

| Field | What it is |
|---|---|
| `activityId`, `title`, `url` | GetYourGuide product id, title and link |
| `city`, `country`, `breadcrumbs`, `locationId` | Where it happens, from the activity breadcrumb |
| `category` | GetYourGuide activity type (`guidedTour`, `hopOnHopOff`, `entryTicket`...) |
| `rating`, `reviewCount` | Average rating (two decimals with details on) and number of reviews |
| `price`, `originalPrice`, `discountPercent`, `currency`, `priceLabel` | "From" price per person, the struck-through price and the discount |
| `duration`, `features`, `badges` | Duration text, card features (Skip the line, Pickup available...) and badges (Top pick, Likely to sell out...) |
| `isTopPick`, `isGygOriginal` | GetYourGuide labels |
| `freeCancellation`, `cancellationPolicy`, `reserveNowPayLater` | Booking conditions |
| `skipTheLine`, `pickupIncluded`, `wheelchairAccessible` | Key flags from the activity page |
| `liveGuideLanguages`, `audioGuideLanguages` | Languages of the live guide or audio guide |
| `keyDetails` | Every key detail row of the page as `{key, title, description}` |
| `shortDescription`, `fullDescription`, `highlights` | The activity text |
| `inclusions`, `exclusions`, `whatToBring`, `notAllowed`, `notSuitableFor`, `knowBeforeYouGo` | The lists of the page |
| `itinerary` | Stops of the itinerary, in order |
| `meetingPoint`, `meetingPointLat`, `meetingPointLng` | Meeting point text and coordinates, when the activity has one |
| `supplierName`, `supplierUrl` | The company that runs the activity and its GetYourGuide page |
| `imageUrl`, `images` | Cover image and gallery |
| `searchPosition`, `sourceQuery` | Position in the search and the search or link it came from |

With `includeDetails` off, the card fields come back (title, city, category, rating, reviewCount, prices, duration,
features, badges, image, position) and the page fields stay empty.

One real row (16 Oct 2026, lists shortened):

```json
{
  "type": "activity",
  "activityId": 779094,
  "title": "Rome: Vintage Fiat 500 or Convertible Fiat 500 Tour & Photos",
  "url": "https://www.getyourguide.com/rome-l33/rome-photoshoot-experience-with-vintage-fiat-500-t779094/",
  "city": "Rome",
  "country": "Italy",
  "category": "guidedTour",
  "rating": 4.93,
  "reviewCount": 2131,
  "price": 47,
  "originalPrice": 58,
  "discountPercent": 19,
  "currency": "USD",
  "duration": "100 minutes - 2.5 hours",
  "features": ["Private option available", "Pickup available"],
  "badges": ["Top pick", "Free cancellation"],
  "freeCancellation": true,
  "cancellationPolicy": "Cancel up to 24 hours in advance for a full refund",
  "pickupIncluded": true,
  "liveGuideLanguages": ["English", "Turkish", "Russian", "Italian", "Korean"],
  "highlights": ["Experience Rome's timeless charm in a classic Fiat 500"],
  "inclusions": ["Fiat 500 transportation Free", "Professional Photos", "Photographer"],
  "notSuitableFor": ["Wheelchair users", "Babies under 1 year"],
  "itinerary": ["Colosseum", "Circus Maximus", "Janiculum Hill"],
  "meetingPoint": "in front of Oppio cafe",
  "meetingPointLat": 41.8914715,
  "meetingPointLng": 12.492757,
  "supplierName": "La GoGo SRLS",
  "supplierUrl": "https://www.getyourguide.com/la-gogo-srls-s376651/"
}
```

### Errors you may see

Every error is a row with `errorCode` and is never charged:

| errorCode | Meaning |
|---|---|
| `INVALID_URL` | Not a GetYourGuide activity, search or destination link |
| `INVALID_INPUT` | A field has a value outside its options (currency, sort, rating, date format) |
| `NOT_FOUND` | The activity or page does not exist or was removed |
| `NO_DATA` | The activity page opened without activity data |
| `NO_RESULTS` | The search and filters found nothing |
| `BLOCKED` | GetYourGuide refused every attempt; run it again in a few minutes |
| `UNEXPECTED` | Anything else; the run still finishes and nothing more is charged |

### Integrations, scheduling and AI agents

- **Schedule** a destination daily or weekly in [Apify schedules](https://docs.apify.com/platform/schedules) to
  follow prices, discounts and review counts, or use `onlyNew` to get only activities that appeared since last run.
- **Export** as JSON, CSV, Excel or XML, or read the dataset from the [Apify API](https://docs.apify.com/api/v2).
- **Connect** it to Make, n8n, Zapier or Google Sheets through
  [Apify integrations](https://docs.apify.com/platform/integrations).
- **AI agents:** call it as a tool through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp)
  in Claude, ChatGPT, Cursor or any MCP client, for example "compare the 30 most popular Lisbon food tours by price
  per hour and rating".

### FAQ

**Do I need a GetYourGuide account or partner API key?** No. The Actor reads the public pages any visitor sees.

**Why can the card price differ from the activity page?** The search card shows the "from" price for your filters
and dates; the activity page lists the lowest price over all options. The row keeps the card price when there is
one and fills it from the page for activity links.

**How many activities can one search return?** GetYourGuide shows 24 per page and the Actor pages through them; big
cities have thousands. Use filters or `maxItems` to keep the run focused.

**Are individual reviews collected?** No. Only the aggregate rating and review count, so no reviewer names are
collected. Suppliers are companies.

**Is it legal?** The Actor reads public pages only. You are responsible for how you use the data under the laws that
apply to you.

**Something broke or a field is missing?** Open an issue on the Actor page; issues are answered within a day.

### Limitations

- Prices are "from" prices per person; option-level prices and live availability per time slot are not collected.
- Text comes in English; descriptions are the ones GetYourGuide shows for English visitors.
- Fields such as meeting point, itinerary or what to bring exist only when the supplier filled them.
- Through the residential proxy (the default, since GetYourGuide refuses datacenter IPs) activities come with the
  search card fields only: the activity pages are too heavy to open at this price. Activity details come when the
  run uses your own proxy that GetYourGuide accepts.

### Changelog

- **16 Oct 2026:** first version: destination search, search, destination and activity links, sort, rating,
  duration, feature, language, price and date filters, any currency, full activity page details, `onlyNew`.

# Actor input Schema

## `searchQueries` (type: `array`):

What you would type in the GetYourGuide search box, one per line: a city (Rome), a landmark (Eiffel Tower) or a keyword (Lisbon food tour). Each line is one search. Leave empty when you paste links below.

## `startUrls` (type: `array`):

Search result links (getyourguide.com/s/?q=...), destination pages (getyourguide.com/rome-l33/), category pages, or single activity links (...-t429439/). Filters already in a link are kept.

## `currency` (type: `string`):

Currency of every price in the run.

## `sortBy` (type: `string`):

Order of the search results.

## `minRating` (type: `string`):

Keep only activities rated at least this.

## `durations` (type: `array`):

Keep only these durations. Empty = all.

## `features` (type: `array`):

Keep only activities with all of these features. Empty = all.

## `languages` (type: `array`):

Two-letter language codes of the live guide or audio guide, for example en, es, de. Empty = any language.

## `priceMin` (type: `integer`):

Lowest price per person, in the chosen currency.

## `priceMax` (type: `integer`):

Highest price per person, in the chosen currency.

## `dateFrom` (type: `string`):

Only activities with availability on these dates (YYYY-MM-DD). Prices then follow those dates.

## `dateTo` (type: `string`):

End of the date window (YYYY-MM-DD). Empty = same day as Available from.

## `includeDetails` (type: `boolean`):

On: open each activity page for exact rating, cancellation policy, guide languages, highlights, inclusions, meeting point, itinerary and supplier. Off: faster, search card fields only.

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

Cap for the whole run, across every search and link (0 = no cap).

## `onlyNew` (type: `boolean`):

On: skip activities this Actor already delivered for the same search in earlier runs of your account.

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

Apify Proxy by default. GetYourGuide refuses datacenter IPs, so the run goes through a US residential proxy, with the search card fields only.

## Actor input object example

```json
{
  "searchQueries": [
    "Rome"
  ],
  "currency": "USD",
  "sortBy": "popularity",
  "minRating": "any",
  "includeDetails": true,
  "maxItems": 50,
  "onlyNew": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (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 = {
    "searchQueries": [
        "Rome"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/getyourguide-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 = {
    "searchQueries": ["Rome"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/getyourguide-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 '{
  "searchQueries": [
    "Rome"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/getyourguide-scraper --silent --output-dataset

```

## MCP server setup

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