GetYourGuide Scraper — Tours, Activities & Attraction Tickets
Pricing
from $2.00 / 1,000 result scrapeds
GetYourGuide Scraper — Tours, Activities & Attraction Tickets
Scrape tours, activities, and attraction tickets from getyourguide.com search results. Extract titles, locations, durations, ratings, review counts, and prices for any destination or activity keyword. No partner API credentials required.
Pricing
from $2.00 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
GetYourGuide Scraper
Scrape tours, activities, and attraction tickets from getyourguide.com search results — titles, locations, durations, ratings, review counts, and prices for any destination or activity keyword.
Why use this actor?
GetYourGuide is one of the largest tours-and-activities marketplaces in the world, listing tens of thousands of bookable experiences across nearly every city on earth. There's no public partner API without a business relationship with GetYourGuide, so pulling this data at scale otherwise means either signing a partner agreement or scraping the site directly. This actor does the latter: it runs the same search a visitor would, parses the server-rendered result cards, and returns structured data — no partner credentials, no login.
Typical uses:
- Competitive pricing research for tour operators and travel agencies
- Building a meta-search or comparison site for activities in a destination
- Market research on what activities exist, how they're priced, and how they're rated in a given city
- Feeding activity data into a travel itinerary tool or recommendation engine
How it works
GetYourGuide is protected by Cloudflare, so a plain HTTP request gets a 403 and a bot-challenge cookie. This actor routes every page fetch through Bright Data's Web Unlocker API, which handles the Cloudflare challenge and returns clean HTML. The actor then parses that HTML with Cheerio — no browser, no Playwright, just a lightweight fetch-and-parse loop, which keeps runs fast and cheap.
GetYourGuide serves at least two different result-card layouts for the same query (observed live during development) — one with a dedicated "location" element, one without. The actor tries both layouts for every field and falls back to deriving the location from the activity's URL slug when no dedicated element exists, so field coverage stays high regardless of which layout a given request happens to get.
Input
| Field | Type | Required | Description |
|---|---|---|---|
searchQuery | String | No (default: rome) | Activity or destination to search for — a city name (e.g. rome, paris, barcelona) or an activity keyword (e.g. cooking class, wine tasting). |
maxResults | Integer | No (default: 100) | Maximum number of activities to return. The actor pages through search results (?p=2, ?p=3, ...) until it hits this limit or runs out of results. |
brightDataApiKey | String (secret) | No* | Your Bright Data API key for the Web Unlocker zone. *Optional if the BRIGHT_DATA_API_KEY environment variable is already set on the actor version — in that case you can leave this blank and every run uses the shared key. |
proxyConfiguration | Object | No | Present for input-schema completeness. Page fetches actually go through the Bright Data Web Unlocker API, not through Apify's proxy, so this field has no effect on how requests are routed. |
Example input:
{"searchQuery": "rome","maxResults": 20,"proxyConfiguration": { "useApifyProxy": true }}
Empty input ({}) also works — it falls back to searchQuery: "rome" and maxResults: 100, as long as a Bright Data key is available via input or the environment variable.
Output
Each item in the dataset represents one activity from a search results page.
| Field | Type | Description |
|---|---|---|
activityTitle | String | Name of the tour, activity, or ticket |
location | String | City or destination where the activity takes place |
duration | String (nullable) | Duration of the activity, e.g. "2.5 hours" |
rating | Number (nullable) | Average customer rating, 0–5 scale |
reviewCount | Integer (nullable) | Number of customer reviews |
price | Number | Starting ("from") price for the activity |
currency | String | Currency code for the price, e.g. EUR |
url | String | Full activity page URL |
scrapedAt | String | ISO 8601 timestamp of when the item was scraped |
Example output item:
{"activityTitle": "Colosseum, Roman Forum & Palatine Hill Guided Tour","location": "Rome","duration": "2.5 hours","rating": 4.8,"reviewCount": 86247,"price": 49,"currency": "EUR","url": "https://www.getyourguide.com/rome-l33/colosseum-roman-forum-palatine-hill-guided-tour-t195566/","scrapedAt": "2026-07-13T01:08:13.706Z"}
How to scrape GetYourGuide data
To pull activity data for a destination, set searchQuery to a city name (e.g. "rome", "lisbon", "kyoto") or an activity type (e.g. "food tour", "scuba diving"), and set maxResults to how many activities you want back. The actor:
- Requests
https://www.getyourguide.com/s/?q=<query>&p=<page>through the Bright Data Web Unlocker API, which handles GetYourGuide's Cloudflare protection. - Parses the server-rendered result cards (
data-test-id="verticalActivityCard") with Cheerio, extracting title, location, duration, rating, review count, and starting price for each card. - Increments the
pquery parameter to move through pages (24 results per page) untilmaxResultsis reached or a page returns no cards. - Pushes each activity to the dataset as it's found, so partial results are available even if a run is stopped early.
This gets you a clean, structured feed of what's bookable for a destination or activity type — useful for tracking price changes over time, benchmarking a competitor's offerings, or building a dataset of activities for a downstream tool.
Cost estimate
This actor uses Bright Data's Web Unlocker (billed separately, roughly $1.5 per 1,000 successful requests at time of writing) for each search page fetch. A page returns up to 24 activities, so:
- 100 results ≈ 5 page fetches ≈ under a cent of Bright Data cost
- 1,000 results ≈ 42 page fetches ≈ a few cents of Bright Data cost
Actor compute cost is minimal — no browser is launched, each run is a short-lived Node.js process doing HTTP fetch + HTML parsing.
Limitations
- Requires a Bright Data Web Unlocker API key. GetYourGuide is behind Cloudflare; without a working key, every request returns a 403 challenge page and the actor fails with zero items.
- Search-page data only. This actor parses the search results page, not individual activity detail pages — so fields like a full itinerary, cancellation policy, or all available time slots aren't included. If you need that, you'd fetch the activity's own
urlseparately. - No partner API used. GetYourGuide has an official partner API for approved travel businesses, but it requires a commercial agreement. This actor does not use it — it works entirely from public search results, so field availability depends on what GetYourGuide chooses to render on the search page (and that has changed at least once already during development, see "How it works" above).
- Best-effort fields.
rating,reviewCount, anddurationare not shown on every card (e.g. new listings with no reviews yet), so these fields may be missing on a small share of items.activityTitle,location,price,currency, andurlare present on effectively every item.
Related Scrapers
- Tiqets Scraper — attraction tickets and tours from tiqets.com, GetYourGuide's closest direct competitor
- BlaBlaCar Scraper — carpool and bus trip search results, useful for the transport leg of a trip alongside activities
- Touring Scraper — Belgian automobile club travel guides, FAQs, and cross-border travel information
Support
Found a bug or have a feature request? Open an issue on the actor's Apify Store page or reach out through the Apify platform's contact options.