CARFAX API: Search used cars
Searches CARFAX used-car listings for a make and model near a US ZIP code, in CARFAX order, with listing details and free vehicle-history highlights. Paid full history reports are not included.
Unofficial. Not affiliated with or endorsed by CARFAX.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Car, required
car Car make and model, such as Honda Accord.
Toyota Camry
- Zip Code, required
zip_code Five-digit US ZIP code, such as 20001.
90210
Exactly 5 characters.
- Max Price optional
max_price Highest listing price in US dollars, such as 20000. Leave blank for any price.
20000
Number 0 or more.
- Max Results optional
max_results Maximum number of listings, such as 25.
27
Whole number from 1 to 100. Default
25.- Radius (miles) optional
radius_miles Search radius in miles, such as 50.
25
Whole number from 1 to 500. Default
50.
Input as JSON
{ "car": "Toyota Camry", "zip_code": "90210", "max_price": 20000, "max_results": 27, "radius_miles": 25}Output
{ "listings": [ { "vin": "4T1B11HK1JU611310", "make": "Toyota", "trim": "LE", "year": 2018, "model": "Camry", "price": 16830, "mileage": 81020, "currency": "USD", "photo_link": "https://carfax-img.vast.com/carfax/v2/-1983570008698335165/1/640x480" , "dealer_name": "Simi Valley Toyota", "vehicle_use": "Personal Use", "listing_link": "https://www.carfax.com/vehicle/4T1B11HK1JU611310" , "distance_miles": 24.2, "dealer_location": "Simi Valley, CA", "previous_owners": 1, "accidents_reported": "No Accident or Damage Reported", "service_records_count": 16 }, { "vin": "4T1G31AK1LU012890", "make": "Toyota", "trim": "SE", "year": 2020, "model": "Camry", "price": 14115, "mileage": 164395, "currency": "USD", "photo_link": "https://carfax-img.vast.com/carfax/v2/668014494404376799/1/640x480" , "dealer_name": "Carwin Motors", "vehicle_use": "Personal Use", "listing_link": "https://www.carfax.com/vehicle/4T1G31AK1LU012890" , "distance_miles": 6.4, "dealer_location": "North Hollywood, CA", "previous_owners": 1, "accidents_reported": "Minor Damage", "service_records_count": 18 }, { "vin": "4T1T11AKXRU207108", "make": "Toyota", "trim": "SE", "year": 2024, "model": "Camry", "price": 15084, "mileage": 163513, "currency": "USD", "photo_link": "https://carfax-img.vast.com/carfax/v2/-4465357645389425755/1/640x480" , "dealer_name": "Simi Valley Toyota", "vehicle_use": "Personal Use", "listing_link": "https://www.carfax.com/vehicle/4T1T11AKXRU207108" , "distance_miles": 24.2, "dealer_location": "Simi Valley, CA", "previous_owners": 1, "accidents_reported": "No Accident or Damage Reported", "service_records_count": 18 } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"carfax.com/search_cars","input":{"car":"Toyota Camry","zip_code":"90210","max_price":20000,"max_results":27,"radius_miles":25}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "carfax.com/search_cars" , "input": { "car": "Toyota Camry", "zip_code": "90210", "max_price": 20000, "max_results": 27, "radius_miles": 25 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "carfax.com/search_cars" , "input": { "car": "Toyota Camry", "zip_code": "90210", "max_price": 20000, "max_results": 27, "radius_miles": 25 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run carfax.com/search_cars# with {"car":"Toyota Camry","zip_code":"90210","max_price":20000,"max_results":27,"radius_miles":25}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "car", "zip_code" ], "properties": { "car": { "type": "string", "examples": [ "Honda Accord" ], "minLength": 1, "description": "Car make and model, such as Honda Accord." }, "zip_code": { "type": "string", "examples": [ "20001" ], "maxLength": 5, "minLength": 5, "description": "Five-digit US ZIP code, such as 20001." }, "max_price": { "type": "number", "minimum": 0, "examples": [ 20000 ], "description": "Highest listing price in US dollars, such as 20000. Leave blank for any price." }, "max_results": { "type": "integer", "default": 25, "maximum": 100, "minimum": 1, "examples": [ 25 ], "description": "Maximum number of listings, such as 25." }, "radius_miles": { "type": "integer", "default": 50, "maximum": 500, "minimum": 1, "examples": [ 50 ], "description": "Search radius in miles, such as 50." } }}Output schema
{ "type": "object", "required": [ "listings" ], "properties": { "listings": { "type": "array", "items": { "type": "object", "required": [ "year", "make", "model", "trim", "price", "currency", "mileage", "accidents_reported", "previous_owners", "service_records_count", "vehicle_use", "dealer_name", "dealer_location", "distance_miles", "photo_link", "listing_link", "vin" ], "properties": { "vin": { "type": [ "string", "null" ], "description": "Vehicle identification number.", "x-fous-developer": true }, "make": { "type": [ "string", "null" ], "description": "Car make." }, "trim": { "type": [ "string", "null" ], "description": "Car trim." }, "year": { "type": [ "integer", "null" ], "description": "Model year." }, "model": { "type": [ "string", "null" ], "description": "Car model." }, "price": { "type": [ "number", "null" ], "description": "Listing price in US dollars." }, "mileage": { "type": [ "integer", "null" ], "description": "Odometer mileage in miles." }, "currency": { "type": "string", "description": "Price currency code." }, "photo_link": { "type": [ "string", "null" ], "description": "First vehicle photo link." }, "dealer_name": { "type": [ "string", "null" ], "description": "Seller dealership." }, "vehicle_use": { "type": [ "string", "null" ], "description": "CARFAX use label such as Personal Use or Fleet." }, "listing_link": { "type": "string", "description": "CARFAX listing page." }, "distance_miles": { "type": [ "number", "null" ], "description": "Distance to dealer in miles." }, "dealer_location": { "type": [ "string", "null" ], "description": "Dealer city and state." }, "previous_owners": { "type": [ "integer", "null" ], "description": "Number of previous owners shown by CARFAX." }, "accidents_reported": { "type": [ "string", "null" ], "description": "CARFAX accident or damage history highlight." }, "service_records_count": { "type": [ "integer", "null" ], "description": "Number of service records shown by CARFAX." } }, "additionalProperties": false }, "description": "Used cars in CARFAX search order." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
carfax.com/search_cars- Returns
- year, make, model, trim, price, mileage, accidents, owners, service records, use, dealer, distance, photo, link, VIN
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method carfax.com/search_cars with the inputs above.
Ask your agent
- Find used Toyota RAV4s for sale within 30 miles of ZIP 78704 under $22,000, and show mileage, accident history, and number of owners for each
- Pull up to 40 Carfax listings for a used Subaru Outback near 80202, with price, dealer, and VIN
- I'm shopping for a Ford F-150 around 30318, anything under $35k within 100 miles. Which ones have no reported accidents and one owner?
- Show me used Mazda CX-5 listings near ZIP 02139 with their free history highlights like service records and personal vs. fleet use
- On carfax.com, look for Honda Civics under $15,000 within 25 miles of 94110 and give me the top 10 with links and photos
See more
Searches Cars.com car listings for a make and model around a US ZIP code within a radius, optionally by condition (new, used or certified pre-owned) and maximum price, in Cars.com search order.
cars.com/search_carsSearches new and used cars for sale near a US ZIP code for a make and model, with prices, dealer details and CarGurus deal ratings. Used cars come first, then new cars, each in CarGurus order; market difference is positive below market and negative above.
cargurus.com/search_carsSearches CarMax used cars by make and model with optional ZIP, distance, year, price and mileage filters, keeping CarMax's order. Pages expose only the first 48 cars; distance is CarMax's distance from the selected local store, and larger limits or narrow distance filters may return fewer matches.
carmax.com/search_carsSearches Autotrader car listings near a US ZIP code by make and model, with condition, price, year and distance filters. Returns up to 100 listings in site order.
autotrader.com/search_carsSearches Carvana's used-car inventory by make and model, with optional price, year, mileage and ZIP filters, and returns each car's price, estimated monthly payment, mileage and delivery or pickup estimate for the ZIP.
carvana.com/search_carsSearches mobile.de car listings by make and model, with optional registration year, price, mileage, fuel, condition and sorting. Returns up to 50 listings in marketplace order; fields not shown on a listing are null.
mobile.de/search_carsGets the current average used asking price, the CarGurus price range and the 12-month price history for a model year (all trims), from CarGurus price trends.
cargurus.com/get_market_valueEstimates a used car's trade-in and private-party values and ranges on Kelley Blue Book for a given mileage, ZIP code, trim and condition.
kbb.com/get_car_value