# GetYourGuide Activity Pricing & Highlights Extractor (`vexaloom-labs/getyourguide-activity-pricing-and-highlights`) Actor

Search GetYourGuide by destination or activity keyword, or supply direct URLs, and get pricing, ratings, highlights, duration, cancellation policy, and supplier details for each tour or activity.

- **URL**: https://apify.com/vexaloom-labs/getyourguide-activity-pricing-and-highlights.md
- **Developed by:** [vexaloom-labs](https://apify.com/vexaloom-labs) (community)
- **Categories:** Travel, Automation, Lead generation
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 Activity Pricing & Highlights Extractor

Turn GetYourGuide into a structured activity feed. Search a city, landmark, or activity phrase, or point the actor at GetYourGuide search, destination, category, or activity URLs, and receive pricing, ratings, highlights, inclusions, meeting points, cancellation terms, and supplier details for every tour you collect.

### What it does

- **Keyword search** — one query per item (`rome`, `eiffel tower`, `food tour paris`) with the site's own filters and sort orders.
- **URL and ID mode** — accepts search pages, destination/attraction pages, category pages, activity pages, and bare activity IDs (`631866` / `t631866`).
- **Pagination** — follows the listing's "show more" data until the source stops returning activities (up to 50 pages, 24 per page, per query).
- **Optional detail enrichment** — opens each activity for full descriptions, highlights, includes/excludes, meeting point + coordinates, cancellation policy, supplier, guides, itinerary, and reviews.
- **Cookieless** — no login, cookies, or API key required. Requests use GetYourGuide's public SDUI JSON and page data directly.

### Output per activity

Identity and place: `type`, `id`, `url`, `title`, `shortDescription`, `description`, `city`, `citySlug`, `region`, `country`, `latitude`, `longitude`, `meetingPoint`.

Commercial: `price`, `originalPrice`, `currency`, `discountPercent`, `pricingType`, `rating`, `reviewCount`, `cancellationPolicy`, `freeCancellation`, `supplierName`.

Practical detail: `duration`, `category`, `activityType`, `guideLanguages`, `images`, `highlights`, `whatIncluded`, `whatExcluded`, `goodToKnow`, `whatToBring`, `notAllowed`, `notSuitableFor`, `itinerary`, `bookingOptions`, `maxGroupSize`, `minAge`, `badges`, `availability`, `nextAvailable`, `recentBookings`, `reviewSummary`, `reviews`, `breadcrumbs`.

Booking flags: `skipTheLine`, `mobileTicket`, `instantConfirmation`, `pickupIncluded`, `wheelchairAccessible`, `smallGroup`, `privateTour`, `liveGuide`.

Run metadata: `searchQuery`, `sourceUrl`, `rank`, `scrapedAt`.

A field GetYourGuide does not publish for an activity is omitted, never returned as `null` or an empty string.

### Input

| Field | Type | Default | Purpose |
|---|---|---|---|
| `searchQueries` | array | `["rome"]` | Cities, landmarks, or activity keywords. |
| `startUrls` | array | – | GetYourGuide search, destination, category, or activity URLs, or bare IDs. |
| `activityIds` | array | – | Direct activity IDs. |
| `maxItems` | integer | 30 | Global cap across all inputs (1–2000). |
| `includeDetails` | boolean | true | Open detail pages for the full field set. |
| `maxReviews` | integer | 0 | Recent reviews per activity (0–50). |
| `currency` | select | USD | Currency for prices. |
| `language` | select | English | Language of titles and descriptions. |
| `sortBy` | select | popularity | Popularity, rating, price ascending, or price descending. |
| `minRating` | select | any | 3.0+, 3.5+, 4.0+, or 4.5+. |
| `priceMin` / `priceMax` | integer | 0 | Price range; 0 means unbounded. |
| `dateFrom` / `dateTo` | date | – | Only activities available in the date range. |
| `startTime` | array | – | Morning, afternoon, or evening. |
| `durations` | array | – | Up to 3h, 3–5h, 5–7h, full day, or 2–5+ days. |
| `features` | array | – | Private, skip the line, small group, wheelchair, pickup, or GetYourGuide Originals. |
| `guideLanguages` | array | – | Two-letter guide-language codes. |
| `interests` / `places` / `departsFrom` | array | – | Advanced GetYourGuide filter IDs copied from a search URL. |

#### Example: search with filters

```json
{
    "searchQueries": ["rome"],
    "maxItems": 20,
    "includeDetails": true,
    "sortBy": "rating",
    "minRating": "4.5",
    "features": ["skip_the_line"],
    "currency": "EUR",
    "language": "en"
}
```

#### Example: URLs and an ID

```json
{
    "startUrls": [
        "https://www.getyourguide.com/rome-l33/",
        "https://www.getyourguide.com/s/?q=eiffel+tower&services=stl"
    ],
    "activityIds": ["631866"],
    "maxItems": 15,
    "includeDetails": true
}
```

### Modes and pagination

1. **Direct IDs / activity URLs** — one detail-page fetch per activity.
2. **Search queries** — the actor calls GetYourGuide's search-result blocks endpoint, reads `activity_card` objects, and follows the returned `loadMore` payload page after page.
3. **Destination / attraction URLs** — same pagination against the destination's main activities section.
4. **Category URLs** — same pagination scoped to the category ID in the URL.

Each result page contains 24 activities. The actor stops at `maxItems`, after 50 pages, or when the source returns no new activities — whichever comes first. The source's own reported result count is logged, so a page cap is visible rather than silent.

### Legacy inputs

Saved tasks that send the old `query` key still work: the actor maps `query` onto `searchQueries` in code. `startUrls`, `maxItems`, and bare activity IDs keep their original meaning. The old `proxyConfiguration` field is accepted but ignored — no proxy setup is needed.

### Limits and honest notes

- GetYourGuide caps listing pagination at 50 pages (24 rows each) per query/listing. For deeper coverage, partition by category, date range, price bucket, or sub-destination.
- Some activities do not publish a discount, supplier rating, group size, age limit, or meeting point. Those fields are omitted for that row.
- Detail enrichment costs one page fetch per activity; turn `includeDetails` off for the cheapest, fastest listing-only runs.
- Filters are applied by GetYourGuide's own search backend. Filter values that the site does not recognize are ignored rather than guessed.

### Sentinels

If a run returns no real activities, the dataset gets one explanatory record instead of an empty dataset:

- `gyg_no_results` — the inputs produced no matching activities.
- `gyg_blocked` — GetYourGuide rejected every request path (direct, browser-cookied, and last-resort proxy).

Sentinels include the attempted queries/URLs, a reason, and `scrapedAt`.

### FAQ

**Do I need cookies, a login, or an API key?** No. The actor reads publicly visible GetYourGuide data.

**Do I need to configure a proxy?** No. Direct requests are tried first. If a container IP is challenged, the actor handles the fallback internally.

**Why is a field missing on one activity but present on another?** GetYourGuide only publishes some fields for some activities. Omit-empty output keeps the dataset honest.

**Can I mix searches, URLs, and IDs?** Yes. All inputs are processed in order and deduplicated by activity ID.

**Is this affiliated with GetYourGuide?** No. This is an independent actor that reads publicly available pages; it is not operated by or affiliated with GetYourGuide.

# Actor input Schema

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

Cities, landmarks, or activity keywords to search on GetYourGuide. One search per item, e.g. 'rome', 'eiffel tower', 'food tour paris'. Used for the keyword-search mode.

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

GetYourGuide URLs or activity IDs. Accepts search pages (/s/?q=...), destination/attraction pages (…-l<id>/), category pages (…-tc<id>/), activity pages (…-t<id>/), and bare IDs such as 631866 or t631866. URL query filters are preserved.

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

Direct GetYourGuide activity IDs. Each ID opens its activity page and returns full detail fields.

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

Maximum activities to return across all queries, URLs, and IDs.

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

Open each activity page to add full descriptions, highlights, inclusions, exclusions, meeting point, cancellation policy, supplier, and review fields. Turn off for the fastest search-card-only runs.

## `maxReviews` (type: `integer`):

How many recent reviews to attach to each activity (0 disables reviews). Only used when detail pages are fetched.

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

Currency for all prices.

## `language` (type: `string`):

Language for titles, descriptions, highlights, and policies.

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

Order of search and listing results.

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

Only return activities with at least this star rating.

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

Minimum starting price in the selected currency. 0 means no minimum.

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

Maximum starting price in the selected currency. 0 means no maximum.

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

Only activities available on or after this date (YYYY-MM-DD). Leave empty for any date.

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

Only activities available on or before this date (YYYY-MM-DD). Leave empty for any date.

## `startTime` (type: `array`):

Filter by start time. Any of: morning, afternoon, evening.

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

Filter by duration. Any of: up_to_3_hours, 3_to_5_hours, 5_to_7_hours, full_day, 2_days, 3_days, 4_days, 5_days_plus.

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

Filter by features. Any of: private_tour, skip_the_line, small_group, wheelchair_accessible, hotel_pickup, gyg_originals.

## `guideLanguages` (type: `array`):

Only activities offered in these guide languages, using two-letter codes (en, de, fr, es, it, pt, …).

## `interests` (type: `array`):

GetYourGuide interest IDs such as tc-27 (culture & history) or tc-103 (food & drink). Copy them from a search page URL or the available filters.

## `places` (type: `array`):

Numeric GetYourGuide place/attraction IDs (e.g. 2619 for the Colosseum). Copy them from a search page URL.

## `departsFrom` (type: `array`):

Numeric departure-city IDs. Copy them from a search page URL.

## Actor input object example

```json
{
  "searchQueries": [
    "rome"
  ],
  "maxItems": 1,
  "includeDetails": false,
  "maxReviews": 0,
  "currency": "USD",
  "language": "en",
  "sortBy": "popularity",
  "minRating": "any",
  "priceMin": 0,
  "priceMax": 0
}
```

# Actor output Schema

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

Dataset containing every scraped GetYourGuide activity record (or one explanatory sentinel when no activity was returned).

# 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"
    ],
    "maxItems": 1,
    "includeDetails": false,
    "maxReviews": 0,
    "currency": "USD",
    "language": "en",
    "sortBy": "popularity",
    "minRating": "any",
    "priceMin": 0,
    "priceMax": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("vexaloom-labs/getyourguide-activity-pricing-and-highlights").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"],
    "maxItems": 1,
    "includeDetails": False,
    "maxReviews": 0,
    "currency": "USD",
    "language": "en",
    "sortBy": "popularity",
    "minRating": "any",
    "priceMin": 0,
    "priceMax": 0,
}

# Run the Actor and wait for it to finish
run = client.actor("vexaloom-labs/getyourguide-activity-pricing-and-highlights").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"
  ],
  "maxItems": 1,
  "includeDetails": false,
  "maxReviews": 0,
  "currency": "USD",
  "language": "en",
  "sortBy": "popularity",
  "minRating": "any",
  "priceMin": 0,
  "priceMax": 0
}' |
apify call vexaloom-labs/getyourguide-activity-pricing-and-highlights --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vexaloom-labs/getyourguide-activity-pricing-and-highlights"
        }
    }
}
```

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/c08sr78ZtOfaIbfvw/builds/XLZTaKeRScGfc7ZN4/openapi.json
