AutoTrader API

The asking price, and what AutoTrader thinks the car is worth

The AutoTrader UK API returns used- and new-car listings from one of the UK's largest car marketplaces as clean JSON.

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

2 active endpoints. Every call is 1 credit.

  • POST/autotrader/v1/search
  • POST/autotrader/v1/listing_detail

What AutoTrader endpoints does ReefAPI ship?

2 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

2 endpoints

search

1 cr

UK car listings (make/model + filters, paginated).

required
optional
make, model, postcode, min_price, max_price, min_year, max_year, min_mileage, max_mileage, fuel, body_type, transmission, radius, page, market

listing_detail

1 cr

Full advert (price+priceIndicator+deviation, mileage, full spec [fuel/trans/body/doors/seats/…

required
id
optional
postcode, market

Every parameter, every allowed value →

AutoTrader API

2 of 2 endpoints, ready to run

View docs ↗

UK car adverts for a make and model, anchored on a postcode: asking price in pounds, year, trim, the seller's own headline, whether it is a dealer or a private owner, the dealer's star rating, every photo, and the badges AutoTrader prints on the card — mileage, the registration-plate year and any write-off category.

1 credit0 required · 12 optional
POST/autotrader/v1/search
ok2437 ms · 20 records · sample
{
  "ok": true,
  "meta": {
    "api": "autotrader",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 2437.1,
    "record_count": 20,
    "cache_hit": false
  },
  "data": {
    "market": "uk",
    "listings": [
      {
        "advert_id": "202308190990841",
        "title": "BMW 3 Series",
        "subtitle": "2.0 320i M Sport Steptronic Euro 5 2dr",
        "attention_grabber": "BMW 320i Convertible",
        "price": 1300,
        "price_formatted": "£1,300",
        "currency": "GBP",
        "rrp": null,
        "discount": null,
        "monthly_finance": null,
        "make": "BMW",
        "model": "3 Series",
        "year": 2012,
        "condition": "used",
        "vehicle_category": "car",
        "location": "Wimbledon (6 miles)",
        "location_type": "STANDARD",
        "distance": {
          "value": 6,
          "unit": null
        },
        "seller_type": "PRIVATE",
        "dealer_rating": null,
        "dealer_link": null,
        "image_count": 40,
        "images": [
          "https://m.atcdn.co.uk/a/media/w800h600/70459eff71fd40da960d27ab7826beeb.jpg",
          "https://m.atcdn.co.uk/a/media/w800h600/616dca0f29ef406db90d7c3efc8a82ee.jpg",
          "https://m.atcdn.co.uk/a/media/w800h600/9819b9766b8542ebb155abdc70fa220b.jpg"
        ],
        "badges": [
          "Cat N",
          "100,600 miles",
          "2012 (12 reg)"
        ],
        "url": "https://www.autotrader.co.uk/car-details/202308190990841?sort=relevance&searchId=96b36b80-045b-4349-81a8-fc34d3e0bd6c"
      },
      {
        "advert_id": "202607304637765",
        "title": "BMW 3 Series",
        "subtitle": "2.0 320d Sport Plus Edition Steptronic Euro 5 2dr",
        "attention_grabber": "Sport Plus Edition",
        "price": 3000,
        "price_formatted": "£3,000",
        "currency": "GBP",
        "rrp": null,
        "discount": null,
        "monthly_finance": null,
        "make": "BMW",
        "model": "3 Series",
        "year": 2012,
        "condition": "used",
        "vehicle_category": "car",
        "location": "Enfield (13 miles)",
        "location_type": "STANDARD",
        "distance": {
          "value": 13,
          "unit": null
        },
        "seller_type": "TRADE",
        "dealer_rating": 1,
        "dealer_link": "https://www.autotrader.co.uk/dealers/middlesex/enfield/enfield-trade-centre-10049618?channel=cars",
        "image_count": 18,
        "images": [
          "https://m.atcdn.co.uk/a/media/w800h600/df3c7920cc1c49aab55881b5baad0558.jpg",
          "https://m.atcdn.co.uk/a/media/w800h600/29e6f077acd44d869f5aab7aeda86084.jpg",
          "https://m.atcdn.co.uk/a/media/w800h600/c1a0b43d2ee1477c95659f1dc09e5a03.jpg"
        ],
        "badges": [
          "Lower price",
          "132,094 miles",
          "2012 (61 reg)"
        ],
        "url": "https://www.autotrader.co.uk/car-details/202607304637765?sort=relevance&searchId=96b36b80-045b-4349-81a8-fc34d3e0bd6c"
      },
      {
        "advert_id": "202608155123177",
        "title": "BMW 3 Series",
        "subtitle": "2.0 318i Sport Plus Edition Steptronic Euro 5 4dr",
        "attention_grabber": null,
        "price": 2999,
        "price_formatted": "£2,999",
        "currency": "GBP",
        "rrp": null,
        "discount": null,
        "monthly_finance": null,
        "make": "BMW",
        "model": "3 Series",
        "year": 2010,
        "condition": "used",
        "vehicle_category": "car",
        "location": "Peckham (5 miles)",
        "location_type": "STANDARD",
        "distance": {
          "value": 5,
          "unit": null
        },
        "seller_type": "PRIVATE",
        "dealer_rating": null,
        "dealer_link": null,
        "image_count": 26,
        "images": [
          "https://m.atcdn.co.uk/a/media/w800h600/74534133daed4705bf506410a8cda8b6.jpg",
          "https://m.atcdn.co.uk/a/media/w800h600/f14a668851ac4be79c9054ccad20df34.jpg",
          "https://m.atcdn.co.uk/a/media/w800h600/5b3bb5f9986a4000a466550760a0f07f.jpg"
        ],
        "badges": [
          "76,000 miles",
          "2010 (60 reg)"
        ],
        "url": "https://www.autotrader.co.uk/car-details/202608155123177?sort=relevance&searchId=96b36b80-045b-4349-81a8-fc34d3e0bd6c"
      }
    ],
    "page_info": {
      "page": 1,
      "page_count": 109,
      "total_results": 2173,
      "search_id": "96b36b80-045b-4349-81a8-fc34d3e0bd6c"
    }
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the AutoTrader API works

AutoTrader 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 184 engines.

02
Call
POST /autotrader/v1/…

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

03
Pay
1 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.

Getting from a shortlist to whether the price is fair

AutoTrader values every car it lists and prints the verdict on the advert. The search row does not carry it; the advert does, in pounds.

01search
POST/autotrader/v1/search
{"make": "BMW", "model": "3 Series", "postcode": "SW1A 1AA", "radius": 50}

Rows come back with the advert id and how far each car is from the postcode, so the shortlist is already sorted by something you care about.

02listing_detail
POST/autotrader/v1/listing_detail
{"id": 202608265467303}

The same car with its price-indicator rating and the pound deviation from AutoTrader's own valuation, plus mileage, owners, the full specification and the dealer behind it.

A shortlist you can rank by how far each asking price sits from what the site itself thinks the car is worth — for the adverts the site was willing to value.

request
curl -X POST https://api.reefapi.com/autotrader/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"make":"BMW","model":"3 Series","postcode":"SW1A 1AA","market":"uk"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "autotrader",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

What an AutoTrader UK search row actually contains

The search action returns 20 listings per page, and several values people expect as their own fields are not fields at all. Mileage, the price-indicator rating and the registration plate identifier all live inside the badges array. These values were read off live BMW 3 Series and Ford Fiesta searches on 2026-08-27.

FieldMeasured valueWhat it means
advert_id"202608135062814"15-digit string; the first 8 digits are a YYYYMMDD stamp (2026-08-13). This is the number in a /car-details/<id> URL.
price / price_formatted7795 / "£7,795"price is a plain integer in GBP, price_formatted is display text. currency is always "GBP".
badges[0]"Great price", "Good price", "Lower price"AutoTrader's price indicator for the advert. There is no separate price-indicator field on a search row.
badges (mileage)"63,000 miles", "183,000 miles"Mileage is a formatted string inside badges. Search returns no numeric mileage field.
badges (plate)"2017 (66 reg)", "2019 (19 reg)"Year plus the UK registration plate identifier. The numeric year is also on the row as year.
seller_type"TRADE" or "PRIVATE"Uppercase. TRADE rows also carry dealer_link; private rows return dealer_link null.
location / distance"Altrincham (8 miles)" / {value: 8, unit: null}Distance from the postcode you passed, in miles. unit comes back null, and the radius parameter is miles too.
rrp, discount, monthly_finance, dealer_ratingnullAll four were null on every used-car row sampled. rrp is a new-car field.
condition / vehicle_category"used" / "car"Lowercase values on every row sampled.
market"uk"market="us" returns the error code MARKET_UNAVAILABLE, not an empty list — this engine covers the UK.

Pagination is 20 listings per page. A BMW 3 Series search anchored on SW1A 1AA returned total_results 6884 across page_count 345; a filtered Ford Fiesta search near M1 1AE returned 1157 across 58 pages. total_results is the market-wide count for your filters, not the number of rows in the response.

What a row carries, what it quietly leaves out, and what an unknown filter does

Measured on searches with and without a postcode, a make the site has never heard of, a request for the US marketplace, and adverts opened in full from both trade and private sellers.

Mileage is not a field on the search row — it is a badge

The row carries price, year, trim, location and distance as proper fields, but mileage arrives as text inside the badges array, next to the registration-plate year and any write-off category. If you need mileage as a number on every row you must either read the badge or open the advert, where it is a real field. The write-off category riding in that same array is the same trap in reverse: on the cars where it appears it is the most important thing on the row, and it is the easiest thing to skip. Three fields the row does have — recommended retail price, discount and monthly finance — were empty on every single row of a full page of Ford Focus adverts. They belong to new and dealer-financed stock, not the used market that is most of this site.

Leaving the postcode out does not search the whole country — it picks one for you

Omit the postcode and the search still anchors somewhere: a central-England default, which the response flags rather than hides. Distances and the ordering are all relative to that point, so 'nearest first' means nearest to somewhere you did not choose. The identical query with and without a postcode returned a different first page and a different total.

A filter value the site does not recognise returns nothing, and shows you what it did send

Asking for a make that does not exist does not silently widen the search back out — it returns a clean not-found, and the response lists every filter that was actually applied with the value it was given. That echo is the quickest way to see that your fuel or body-type string went through verbatim rather than being mapped to something the site understands.

The price verdict is the reason to come here, and about a quarter of adverts do not have one

We opened twenty-eight adverts across four makes. Most carried a rating — great, good, fair or low — and a pound figure for how far the asking price sits from AutoTrader's valuation. The rest came back explicitly saying no analysis, which is the site declining to value that particular car rather than a field we failed to read. The distinction matters when you aggregate: a car with no analysis is not a fairly-priced car, and bucketing it as one quietly flatters your average. The pound deviation is present slightly more often than the rating is.

This is the UK site only, and a dealer appears only when there is one

A request for the American marketplace is refused outright rather than answered with British cars — the two are separate businesses with separate inventory, and quietly returning the wrong country's stock would be worse than saying no. Within the UK, the dealer block on an advert is filled for trade sellers and is null for private ones. That is the source being right rather than a gap, and the seller type on the row tells you which you are about to get before you spend the call.

What people build with AutoTrader

The jobs this data is most often used for.

2

endpoints

1

credit per call

01

Automotive pricing tools call search to track used-car prices by make, model and mileage.

02

Dealer-intelligence products filter search by seller type to monitor trade vs private listings.

03

Market analysts use listing_detail to study price-vs-RRP and depreciation across the UK market.

What AutoTrader data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,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 184 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/autotrader/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"make":"BMW","model":"3 Series","postcode":"SW1A 1AA","market":"uk"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/autotrader/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "make": "BMW",
  "model": "3 Series",
  "postcode": "SW1A 1AA",
  "market": "uk"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up AutoTrader.

Get a free key →
Is this AutoTrader UK or AutoTrader US?

AutoTrader UK, autotrader.co.uk. The market parameter accepts "us", but a US search returns the error code MARKET_UNAVAILABLE rather than listings, measured on 2026-08-27. For US car listings use the cars-com engine instead. Everything else follows from that: prices are GBP, mileage is miles, and locations are anchored on a UK postcode.

What is the format of an AutoTrader advert_id?

A 15-digit string whose first eight digits are a date in YYYYMMDD form. Six ids sampled on 2026-08-27 decoded to 2026-08-25, 2026-08-13, 2026-07-30, 2026-07-24, 2026-06-18 and 2026-05-22, so the leading block tells you roughly how long an advert has been up. It is the same number that appears in the advert URL as /car-details/<id>, and it is what listing_detail takes as id.

Where is the mileage? There is no mileage field on a search result.

Mileage is a formatted string inside badges, for example "63,000 miles". Search rows carry price, year, make, model and condition as typed fields, but mileage, the price-indicator rating and the plate identifier are all badge entries. If you need a number, strip the commas and the word yourself, or use min_mileage and max_mileage to filter server-side, since those parameters do take integers.

What does the "Great price" or "Lower price" badge mean?

It is AutoTrader's own price indicator for the advert, comparing the asking price against what the site thinks the car is worth. Values seen on live results include "Great price", "Good price" and "Lower price", and they always sit first in the badges array when present. Not every advert has one, and those rows open straight onto the mileage badge instead.

Why does listing_detail reject a request that only has url?

Despite the parameter description reading "Provide id OR url", sending only url returns MISSING_PARAM with the message "missing: id", measured 2026-08-27. Parse the digits out of the /car-details/<id> path yourself and send them as id. url is best treated as an extra hint alongside id rather than a substitute for it.

What does a TARGET_BLOCKED response from listing_detail mean?

It means the advert page did not come back on that attempt, and it is flagged retryable: true, so a repeat is the right response rather than a code change. In a 2026-08-27 check listing_detail returned TARGET_BLOCKED on four consecutive advert ids while search kept working normally. Search rows already carry price, year, make, model, images, seller_type and the mileage badge, so most pipelines can fall back to search while retrying detail.

How many results per page, and how deep can I page?

20 listings per page. The response repeats page, page_count and total_results in meta and again in data.page_info, plus a search_id that ties the pages of one query together. total_results is the number of adverts matching your filters market-wide, 6884 for BMW 3 Series near SW1A 1AA on 2026-08-27, so divide by 20 to see how deep page_count goes before you start looping.

Which fuel, body_type and transmission values does search accept?

transmission is a strict pair, Manual or Automatic. fuel is documented as Petrol, Diesel, Electric, Hybrid and Plug-in Hybrid, and body_type as Hatchback, Saloon, Estate, SUV, Coupe, Convertible and MPV, but both are pass-through: other AutoTrader labels are forwarded rather than rejected. All three ignore an invalid value, so a label the site does not recognize silently drops the filter instead of erroring. Compare total_results with and without it if you need to be sure a filter took.

What is the AutoTrader API?

AutoTrader API is a ReefAPI endpoint group for new and used car listings with prices and specs. It returns live JSON through POST requests under /autotrader/v1.

Is the AutoTrader API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. AutoTrader calls use the same shared credit balance as every other ReefAPI engine.

Do I need an AutoTrader login or account?

No login to AutoTrader 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 AutoTrader 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 AutoTrader API use?

AutoTrader actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call AutoTrader from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call autotrader actions with the same key, credit pool and JSON envelope used by normal REST requests.

35 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling AutoTrader, 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 183 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-08-30.