Campsites APIcampsites.co.uk ↗
Search UK campsites, get detailed site info, check daily availability, and browse accommodation types via the Campsites.co.uk API.
What is the Campsites API?
The Campsites.co.uk API gives developers structured access to UK campsite data across 5 endpoints, covering search by location, full campsite detail pages, daily availability calendars, and accommodation type listings. The search_campsites endpoint returns paginated results with ratings, review counts, pricing, and bookability flags, while check_availability exposes per-day availability arrays for any campsite and accommodation type combination.
curl -X GET 'https://api.parse.bot/scraper/29fcc349-b72f-426a-91bb-f7707f08846d/search_campsites?page=1&adults=2&nights=3&children=0&location=cornwall' \ -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 campsites-co-uk-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.
"""Campsites.co.uk SDK — search campsites, drill into details, check availability."""
from parse_apis.campsites_co_uk_api import Campsites, Location, CampsiteNotFound
client = Campsites()
# Browse available accommodation types for availability checks.
accom_types = client.accommodationtypelists.get()
for tent_type in accom_types.Tent[:3]:
print(tent_type.value, tent_type.label)
# Search campsites in Cornwall — limit= caps total items fetched across pages.
for campsite in client.campsitesummaries.search(location=Location.CORNWALL, limit=3):
print(campsite.title, campsite.rating, campsite.location)
# Drill into the first result's full details.
summary = client.campsitesummaries.search(location=Location.DEVON, limit=1).first()
if summary:
detail = summary.details()
print(detail.title, detail.price_range, detail.phone)
# Check availability for small tents in August 2026.
avail = detail.availability.check(accommodation_id="24", year=2026, month=8)
print(avail.year, avail.start_month, avail.pitches)
# Typed error handling — catch when a campsite slug is invalid.
try:
bad = client.campsitesummaries.search(location=Location.DORSET, limit=1).first()
if bad:
bad.details()
except CampsiteNotFound as exc:
print(f"Campsite not found: {exc.slug}")
# Discover valid location slugs from categories.
categories = client.categorylists.get()
for dest in categories.popular_destinations[:2]:
print(dest.Desc, dest.URL, dest.AllParkCount)
print("exercised: accommodationtypelists.get / campsitesummaries.search / details / availability.check / categorylists.get / CampsiteNotFound")
Search for campsites by location with optional date and guest filters. Returns paginated summaries ordered by rating. The location must match the site's URL slug pattern (e.g. 'cornwall', 'devon', 'the-lake-district'). Paginates via integer page counter; page_count in the response indicates total pages available.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| adults | integer | Number of adults. |
| nights | integer | Number of nights for the stay. |
| arrival | string | Arrival date in YYYY-MM-DD format. |
| children | integer | Number of children. |
| locationrequired | string | Location slug matching the site's URL pattern. Confirmed working values include 'cornwall', 'devon', 'the-lake-district', 'dorset'. Multi-word locations require hyphens and may need articles (e.g. 'the-lake-district' not 'lake-district'). Discover valid slugs from list_categories popular_destinations[*].URL. |
{
"type": "object",
"fields": {
"listings": "array of campsite summaries with id, title, url, location, snippet, rating, review_count, recommend_percentage, is_bookable, price, facilities, and accommodation_types",
"page_count": "integer, total number of pages",
"total_count": "integer or null, total number of matching campsites",
"current_page": "integer, current page number"
},
"sample": {
"data": {
"listings": [
{
"id": "21192",
"url": "/search/campsites-in-cornwall/par/east-crinnis-holiday-park",
"price": null,
"title": "East Crinnis Holiday Park",
"rating": 4.86,
"snippet": "Family friendly camping, touring, glamping domes and yurts.",
"location": "East Crinnis, Par, Cornwall",
"facilities": [
{
"ID": "41961",
"Desc": "Allow pets on site",
"Icon": "allow-pets",
"Info": ""
}
],
"is_bookable": true,
"review_count": 149,
"accommodation_types": {
"Tent": "tent-campsites",
"Caravan": "caravan-parks"
},
"recommend_percentage": "97"
}
],
"page_count": 13,
"total_count": null,
"current_page": 1
},
"status": "success"
}
}About the Campsites API
Searching and Browsing Campsites
The search_campsites endpoint accepts a location slug (e.g. cornwall, devon, the-lake-district) along with optional filters for arrival date, nights, adults, and children. Results come back paginated — page_count and total_count tell you how many pages and records match. Each listing in the listings array includes the campsite id, title, url slug, location, rating, review_count, recommend_percentage, is_bookable, and price. Use list_categories to discover valid popular_destinations slugs before querying.
Campsite Detail and Facilities
get_campsite_details takes the URL slug from a search result and returns the full campsite profile: title, address (postcode), phone, lat/lng coordinates, rules, faqs grouped by category, and an images array with URL and description for each photo. This endpoint is the right choice when you need the full picture of a site rather than the search summary.
Availability Checking
check_availability is a POST endpoint that takes campsite_id, accommodation_id, year, and month. The response includes a pitches field — a comma-separated string of internal pitch IDs — and one keyed object per pitch ID. Each pitch object contains an availability array (0/1 per calendar day) and an arrival-days array indicating which days allow check-in. Accommodation type IDs come from list_accommodation_types, which groups options into Tent, Caravan, Glamping, and CampervanorMotorhome categories, each with a value (ID) and label.
Discovering Categories and Destinations
list_categories returns homepage-level taxonomy data: popular_destinations with URL slugs and park counts by type, popular_glamping types, featured_searches with descriptive snippets, and featured_accommodation entries. This endpoint is primarily useful for bootstrapping valid inputs to search_campsites rather than as a browsable directory in its own right.
The Campsites API is a managed, monitored endpoint for campsites.co.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when campsites.co.uk 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 campsites.co.uk 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 a campsite finder that filters UK sites by region, arrival date, party size, and accommodation type.
- Display daily availability calendars for specific pitches using the per-day 0/1 arrays from
check_availability. - Aggregate campsite ratings, review counts, and recommend percentages to rank sites in a comparison tool.
- Map campsite coordinates from
lat/lngfields inget_campsite_detailsonto an interactive UK map. - Populate a glamping-specific search UI using the
Glampingcategory fromlist_accommodation_types. - Sync campsite facility and rules data into a trip-planning app using the
faqs,rules, andphonefields. - Seed a destination guide with park counts and slugs from the
popular_destinationsarray inlist_categories.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Campsites.co.uk have an official developer API?+
How do I find valid location slugs for `search_campsites`?+
list_categories first and inspect the popular_destinations array. Each entry includes a URL slug you can pass directly as the location parameter to search_campsites. Confirmed working values include strings like cornwall and devon.What does `check_availability` actually return per day, and why are the keys unusual?+
accommodation_id you pass in. The pitches field gives you the relevant IDs as a comma-separated string. For each pitch, availability is an array of 0/1 values indexed by calendar day, and arrival-days marks which days permit check-in arrivals.Does the API return direct booking URLs or a live booking flow?+
search_campsites includes an is_bookable flag and a url slug, and check_availability exposes per-day slot data, but the endpoints stop short of initiating or completing a reservation. You can fork this API on Parse and revise it to add an endpoint targeting the booking step if your use case requires it.