CarMax APIcarmax.com ↗
Search CarMax used car inventory, retrieve vehicle specs and reviews, and look up store locations and hours via a structured REST API.
What is the CarMax API?
The CarMax API provides 5 endpoints covering used car inventory search, detailed vehicle data, and store information. Use search_cars to query listings by make, model, or body type with ZIP-based distance sorting, then call get_vehicle_details with a stock number to retrieve specs, feature lists, customer review summaries, and multiple image URLs for any specific vehicle.
curl -X GET 'https://api.parse.bot/scraper/ac3c0c60-727b-4ee5-bf80-9bab762f7082/search_cars?uri=%2Fcars&skip=0&sort=bestmatch&take=3&zip_code=90001' \ -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 carmax-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.
from parse_apis.carmax_api import CarMax, Sort, Vehicle, VehicleDetail, Store, Location
carmax = CarMax()
# Search for Toyota SUVs sorted by lowest price near Los Angeles
for vehicle in carmax.vehicles.search(uri="/cars/toyota", sort=Sort.PRICE_ASC, zip_code="90001"):
print(vehicle.year, vehicle.make, vehicle.model, vehicle.base_price, vehicle.mileage)
# Get full details for the first result
detail = vehicle.details()
print(detail.base.vin, detail.base.exterior_color)
for spec_cat in detail.specs:
print(spec_cat.display_name)
for spec in spec_cat.specifications:
print(spec.display_name, spec.display_value)
print(detail.reviews.average, detail.reviews.top_pros)
for img in detail.images.items:
print(img.name, img.full_size_url)
break
# List all CarMax stores
for store in carmax.stores.list():
print(store.name, store.address_locality, store.address_region, store.latitude, store.longitude)
# Get a specific store location and browse its inventory
lax = carmax.location(id="7810")
for car in lax.inventory(zip_code="90301"):
print(car.stock_number, car.make, car.model, car.base_price, car.engine_type)
Search for used cars on CarMax with filters and pagination. The uri parameter filters by make, model, or body type (e.g. /cars/toyota, /cars/suv). Returns vehicle listings sorted by the chosen order. Paginated via skip/take offsets.
| Param | Type | Description |
|---|---|---|
| uri | string | Filter path for cars. Examples: /cars (all), /cars/toyota, /cars/toyota/camry, /cars/suv, /cars/sedan. |
| skip | integer | Number of results to skip for pagination. |
| sort | string | Sort order for results. |
| take | integer | Number of results to return per page (max 100). |
| zip_code | string | 5-digit US ZIP code for location-based results and shipping estimates. |
{
"type": "object",
"fields": {
"items": "array of vehicle objects with stockNumber, make, model, year, basePrice, mileage, exteriorColor, storeId, distance, and more",
"totalCount": "integer total number of matching vehicles"
},
"sample": {
"data": {
"items": [
{
"vin": "5TDKKRFH5FS065114",
"body": "4D Sport Utility",
"make": "Toyota",
"trim": "XLE",
"year": 2015,
"model": "Highlander",
"mileage": 118903,
"mpgCity": 19,
"storeId": 7810,
"distance": 0,
"basePrice": 18998,
"storeName": "LAX",
"driveTrain": "Front Wheel Drive",
"engineSize": "3.5L",
"engineType": "Gas",
"horsepower": 270,
"mpgHighway": 25,
"stockNumber": 28679371,
"transmission": "Automatic",
"averageRating": 4.86,
"exteriorColor": "Silver",
"interiorColor": "Gray",
"numberOfReviews": 22
}
],
"totalCount": 6289
},
"status": "success"
}
}About the CarMax API
Inventory Search and Vehicle Details
The search_cars endpoint accepts a uri path parameter that scopes results by make, model, or body type — for example /cars/toyota/camry or /cars/suv. Results are paginated using skip and take offsets (up to 100 per page) and can be sorted by available sort options. Each item in the items array includes stockNumber, make, model, year, basePrice, mileage, exteriorColor, storeId, and distance when a zip_code is provided. The totalCount field tells you how many vehicles match the query overall.
Once you have a stockNumber, get_vehicle_details returns a multi-section response: a base object with price, VIN, and color data; a specs array organized by category with human-readable displayName labels; a features array keyed by categoryName and featureName; an images object with a structured items array of image URLs; and a highlights array with titled description blocks. It also returns a reviews object containing a customerReviews array, an average rating, and aggregated topPros and topCons lists derived from buyer feedback for that make and model.
Store Locations and Local Inventory
get_stores returns the complete list of CarMax store locations in a single call — no pagination required. Each store object includes name, a structured address with addressLocality, addressRegion, and addressCountry, and a geo object with latitude and longitude. For deeper store data, get_store_details takes a store_id (available from vehicle search results via the storeId field) and returns phone numbers, full hours of operation, holiday hours, service hours, store attributes, capabilities, and a live isOpen boolean.
To pull inventory near a specific store, get_store_inventory takes the same store_id and optional zip_code, returning the same vehicle listing format as search_cars with totalCount and a paginated items array. This is useful for building store-specific inventory views or transfer-availability checks.
The CarMax API is a managed, monitored endpoint for carmax.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when carmax.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 carmax.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 basePrice changes for specific make/model combinations using search_cars.
- Aggregate customer review topPros and topCons from get_vehicle_details to compare buyer sentiment across competing models.
- Map all CarMax locations using the geo coordinates from get_stores for a dealer-finder feature.
- Check real-time open/closed status and service hours for a specific store using get_store_details before routing a user.
- List the full inventory available at a chosen store using get_store_inventory with a store_id and paginate through results.
- Filter convertible or SUV inventory near a ZIP code by passing a body-type uri and zip_code to search_cars.
- Pull VIN, mileage, and spec data from get_vehicle_details to pre-populate a vehicle history lookup or comparison tool.
| 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 CarMax have an official public developer API?+
What does get_vehicle_details return beyond basic price and mileage?+
specs array grouped by category, a features array with category and feature names, an images object with multiple image URLs, a highlights array with titled descriptions, and a reviews object that includes an average rating, a customerReviews array, and aggregated topPros and topCons lists for the make/model.Can I filter search results by price range, mileage, or year?+
search_cars endpoint currently accepts uri (for make, model, or body type), zip_code, sort, and pagination params. Dedicated filters for price range, mileage, or year are not exposed as direct parameters. You can fork this API on Parse and revise it to add those filter parameters.Does the API return financing or monthly payment estimates?+
basePrice, specs, features, and store data. Financing terms, monthly payment calculators, and credit-related fields are not part of the current response schema. You can fork it on Parse and revise to add the missing endpoint.How does pagination work across the inventory endpoints?+
search_cars and get_store_inventory use skip and take integer offsets. take is capped at 100 per request. Use the totalCount field from the first response to calculate how many additional pages are needed.