Carsales APIcarsales.com ↗
Search and retrieve car listings from carsales.com.au. Filter by make, model, state, and price. Get full specs, images, and seller details via 4 endpoints.
What is the Carsales API?
The Carsales.com API gives programmatic access to Australia's largest automotive marketplace across 4 endpoints. Use search_cars to query listings with filters for make, model, state, and price range, retrieving paginated summaries with fields like mileage, transmission, body type, and engine. Full listing details — including high-resolution images, seller descriptions, and specifications covering dimensions, fuel type, and safety features — are available via get_listing_details.
curl -X GET 'https://api.parse.bot/scraper/48575139-8ff3-4d8f-8bea-01d39a790116/search_cars?make=toyota&model=hilux&state=vic&offset=0&max_price=80000&min_price=10000' \ -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 carsales-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: Carsales SDK — browse makes, search listings, get details."""
from parse_apis.carsales_api import Carsales, AustralianState, ListingNotFound
client = Carsales()
# List available makes on carsales.com.au
for make in client.makes.list(limit=5):
print(make.name, make.slug)
# Get models for Toyota using constructible Make
toyota = client.make("toyota")
for model in toyota.models.list(limit=5):
print(model.name, model.slug)
# Search for listings with filters
listing = client.listingsummaries.search(
make="toyota", model="hilux", state=AustralianState.NSW, limit=1
).first()
# Drill into full details from a summary
if listing:
print(listing.title, listing.price, listing.mileage)
try:
detail = listing.details()
print(detail.title, detail.price)
print(detail.description[:100] if detail.description else "No description")
for key, val in list(detail.specifications.items())[:3]:
print(key, val)
except ListingNotFound as exc:
print(f"Listing removed: {exc.ad_id}")
print("exercised: makes.list / models.list / listingsummaries.search / details")
Search car listings on carsales.com.au with optional filters for make, model, state, and price range. Returns paginated listing summaries. Pagination uses an offset parameter (increments of ~12 per page). When make is omitted, returns all listings. Model requires make; state requires both make and model.
| Param | Type | Description |
|---|---|---|
| make | string | Car make slug (e.g. toyota, ford, mazda). |
| model | string | Car model slug (e.g. corolla, hilux). Requires make to be set. |
| state | string | Australian state slug. Requires make and model to be set. |
| offset | string | Results offset for pagination (e.g. 0, 12, 24). |
| max_price | string | Maximum price filter as a numeric string (e.g. 50000). |
| min_price | string | Minimum price filter as a numeric string (e.g. 20000). |
{
"type": "object",
"fields": {
"listings": "array of listing summary objects with id, slug, title, price, make, model, year, state, mileage, body_type, transmission, engine, location, images",
"total_count": "integer total number of matching listings"
},
"sample": {
"data": {
"listings": [
{
"id": "OAG-AD-25870390",
"make": "Toyota",
"slug": "2023-toyota-hilux-sr5-auto-4x4-double-cab",
"year": "2023",
"model": "Hilux",
"price": "$56,888",
"state": "NSW",
"title": "2023 Toyota Hilux SR5 Auto 4x4",
"engine": "4cyl 2.8L T Diesel",
"images": [],
"mileage": "62,488 km",
"location": "NSW",
"body_type": "Ute",
"transmission": "Automatic"
}
],
"total_count": 4703
},
"status": "success"
}
}About the Carsales API
Search and Filter Listings
The search_cars endpoint accepts optional make, model, state, min_price, max_price, and offset parameters. Pagination is offset-based in increments of 12. Each result in the listings array includes id, slug, title, price, year, mileage, body_type, transmission, and engine. The total_count field tells you how many results match the query. Note that model requires make to be set, and state requires both make and model.
Listing Details and Specifications
get_listing_details takes the slug and ad_id from a search result and returns the full record. The specifications object covers engine configuration, transmission, dimensions, fuel consumption, safety ratings, and features. The images array contains high-resolution URLs. The description field is the raw seller-provided text.
Makes and Models Discovery
get_makes returns a flat list of every make available on carsales.com.au, each with a name and slug. Those slugs feed directly into search_cars and get_models_by_make. get_models_by_make accepts a make slug and returns all model slugs for that make — useful for building dropdowns or validating user input before running a search.
The Carsales API is a managed, monitored endpoint for carsales.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when carsales.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 carsales.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 used-car price comparison tool using search_cars with min_price and max_price filters across makes
- Track average asking prices for a specific model over time using total_count and listing price fields
- Populate a vehicle selector UI with valid makes and models via get_makes and get_models_by_make
- Generate vehicle spec sheets by pulling the specifications object from get_listing_details
- Alert buyers when new listings matching a saved search (make, model, state, price range) appear
- Aggregate mileage and year data from search results to analyse depreciation curves by model
- Feed listing images and descriptions into a vehicle showcase or comparison website
| 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 carsales.com.au have an official developer API?+
What does search_cars return and how does pagination work?+
listings array of summary objects (id, slug, title, price, year, make, model, state, mileage, body_type, transmission, engine) and a total_count integer. Pagination is controlled by the offset parameter. Increment it by 12 per page — so page 1 is offset 0, page 2 is offset 12, and so on.Are there filter restrictions I should know about before building a search?+
model parameter only works when make is also provided. The state filter requires both make and model to be set. Omitting a required parent parameter means that filter is silently ignored, so validate your inputs before calling the endpoint.