GetYourGuide Scraper - Tours, Activities, Prices & Reviews
Pricing
from $1.80 / 1,000 results
GetYourGuide Scraper - Tours, Activities, Prices & Reviews
Scrape GetYourGuide tours and activities by keyword, city or link. Get prices, discounts, ratings, review counts, duration, languages, activity provider, categories, badges, highlights, meeting-point coordinates, images and traveler reviews with provider replies and photos.
Pricing
from $1.80 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Features
Share
GetYourGuide Scraper: Tours, Activities, Prices & Reviews
GetYourGuide Scraper turns GetYourGuide (getyourguide.com) into a clean data feed. Search any city, place or activity keyword, or paste activity links, and get prices, discounts, ratings, review counts, duration, languages, the activity provider, categories, badges, highlights, full image galleries and traveler reviews.
Why This Scraper?
- Three ways in. Search by plain keyword or city name, paste any GetYourGuide link (activity, search, destination, category, any language), or collect traveler reviews. No ids or URLs to build by hand.
- Real prices in your currency. The "from" price, the original price and the discount percentage, in the currency you pick.
- Provider and languages. Every activity can carry its provider name, the guide languages, group size, cancellation terms and Reserve now, pay later flag.
- Deep detail on demand. Highlights, inclusions, exclusions, what to bring, meeting point, itinerary stops, full description and the complete image gallery.
- Filters that really narrow. Sort order, minimum rating, price range, tour languages and duration are applied by the site itself, plus free cancellation and skip-the-line toggles. Reviews can be narrowed by star rating, language, traveler type and written text.
- Coordinates and demand signals. Meeting-point coordinates and address, every map pin of the itinerary, the best-seller flag and the daily "booked yesterday" counter.
- Built for schedules. Incremental mode returns only new and changed items on recurring runs (optionally only when a price moves), and Resume continues an interrupted run without paying twice.
Use Cases
- Travel price monitoring: track "from" prices and discounts for the same destination every day.
- Competitive research for tour operators: compare ratings, review counts, durations and providers across a city.
- Travel apps and aggregators: feed activity cards, galleries and highlights into your own product.
- Reputation analysis: collect traveler reviews with rating, country, traveler type and language for sentiment work.
- Market sizing: count and classify what is on offer per destination, category and price band.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
type | "activity" (or "review") |
activityId | 100000 |
title | "City: Guided Walking Tour" |
url | link to the activity page |
description | short description |
priceFrom / priceCurrency | 43.45 / "USD" |
originalPrice / discountPercent / priceUnit | 51.0 / 15 / "per person" |
rating / reviewCount | 4.9 / 686 |
durationText | "3 hours" |
freeCancellation / skipTheLine / badges | true / false / ["Top rated"] |
categories | ["dayTrip", "privateTour"] |
languages | ["English", "French"] |
supplier | "Sample Tours Ltd" |
highlights / inclusions / exclusions | lists of text |
meetingPoint / itinerary | start location line and stops |
latitude / longitude / meetingPointAddress / endPointAddress | meeting-point coordinates and where the activity starts and ends |
mapMarkers | every itinerary pin with title, latitude, longitude, description and kind (meeting or stop) |
isBestseller / bookedIn24Hours | best-seller flag and the "booked yesterday" counter |
audioGuide / pickupAvailable / privateGroup / wheelchairAccessible | card flags from the results list |
city / area / country / pointOfInterest | "City" / "Region" / "Country" / "Landmark" |
images / imageUrl | full gallery and the first image |
subRatings / aiReviewSummary | per-topic ratings and the site's traveler summary |
searchQuery / position | the query that found it and its rank |
Review rows carry reviewId, rating, text, author, authorCountry, authorCountryCode, date, language, travelerType, verifiedBooking, the traveler photos, the provider's reply (ownerResponse, ownerResponseDate) and the activity's overall activityRating and activityReviewCount.
How to Use
- Pick a mode:
search,urlorreviews. - Fill in the fields for that mode, then set the filters you need.
- Set Max items to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Search a city with filters:
{"mode": "search","queries": ["paris"],"sortBy": "rating_desc","minRating": "4.5","freeCancellationOnly": true,"maxItems": 50}
Paste an activity link for the full record:
{"mode": "url","urls": ["https://www.getyourguide.com/paris-l16/disneyland-paris-2-parks-ticket-1-2-3-4-5-day-t395320/"]}
Collect traveler reviews:
{"mode": "reviews","urls": ["https://www.getyourguide.com/paris-l16/disneyland-paris-2-parks-ticket-1-2-3-4-5-day-t395320/"],"maxReviewsPerActivity": 100,"maxItems": 100}
Collect only 5-star couple reviews written in English:
{"mode": "reviews","urls": ["https://www.getyourguide.com/paris-l16/disneyland-paris-2-parks-ticket-1-2-3-4-5-day-t395320/"],"minReviewRating": "5","reviewTravelerTypes": ["couple"],"reviewLanguages": ["en"]}
An activity link always returns the full record. Every link the site itself shows works in url and reviews modes:
| Link you paste | What the actor does |
|---|---|
Activity page (/paris-l16/<name>-t395320/, also /x-t395320/ or the bare id) | returns the full record |
Search page (/s/?q=paris) | walks the results like a search |
Destination page (city, area, country or attraction, /rome-l33/) | walks the destination like a search |
Category page (/amsterdam-l36/cruises-boat-tours-tc48/) | walks the destination narrowed by the category name |
The same links with a language prefix (/en-gb/) or on a country domain | normalised to the main site, same result |
| Home, help, partner or other-site links | skipped with a note in the log |
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/getyourguide-scraper").call(run_input={"mode": "search", "queries": ["rome"], "maxItems": 20})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["priceFrom"], item["rating"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/getyourguide-scraper').call({ mode: 'search', queries: ['rome'], maxItems: 20 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Tips
- Prices follow the Currency you select for search and reviews runs. An activity link returns the price the page shows by default.
- Turn Fetch full activity details off for a lighter run that returns list fields only (no provider, languages or itinerary).
- Entry tickets have no guide, so
languagescan be empty for them. - Review filters are applied while reading the reviews feed, so a narrow filter scans more pages (up to 1000 reviews per activity) to find enough matches.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset ID and the actor skips everything already collected there. - Incremental mode (
incrementalMode) is for scheduled runs over the same search. Each item is classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEAREDorEXPIRED(only after a run that scanned the whole search; on by default, switch it off withemitExpired).stateKeynames or shares the stored state. - Price monitoring: set
changeScopetopriceAndStockso an item isUPDATEDonly when its from-price, original price, discount, currency or price unit moves. AddcompactUpdatesto receive slimUPDATEDandEXPIREDrows (identity, link, current price and apriceChangesobject with old and new values).expireAfterMissedScanswaits for N complete scans before an item isEXPIRED.EXPIREDmeans the activity dropped out of the search results; it does not prove the activity is unavailable.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search, url or reviews. |
queries | array | ["paris"] | Cities, places or activity keywords (search mode; also picks activities in reviews mode). |
sortBy | string | popularity | popularity, price_asc, price_desc or rating_desc. |
minRating | string | 0 | Minimum star rating: 0, 3.0, 3.5, 4.0 or 4.5. |
minPrice | integer | (none) | Lowest "from" price in the selected currency. |
maxPrice | integer | (none) | Highest "from" price in the selected currency. |
languages | array | [] | Tour language codes such as en, de, fr. |
durations | array | [] | Duration buckets: 0 (0-3 h), 1 (3-5 h), 2 (5-7 h), 3 (full day), 4 (2 days), 5 (3 days), 6 (4 days), 7 (5+ days). |
freeCancellationOnly | boolean | false | Keep only activities with free cancellation. |
skipTheLineOnly | boolean | false | Keep only activities with skip-the-line or fast-track entry. |
urls | array | four example links | Activity, search, destination or category links in any language, or activity ids (url and reviews modes). |
fetchDetails | boolean | true | Add provider, languages, highlights, inclusions, itinerary, full description and gallery. |
maxPages | integer | (none) | Optional limit on result pages per search; empty means no page limit. |
maxItems | integer | 20 | Stop after this many rows (0 = no limit). |
maxReviewsPerActivity | integer | 20 | Reviews mode: reviews collected per activity (up to 1000). |
minReviewRating | string | 0 | Reviews mode: minimum star rating, 0 (any) to 5. |
reviewLanguages | array | [] | Reviews mode: keep reviews written in these languages (en, de, ...). |
reviewTravelerTypes | array | [] | Reviews mode: couple, friends, solo or family. |
reviewsWithTextOnly | boolean | false | Reviews mode: skip star-only reviews. |
currency | string | USD | Currency for prices. |
language | string | en-US | Language of titles and descriptions. |
proxy | object | Apify Proxy | Connection settings. |
resumeFromRunId | string | (none) | Continue one interrupted run. |
incrementalMode | boolean | false | Return only new and changed items on scheduled runs. |
stateKey | string | (none) | Name or share an incremental-mode state. |
emitUnchanged | boolean | false | Also return (and bill) unchanged items. |
emitExpired | boolean | true | Incremental mode: also return (and bill) items no longer found after a full scan. |
changeScope | string | all | Incremental mode: all fields or priceAndStock (price and discount only). |
compactUpdates | boolean | false | Incremental mode: slim UPDATED and EXPIRED rows. |
expireAfterMissedScans | integer | 1 | Incremental mode: complete scans an item must be missing before EXPIRED. |
ignoreFieldsForChanges | array | [] | Incremental mode only: field names excluded from change detection. |
mcpConnectors | array | (none) | Optional: send a summary of each item to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which items are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. |
Output Example
The Output tab offers a combined Results table plus Activities and Reviews tables. Every row carries a type field (activity or review).
Sample shape: values are illustrative placeholders, not from a live record.
{"type": "activity","source": "getyourguide.com","activityId": 100000,"title": "City: Guided Walking Tour","url": "https://www.getyourguide.com/city-l1/city-guided-walking-tour-t100000/","description": "Explore the old town with a local guide.","priceFrom": 43.45,"originalPrice": null,"discountPercent": 0,"priceCurrency": "USD","priceUnit": "per person","rating": 4.9,"reviewCount": 686,"durationText": "3 hours","freeCancellation": true,"skipTheLine": false,"badges": ["Top rated"],"categories": ["dayTrip"],"languages": ["English"],"supplier": "Sample Tours Ltd","highlights": ["Walk through the old town"],"meetingPoint": "1 Sample Street, City","city": "City","country": "Country","images": ["https://cdn.getyourguide.com/image/sample.jpg"],"searchQuery": "city"}
Plan Requirement
The default connection is the standard Apify Proxy pool, which works for search, reviews and gallery data. A residential connection is recommended for the most reliable results: choose a residential group in the Proxy configuration field. If a run keeps hitting failures on the standard pool it moves to a residential connection by itself, and it rotates to a fresh exit on every request.
Apify free plans do not include residential proxies. On a free plan, if the selected connection is refused, the run logs a clear warning and continues on a backup connection; some pages may still be unavailable. For residential access, upgrade at https://apify.com/pricing or supply your own proxy URLs (custom URLs are used exactly as given, with no backup). Full activity details are collected through the platform's managed connection; if a run cannot reach them the rows are still returned with list fields only.
FAQ
How much does it cost?
Pay per event. The current rates are shown on the Pricing tab (paid Apify plans get lower tiered rates). The events and when each one is charged:
| Event | When it is charged |
|---|---|
Result (apify-default-dataset-item) | once for each activity row and once for each review row pushed to the dataset (every review is its own row, so there is no separate review charge) |
Detail enrichment (detail-enrichment) | once per activity row pushed with full details, charged as each row is delivered; list-only rows, review rows, unchanged rows and slim compactUpdates rows never carry it |
Actor Start (apify-actor-start) | once per run, per GB of memory |
Unchanged or suppressed rows in incremental mode are not billed. Use Max items to cap the cost of any run.
Is it legal to scrape GetYourGuide?
This actor collects only publicly available listing and review data. You are responsible for how you use it: follow the site's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution.
Can I get only new or changed activities on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated rows, and unchanged ones are not billed.
Why do titles and order differ between two runs?
The site ranks and words some results differently per visitor. The actor keeps one stable visitor identity per search so scheduled runs stay comparable.
Why did my run fail instead of returning an empty dataset?
If no page could be read at all, the run ends as failed with a clear message (proxy refused, residential unavailable on a free plan, or a connection problem) so "no matches" is never confused with "nothing could be read". Run it again in a few minutes or follow the upgrade hint in the message.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
🔗 Want more travel data?
Pair this actor with these related scrapers from the same team:
| ✈️ Viator Scraper Collect Viator.com tour and activity results from destinations, categories, search pages... | 🧩 KKday Scraper Scrape KKday travel activities by keyword, city or URL. Every row carries prices... |
| 🏨 Klook Scraper Scrape Klook activities, tours, attractions and travel experiences from search pages or... | 🏨 Expedia Hotels Scraper Scrape Expedia.com hotel listings and reviews for any destination. Extract prices... |
| ✈️ Pollstar Scraper Scrape Pollstar upcoming concerts and tour dates: play date, venue with full address and... | 🏨 Booking.com Scraper Scrape booking.com hotels, apartments, villas and hostels. Search any destination with... |
💬 Support
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.