GetYourGuide All-in-One API
Pricing
from $23.40 / 1,000 destination activity listings
GetYourGuide All-in-One API
Unofficial always-on REST API for live GetYourGuide data: search suggestions, destination activity listings, activity detail with embedded reviews, and real per-date bookable availability with live pricing — in any currency. No account needed.
What does GetYourGuide All-in-One API do?
GetYourGuide All-in-One API is a REST endpoint for GetYourGuide's live tours & activities data — search suggestions, a destination's full bookable-activity listing, activity detail with embedded reviews, and real per-date bookable availability with live pricing. All from a single always-on API powered by Apify Standby.
It talks directly to the same internal API the official GetYourGuide Android app uses, reverse-engineered by capturing and analyzing live traffic from the real app, then independently re-confirmed by calling the API directly from a plain server. No GetYourGuide account, no API key — call the endpoint, get JSON back.
Why use GetYourGuide All-in-One API?
- No signature or token needed — confirmed live: this API accepts self-generated, unvalidated identity headers with no cryptographic signing scheme at all
- Real, live pricing — not a teaser —
/activities/{id}/availabilityreturns actual bookable time slots with per-participant pricing that scales exactly with participant count, confirmed live against the app's own display - Real, working pagination — confirmed live on the destination activity listing: distinct pages return distinct, non-overlapping activities (36 per page)
- Rich activity detail in one call — title, description, full image gallery, live price, and up to ~70 real customer reviews (author, rating, date, message), all from a single request
- Always-on — Standby mode means no cold start, responds in milliseconds
- No account needed — every endpoint works fully anonymously
- Any currency — every price-returning endpoint takes a
currencyparameter, confirmed live to change every returned price - Use cases: travel content aggregation, price monitoring, activity discovery bots, review analysis, availability tracking
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /home | The app's own Home screen: top destinations + attractions |
GET | /search | Live search-bar suggestions (destinations + activities) |
GET | /locations/{id}/activities | A destination's full bookable-activity listing, paginated, filterable |
GET | /activities/{id} | Full activity detail, with embedded reviews + similar activities |
GET | /activities/{id}/reviews | Real, paginated reviews beyond the embedded set |
GET | /activities/{id}/availability | Real bookable time slots + live pricing for one date |
How to use GetYourGuide All-in-One API
- Open this Actor's Standby API URL (shown on the Actor's page, under the API tab).
- Call any endpoint — for example:
Every call needs your Apify API token, either ascurl "https://romy--getyourguide-all-in-one-api.apify.actor/home"curl "https://romy--getyourguide-all-in-one-api.apify.actor/search?q=Bali"curl "https://romy--getyourguide-all-in-one-api.apify.actor/locations/347/activities"curl "https://romy--getyourguide-all-in-one-api.apify.actor/locations/347/activities?page=2¤cy=EUR"curl "https://romy--getyourguide-all-in-one-api.apify.actor/locations/347/activities?filters=tc-1094"curl "https://romy--getyourguide-all-in-one-api.apify.actor/activities/489945"curl "https://romy--getyourguide-all-in-one-api.apify.actor/activities/489945?currency=USD"curl "https://romy--getyourguide-all-in-one-api.apify.actor/activities/489945/reviews?offset=80&limit=10"curl "https://romy--getyourguide-all-in-one-api.apify.actor/activities/489945/availability?date=2026-09-15&adults=2"Authorization: Bearer <token>or?token=<token>— the Actor's page API tab has a ready-to-copy version with your token filled in. - Read the JSON response — no setup required.
Parameters
GET /home — no required parameters. currency/language optional, same as every other endpoint.
GET /search — q required (partial text, e.g. Bali). Returns both destinations (with a locationId usable directly with /locations/{id}/activities) and individual activities.
| Param | Type | Example | Meaning |
|---|---|---|---|
q | string | Bali | Search text |
currency | string, default USD | EUR | ISO 4217 currency code |
language | string, default en | en | ISO 639-1 language code |
GET /locations/{id}/activities — path param id required (a location id, from GET /search or GET /home).
| Param | Type | Example | Meaning |
|---|---|---|---|
page | int, default 1 | 2 | 1-indexed page — real pagination, confirmed live |
sort | string, default popularity | popularity | Sort order, read from the app's own sort picker |
filters | comma-separated | tc-1094 | Interest-tag ids (e.g. "For kids", "Snorkeling") — confirmed live to narrow results with pagination still working correctly. See the response's availableFilters for valid values for this location |
currency | string, default USD | EUR | ISO 4217 currency code — confirmed live to change every price |
language | string, default en | en | ISO 639-1 language code |
GET /activities/{id} — path param id required (an activity id, from GET /search or GET /locations/{id}/activities).
| Param | Type | Example | Meaning |
|---|---|---|---|
currency | string, default USD | EUR | ISO 4217 currency code |
language | string, default en | en | ISO 639-1 language code |
GET /activities/{id}/reviews — path param id required. Real pagination beyond the ~70 reviews already embedded in GET /activities/{id}.
| Param | Type | Example | Meaning |
|---|---|---|---|
offset | int, default 0 | 80 | 0-indexed review offset — real pagination, confirmed live |
limit | int, default 10 | 10 | Reviews per page |
currency | string, default USD | EUR | ISO 4217 currency code |
language | string, default en | en | ISO 639-1 language code |
GET /activities/{id}/availability — path param id required. date required.
| Param | Type | Example | Meaning |
|---|---|---|---|
date | string (date) | 2026-09-15 | YYYY-MM-DD |
adults | int, default 1 | 2 | Adult participant count |
children | int, default 0 | 0 | Child participant count |
currency | string, default USD | EUR | ISO 4217 currency code — confirmed live to change every returned price |
language | string, default en | en | ISO 639-1 language code |
Output
Every response is returned directly over HTTP — this Actor does not write to an Apify dataset. Real responses (trimmed for readability):
GET /home (trimmed to one card each):
{"success": true,"destinations": [{ "title": "Rome", "image": "https://cdn.getyourguide.com/image/{options}/location_img/f9cef1b5d3bf6e3c.jpeg", "locationId": 33 }],"attractions": [{ "title": "Statue of Liberty", "subtitle": "196 activities", "locationId": 158431, "poiId": 2612 }]}
GET /search?q=Bali:
{"success": true,"results": {"suggestions": [{ "suggestion": "Bali", "suggestionId": "location:347", "type": "location", "locationType": "area", "locationId": 347 },{ "suggestion": "Bali: Waterbom Bali Entry Ticket", "suggestionId": "activity:253117", "type": "activity" }]}}
GET /locations/347/activities?currency=GBP (trimmed to one card):
{"success": true,"page": 1,"activities": [{"id": 489945,"title": "Bali: Ubud Gorilla Face ATV and Ayung Rafting Trip with Meal","abstract": "Experience Ubud's vibrant nature with a combo 2.5-hour Ayung River rafting trip...","rating": 4.83,"reviewCount": 6714,"price": { "formatted_starting_price": "£12", "formatted_base_price": "£15", "currency": "GBP", "starting_price": 12.09 },"attributes": [{ "type": "duration", "label": "3 - 8 hours" }, { "type": "freeCancellation", "label": "Free cancellation" }]}],"availableFilters": [{ "label": "For kids", "value": "tc-1094" }, { "label": "Snorkeling", "value": "tc-57" }]}
GET /activities/489945?currency=USD (trimmed):
{"success": true,"activity": {"id": 489945,"title": "Bali: Ubud Gorilla Face ATV and Ayung Rafting Trip with Meal","description": "Experience Ubud's vibrant nature with a combo 2.5-hour Ayung River rafting trip...","images": ["https://cdn.getyourguide.com/image/{options}/tour_img/2afe7caf59feeb0d.jpeg"],"rating": 4.83,"reviewCount": 6773,"price": { "currency": "USD", "discounted_price": 14.79, "original_price": 18.49 },"reviews": [{ "reviewId": "126190156", "rating": 5, "message": "...", "authorName": "marjolein – Netherlands", "authorDetail": "August 3, 2026 - Verified booking" }],"similar": [{ "id": 489942, "title": "Ubud: Gorilla Face ATV Quad Bike Adventure with Lunch", "rating": 4.8, "reviewCount": 1551 }]}}
GET /activities/489945/reviews?offset=80&limit=1:
{"success": true,"reviews": [{"reviewId": "125811614","rating": 5,"message": "Rafting and ATV were definitely a highlight of Ubud","authorName": "Adam – Australia","authorDetail": "July 24, 2026 - Verified booking"}]}
GET /activities/489945/availability?date=2026-09-15&adults=2 (trimmed to one option):
{"success": true,"options": [{"optionId": 902997,"title": "Rafting Only Adventure with Meeting Point (No ATV)","slots": [{"label": { "text": "9:00 AM" },"startTime": "2026-09-15T09:00:00+0800","priceBreakDown": [{ "startLabel": { "text": "2 Adult × $20.62" }, "endLabel": { "text": "$41.24" } }],"totalPrice": { "price": 41.24, "currency": "USD" }}]}]}
Data notes
- No signature or token required, confirmed from two independent angles. First captured live from the real Android app with all real API traffic passed through an SSL-intercepting proxy; every request carried nothing but plain, self-generated identity headers. Then independently re-confirmed by calling the same API directly from a plain server, with fabricated identity headers and no device involved at all — it worked identically. This Actor sends the same simple headers a fresh app install would.
- GetYourGuide's edge does reject Apify's datacenter IP ranges, though. Confirmed live: a request byte-for-byte identical to one that succeeds from a non-Apify server got back an HTML error page (GetYourGuide's own branded error page, not a third-party bot-challenge) from the deployed Standby actor — an IP-reputation block, not a signing or logic issue. All outbound requests route through Apify's residential proxy pool to avoid it, one proxy session per Actor run for a stable IP, same as a real device would have.
- The app's native code was checked for anti-bot protection and found clean. Every native library bundled with the app was inspected; none matches any known bot-detection SDK. The only fraud-prevention vendor found in the app's traffic is invoked for checkout/payment flows, not for any endpoint this Actor uses.
- Pagination is real, confirmed live via a two-step process. The plain listing page always returns page 1 regardless of a
pagequery parameter — real pagination lives behind a second, POST-based endpoint the app calls when scrolling or changing sort/filters, which this Actor uses internally. Confirmed live: page 2 returned 36 activities with zero id overlap against page 1. /activities/{id}/availability's pricing is genuinely live, not a static "from" price. Confirmed live: requesting 2 adults for a specific date returned a total price exactly equal to 2× the per-person price shown in the same response, matching the app's own on-screen total to the cent.- Currency is a real, caller-controlled parameter on every price-returning endpoint, not just a display label. Confirmed live: the same activity/listing request returns genuinely different numeric prices (not just a different currency symbol) when
currencychanges — e.g. a listing's starting price came back as£12/GBPwith no currency param and€14/EURwithcurrency=EURfor the exact same activity, same request otherwise. - Activity detail responses are a generic, deeply nested UI-description format rather than a flat product object — this Actor extracts the underlying clean data (title, description, images, price, reviews) from GetYourGuide's own embedded analytics payloads and a small set of well-known content blocks, rather than attempting to interpret the full UI layout, which keeps extraction stable even if GetYourGuide changes how the page visually renders.
/activities/{id}/reviewsmirrors the app's own "See more reviews" modal, confirmed live:offset=80returned 10 reviews with zero id overlap against the ~70 already embedded inGET /activities/{id}, in the same page-of-10 batching the app itself uses.filtersgenuinely narrows results and pagination still works on the filtered set — confirmed live: applying a "For kids" filter returns a completely different top result than the unfiltered listing, and the same real, non-overlapping pagination behavior holds with a filter applied.similarreuses the exact same product-card data shape as the listing endpoint — confirmed live: the app's own "You might also like" recommendation cards on the activity detail page carry the identical embedded analytics object as/locations/{id}/activities's cards, just for different activities./home's cards use a different, messier embedding than activities — destination cards carry their location id as a JSON-encoded string inside ametadatatracking field rather than a direct property (attraction/POI cards do carry it directly) — this Actor handles both. A few more Home-tab rails ("Go beyond the guidebook" and similar curated/brand rails) were checked and found to be lower-value marketing picks with their own distinct embedding shape, not wrapped here.
Pricing
Pay-per-event, billed only on a successful call — one event per request, tiered by your Apify plan (Free/Bronze/Silver/Gold/Platinum/Diamond get progressively cheaper rates). See the Actor's Pricing tab for the exact current rate per tier.
| Event | What it charges for |
|---|---|
search | Live search-bar suggestions |
home-feed | Home screen curated rails |
activity-reviews | Paginated reviews beyond the embedded set |
activity-detail | Full activity detail + embedded reviews + similar activities |
location-activities | A destination's activity listing (36 activities/page) |
activity-availability | Real bookable time slots + live per-participant pricing for one date |
Known limitations
- No booking/checkout endpoints. This Actor only wraps guest-accessible, read-only search/browse/pricing endpoints — no login flow, cart, or payment/booking submission is implemented or planned, by design.
- Sort values for
/locations/{id}/activities'ssortparameter are read from the app's own sort picker but not exhaustively enumerated —popularity(the default) is confirmed; other values are passed through unvalidated and may not all be accepted by the backend. - This is an unofficial, reverse-engineered integration, not affiliated with or endorsed by GetYourGuide Deutschland GmbH. Behavior may change if GetYourGuide changes its API.
Found a bug or have a feature request? Use the Issues tab on this Actor's page.