Every used car on CarGurus, with CarGurus's own verdict on its price
The CarGurus API turns cargurus.com, cargurus.ca and cargurus.co.uk into JSON in four actions.
4 active endpoints. Every call is 2 credits.
- POST/cargurus/v1/search
- POST/cargurus/v1/listing
- POST/cargurus/v1/makes
- POST/cargurus/v1/models
What CarGurus endpoints does ReefAPI ship?
4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
CarGurus API
3 of 4 endpoints, ready to run
Used cars around a ZIP code with CarGurus's deal rating and market value on every row.
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the CarGurus API works
CarGurus is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 491 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Find the best-priced cars of one model near you
Three calls. The ids come from CarGurus's own lists, and every price on the way sits next to CarGurus's market value for that car.
The model ids with live counts: d334 is the Explorer, d337 the F-150.
Explorers within 50 miles rated a great or good deal, best first; every row has price, imv_price and below_imv_by.
The car in full: price history, each dealer fee, accident and owner counts, options and the dealer's hours.
A short list of Ford Explorers priced below CarGurus's market value, each with its price history, the fees the dealer adds and the vehicle-history counts.
curl -X POST https://api.reefapi.com/cargurus/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"zip":"10001","distance":50,"make":"m2","model_id":"d334","deal_rating":"great,good","sort":"best_deal"}'{
"ok": true,
"data": { … },
"meta": {
"api": "cargurus",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}Three prices on one car — what a CarGurus listing actually says
Some dealers advertise a base price, others an all-in price with their fees, and CarGurus's own 'below market' figure follows whichever the page shows. One listing read on 2026-10-14; the right-hand column is what the API returns.
| figure | on the search results | on the listing page | API field |
|---|---|---|---|
| Asking price | $17,830 | $20,000 (with fees) | price = 17830 on both actions |
| Price with dealer fees | $20,000 | $20,000 | price_plus_fees = 20000 |
| CarGurus market value (IMV) | $20,030 | $20,030 | imv_price = 20030 |
| Below market | $2,200 | $30 | below_imv_by = 2200 · below_imv_by_with_fees = 30 |
price means the same thing in search and listing, so a car can be joined across the two. The figure the listing page headlines is returned as headline_price with headline_price_includes_fees, and CarGurus's own gap is kept as imv_differential. Measured on a page of 22 listings: 4 headlined the price with fees.
What CarGurus publishes — measured 2026-10-14
CarGurus lists used cars from dealers in the United States, Canada and the United Kingdom. These are the numbers and limits measured on the live sites.
About 81,000 used cars within 50 miles of New York 10001 and about 1.47 million nationwide; about 37,000 around Toronto and 55,000 around Manchester.
price (asking price), price_plus_fees, imv_price (CarGurus market value), below_imv_by and below_imv_by_with_fees, the source's own imv_differential, and in listing the headline price, each dealer fee and the price history. Search and listing agreed on price, IMV, mileage, VIN and deal rating for 9 of 9 cars in the final run.
Price, IMV, deal rating, VIN, mileage and dealer on every row; days on market on 177, dealer phone on 176, features on 176, combined fuel economy on 147, a recent price drop on 28.
Every filter was checked against an unfiltered search in the same run, twice. Unknown values are refused, never ignored. Price sorts follow the price with dealer fees, as on CarGurus.
About 20-23 cars a page. CarGurus serves a limited number of pages per search (417 for an 81,000-car search, 50 for a 1,177-car one); the page after the last returns beyond_last_page: true.
New-car inventory, MSRP, the vehicle-history report itself (only its accident and owner counts), and monthly payment estimates.
What people build with CarGurus
The jobs this data is most often used for.
endpoints
credits per call
Find underpriced used cars: filter by deal_rating=great and sort by best_deal, then compare price with imv_price and below_imv_by.
Track a dealer's inventory and pricing: pass dealer_id to search and watch price drops, days on market and new arrivals.
Value a trade-in or a fleet: one make and model, a year window and a mileage band around a ZIP gives asking prices next to CarGurus's market value.
Monitor price cuts in a market: price_drops_only=true with a make, model and radius, and listing for the full price history.
What CarGurus data costs
The cheapest call here is 2 credits, so $15/mo (Pro) buys 5,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 491 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/cargurus/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"zip":"10001","distance":50,"make":"m2","model_id":"d334","deal_rating":"great,good","sort":"best_deal"}'import requests
r = requests.post(
"https://api.reefapi.com/cargurus/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"zip": "10001",
"distance": 50,
"make": "m2",
"model_id": "d334",
"deal_rating": "great,good",
"sort": "best_deal"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up CarGurus.
Get a free key →What is the deal rating and the IMV?▾
They are CarGurus's own analysis of each car. imv_price is CarGurus's instant market value, the price it estimates for that car; deal_rating says how the asking price compares: great, good, fair, high, overpriced, or no_analysis and uncertain when CarGurus does not rate the car. deal_rating_code keeps CarGurus's own code and deal_score its score. Both are on every search row and in listing. All 179 rows of an eight-search sample across the three sites carried an IMV and a deal rating.
Why is the ZIP code required?▾
CarGurus places every search around a location, and its distances and result counts depend on it: 10001 gives about 81,000 cars within 50 miles, 90210 about 64,000. Without a location the site would choose one for you, so the API asks for zip (a US ZIP, a Canadian postal code such as M5V 3L9, or a UK postcode such as SW1A 1AA). A code CarGurus cannot place is refused instead of returning a search around somewhere else. Use nationwide=true to search the whole country.
Do I get the price history?▾
Yes. listing returns price_history, every price change with its date, plus days_on_market and days_at_dealer. Every search row also carries the previous price, the original price, the amount and date of the last price drop. 28 of 179 rows in a mixed sample had a recent drop; price_drops_only=true returns only those (about 10,400 of 81,000 around New York).
Which countries and currencies?▾
site=us reads cargurus.com in US dollars and miles, site=ca reads cargurus.ca in Canadian dollars and kilometres, site=uk reads cargurus.co.uk in pounds and miles. Listing ids and make ids belong to one site, so pass the same site to listing that the search row came from (every row carries it). UK rows also carry ulez_compliant.
How many results can I page through?▾
About 20 to 23 cars a page. total is CarGurus's own count, but CarGurus stops serving pages before that count runs out: around New York it served 417 pages of an 81,000-car search, and 50 pages of a 1,177-car Ford Explorer search. A page past the end returns no rows with beyond_last_page: true, so a loop can stop there. Narrow the search with filters to reach every car.
Are sponsored listings mixed in?▾
Yes, CarGurus places priority and featured listings on every page. They are kept, because they are real cars for sale, and marked with placement and is_sponsored; meta.sponsored_rows counts them. They are placed by CarGurus and do not follow the chosen sort order. Promotional tiles without a car are removed and counted in meta.promo_tiles_dropped.
Which fields can be empty?▾
In a sample of 179 rows from eight searches (SUVs, pickups, electric cars, sedans, cheap cars, convertibles, Canada, UK): price, price with fees, IMV, deal rating, VIN, mileage and dealer name were on every row, days on market on 177, the dealer's phone on 176, features on 176, colour on 175, engine on 169, drivetrain on 168 and combined fuel economy on 147. Distance on a listing is returned only when you pass zip.
Is a filter value ever ignored?▾
No. CarGurus itself quietly ignores filter values it does not know and returns the whole market, so every value is checked first and an unknown one is refused with the list of valid ones. Each filter was checked against an unfiltered search in the same run (around New York: electric 1,626, manual 1,387, great deals 8,545, single owner 47,547). The deal-rating filter uses CarGurus's index, and 2 of about 350 filtered rows carried the neighbouring rating at the moment of reading; the row shows CarGurus's current rating.
What is the CarGurus API?▾
CarGurus API is a ReefAPI endpoint group for cargurus used-car listings from the us, canada and the uk as json: the asking price, cargurus's own deal rating and instant market value, days on market, price drops, vin and the dealer behind every car. It returns live JSON through POST requests under /cargurus/v1.
Is the CarGurus API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. CarGurus calls use the same shared credit balance as every other ReefAPI engine.
Do I need a CarGurus login or account?▾
No login to CarGurus is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the CarGurus data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the CarGurus API use?▾
CarGurus actions currently cost 2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call CarGurus from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call cargurus actions with the same key, credit pool and JSON envelope used by normal REST requests.
107 Classifieds & Second-hand APIs on the same key
One key, one credit pool, one response envelope. If you are pulling CarGurus, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 490 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-10-14.