# GetYourGuide Scraper \[$1.6💰] | Tours | Prices | Reviews (`ahmed_jasarevic/getyourguide-scraper`) Actor

Extract tours, activities, prices and reviews from GetYourGuide for tour price monitoring, travel market research and things-to-do data feeds. Structured JSON via the Apify API.

- **URL**: https://apify.com/ahmed_jasarevic/getyourguide-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Features:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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 Scraper — Extract GetYourGuide Tours, Activities, Prices & Reviews

The GetYourGuide Scraper extracts GetYourGuide tours, activities, prices, and reviews directly from the same public JSON API the GetYourGuide frontend uses (`travelers-api.getyourguide.com`). With no browser rendering and no anti-bot overhead, it delivers fast, reliable access to GetYourGuide data for travel market research, price monitoring, and content enrichment.

### Main use cases

- **Tour price monitoring** — Track prices for GetYourGuide activities over time to spot discounts, price changes, and seasonal trends.
- **Attraction ticket price comparison** — Collect up-to-date pricing and discount information to compare offerings across destinations and activities.
- **GetYourGuide reviews data extraction** — Scrape reviews per activity (separately stored in the reviews dataset) to analyze customer sentiment and feedback at scale.
- **Things to do data for travel websites** — Build "things to do in \[city]" pages with structured activity data including location, pricing, duration, and ratings.
- **Activities market research** — Extract structured tour and activity data to support travel market research, competitive analysis, and product intelligence.
- **Destination experiences data collection** — Gather comprehensive activity listings, details, and POIs for destinations to power content and research workflows.

### How it works

This Actor bypasses Cloudflare Turnstile and HTML rendering by calling the public JSON endpoints that power GetYourGuide’s frontend. It uses Crawlee’s `HttpCrawler` (got-scraping TLS fingerprinting) to handle retries, concurrency, sessions, and standard Apify proxy configuration. The crawler resolves destinations, fetches activity listings, enriches each activity with details and booking options, and paginates reviews via the reviews API. Results are stored as structured dataset items with all 31 verified fields.

### Input Parameters

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `startUrls` | array | No | – | GetYourGuide destination URLs (e.g. `https://www.getyourguide.com/paris-l16/`) or activity URLs (e.g. `.../some-tour-t1031725/`). Prefilled with Paris destination. |
| `destination` | string | No | `Paris` | Destination to scrape: city/country name (`Paris`, `Rome`, `Italy`), slug (`paris-l16`), or numeric location ID (`16`). Resolved against GetYourGuide’s destination index. |
| `activityIds` | array | No | `[]` | Scrape specific activities by ID (the number after `-t` in the activity URL). |
| `maxActivities` | integer | No | `20` | Maximum activities to scrape per destination (top-ranked first). Range 1–500. Free-plan users are capped at **10 activities per run**; paid plans get the full `maxActivities`. |
| `scrapeDetails` | boolean | No | `true` | Fetch rich details for each activity (images, price breakdown, availability, cancellation policy, features, booking options). When `false`, only listing cards are returned. |
| `maxReviewsPerActivity` | integer | No | `10` | Reviews to fetch per activity (0 disables review fetching). Range 0–100. Fetched via the activity reviews API, sorted by recommended. |
| `currency` | string | No | `USD` | Price currency. One of: USD, EUR, GBP, AUD, CAD, CHF, SEK, NOK, DKK, JPY, KRW, SGD, AED, MXN, BRL, INR, NZD, PLN, CZK, ZAR. |
| `proxy` | object | No | `{ "useApifyProxy": false }` | Standard Apify proxy configuration. Enable for datacenter-free runs. |

### Output Fields

The Actor writes **two datasets**:

#### 1. Activities (default dataset) — 31 fields

One dataset item per activity:

- `id` (integer) — GetYourGuide activity ID
- `title` (string, null) — Activity title
- `url` (string, null) — Canonical activity URL on getyourguide.com
- `city` (string, null) — City name
- `country` (string, null) — Country name
- `destination` (object, null) — Destination context `{id, name, country}`
- `pois` (array) — Point-of-interest names matched from the destination page
- `category` (string, null) — Activity category
- `activityType` (string, null) — Activity type
- `abstract` (string, null) — Activity abstract/description summary
- `highlights` (array) — Feature labels (e.g., pickup, free cancellation)
- `priceFrom` (number, null) — Starting price
- `originalPrice` (number, null) — Original price (if discounted)
- `discountPercent` (number, null) — Discount percentage
- `currency` (string, null) — Price currency
- `priceFormatted` (string, null) — Formatted price string
- `priceCategory` (string, null) — Price category
- `rating` (number, null) — Average rating
- `reviewCount` (integer, null) — Total review count
- `ratingType` (string, null) — Rating type
- `duration` (string, null) — Human-readable duration
- `durationMinutes` (integer, null) — Duration in minutes
- `images` (array) — Image objects/URLs (full-size `original.jpg` URLs included)
- `availability` (object, null) — Availability information
- `cancellation` (object, null) — Cancellation policy details
- `coordinates` (object, null) — Geographic coordinates
- `options` (array) — Booking options (includes languages and per-option cancellation)
- `reviewStats` (object, null) — Review statistics
- `supplier` (string, null) — Not exposed by the public JSON API; always `null` in this version
- `source` (string) — API source identifier
- `fetchedAt` (string) — ISO timestamp when fetched

#### 2. Reviews (`reviews` dataset)

One dataset item per review, joined with its activity:

- `id` — Review ID
- `activityId` — Associated activity ID
- `activityTitle` — Activity title
- `activityUrl` — Canonical activity URL
- `city` — City
- `country` — Country
- `author` — Review author
- `authorCountry` — Author country
- `rating` — Review rating
- `title` — Review title
- `text` — Review text
- `date` — Review date
- `travelerType` — Traveler type
- `language` — Review language
- `reply` (object) — Reply `{text, date}` if present
- `optionId` — Booking option ID if applicable
- `source` — API source
- `fetchedAt` — ISO timestamp when fetched

Reviews are **not embedded** in activity items — export both datasets and join on `activityId`.

### Example Input And Output

#### Example Input JSON

```json
{
  "startUrls": [
    {
      "url": "https://www.getyourguide.com/paris-l16/"
    }
  ],
  "destination": "Paris",
  "activityIds": [],
  "maxActivities": 20,
  "scrapeDetails": true,
  "maxReviewsPerActivity": 10,
  "currency": "USD",
  "proxy": {
    "useApifyProxy": false
  }
}
```

#### Example Output JSON (single activity item)

```json
{
  "id": 123456,
  "title": "Eiffel Tower Skip-the-Line Ticket",
  "url": "https://www.getyourguide.com/paris-l16/eiffel-tower-skip-the-line-ticket-t123456/",
  "city": "Paris",
  "country": "France",
  "destination": {
    "id": 16,
    "name": "Paris",
    "country": "France"
  },
  "pois": [],
  "category": "Tickets",
  "activityType": "Entry ticket",
  "abstract": null,
  "highlights": [
    "Skip-the-line access",
    "Free cancellation"
  ],
  "priceFrom": 39.99,
  "originalPrice": null,
  "discountPercent": null,
  "currency": "USD",
  "priceFormatted": "$39.99",
  "priceCategory": "Standard",
  "rating": 4.7,
  "reviewCount": 2500,
  "ratingType": "excellent",
  "duration": "1.5 hours",
  "durationMinutes": 90,
  "images": [],
  "availability": null,
  "cancellation": {
    "isCancellable": true,
    "freeUntilMinutesBeforeStart": 1440,
    "feePercent": 0,
    "policyLabel": "Free cancellation up to 24 hours before"
  },
  "coordinates": null,
  "options": [],
  "reviewStats": null,
  "supplier": null,
  "source": "travelers-api.getyourguide.com",
  "fetchedAt": "2026-10-08T00:00:00.000Z"
}
```

### Integrations & Automation

- **Apify API** — Run this Actor programmatically via the Apify API, integrate into CI/CD workflows, or trigger from external systems.
- **Webhooks** — Get notified when runs complete and automatically process results.
- **Zapier** — Connect results to 5,000+ apps (Google Sheets, Airtable, Slack, email, CRMs) without code.
- **Make (formerly Integromat)** — Build automated workflows that ingest, transform, and route GetYourGuide data.
- **Recurring schedules** — Schedule daily or weekly runs (e.g. daily for price monitoring) to keep datasets fresh. Recurring usage improves Store recommendation signals and ensures data stays current.

### Related Actors

- [GetYourGuide Review Scraper](https://apify.com/louvre/gyg-review-scraper) (`louvre/gyg-review-scraper`) — Dedicated tool for extracting structured GetYourGuide reviews.
- [GetYourGuide Scraper - Tours, Activities, Prices & Reviews](https://apify.com/scrapesage/getyourguide-scraper) (`scrapesage/getyourguide-scraper`) — Comprehensive GetYourGuide scraper with supplier/operator insights.
- [GetYourGuide](https://apify.com/vanderleicatanzaro/getyourguide) (`vanderleicatanzaro/getyourguide`) — Multi-language/multi-currency GetYourGuide extraction with affiliate link support.
- [GetYourGuide Activities Scraper](https://apify.com/automation-lab/getyourguide-activities-scraper) (`automation-lab/getyourguide-activities-scraper`) — Exports tours and activities with rankings, badges, and booking velocity.
- [GetYourGuide Tours & Activities Scraper](https://apify.com/crawlerbros/getyourguide-scraper) (`crawlerbros/getyourguide-scraper`) — Simple HTTP-based extraction of GetYourGuide tours, activities, and experiences.

### FAQ

#### Is there an official GetYourGuide API?

Yes, GetYourGuide offers a Partner API (api.getyourguide.com) for partners. Access is partner-gated and requires approval. This Actor provides an alternative for extracting publicly available GetYourGuide data when you don't have partner API access.

#### Is scraping GetYourGuide tours and activities legal?

This Actor accesses only publicly available pages via GetYourGuide's public JSON endpoints (`travelers-api.getyourguide.com`). It does not bypass authentication, login walls, or anti-bot systems — it uses the same endpoints the site itself calls. Users remain responsible for their own compliance with GetYourGuide's Terms of Service and applicable laws.

#### Can I use this as a GetYourGuide scraper API?

Yes. You can run this Actor via the Apify API, webhooks, or console. Results are available in Apify datasets (default and reviews). You can programmatically retrieve items from datasets using Apify’s API.

#### How much does it cost to scrape GetYourGuide?

This Actor is **pay-per-event**. Pricing (verified): `result` $0.0016 per result (DIAMOND tier $0.0015), `Review` $0.001 per review (DIAMOND tier $0.0009), and `Actor Start` $0.00005. Every row in the default activities dataset is billed via the synthetic `apify-default-dataset-item` event; every row in the `reviews` dataset is billed with a custom `review` event. When the spending limit is hit, the crawl stops gracefully and already-pushed rows are kept.

#### How do travel apps get things to do data?

Travel apps typically source "things to do" data via official partner APIs (where available), data feeds, or structured extraction from public sources. This Actor enables you to extract structured GetYourGuide activity data (including location, pricing, ratings, duration, and images) to power travel websites, apps, or research workflows.

#### What are the alternatives to GetYourGuide data?

Common alternatives include Viator, Klook, and Headout. Each platform has different coverage and pricing. This Actor focuses specifically on GetYourGuide’s publicly available data.

#### Why use this actor instead of the official API?

The GetYourGuide Partner API is partner-gated (requires approval and partner access). This Actor extracts publicly accessible data with no partner application required, runs fast via JSON endpoints (no browser), and is easy to automate via Apify’s platform with flexible scheduling and output formats.

### SEO Keywords

getyourguide scraper, scrape getyourguide, getyourguide api, getyourguide partner api, getyourguide data, getyourguide reviews scraper, tours and activities api, destination experiences api, scrape tour prices, tour price monitoring, competitor price monitoring travel, attraction ticket price comparison, viator vs getyourguide, headout vs klook vs tiqets, things to do in paris, things to do data, things to do data for travel website, skip the line tickets, city tourism data, market research tours activities, travel market research data, how to get tour data, activities scraper

### For AI Agents & LLM Apps

Purpose: Extract structured GetYourGuide activity listings, details, and reviews via public JSON endpoints for automation, analysis, or content generation.

**Minimal working input JSON:**

```json
{
  "destination": "Paris",
  "maxActivities": 10,
  "scrapeDetails": true,
  "maxReviewsPerActivity": 10,
  "currency": "USD"
}
```

**Output field list (dataset field names):** `id`, `title`, `url`, `city`, `country`, `destination`, `pois`, `category`, `activityType`, `abstract`, `highlights`, `priceFrom`, `originalPrice`, `discountPercent`, `currency`, `priceFormatted`, `priceCategory`, `rating`, `reviewCount`, `ratingType`, `duration`, `durationMinutes`, `images`, `availability`, `cancellation`, `coordinates`, `options`, `reviewStats`, `supplier`, `source`, `fetchedAt` (default dataset). Reviews dataset: `id`, `activityId`, `activityTitle`, `activityUrl`, `city`, `country`, `author`, `authorCountry`, `rating`, `title`, `text`, `date`, `travelerType`, `language`, `reply`, `optionId`, `source`, `fetchedAt`.

**Behaviors an agent should know:**

- **Two datasets**: Activities go to default dataset; reviews go to `reviews` dataset (not embedded). Join on `activityId`.
- **Free-plan cap**: Free-plan users are capped at **10 activities per run**; paid plans honor `maxActivities` (max 500).
- **Details control**: `scrapeDetails=false` returns only listing cards (faster/lighter); `true` fetches rich details, booking options, and availability.
- **Reviews control**: `maxReviewsPerActivity=0` disables review fetching entirely.
- **Currency selection**: `currency` affects price fields returned (20 supported currencies). Global coverage; no language filter.
- **Country context**: Country is only filled when destination context is present (not for bare `activityIds`).
- **Supplier limitation**: `supplier` is not exposed by public API; always `null`.
- **Snapshot data**: Prices/availability are snapshots at fetch time; `available-options` uses a date ~7 days in future.
- **Billing model**: Pay-per-event — `result` $0.0016 per result (DIAMOND $0.0015), `Review` $0.001 per review (DIAMOND $0.0009), `Actor Start` $0.00005. Reviews dataset rows are billed via custom `review` event.

### Legal & Compliance Disclaimer

This Actor is independent and **NOT affiliated with, endorsed by, or sponsored by GetYourGuide**. It accesses only publicly available pages and data via GetYourGuide's public JSON endpoints (`travelers-api.getyourguide.com`) — no login bypass, no unauthorized access, and no circumvention of authentication or anti-bot mechanisms. Users are solely responsible for their own compliance with GetYourGuide's Terms of Service and applicable data protection laws (including GDPR and CCPA where relevant). If output includes personal data (e.g., reviewer names/countries), it must not be used for unsolicited commercial outreach in violation of applicable law.

# Actor input Schema

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

GetYourGuide destination or activity URLs. Destination example: https://www.getyourguide.com/paris-l16/ . Activity example: https://www.getyourguide.com/rome-l33/some-tour-t1031725/ .

## `destination` (type: `string`):

Destination to scrape, e.g. "Paris", "Rome", "Italy", a slug like "paris-l16", or a numeric location id like "16". Resolved against GetYourGuide's destination index.

## `activityIds` (type: `array`):

Scrape specific activities by ID. The ID is the number after -t in the activity URL, e.g. 1031725 in .../some-tour-t1031725/ .

## `maxActivities` (type: `integer`):

Maximum number of activities to scrape per destination (top-ranked activities are taken first).

## `scrapeDetails` (type: `boolean`):

Also fetch rich details for each activity (images, price breakdown, availability, cancellation policy, features). When off, only listing cards are returned (title, price, rating, city).

## `maxReviewsPerActivity` (type: `integer`):

How many reviews to fetch per activity (0 disables review fetching). Fetched via the activity reviews API, sorted by recommended.

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

Currency for prices returned by GetYourGuide.

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.getyourguide.com/paris-l16/"
    }
  ],
  "destination": "Paris",
  "activityIds": [],
  "maxActivities": 20,
  "scrapeDetails": true,
  "maxReviewsPerActivity": 10,
  "currency": "USD",
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `activities` (type: `string`):

No description

## `reviews` (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 = {
    "startUrls": [
        {
            "url": "https://www.getyourguide.com/paris-l16/"
        }
    ],
    "destination": "Paris",
    "activityIds": [],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/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 = {
    "startUrls": [{ "url": "https://www.getyourguide.com/paris-l16/" }],
    "destination": "Paris",
    "activityIds": [],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/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 '{
  "startUrls": [
    {
      "url": "https://www.getyourguide.com/paris-l16/"
    }
  ],
  "destination": "Paris",
  "activityIds": [],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/getyourguide-scraper --silent --output-dataset

```

## MCP server setup

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