Indie Campers APIindiecampers.com ↗
Access Indie Campers relocation deals across Europe and North America. Filter by pickup/dropoff location, trip duration, and dates via 2 structured endpoints.
What is the Indie Campers API?
The Indie Campers API exposes 2 endpoints that return campervan relocation deals and rental locations from indiecampers.com. The search_deals endpoint returns deal objects with fields including pick_up_location, drop_off_location, van_category, passengers, beds, min_price, and max_max_nights, with support for filtering by date range, trip duration, and geographic region. The get_locations endpoint maps regions to available pickup and dropoff cities with deal counts and minimum prices.
curl -X GET 'https://api.parse.bot/scraper/84c1036c-de9f-4184-ae75-f8005e113504/get_locations?group=north-america' \ -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 indiecampers-com-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.
"""Indie Campers relocation deals: discover locations, search deals, filter by date and duration."""
from parse_apis.indie_campers_deals_api import IndieCampers, Region, NotFoundError
client = IndieCampers()
# Discover available pickup/dropoff locations in Europe
catalog = client.locationcatalogs.get(group=Region.EUROPE)
for region, locations in catalog.pick_up_locations.items():
print(f"Region {region}: {len(locations)} pickup locations")
for loc in locations[:2]:
print(f" {loc.city} ({loc.country_code}) — {loc.total_deals} deals from €{loc.min_price}")
# Search short relocation deals (max 5 days) in Europe
deal = client.deals.search(group=Region.EUROPE, max_days=5, limit=1).first()
if deal:
print(f"\nBest short trip: {deal.pick_up_location} → {deal.drop_off_location}")
print(f" Van: {deal.van_category}, {deal.passengers} pax, €{deal.min_price}/night")
for date_slot in deal.available_dates[:2]:
print(f" Window: {date_slot.earliest_checkin_date} to {date_slot.latest_checkout_date}, max {date_slot.max_nights} nights")
# Browse all European deals with date filter, bounded iteration
for deal in client.deals.search(group=Region.EUROPE, date_from="2026-07-01", date_to="2026-08-31", limit=3):
print(f"{deal.pick_up_location} → {deal.drop_off_location}: €{deal.min_price}, up to {deal.max_max_nights} nights")
# Typed error handling
try:
catalog = client.locationcatalogs.get(group=Region.NORTH_AMERICA)
print(f"\nNorth America dropoff regions: {len(catalog.drop_off_locations)} groups")
except NotFoundError as exc:
print(f"Region not available: {exc}")
print("\nExercised: locationcatalogs.get / deals.search / deals.search with date filters")
Retrieves all available pick-up and drop-off locations grouped by region. Each location includes its permalink (used as a filter value in search_deals), city name, country code, total deal count, and minimum nightly price. When group is omitted, returns locations across all regions.
| Param | Type | Description |
|---|---|---|
| group | string | Region group permalink to filter by. Accepted values: 'europe', 'north-america'. If omitted, returns all regions. |
{
"type": "object",
"fields": {
"pick_up_locations": "object mapping region name to array of Location objects with permalink, city, country_code, total_deals, min_price",
"drop_off_locations": "object mapping region name to array of Location objects with permalink, city, country_code, total_deals, min_price"
},
"sample": {
"data": {
"pick_up_locations": {
"europe": [
{
"city": "florence-offers",
"min_price": 9.99,
"permalink": "florence-offers",
"total_deals": 27,
"country_code": "IT"
}
]
},
"drop_off_locations": {
"europe": [
{
"city": "edinburgh",
"min_price": 9.99,
"permalink": "edinburgh",
"total_deals": 12,
"country_code": "GB"
}
]
}
},
"status": "success"
}
}About the Indie Campers API
Endpoints Overview
The API covers two endpoints. get_locations returns all available pickup and dropoff locations grouped by region — such as europe or north-america — including each location's permalink, city, country_code, total_deals, and min_price. The optional group parameter narrows results to a single region. Location permalinks returned here are the canonical values to pass into search_deals.
Searching and Filtering Deals
search_deals is the primary endpoint. It accepts up to seven filter parameters: pick_up_location and drop_off_location (using permalinks from get_locations), date_from and date_to in ISO YYYY-MM-DD format, max_days to exclude deals with trip durations above a threshold, group for regional scoping, and page for manual pagination. When page is omitted, the endpoint automatically paginates through all results; the limit parameter caps total results returned in this mode. Each deal object in the response includes van category, passenger count, bed count, minimum price, and maximum available nights.
Response Structure
The search_deals response includes both filtered and unfiltered deal counts — total_filtered and total_unfiltered — letting you measure how much your filters narrow the result set. It also returns available_pickup_locations and available_dropoff_locations arrays within the current result set, useful for building dynamic filter UIs without a separate get_locations call. Deal pricing is expressed as min_price, representing the lowest rate available for that route and van combination.
The Indie Campers API is a managed, monitored endpoint for indiecampers.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when indiecampers.com 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 indiecampers.com 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 deal-alert tool that monitors min_price drops on specific Europe routes by polling search_deals with pick_up_location and drop_off_location filters
- Generate a relocation deal map by plotting pickup and dropoff cities from get_locations using country_code and city fields
- Find last-minute campervan deals by filtering search_deals with date_from set to the current date and max_days set to a short window
- Compare van categories and passenger capacity across available deals on a given route using van_category, passengers, and beds fields
- Build a route popularity ranking by aggregating total_deals counts from get_locations across all pickup cities in a region
- Filter North America relocation deals separately from Europe deals using the group parameter in both endpoints
- Identify budget-friendly routes by sorting deals returned from search_deals by min_price across multiple drop_off_location values
| 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.