AutoScout24 APIautoscout24.com ↗
Search AutoScout24 car listings across Europe. Filter by make, model, price, fuel type, and country. Explore vehicle taxonomy with makes and models endpoints.
What is the AutoScout24 API?
The AutoScout24 API provides access to 2 endpoints covering millions of European car listings and the full vehicle taxonomy. The search_listings endpoint returns paginated results with fields including price, mileage, fuel type, transmission, first registration date, and seller location. The get_aggregations endpoint exposes the complete list of makes and their associated models, using numeric IDs to chain calls.
curl -X GET 'https://api.parse.bot/scraper/e78cd3f6-1aab-49ec-8344-854707ec80da/search_listings?make=BMW&page=1&model=3&country=AT&sort_by=standard&year_to=2025&price_to=50000&fuel_type=D&max_pages=1&page_size=20&year_from=2018&price_from=5000&include_raw=False&transmission=M&exclude_damaged=True' \ -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 autoscout24-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.
"""Walkthrough: AutoScout24 SDK — search listings, explore taxonomy, drill into models."""
from parse_apis.autoscout24_api import AutoScout24, Sort, FuelType, Country, VehicleType, MakeIdRequired
client = AutoScout24()
# List available car makes from the taxonomy
for make in client.makes.list(limit=5):
print(make.name, make.id)
# Construct a known make and list its models
bmw = client.make(id=13)
for model in bmw.models(vehicle_type=VehicleType.CAR, limit=3):
print(model.name, model.id, model.label.en_GB)
# Search listings with filters — sort by price, diesel, in Germany
listing = client.listings.search(
make="BMW",
country=Country.DE,
fuel_type=FuelType.DIESEL,
sort_by=Sort.PRICE,
limit=1,
).first()
if listing:
print(listing.make, listing.model, listing.price, listing.mileage)
print(listing.location, listing.seller_type)
print(listing.contact.company_name, listing.contact.phones)
# Typed error handling
try:
for m in client.make(id=99999).models(limit=1):
print(m.name)
except MakeIdRequired as exc:
print(f"Error: {exc}")
print("exercised: makes.list / make.models / listings.search / error handling")
Search for car listings on AutoScout24 with filters for make, model, price range, year, fuel type, transmission, and country. Returns paginated results with listing details including price, mileage, seller contact, and location. Pagination is manual via page/max_pages params; each page returns up to page_size results. The total_results in metadata reflects the full result set on the server.
| Param | Type | Description |
|---|---|---|
| make | string | Car make (e.g., Volkswagen, BMW, Audi, Mercedes-Benz) |
| page | integer | Start page number |
| model | string | Car model (e.g., Golf, 3-series, A4) |
| country | string | ISO-2 country code or comma-separated codes (e.g., DE or DE,IT,FR). Supported: AT, BE, DE, ES, FR, IT, LU, NL |
| sort_by | string | Sort order for results |
| year_to | string | Maximum year of first registration (e.g., 2025) |
| price_to | string | Maximum price in EUR |
| fuel_type | string | Fuel type code |
| max_pages | integer | Maximum number of pages to scan |
| page_size | integer | Number of results per page (max 20) |
| year_from | string | Minimum year of first registration (e.g., 2018) |
| price_from | string | Minimum price in EUR |
| include_raw | boolean | Include raw JSON data from the site in each listing |
| transmission | string | Transmission type code |
| exclude_damaged | boolean | Exclude damaged listings |
{
"type": "object",
"fields": {
"listings": "array of car listing objects with id, make, model, model_version, first_registration, price, mileage, fuel_type, transmission, location, seller_type, image_url, url, and contact",
"metadata": "object with current_page, page_size, scanned_pages, total_results, total_pages, and has_more"
},
"sample": {
"data": {
"listings": [
{
"id": "b1501d52-11ae-4488-9a42-1b97dd709c6b",
"url": "https://www.autoscout24.com/offers/bmw-116-example",
"make": "BMW",
"model": "116",
"price": 4950,
"contact": {
"phones": [
"+49 (0)163 - 1234567"
],
"company_name": "Example Auto GmbH",
"contact_name": "Sales Team"
},
"mileage": 104500,
"location": "59557 Lippstadt, DE",
"fuel_type": "Gasoline",
"image_url": "https://prod.pictures.autoscout24.net/listing-images/example.jpg/250x188.webp",
"seller_type": "Dealer",
"transmission": "Manual",
"model_version": "i Sport Line",
"first_registration": "08-2011"
}
],
"metadata": {
"has_more": true,
"page_size": 20,
"total_pages": 200,
"current_page": 1,
"scanned_pages": 1,
"total_results": 19020
}
},
"status": "success"
}
}About the AutoScout24 API
Search Car Listings
The search_listings endpoint accepts filters for make, model, country (ISO-2 codes; AT, BE, DE, ES, FR, IT, LU, NL supported), price_to, year_to, fuel_type, and transmission. Each listing object in the listings array includes id, make, model, model_version, first_registration, price, mileage, fuel_type, transmission, and location data. The metadata object returns current_page, page_size, total_results, total_pages, and has_more for manual pagination control via the page and max_pages parameters.
Vehicle Taxonomy via Aggregations
The get_aggregations endpoint resolves the AutoScout24 vehicle hierarchy. Call it with mode='makes' to retrieve all available makes as an array of objects containing id (integer), name, and label.en_GB. Pass a make_id obtained from that response into a second call with mode='models' to list all models for that make. The metadata field returns the total count of items and confirms which mode was used. This two-step lookup ensures make and model values passed to search_listings are valid.
Coverage and Filtering Notes
Country coverage is limited to eight European markets: Austria, Belgium, Germany, Spain, France, Italy, Luxembourg, and the Netherlands. The country parameter accepts a single ISO-2 code or a comma-separated list (e.g., DE,FR,IT) to broaden a search across markets. Listings are denominated in EUR. Sort order is controlled via sort_by, though the available sort codes should be verified against actual AutoScout24 sort options.
The AutoScout24 API is a managed, monitored endpoint for autoscout24.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when autoscout24.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 autoscout24.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?+
- Track EUR price distributions for a specific make/model combination across multiple European countries
- Build a used-car price alert tool filtering by
year_to,price_to, andfuel_type - Populate a vehicle selector UI with valid make/model pairs using chained
get_aggregationscalls - Compare average mileage for the same model listed in DE versus FR or IT
- Monitor new listings for a specific
makeandmodelby pollingsearch_listingswithhas_morepagination - Analyze fuel type distribution across listings in a given country using aggregated search results
- Identify transmission preferences by market using
transmissionfield across country-scoped searches
| 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 AutoScout24 have an official developer API?+
What does `get_aggregations` return and how do I use it with `search_listings`?+
mode='makes', get_aggregations returns every make available on AutoScout24 as an array with id, name, and label.en_GB. You then pass one of those id values as make_id with mode='models' to get that make's model list. The name values from those responses map directly to the make and model parameters in search_listings.Which countries does the `search_listings` endpoint cover?+
country parameter supports eight markets: AT (Austria), BE (Belgium), DE (Germany), ES (Spain), FR (France), IT (Italy), LU (Luxembourg), and NL (Netherlands). Other European markets where AutoScout24 operates, such as Poland or Portugal, are not currently supported by this parameter.Does the API return seller contact details or full vehicle specs beyond mileage and fuel type?+
listings array includes seller location and contact fields alongside price, mileage, fuel_type, transmission, and first_registration. Detailed technical specifications such as engine displacement, power output, or full equipment lists are not currently returned. You can fork this API on Parse and revise it to add an endpoint that fetches the individual listing detail page for those fields.How does pagination work in `search_listings`?+
page parameter and can cap how many pages are fetched with max_pages. The metadata object in each response includes current_page, total_pages, and has_more, so you can iterate until has_more is false or your desired page limit is reached.