Edmunds APIedmunds.com ↗
Search new and used car listings on Edmunds by make, model, year, and ZIP. Retrieve full vehicle details by VIN including price, specs, dealer info, and history.
What is the Edmunds API?
The Edmunds API gives developers access to 3 endpoints covering car inventory search, VIN-level vehicle details, and a full list of available makes. The search_inventory endpoint returns up to 21 listings per request with fields like price, mileage, trim, driveType, and transmission. The get_vehicle_details endpoint provides dealer information, ownership history, and CPO/used/new status for any 17-character VIN found on Edmunds.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/37c43a2b-0815-4e77-a389-93f5080c3359/get_makes' \ -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 edmunds-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.
"""Edmunds SDK — search car inventory and inspect vehicle details."""
from parse_apis.edmunds_api import Edmunds, Condition, VehicleNotFound
client = Edmunds()
# List available car makes
for make in client.makes.list(limit=5):
print(make.name, make.nice_name)
# Search used Honda vehicles near NYC
vehicle = client.vehicles.search(
make="honda", condition=Condition.USED, zip="10001", limit=1
).first()
if vehicle:
print(vehicle.year, vehicle.make, vehicle.model, vehicle.trim)
print(vehicle.price, vehicle.mileage, vehicle.deal_rating)
print(vehicle.dealer.name, vehicle.dealer.city, vehicle.dealer.state)
# Fetch full details by VIN
try:
detail = client.vehicles.get(vin=vehicle.vin)
print(detail.exterior_color, detail.interior_color)
print(detail.transmission, detail.drive_type, detail.fuel_type)
except VehicleNotFound as exc:
print(f"Vehicle no longer listed: {exc.vin}")
print("exercised: makes.list / vehicles.search / vehicles.get")
Retrieves the full list of car makes available in Edmunds used car inventory. Each make includes a display name and a URL-friendly slug (niceName). The list includes both current and discontinued brands (69 total). No pagination or filtering — returns all makes in a single response.
No input parameters required.
{
"type": "object",
"fields": {
"makes": "array of objects with name (display name) and niceName (URL-friendly slug)"
},
"sample": {
"data": {
"makes": [
{
"name": "Honda",
"niceName": "honda"
},
{
"name": "Toyota",
"niceName": "toyota"
},
{
"name": "BMW",
"niceName": "bmw"
}
]
},
"status": "success"
}
}About the Edmunds API
Endpoints Overview
The API exposes three endpoints. get_makes returns an array of all car makes currently listed in Edmunds used car inventory, each with a name (display label) and niceName (the URL-friendly slug used as input to other endpoints). search_inventory accepts up to five optional filters — zip, make, model, year, and condition — and returns a listings array alongside a count (results in this response) and total (full match count across all pages). Each listing includes vin, price, mileage, year, make, model, trim, bodyType, colors, transmission, driveType, and fuel type.
VIN Detail Lookup
get_vehicle_details takes a single required input — a 17-character vin — and returns a richer object than the inventory search. Response fields include price, type (USED, NEW, or CPO), usage, owners (number of previous owners), trim, and a dealer object with name, city, state, and distance. This endpoint is the right choice when you need authoritative details on a specific listing rather than browsing a result set.
Filtering and Pagination Notes
All search_inventory filter parameters are optional, so an unfiltered call returns the broadest available inventory. The make and model inputs expect niceName slugs (e.g., honda, civic) — use the values returned by get_makes to construct valid queries. Results are capped at 21 listings per request; the total field tells you how many matches exist overall, but offset or cursor pagination is not exposed as an input parameter in this version.
The Edmunds API is a managed, monitored endpoint for edmunds.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when edmunds.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 edmunds.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 tracker that monitors listing prices for a specific make/model/year combination over time.
- Aggregate dealer inventory by ZIP code to surface local availability for a given vehicle type.
- Enrich a VIN database with ownership count, CPO status, and dealer location from get_vehicle_details.
- Power a car comparison tool that pulls trim, driveType, and transmission data from search_inventory results.
- Generate a lead list of dealers carrying specific models by extracting the dealer object from VIN detail responses.
- Validate or categorize vehicles in an existing dataset by resolving VINs against Edmunds listings.
- Populate a used car marketplace feed by filtering inventory on condition, make, and geographic ZIP.
| 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 Edmunds have an official developer API?+
What does the search_inventory endpoint return, and can I paginate through all results?+
count field for results in that response and a total field for the full match count. Offset or page-number parameters are not currently exposed as inputs, so you cannot step through additional pages within this API version.Does get_vehicle_details return full vehicle history reports (accidents, title events)?+
owners (number of previous owners), type (USED/NEW/CPO), usage, and dealer info, but does not expose accident records, title events, or odometer rollback flags. You can fork this API on Parse and revise it to add an endpoint pulling from a dedicated vehicle history source.Can I search new car inventory in addition to used listings?+
condition parameter on search_inventory accepts used or new, so you can target either segment or omit the parameter to return both.