liveinup APIliveinup.it ↗
Search and retrieve experiences from liveinup.it: tours, tastings, wellness, stays across Italy. Filter by region, price band, and sort order via 2 endpoints.
What is the liveinup API?
The liveinup.it API gives developers access to the full catalogue of bookable Italian experiences through 2 endpoints. Use search_experiences to query tours, tastings, wellness sessions, stays, and more by keyword, region or province slug, price band, and sort order — getting back up to 24 cards per page with titles, locations, categories, and slugs. Use get_experience to pull the complete detail record for any single experience, including rating, reviews, duration, participants, cancellation policy, and pricing.
curl -X GET 'https://api.parse.bot/scraper/68684e86-4ca9-4795-8f38-0f10e66c9279/search_experiences?query=parapendio' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace liveinup-it-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Liveinup experiences SDK — bounded, re-runnable."""
from parse_apis.liveinup_it_api import Liveinup, SortOrder, ExperienceNotFound
client = Liveinup()
# Search for paragliding experiences, newest first, capped at 5 results.
for exp in client.experience_summaries.search(query="parapendio", sort=SortOrder.NEWEST, limit=5):
print(exp.title, exp.location, f"€{exp.price_from}")
# Drill into the first result's full detail page via summary→detail navigation.
summary = client.experience_summaries.search(query="rafting", limit=1).first()
if summary is not None:
detail = summary.details()
print(detail.title, detail.category)
print("Included:", ", ".join(detail.included))
for review in detail.reviews[:3]:
print(f" {review.author}: {review.rating}/5 — {review.body[:80]}")
# Direct point lookup by slug, with error handling for unknown experiences.
try:
experience = client.experiences.get(slug="parapendio-a-cefalu-e-dintorni")
print(experience.title, experience.price_from, experience.currency)
except ExperienceNotFound:
print("Experience not found")
print("exercised: experience_summaries.search / experiences.get / summary.details")
Searches the liveinup.it catalogue of experiences (flights, tours, tastings, stays, wellness, etc.) with a free-text keyword, optionally restricted to an Italian region or province, a price band and a sort order. One call fetches one results page of up to 24 experience cards; pass `page` to continue (omitted = page 1). `total_results` is the site's own count for the whole query, `last_page` is derived from it at 24 per page, and `has_more` is true when the site shows a next-page link. The site's search is fuzzy: an unmatched keyword still returns suggested experiences, so an empty `results` list only occurs on a page past the end. `rating` and `review_count` are null for experiences without reviews. Prices are 'from' prices per person in EUR.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based results page number; each page holds up to 24 experiences. |
| sort | string | Result ordering, mirroring the site's 'Ordina per' menu. |
| queryrequired | string | Free-text keyword for an experience type or destination, in Italian (one shape: an activity name). |
| where | string | Region or province slug as used by the site's 'Dove' filter: lowercase, accents and apostrophes removed (one shape: a region such as toscana, or a province such as laquila). Omitted = all of Italy. Unknown values are passed to the site, which then ignores the location filter. |
| price_band | string | Restrict to one of the site's per-person price bands in EUR. Omitted = any price. |
{
"type": "object",
"fields": {
"page": "page number returned",
"query": "echo of the keyword searched",
"results": "array of experience cards: id (site numeric id), slug (input for get_experience), title, abstract, category label, location text, price_from (per-person 'from' price), currency, rating (0-5, nullable), review_count (nullable), image_url, url",
"has_more": "true when a further page exists",
"last_page": "last page number derived from total_results and page_size",
"page_size": "maximum experiences per page (24)",
"total_results": "site-reported number of matching experiences across all pages"
},
"sample": {
"data": {
"page": 1,
"query": "parapendio",
"results": [
{
"id": 164,
"url": "https://www.liveinup.it/esperienza/promessi-sposi-in-parapendio-a-santa-elisabetta",
"slug": "promessi-sposi-in-parapendio-a-santa-elisabetta",
"title": "Promessi Sposi in Parapendio a Santa Elisabetta",
"rating": 5,
"abstract": "Atterrando sullo striscione \"Mi Vuoi Sposare?\"",
"category": "Volo in Parapendio",
"currency": "EUR",
"location": "Cuorgnè (Chiesanuova) (TO), Piemonte - Italia",
"image_url": "https://www.liveinup.it/thumbs/esperienze/promessi-sposi-in-parapendio-a-santa-elisabetta.webp",
"price_from": 308,
"review_count": 3
}
],
"has_more": false,
"last_page": 1,
"page_size": 24,
"total_results": 2
},
"status": "success"
}
}About the liveinup API
Searching the Catalogue
The search_experiences endpoint accepts a required query string (in Italian) and optional filters: where for a region or province slug (lowercase, accents stripped), price_band to restrict by per-person EUR tier, sort to mirror the site's ordering menu, and page for 1-based pagination. Each response includes total_results, last_page, has_more, and a results array of up to 24 experience cards. Each card carries an id, a slug (the input for the detail endpoint), a title, abstract, category label, and location text.
Fetching Experience Details
Pass any slug from search results to get_experience to retrieve the full record. The response includes structured metadata: title, abstract, category breadcrumb, location, when (season/availability), level (difficulty), duration, participants, languages, level, cancellation and gift-voucher policy, and a from per-person price. Social proof is also returned: a rating (0–5, nullable) and a reviews array of objects with author, rating, and body fields. The sku, url, and slug fields are included for referencing or linking back to the source page.
Coverage and Scope
The catalogue spans experience categories across Italian regions and provinces — tours, food and wine tastings, outdoor activities, wellness, short stays, and more. The where filter uses the site's own province/region slug format, so values must match the site's taxonomy (e.g. toscana, lombardia). Pagination is consistent: page_size is always 24, and has_more tells you whether another page exists without requiring a second count query.
The liveinup API is a managed, monitored endpoint for liveinup.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when liveinup.it changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official liveinup.it API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build an Italy travel planning tool that surfaces local experiences by region using the
wherefilter insearch_experiences. - Aggregate experience listings with prices and categories for a price-comparison dashboard across Italian activity types.
- Populate a gift-voucher recommendation engine using the gift-voucher policy and
fromprice fields fromget_experience. - Construct a wine and food tasting directory filtered by price band and sorted by relevance or rating.
- Sync Italian experience inventory into a CRM or booking platform using
id,sku, andslugas stable identifiers. - Display user review snippets and aggregate ratings on a travel blog using the
reviewsarray andratingfield fromget_experience. - Filter family-friendly or beginner-level activities using the
levelandparticipantsfields returned byget_experience.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does liveinup.it offer an official developer API?+
What does the `where` parameter in `search_experiences` accept?+
toscana or valle-d-aosta. If omitted, results are not restricted by geography.Does `get_experience` return availability calendars or real-time booking slots?+
when text field, not a structured calendar of open dates or booking slots. It also covers duration, participants, and cancellation policy as text. You can fork this API on Parse and revise it to add an endpoint targeting date-specific availability if the source exposes that surface.Is experience data available outside Italy?+
where filter accepts Italian region and province slugs only. You can fork this API on Parse and revise it to target a different regional experiences platform if cross-border coverage is needed.How does pagination work in `search_experiences`?+
page_size: 24). The response includes total_results, last_page, and a has_more boolean so you can determine how many pages exist and whether to fetch the next one without issuing an extra count request.