CarGurus API

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.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a CarGurus endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
C
/cargurus/v1

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.

4 endpoints

search

2 cr

Search CarGurus used-car listings around a ZIP / postcode.

required
zip
optional
site, distance, nationwide, make, model_id, year_min, year_max, price_min, price_max, mileage_min, mileage_max, days_on_market_min, days_on_market_max, body_type, fuel, transmission, drivetrain, deal_rating, seller_type, condition, exterior_color, price_drops_only, single_owner, no_accidents, with_photos_only, include_shipped, dealer_id, sort, page

listing

2 cr

One CarGurus listing in full by its id.

required
listing_id
optional
site, zip

makes

2 cr

Every make the chosen CarGurus site lists, with the site's make id that search and models take.

required
—
optional
site

models

2 cr

The models of one make with the source's live listing counts.

required
make
optional
site, zip, distance

Every parameter, every allowed value →

CarGurus API

3 of 4 endpoints, ready to run

View docs ↗

Used cars around a ZIP code with CarGurus's deal rating and market value on every row.

2 credits1 required · 4 optional
POST/cargurus/v1/search
idle
// 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.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 491 engines.

02
Call
POST /cargurus/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
2 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

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.

01models?make=Ford
POSTmodels?make=Ford

The model ids with live counts: d334 is the Explorer, d337 the F-150.

02search?zip=10001&distance=50&make=m2&model_id=d334&deal_rating=great,good&sort=best_deal
POSTsearch?zip=10001&distance=50&make=m2&model_id=d334&deal_rating=great,good&sort=best_deal

Explorers within 50 miles rated a great or good deal, best first; every row has price, imv_price and below_imv_by.

03listing?listing_id=<listing_id from any row>&zip=10001
POSTlisting?listing_id=<listing_id from any row>&zip=10001

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.

request
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"}'
response envelope
{
  "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.

figureon the search resultson the listing pageAPI field
Asking price$17,830$20,000 (with fees)price = 17830 on both actions
Price with dealer fees$20,000$20,000price_plus_fees = 20000
CarGurus market value (IMV)$20,030$20,030imv_price = 20030
Below market$2,200$30below_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.

Listings

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 fields

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.

Field fill (179 rows, eight searches, three sites)

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.

Filters

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.

Paging

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.

Not published

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.

4

endpoints

2

credits per call

01

Find underpriced used cars: filter by deal_rating=great and sort by best_deal, then compare price with imv_price and below_imv_by.

02

Track a dealer's inventory and pricing: pass dealer_id to search and watch price drops, days on market and new arrivals.

03

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.

04

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 →
$0.67–$1.50 / 1,000 credits
  • 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
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"}'
python
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"])
FAQ

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.

0/4000

No account needed · we reply from [email protected]

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.