UK car market data API

Last updated: 9 November 2026

Search the used cars advertised for sale on UK dealer websites today, and the cars sold in the last 90 days, by any filter: make, model, trim, year, fuel, gearbox, price, mileage, location, dealer and more. Get statistics, counts and price bands over the whole market, the full advert history of a registration, and the UK dealer directory with each dealer's stock.

Every endpoint is a JSON POST under https://www.dealerpricing.co.uk/api with your key in the X-API-Key header, as in the API documentation. Field by field detail is in the API reference and the OpenAPI file.

Endpoints and prices

Prices follow what a call costs us: one data request is 10p Pay As You Go, 8p Starter, 5p Pro, 3p Enterprise. A call that needs two requests costs twice that. Prices are per call, in pence, at your package.

  • Market listings
    POST /v1/market/listings

    Search every UK car for sale now by any filter, location and sort, 1 to 50 results per call.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Market listings (bulk)
    POST /v1/market/listings (bulk: true)

    Market listings with bulk: true, up to 1,000 light rows per call.

    PAYG
    50p
    Starter
    40p
    Pro
    25p
    Enterprise
    15p
  • Sold listings search
    POST /v1/market/sold-listings

    Cars sold in the last 90 days by any filter, with last asking price and days to sell.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Sold listings search (bulk)
    POST /v1/market/sold-listings (bulk: true)

    Sold listings with bulk: true, up to 1,000 light rows per call.

    PAYG
    50p
    Starter
    40p
    Pro
    25p
    Enterprise
    15p
  • Price drops
    POST /v1/market/price-drops

    Cars whose asking price has been cut, biggest cut first.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Market statistics
    POST /v1/market/stats

    Median, mean and percentiles of price, mileage and days on market over every matching car.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Market counts
    POST /v1/market/facets

    How many matching cars there are for each make, model, fuel, year, county and so on.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Price and mileage bands
    POST /v1/market/distribution

    Counts of matching cars in equal bands of price, mileage or days, for charts.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Market overview
    POST /v1/market/overview

    Live supply and prices, sold in 90 days, days to sell and turnover, in one call.

    PAYG
    20p
    Starter
    16p
    Pro
    10p
    Enterprise
    6p
  • One advert in full
    POST /v1/market/listing

    Full detail of one advert: features, options, seller comments and full spec.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Advert history
    POST /v1/vehicle/advert-history

    Every advert one car has had: price, mileage, seller and dates, with our mileage check.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Live adverts for a plate
    POST /v1/vehicle/live-adverts

    Where one car is advertised right now, with the lowest and highest asking price.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Dealer search
    POST /v1/dealers/search

    Dealers near a postcode, by type, county, city or group.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Dealer detail
    POST /v1/dealers/detail

    One dealer: address, contact details, type and stock count.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p
  • Dealer stock
    POST /v1/dealers/stock

    One dealer's live stock with stock age, price statistics and make mix.

    PAYG
    10p
    Starter
    8p
    Pro
    5p
    Enterprise
    3p

Monthly packages get their fee back as plan credit to spend on calls. Live keys only: sandbox calls are free.

Paging and bulk mode

  • Results per call: rows 1 to 50 (default 10). Each call is one data request and one price.
  • More results: send start 0 for results 1 to 50, 50 for 51 to 100, 100 for 101 to 150, and so on. total_found says how many match and more_available says whether another page exists. start + rows is at most 10,000: narrow the filters to see beyond that.
  • Bulk mode: bulk: true on listings and sold listings returns up to 1,000 light rows a call (rows 1 to 1,000, default 100: id, registration, price, mileage, year, make, model, trim, days on market, days at dealer, dealer id, location and one photo), priced as 5 requests. No counts, statistics, bands, fields, photos or duplicates in this mode.
  • Counts, statistics and bands for free: on listings, facets, stats and range_bands come back in the same call at no extra cost. On sold data, one of them a call.
  • Smaller answers: fields keeps only the listing fields you name, and photos sets photo links per listing (0 to 10, default 3). Same price.
// Read every 2019 BMW 3 Series for sale, 50 at a time
let start = 0
do {
  const res = await fetch('https://www.dealerpricing.co.uk/api/v1/market/listings', {
    method: 'POST',
    headers: { 'X-API-Key': YOUR_API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ make: 'BMW', model: '3 Series', year_min: 2019, year_max: 2019, rows: 50, start })
  }).then(r => r.json())
  handle(res.data.listings)
  if (!res.data.more_available) break
  start += 50
} while (true)

Filters

The same names and values on every endpoint. Lists can be sent as a JSON array or a comma list. A field an endpoint does not take is refused with 400 INVALID_PARAMETER naming it, never silently ignored. Each endpoint below lists the fields it takes.

Vehicle

vrm: registration, no spaces needed
The registration to look up, without spaces. Sandbox keys take the published sandbox registrations.

Advert

listing_id: an adv_ id
The listing_id of an advert from any market listings answer (it starts adv_).
follow_relist: true or false
If this advert has ended and the same car was advertised again, return the newest advert instead.

Dealer filters

dealer_id: a dlr_ id
One dealer id (it starts dlr_), from a listing (dealer.dealer_id) or a dealer search.

Scope

scope: live or sold
Cars for sale now, or cars sold in the last 90 days. Sold means the advert ended and the car did not reappear within 7 days. Radius on sold data is at most 100 miles.

Make and model

make: text, or a list of up to 20
One or more makes, comma separated. Example: BMW,Audi.
exclude_make: text, or a list of up to 20
Leaves out every car of these makes. Use it when you have not picked makes to include.
model: text, or a list of up to 20
Model
variant: text, or a list of up to 20
The trim as dealers advertise it. Example: M Sport.
model_variant: text, or a list of up to 20
The model and trim together, exactly as the data spells them (see the model_variant counts). Example: Focus Titanium.
year_min, year_max: numbers, 1980 to 2027 (either end may be left out)
Model year from and to, both included. Example: 2018 to 2020.
registration_date_min, registration_date_max: dates, YYYY-MM-DD
First registration date window (YYYY-MM-DD), closer like-for-like than model year. Example: 2019-03-01 to 2019-08-31 for a 19 plate.For-sale data only: sold adverts do not record it, so it is refused (free) on sold data and on the overview.

Specification

body_type: text, or a list of up to 20
Body type
fuel_type: text, or a list of up to 20
Fuel as the adverts spell it. Hybrids are "Petrol Electric Hybrid" or "Diesel Electric Hybrid". Use fuel_type counts to see every spelling.
transmission: Manual or Automatic
Gearbox
drivetrain: text, or a list of up to 20
4x2 = two-wheel drive (front or rear), 4x4 = four-wheel or all-wheel drive. FWD, RWD and 2WD count as 4x2; AWD and 4WD count as 4x4.
engine_size_min, engine_size_max: numbers, 0 to 9 (either end may be left out)
From and to, in litres. Example: 1.9 to 2.1 finds 2.0 litre cars.
doors: text, or a list of up to 20
For-sale data only: sold adverts do not record doors.For-sale data only: sold adverts do not record it, so it is refused (free) on sold data and on the overview.
seats: text, or a list of up to 20
Seats
colour: text, or a list of up to 20
Colour
combined_mpg_min, combined_mpg_max: numbers, 0 to 999 (either end may be left out)
Combined mpg
ev_range_min, ev_range_max: numbers, 0 to 2000 (either end may be left out)
Electric range (miles)For-sale data only: sold adverts do not record it, so it is refused (free) on sold data and on the overview.
battery_kwh_min, battery_kwh_max: numbers, 0 to 300 (either end may be left out)
Battery (kWh)For-sale data only: sold adverts do not record it, so it is refused (free) on sold data and on the overview.
insurance_group: text
UK insurance group, 1 (cheapest) to 50.
ulez_compliant: true or false
Only cars that meet the London ULEZ rules. Send true; there is no "not compliant" filter.

Condition

write_off_category: list of A, B, S, N, C, D
Only cars recorded as written off in these categories. S and N can be repaired; A and B must not return to the road. C and D are the older (before October 2017) repairable categories.
exclude_write_off: list of A, B, S, N, C, D
Leaves out cars recorded in these write-off categories. Recommended for clean comparisons.

Price and mileage

vat_included: true or false
Yes = the advertised price includes VAT; No = VAT is added on top (common on vans). Most adverts do not say either way, so both leave those out.
price_min, price_max: numbers, 1 to 9999999 (either end may be left out)
Asking price from and to. Example: 10000 to 15000.
priced_only: true or false
On by default: adverts with no price are left out (they would sort first on a cheapest-first list). Send false to include them.
mileage_min, mileage_max: numbers, 0 to 999999 (either end may be left out)
Mileage
price_reduced: true or false
Only adverts whose price has been cut since first advertised.For-sale data only: sold adverts do not record it, so it is refused (free) on sold data and on the overview.
price_change_min, price_change_max: numbers, -999999 to 999999 (either end may be left out)
The change in pounds since first advertised; negative = a cut. Example: -2000 to -500 finds cuts of £500 to £2,000.For-sale data only: sold adverts do not record it, so it is refused (free) on sold data and on the overview.

Time on sale

days_on_market_min, days_on_market_max: numbers, 0 to 9999 (either end may be left out)
Days on sale in the current spell, across every dealer advertising it. (Every day ever advertised is days_listed in each listing.)
days_at_dealer_min, days_at_dealer_max: numbers, 0 to 9999 (either end may be left out)
Days advertised by its current dealer. 120 and up finds aged stock.
listed_within_days: whole number, 1 to 90
New arrivals: adverts first seen in the last N days.For-sale data only: sold adverts do not record it, so it is refused (free) on sold data and on the overview.
active_from, active_to: dates, YYYY-MM-DD
Sold data only: cars that were for sale at some point in this window (YYYY-MM-DD; either end may be left open).

Location

postcode: text
Centre point for a radius search and for sorting by distance. Use this or latitude and longitude.
latitude: number, 49 to 61
Centre point instead of a postcode; send longitude too.
longitude: number, -9 to 2
Longitude
radius: whole number, 1 to 200
Only cars within this many miles of the postcode or latitude and longitude. Up to 200 miles on live data, 100 on sold data.
region: england or scotland or wales or northern_ireland
Country
county: text
County
city: text
Town or city

Dealer directory

dealer_type: franchise or independent
Franchise = a main dealer for a brand. Independent = any other trader.
dealer_id: dlr_ ids, up to 20
Only cars from these dealers (ids start dlr_, from a listing or a dealer search).
exclude_dealer_id: dlr_ ids, up to 20
Leaves out these dealers, for example your own stock when you look at competitors.
dealer_name: text
The exact trading name, not case sensitive.
group_name: text
Every site of a dealer group.

Results

page: whole number, 1 to 20
Advert history comes 50 adverts a page. Page 2 = adverts 51 to 100.
sort_by: price or mileage or days_on_market or days_at_dealer or first_listed or last_seen or distance or price_change_pct or combined_mpg
One field. Default: price, or distance when a location is given.
sort_by (dealer search): distance or newest
Dealer search only: distance (needs a postcode, or latitude and longitude) or newest dealers first.
sort_order: asc or desc
Order
rows: whole number, 0 to 1000
Results per call: 1 to 50 (default 10). With bulk: true, 1 to 1,000 light rows (default 100).
start: whole number, 0 to 9999
How many results to skip: 0 for results 1 to 50, 50 for 51 to 100, and so on. start + rows is at most 10,000.
bulk: true or false
Up to 1,000 light rows a call (id, registration, price, mileage, year, make, model, trim, days, dealer id, location, one photo), priced as five requests. No counts, statistics, bands, fields, photos or duplicates in this mode; only adverts with a price, mileage and days on market are included.

Extras

facets: list of up to 5 fields; facet_limit 1 to 1,000; facet_sort count or alpha
Counts of matching cars for each value of a field, over every matching car (not just this page). Up to 5 fields; facet_limit (1 to 1,000, default 20) values each; facet_sort count or alpha.
stats: list of price, mileage, days_on_market, days_at_dealer, days_listed, days_listed_180
Count, min, max, mean, median, standard deviation and percentiles over every matching car. Medians are approximate.
range_bands: up to 3 of { field, from, to, step }, at most 199 bands each; fields price, mileage, days_on_market, days_at_dealer, days_listed, days_listed_180, combined_mpg, ev_range
Counts of matching cars in equal bands: [{ "field": "price", "from": 0, "to": 40000, "step": 5000 }]. At most 3 fields and 200 bands each; also counts below and above the range.
fields: list of fields (32 available)
Return only these fields for each listing (same price). Leave empty for every field.
photos: whole number, 0 to 10
How many photo links per listing (default 3, 0 for none). One advert in full sends every photo unless this limits it.
include_duplicates: true or false
By default one row per car even if several sites advertise it. Send true to get every advert of the same car.

Rules: send a postcode or latitude and longitude, not both; a radius or a distance sort needs one of them (radius up to 200 miles on live data, 100 on sold data and the overview); a make cannot be both included and left out, nor can a dealer or a write-off category; price_reduced and the price change range cannot be sent together.

Each endpoint

Market listings

POST /api/v1/market/listings

Search every UK car for sale now by any filter, location and sort, 1 to 50 results per call.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3pbulk: Pay As You Go 50p, Starter 40p, Pro 25p, Enterprise 15p
Fields
make, exclude_make, model, variant, model_variant, year_min, year_max, registration_date_min, registration_date_max, body_type, fuel_type, transmission, drivetrain, engine_size_min, engine_size_max, doors, seats, colour, combined_mpg_min, combined_mpg_max, ev_range_min, ev_range_max, battery_kwh_min, battery_kwh_max, insurance_group, ulez_compliant, write_off_category, exclude_write_off, price_min, price_max, priced_only, mileage_min, mileage_max, vat_included, price_reduced, price_change_min, price_change_max, days_on_market_min, days_on_market_max, days_at_dealer_min, days_at_dealer_max, listed_within_days, postcode, latitude, longitude, radius, region, county, city, dealer_type, dealer_id, exclude_dealer_id, dealer_name, sort_by, sort_order, rows, start, bulk, facets, facet_limit, facet_sort, stats, range_bands, fields, photos, include_duplicates
Example request and answer
{
  "make": "BMW",
  "model": "3 Series",
  "year_min": 2019,
  "year_max": 2019,
  "rows": 10,
  "start": 0
}
{
  "success": true,
  "data": {
    "total_found": 893,
    "start": 0,
    "rows_requested": 10,
    "rows_returned": 10,
    "more_available": true,
    "listings": [
      {
        "listing_id": "adv_Xc2Lr9vQm1T0pZk7HdF3aw8NsY4bJ6eUqC5gViOtR",
        "title": "2019 BMW 3 Series 320d M Sport 4dr Step Auto",
        "price": 18995,
        "mileage": 41250,
        "previous_price": 19995,
        "previous_price_date": "2026-09-12",
        "price_change_pct": -5,
        "vehicle": {
          "year": 2019,
          "make": "BMW",
          "model": "3 Series",
          "variant": "320d M Sport",
          "body_type": "Saloon",
          "fuel_type": "Diesel",
          "transmission": "Automatic",
          "drivetrain": "4x2",
          "engine_size": 2,
          "doors": 4,
          "seats": 5,
          "colour": "Black",
          "base_colour": "Black",
          "power_bhp": 188,
          "mpg_combined": 55.4,
          "co2_g_km": 118,
          "euro_status": "Euro 6"
        },
        "owners": 1,
        "first_registered": "2019-06-28",
        "days_on_market": 34,
        "days_at_dealer": 34,
        "first_seen": "2026-10-03",
        "last_seen": "2026-11-05",
        "dealer": {
          "dealer_id": "dlr_Qm4Tc8nWx2Ls0Hb7RkVa1g",
          "name": "Example Motors Ltd",
          "type": "independent",
          "city": "Leeds",
          "county": "West Yorkshire",
          "country": "England",
          "postcode": "LS11 5AB",
          "latitude": 53.78,
          "longitude": -1.55,
          "phone": "0113 000 0000",
          "website": "https://www.example.co.uk/"
        },
        "listing_url": "https://www.example.co.uk/used/bmw-3-series-320d",
        "advert_site": "example.co.uk",
        "photos": [
          "https://www.example.co.uk/photos/1.jpg"
        ]
      }
    ]
  }
}

Sold listings search

POST /api/v1/market/sold-listings

Cars sold in the last 90 days by any filter, with last asking price and days to sell.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3pbulk: Pay As You Go 50p, Starter 40p, Pro 25p, Enterprise 15p
Fields
make, exclude_make, model, variant, model_variant, year_min, year_max, body_type, fuel_type, transmission, drivetrain, engine_size_min, engine_size_max, seats, colour, combined_mpg_min, combined_mpg_max, insurance_group, ulez_compliant, write_off_category, exclude_write_off, price_min, price_max, priced_only, mileage_min, mileage_max, vat_included, days_on_market_min, days_on_market_max, days_at_dealer_min, days_at_dealer_max, postcode, latitude, longitude, radius, region, county, city, dealer_type, dealer_id, exclude_dealer_id, dealer_name, active_from, active_to, sort_by, sort_order, rows, start, bulk, facets, facet_limit, facet_sort, stats, range_bands, fields, photos, include_duplicates
Example request and answer
{
  "make": "Ford",
  "model": "Focus",
  "year_min": 2019,
  "year_max": 2019,
  "rows": 10,
  "stats": [
    "price"
  ]
}
{
  "success": true,
  "data": {
    "total_found": 1813,
    "start": 0,
    "rows_requested": 10,
    "rows_returned": 10,
    "more_available": true,
    "listings": [
      {
        "listing_id": "adv_Tq7Wm2Kc9Xv4Lb1RnZ8sPd3Hy6Gf0JeA5uQoNiMwE",
        "title": "2019 Ford Focus 1.0 EcoBoost Titanium 5dr",
        "price": 11495,
        "mileage": 38200,
        "previous_price": 11995,
        "previous_price_date": "2026-09-30",
        "price_change_pct": -4,
        "vehicle": {
          "year": 2019,
          "make": "Ford",
          "model": "Focus",
          "variant": "Titanium",
          "body_type": "Hatchback",
          "fuel_type": "Petrol",
          "transmission": "Manual",
          "drivetrain": "4x2",
          "engine_size": 1,
          "doors": 5,
          "seats": 5,
          "colour": "Blue",
          "base_colour": "Blue",
          "power_bhp": 123,
          "mpg_combined": 52.3,
          "co2_g_km": 122,
          "euro_status": "Euro 6"
        },
        "owners": 1,
        "first_registered": "2019-03-15",
        "days_on_market": 27,
        "days_at_dealer": 27,
        "first_seen": "2026-09-24",
        "last_seen": "2026-10-21",
        "dealer": {
          "dealer_id": "dlr_Qm4Tc8nWx2Ls0Hb7RkVa1g",
          "name": "Example Motors Ltd",
          "type": "independent",
          "city": "Leeds",
          "county": "West Yorkshire",
          "country": "England",
          "postcode": "LS11 5AB",
          "latitude": 53.78,
          "longitude": -1.55,
          "phone": "0113 000 0000",
          "website": "https://www.example.co.uk/"
        },
        "listing_url": "https://www.example.co.uk/used/ford-focus-titanium",
        "advert_site": "example.co.uk",
        "photos": [
          "https://www.example.co.uk/photos/2.jpg"
        ],
        "sold_date": "2026-10-21",
        "days_to_sell": 27
      }
    ],
    "stats": {
      "price": {
        "count": 1813,
        "missing": 0,
        "min": 6495,
        "max": 16995,
        "mean": 11240,
        "median": 11150,
        "stddev": 1640,
        "p5": 8695,
        "p25": 10195,
        "p75": 12295,
        "p90": 13495,
        "p95": 14250,
        "p99": 15795
      }
    }
  }
}

Price drops

POST /api/v1/market/price-drops

Cars whose asking price has been cut, biggest cut first.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3p
Fields
make, exclude_make, model, variant, model_variant, year_min, year_max, registration_date_min, registration_date_max, body_type, fuel_type, transmission, drivetrain, engine_size_min, engine_size_max, doors, seats, colour, combined_mpg_min, combined_mpg_max, ev_range_min, ev_range_max, battery_kwh_min, battery_kwh_max, insurance_group, ulez_compliant, write_off_category, exclude_write_off, price_min, price_max, mileage_min, mileage_max, price_change_min, price_change_max, days_on_market_min, days_on_market_max, days_at_dealer_min, days_at_dealer_max, listed_within_days, postcode, latitude, longitude, radius, region, county, city, dealer_type, dealer_id, exclude_dealer_id, dealer_name, sort_by, sort_order, rows, start, stats, fields, photos
Example request and answer
{
  "make": "Audi",
  "model": "A3",
  "rows": 10
}
{
  "success": true,
  "data": {
    "total_found": 412,
    "start": 0,
    "rows_requested": 10,
    "rows_returned": 10,
    "more_available": true,
    "listings": [
      {
        "listing_id": "adv_Lp5Zr8Bn3Qw6Ty1Kd9Xm4Vc7Hs2Ja0GfEuRoNiPbW",
        "title": "2020 Audi A3 Sportback 35 TFSI S line 5dr",
        "price": 17950,
        "mileage": 29800,
        "previous_price": 18950,
        "previous_price_date": "2026-10-28",
        "price_change_pct": -5.3,
        "vehicle": {
          "year": 2020,
          "make": "Audi",
          "model": "A3",
          "variant": "35 TFSI S line",
          "body_type": "Hatchback",
          "fuel_type": "Petrol",
          "transmission": "Manual",
          "drivetrain": "4x2",
          "engine_size": 1.5,
          "doors": 5,
          "seats": 5,
          "colour": "Grey",
          "base_colour": "Grey",
          "power_bhp": 148,
          "mpg_combined": 47.9,
          "co2_g_km": 133,
          "euro_status": "Euro 6"
        },
        "owners": 1,
        "first_registered": "2020-09-01",
        "days_on_market": 46,
        "days_at_dealer": 46,
        "first_seen": "2026-09-24",
        "last_seen": "2026-11-08",
        "dealer": {
          "dealer_id": "dlr_Qm4Tc8nWx2Ls0Hb7RkVa1g",
          "name": "Example Motors Ltd",
          "type": "independent",
          "city": "Leeds",
          "county": "West Yorkshire",
          "country": "England",
          "postcode": "LS11 5AB",
          "latitude": 53.78,
          "longitude": -1.55,
          "phone": "0113 000 0000",
          "website": "https://www.example.co.uk/"
        },
        "listing_url": "https://www.example.co.uk/used/audi-a3-35-tfsi",
        "advert_site": "example.co.uk",
        "photos": [
          "https://www.example.co.uk/photos/3.jpg"
        ]
      }
    ]
  }
}

Market statistics

POST /api/v1/market/stats

Median, mean and percentiles of price, mileage and days on market over every matching car.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3p
Fields
scope, make, exclude_make, model, variant, model_variant, year_min, year_max, registration_date_min, registration_date_max, body_type, fuel_type, transmission, drivetrain, engine_size_min, engine_size_max, doors, seats, colour, combined_mpg_min, combined_mpg_max, ev_range_min, ev_range_max, battery_kwh_min, battery_kwh_max, insurance_group, ulez_compliant, write_off_category, exclude_write_off, price_min, price_max, priced_only, mileage_min, mileage_max, vat_included, price_reduced, price_change_min, price_change_max, days_on_market_min, days_on_market_max, days_at_dealer_min, days_at_dealer_max, listed_within_days, postcode, latitude, longitude, radius, region, county, city, dealer_type, dealer_id, exclude_dealer_id, dealer_name, active_from, active_to, stats
Example request and answer
{
  "scope": "sold",
  "make": "Ford",
  "model": "Focus",
  "stats": [
    "price",
    "mileage",
    "days_on_market"
  ]
}
{
  "success": true,
  "data": {
    "scope": "sold",
    "total_found": 9420,
    "stats": {
      "price": {
        "count": 9420,
        "missing": 0,
        "min": 1495,
        "max": 26995,
        "mean": 10380,
        "median": 9995,
        "stddev": 4120,
        "p5": 3995,
        "p25": 7495,
        "p75": 12995,
        "p90": 15995,
        "p95": 17995,
        "p99": 21995
      },
      "mileage": {
        "count": 9420,
        "missing": 31,
        "min": 8120,
        "max": 162300,
        "mean": 51800,
        "median": 47600,
        "stddev": 18350,
        "p5": 19800,
        "p25": 32500,
        "p75": 57800,
        "p90": 71200,
        "p95": 80100,
        "p99": 98700
      },
      "days_on_market": {
        "count": 9420,
        "missing": 0,
        "min": 0,
        "max": 212,
        "mean": 35,
        "median": 24,
        "stddev": 37,
        "p5": 3,
        "p25": 13,
        "p75": 57,
        "p90": 92,
        "p95": 118,
        "p99": 171
      }
    }
  }
}

Market counts

POST /api/v1/market/facets

How many matching cars there are for each make, model, fuel, year, county and so on.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3p
Fields
scope, make, exclude_make, model, variant, model_variant, year_min, year_max, registration_date_min, registration_date_max, body_type, fuel_type, transmission, drivetrain, engine_size_min, engine_size_max, doors, seats, colour, combined_mpg_min, combined_mpg_max, ev_range_min, ev_range_max, battery_kwh_min, battery_kwh_max, insurance_group, ulez_compliant, write_off_category, exclude_write_off, price_min, price_max, priced_only, mileage_min, mileage_max, vat_included, price_reduced, price_change_min, price_change_max, days_on_market_min, days_on_market_max, days_at_dealer_min, days_at_dealer_max, listed_within_days, postcode, latitude, longitude, radius, region, county, city, dealer_type, dealer_id, exclude_dealer_id, dealer_name, active_from, active_to, facets, facet_limit, facet_sort
Required
facets
Example request and answer
{
  "scope": "live",
  "make": "BMW",
  "model": "3 Series",
  "facets": [
    "variant"
  ],
  "facet_limit": 10
}
{
  "success": true,
  "data": {
    "scope": "live",
    "total_found": 6861,
    "facets": {
      "variant": [
        {
          "value": "320d M Sport",
          "count": 1184
        },
        {
          "value": "330e M Sport",
          "count": 902
        }
      ]
    }
  }
}

Price and mileage bands

POST /api/v1/market/distribution

Counts of matching cars in equal bands of price, mileage or days, for charts.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3p
Fields
scope, make, exclude_make, model, variant, model_variant, year_min, year_max, registration_date_min, registration_date_max, body_type, fuel_type, transmission, drivetrain, engine_size_min, engine_size_max, doors, seats, colour, combined_mpg_min, combined_mpg_max, ev_range_min, ev_range_max, battery_kwh_min, battery_kwh_max, insurance_group, ulez_compliant, write_off_category, exclude_write_off, price_min, price_max, priced_only, mileage_min, mileage_max, vat_included, price_reduced, price_change_min, price_change_max, days_on_market_min, days_on_market_max, days_at_dealer_min, days_at_dealer_max, listed_within_days, postcode, latitude, longitude, radius, region, county, city, dealer_type, dealer_id, exclude_dealer_id, dealer_name, active_from, active_to, range_bands
Required
range_bands
Example request and answer
{
  "scope": "live",
  "make": "Ford",
  "model": "Focus",
  "range_bands": [
    {
      "field": "price",
      "from": 0,
      "to": 20000,
      "step": 2500
    }
  ]
}
{
  "success": true,
  "data": {
    "scope": "live",
    "total_found": 4120,
    "bands": {
      "price": {
        "from": 0,
        "to": 20000,
        "step": 2500,
        "below": 0,
        "above": 24,
        "in_range": 4096,
        "counts": [
          {
            "from": 0,
            "to": 2500,
            "count": 31
          },
          {
            "from": 2500,
            "to": 5000,
            "count": 188
          }
        ]
      }
    }
  }
}

Market overview

POST /api/v1/market/overview

Live supply and prices, sold in 90 days, days to sell and turnover, in one call.

Price per call
Pay As You Go 20p, Starter 16p, Pro 10p, Enterprise 6p
Fields
make, exclude_make, model, variant, model_variant, year_min, year_max, body_type, fuel_type, transmission, drivetrain, engine_size_min, engine_size_max, seats, colour, combined_mpg_min, combined_mpg_max, insurance_group, ulez_compliant, write_off_category, exclude_write_off, price_min, price_max, priced_only, mileage_min, mileage_max, vat_included, days_on_market_min, days_on_market_max, postcode, latitude, longitude, radius, region, county, city, dealer_type, dealer_id, exclude_dealer_id, dealer_name, facets, facet_limit, facet_sort
Example request and answer
{
  "make": "BMW",
  "model": "3 Series",
  "year_min": 2019,
  "year_max": 2019
}
{
  "success": true,
  "data": {
    "live": {
      "total_found": 893,
      "price": {
        "count": 893,
        "missing": 0,
        "min": 5995,
        "max": 21995,
        "mean": 13410,
        "median": 13250,
        "stddev": 2210,
        "p5": 9995,
        "p25": 11990,
        "p75": 14995,
        "p90": 16495,
        "p95": 17490,
        "p99": 19990
      },
      "mileage": {
        "count": 893,
        "missing": 4,
        "min": 8120,
        "max": 118400,
        "mean": 46210,
        "median": 43900,
        "stddev": 18350,
        "p5": 19800,
        "p25": 32500,
        "p75": 57800,
        "p90": 71200,
        "p95": 80100,
        "p99": 98700
      },
      "days_on_market": {
        "count": 893,
        "missing": 0,
        "min": 0,
        "max": 212,
        "mean": 41,
        "median": 29,
        "stddev": 37,
        "p5": 3,
        "p25": 13,
        "p75": 57,
        "p90": 92,
        "p95": 118,
        "p99": 171
      }
    },
    "sold_last_90_days": {
      "total_found": 1813,
      "price": {
        "count": 1813,
        "missing": 0,
        "min": 5995,
        "max": 21995,
        "mean": 13410,
        "median": 13250,
        "stddev": 2210,
        "p5": 9995,
        "p25": 11990,
        "p75": 14995,
        "p90": 16495,
        "p95": 17490,
        "p99": 19990
      },
      "mileage": {
        "count": 1813,
        "missing": 9,
        "min": 8120,
        "max": 118400,
        "mean": 46210,
        "median": 43900,
        "stddev": 18350,
        "p5": 19800,
        "p25": 32500,
        "p75": 57800,
        "p90": 71200,
        "p95": 80100,
        "p99": 98700
      },
      "days_to_sell": {
        "count": 1813,
        "missing": 0,
        "min": 0,
        "max": 212,
        "mean": 33,
        "median": 24,
        "stddev": 37,
        "p5": 3,
        "p25": 13,
        "p75": 57,
        "p90": 92,
        "p95": 118,
        "p99": 171
      }
    },
    "turnover_ratio": 2.03,
    "days_of_supply": 44
  }
}

One advert in full

POST /api/v1/market/listing

Full detail of one advert: features, options, seller comments and full spec.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3p
Fields
listing_id, follow_relist, photos
Required
listing_id
Example request and answer
{
  "listing_id": "adv_ (from a market listings answer)"
}
{
  "success": true,
  "data": {
    "listing": {
      "listing_id": "adv_Xc2Lr9vQm1T0pZk7HdF3aw8NsY4bJ6eUqC5gViOtR",
      "title": "2019 BMW 3 Series 320d M Sport 4dr Step Auto",
      "price": 18995,
      "mileage": 41250,
      "previous_price": 19995,
      "previous_price_date": "2026-09-12",
      "price_change_pct": -5,
      "vehicle": {
        "year": 2019,
        "make": "BMW",
        "model": "3 Series",
        "variant": "320d M Sport",
        "body_type": "Saloon",
        "fuel_type": "Diesel",
        "transmission": "Automatic",
        "drivetrain": "4x2",
        "engine_size": 2,
        "doors": 4,
        "seats": 5,
        "colour": "Black",
        "base_colour": "Black",
        "power_bhp": 188,
        "mpg_combined": 55.4,
        "co2_g_km": 118,
        "euro_status": "Euro 6"
      },
      "owners": 1,
      "first_registered": "2019-06-28",
      "days_on_market": 34,
      "days_at_dealer": 34,
      "first_seen": "2026-10-03",
      "last_seen": "2026-11-05",
      "dealer": {
        "dealer_id": "dlr_Qm4Tc8nWx2Ls0Hb7RkVa1g",
        "name": "Example Motors Ltd",
        "type": "independent",
        "city": "Leeds",
        "county": "West Yorkshire",
        "country": "England",
        "postcode": "LS11 5AB",
        "latitude": 53.78,
        "longitude": -1.55,
        "phone": "0113 000 0000",
        "website": "https://www.example.co.uk/"
      },
      "listing_url": "https://www.example.co.uk/used/bmw-3-series-320d",
      "advert_site": "example.co.uk",
      "photos": [
        "https://www.example.co.uk/photos/1.jpg"
      ]
    },
    "features": [
      "Heated seats",
      "Rear parking sensors"
    ],
    "options": [
      "M Sport Plus Pack"
    ],
    "high_value_features": [
      "Adaptive cruise control"
    ],
    "seller_comments": "Full service history. Two keys.",
    "dealer_standard_text": "All our cars come with a 3 month warranty."
  }
}

Advert history

POST /api/v1/vehicle/advert-history

Every advert one car has had: price, mileage, seller and dates, with our mileage check.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3p
Fields
vrm, page, sort_order
Required
vrm
Example request and answer
{
  "vrm": "SA22TLZ"
}
{
  "success": true,
  "data": {
    "vrm": "SA22TLZ",
    "page": 1,
    "adverts_on_page": 1,
    "more_pages": false,
    "summary": {
      "first_advertised": "2026-03-20",
      "last_advertised": "2026-04-11",
      "sellers": 1,
      "lowest_price": 14995,
      "highest_price": 14995,
      "lowest_mileage": 9800,
      "highest_mileage": 9800
    },
    "mileage_check": {
      "adverts_checked": 1,
      "mileage_went_down": false,
      "drops": []
    },
    "adverts": [
      {
        "listing_id": "adv_Hk3Vb8qN2mZ0Lr5TcX7wPa",
        "price": 14995,
        "mileage": 9800,
        "seller_name": "Example Motors Ltd",
        "seller_type": "dealer",
        "city": "Leeds",
        "postcode": "LS11 5AB",
        "advert_site": "example.co.uk",
        "first_seen": "2026-03-20",
        "last_seen": "2026-04-11"
      }
    ]
  }
}

Live adverts for a plate

POST /api/v1/vehicle/live-adverts

Where one car is advertised right now, with the lowest and highest asking price.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3p
Fields
vrm, fields, photos
Required
vrm
Example request and answer
{
  "vrm": "SA22TLZ"
}
{
  "success": true,
  "data": {
    "vrm": "SA22TLZ",
    "adverts_found": 2,
    "lowest_price": 14995,
    "highest_price": 15295,
    "price_difference": 300,
    "adverts": [
      {
        "listing_id": "adv_Jw4Np7Ct2Ys9Ld6Qm1Fb8Kx3Hv0ZgRaEuToNiWcB",
        "title": "2022 Volkswagen Polo 1.0 TSI Life 5dr",
        "price": 14995,
        "mileage": 12400,
        "vehicle": {
          "year": 2022,
          "make": "Volkswagen",
          "model": "Polo",
          "variant": "1.0 TSI Life",
          "body_type": "Hatchback",
          "fuel_type": "Petrol",
          "transmission": "Manual",
          "drivetrain": "4x2",
          "engine_size": 1,
          "doors": 5,
          "seats": 5,
          "colour": "White",
          "base_colour": "White"
        },
        "owners": 1,
        "first_registered": "2022-03-01",
        "days_on_market": 12,
        "days_at_dealer": 12,
        "first_seen": "2026-10-28",
        "last_seen": "2026-11-08",
        "dealer": {
          "dealer_id": "dlr_Qm4Tc8nWx2Ls0Hb7RkVa1g",
          "name": "Example Motors Ltd",
          "type": "independent",
          "city": "Leeds",
          "county": "West Yorkshire",
          "country": "England",
          "postcode": "LS11 5AB",
          "latitude": 53.78,
          "longitude": -1.55,
          "phone": "0113 000 0000",
          "website": "https://www.example.co.uk/"
        },
        "listing_url": "https://www.example.co.uk/used/vw-polo-life",
        "advert_site": "example.co.uk",
        "photos": [
          "https://www.example.co.uk/photos/4.jpg"
        ]
      },
      {
        "listing_id": "adv_Rk8Dz3Wq6Mb1Xn4Tc9Lv2Gs7Hp0JfQaEuYoNiPwC",
        "title": "2022 Volkswagen Polo 1.0 TSI Life 5dr",
        "price": 15295,
        "mileage": 12400,
        "vehicle": {
          "year": 2022,
          "make": "Volkswagen",
          "model": "Polo",
          "variant": "1.0 TSI Life",
          "body_type": "Hatchback",
          "fuel_type": "Petrol",
          "transmission": "Manual",
          "drivetrain": "4x2",
          "engine_size": 1,
          "doors": 5,
          "seats": 5,
          "colour": "White",
          "base_colour": "White"
        },
        "owners": 1,
        "first_registered": "2022-03-01",
        "days_on_market": 12,
        "days_at_dealer": 12,
        "first_seen": "2026-10-28",
        "last_seen": "2026-11-08",
        "dealer": {
          "dealer_id": "dlr_Qm4Tc8nWx2Ls0Hb7RkVa1g",
          "name": "Example Motors Ltd",
          "type": "independent",
          "city": "Leeds",
          "county": "West Yorkshire",
          "country": "England",
          "postcode": "LS11 5AB",
          "latitude": 53.78,
          "longitude": -1.55,
          "phone": "0113 000 0000",
          "website": "https://www.example.co.uk/"
        },
        "listing_url": "https://www.example-cars.co.uk/used/vw-polo-life",
        "advert_site": "example-cars.co.uk",
        "photos": [
          "https://www.example-cars.co.uk/photos/1.jpg"
        ]
      }
    ]
  }
}

Dealer detail

POST /api/v1/dealers/detail

One dealer: address, contact details, type and stock count.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3p
Fields
dealer_id
Required
dealer_id
Example request and answer
{
  "dealer_id": "dlr_ (from a listing or a dealer search)"
}
{
  "success": true,
  "data": {
    "dealer": {
      "dealer_id": "dlr_Qm4Tc8nWx2Ls0Hb7RkVa1g",
      "name": "Example Motors Ltd",
      "type": "independent",
      "city": "Leeds",
      "county": "West Yorkshire",
      "country": "England",
      "postcode": "LS11 5AB",
      "latitude": 53.78,
      "longitude": -1.55,
      "phone": "0113 000 0000",
      "website": "https://www.example.co.uk/",
      "status": "active",
      "listed_since": "2021-04-09",
      "stock_count": 63
    }
  }
}

Dealer stock

POST /api/v1/dealers/stock

One dealer's live stock with stock age, price statistics and make mix.

Price per call
Pay As You Go 10p, Starter 8p, Pro 5p, Enterprise 3p
Fields
dealer_id, make, model, fuel_type, body_type, year_min, year_max, price_min, price_max, priced_only, mileage_min, mileage_max, days_at_dealer_min, days_at_dealer_max, price_reduced, sort_by, sort_order, rows, start, facets, facet_limit, facet_sort, fields, photos
Required
dealer_id
Example request and answer
{
  "dealer_id": "dlr_ (from a listing or a dealer search)",
  "rows": 10,
  "facets": [
    "make"
  ]
}
{
  "success": true,
  "data": {
    "dealer_id": "dlr_Qm4Tc8nWx2Ls0Hb7RkVa1g",
    "dealer": {
      "dealer_id": "dlr_Qm4Tc8nWx2Ls0Hb7RkVa1g",
      "name": "Example Motors Ltd",
      "type": "independent",
      "city": "Leeds",
      "county": "West Yorkshire",
      "country": "England",
      "postcode": "LS11 5AB",
      "latitude": 53.78,
      "longitude": -1.55,
      "phone": "0113 000 0000",
      "website": "https://www.example.co.uk/"
    },
    "total_found": 63,
    "start": 0,
    "rows_requested": 10,
    "rows_returned": 10,
    "more_available": true,
    "stock_age_days": {
      "count": 63,
      "missing": 0,
      "min": 1,
      "max": 240,
      "mean": 48,
      "median": 35,
      "stddev": 41,
      "p5": 3,
      "p25": 14,
      "p75": 68,
      "p90": 112,
      "p95": 150,
      "p99": 221
    },
    "price": {
      "count": 63,
      "missing": 0,
      "min": 6995,
      "max": 31995,
      "mean": 16850,
      "median": 15995,
      "stddev": 5120,
      "p5": 8995,
      "p25": 12995,
      "p75": 19995,
      "p90": 23995,
      "p95": 26495,
      "p99": 30995
    },
    "facets": {
      "make": [
        {
          "value": "BMW",
          "count": 12
        },
        {
          "value": "Ford",
          "count": 9
        }
      ]
    },
    "listings": [
      {
        "listing_id": "adv_Xc2Lr9vQm1T0pZk7HdF3aw8NsY4bJ6eUqC5gViOtR",
        "title": "2019 BMW 3 Series 320d M Sport 4dr Step Auto",
        "price": 18995,
        "mileage": 41250,
        "previous_price": 19995,
        "previous_price_date": "2026-09-12",
        "price_change_pct": -5,
        "vehicle": {
          "year": 2019,
          "make": "BMW",
          "model": "3 Series",
          "variant": "320d M Sport",
          "body_type": "Saloon",
          "fuel_type": "Diesel",
          "transmission": "Automatic",
          "drivetrain": "4x2",
          "engine_size": 2,
          "doors": 4,
          "seats": 5,
          "colour": "Black",
          "base_colour": "Black",
          "power_bhp": 188,
          "mpg_combined": 55.4,
          "co2_g_km": 118,
          "euro_status": "Euro 6"
        },
        "owners": 1,
        "first_registered": "2019-06-28",
        "days_on_market": 34,
        "days_at_dealer": 34,
        "first_seen": "2026-10-03",
        "last_seen": "2026-11-05",
        "dealer": {
          "dealer_id": "dlr_Qm4Tc8nWx2Ls0Hb7RkVa1g",
          "name": "Example Motors Ltd",
          "type": "independent",
          "city": "Leeds",
          "county": "West Yorkshire",
          "country": "England",
          "postcode": "LS11 5AB",
          "latitude": 53.78,
          "longitude": -1.55,
          "phone": "0113 000 0000",
          "website": "https://www.example.co.uk/"
        },
        "listing_url": "https://www.example.co.uk/used/bmw-3-series-320d",
        "advert_site": "example.co.uk",
        "photos": [
          "https://www.example.co.uk/photos/1.jpg"
        ]
      }
    ]
  }
}

New filters on the plate endpoints

/v1/market/active, /v1/market/sold, /v1/market/insights and /v1/pricing/insights still find cars like the registration you send. They now also take these optional filters, with the same names and values as above. Send none and they answer exactly as before, at the same price.

  • fuel_type: text, or a list of up to 20
  • mileage_min, mileage_max: numbers, 0 to 999999 (either end may be left out)
  • postcode: text
  • radius: whole number, 1 to 200
  • exclude_write_off: list of A, B, S, N, C, D
  • dealer_type: franchise or independent

Radius: up to 200 miles on /v1/market/active and 100 on the others (they use sold data). Every listing on /v1/market/active and /v1/market/sold also carries listing_id (adv_...), which you can send to one advert in full.

Sandbox

  • Sandbox keys are free. The market searches answer from a stored sample: about 100 adverts for sale and 100 sold for each test model at GET /v1/sandbox/market-presets. Leave make and model out to search the whole sample, or name any of its makes and models. Every filter, sort, paging, count, statistic and band is worked out on the sample, so totals describe the sample, not the market.
  • Sandbox data is fictional. Each answer has exactly the fields a live answer has, filled in the same places, but every advert, dealer and seller is made up: names, addresses, phone numbers (Ofcom's drama range, 01632 960xxx), email addresses and websites (on example.com), registrations (age identifier 00, never issued), links and photos (sample drawings). Sandbox ids start the same way as live ones (adv_, dlr_) but only work with sandbox keys.
  • Dealer search covers the test areas (postcode N1 7GU, B5 4BU, M1 1AE); dealer detail and stock cover the dealers listed there; one advert in full covers adverts from sandbox answers.
  • Advert history and live adverts use the sandbox registrations at GET /v1/sandbox/vrms, with made-up adverts that are the same every time. A registration in the Mileage Check category has a later advert showing fewer miles, so the mileage check reports it; a scrapped car has no live adverts.
  • On the registration endpoints (/v1/market/insights, /v1/pricing/insights) the filters narrow the sold figures as well as the live adverts, as they do on live keys: the sandbox works them out from a fictional sold sample shaped like the stored figures.
  • A make or model the sample does not hold, and anything outside the test areas, dealers and adverts, answers 404 SANDBOX_QUERY_NOT_AVAILABLE (free). Sandbox answers carry meta.sample_note; the market searches also carry meta.data_captured_at.

Test searches: Ford Fiesta, Ford Focus, Ford Kuga, Vauxhall Corsa, Vauxhall Astra, Volkswagen Golf, Volkswagen Polo, BMW 3 Series, BMW 1 Series, Audi A3, Mercedes-Benz A-Class, Mercedes-Benz C-Class, Nissan Qashqai, Nissan Juke, Kia Sportage, Hyundai Tucson, Toyota Yaris, Peugeot 208, Tesla Model 3, Land Rover Range Rover Evoque.

About the data

  • Adverts come from UK dealer websites and are refreshed daily.
  • Sold is inferred: the advert ended and the same car did not reappear within 7 days. The price is the last asking price, not a confirmed sale price.
  • Medians and percentiles on live data are approximate. Money is in whole pounds, dates are YYYY-MM-DD.
  • Fields we do not hold for an advert are left out, never sent as null or a placeholder.
  • Ids are ours: adverts adv_..., dealers dlr_.... The same advert or dealer keeps the same id.
  • Personal data: dealer names, phone numbers and emails are sent as dealers publish them. For sole traders these are personal data. Use them only where you have a lawful basis, and do not store them or build a contact list from them. See the developer terms.

Errors and refunds

These endpoints answer with the version 2 error codes. Charging follows the work done: every lookup our data source answers is charged, including an advert or dealer it no longer holds (404, with error.charged: true) and a registration with no adverts (a successful answer with an empty list). A search that finds no adverts is a successful answer and is charged. So is a search the data source made and then refused because of a value or postcode it could not use (400 INVALID_PARAMETER; the error message says the search was charged). Mistakes we find in the request before searching (400), a postcode we cannot find, and a data source failure (502 or 503) are not charged.

Daily caps

Per account across your live keys, reset at midnight UK time. The package limits on the API documentation apply as well.

LimitPay As You GoStarterProEnterprise
Per second251020
Per minute60100300600
Per day5002,0005,00015,000
Daily cap per endpoint
Market listings2007502,0005,000
Market listings (bulk)2075200500
Sold listings search2007502,0005,000
Sold listings search (bulk)2075200500
Price drops2007502,0005,000
Market statistics2007502,0005,000
Market counts2007502,0005,000
Price and mileage bands2007502,0005,000
Market overview2007502,0005,000
One advert in full2007502,0005,000
Advert history2007502,0005,000
Live adverts for a plate2007502,0005,000
Dealer search2007502,0005,000
Dealer detail2007502,0005,000
Dealer stock2007502,0005,000

Questions

Do I need a registration to search the market?

No. /v1/market/listings, sold-listings, price-drops, stats, facets, distribution and overview search by make, model and any other filter. Only advert history and live adverts take a registration.

How do I get more than 50 results?

Each call returns up to 50 results. Send start 0, then 50, then 100 and so on, and stop when more_available is false. start plus rows can be at most 10,000. For charts and maps, bulk: true returns up to 1,000 light rows a call.

How much does a call cost?

One data request is 10p on Pay As You Go, 8p on Starter, 5p on Pro, 3p on Enterprise. The market overview makes two requests and costs twice that. Bulk mode is priced as 5 requests. Mistakes we find in the request before searching (400) and data source failures (502) are not charged. A search the data source made is charged, even when it then rejects a value or postcode (400 INVALID_PARAMETER, and the error message says the search was charged) or the advert or dealer id no longer exists (404 LISTING_NOT_FOUND or DEALER_NOT_FOUND).

What does "sold" mean?

Sold is inferred: the advert ended and the same car did not reappear within 7 days. The price is the last asking price, not a confirmed sale price.

Can I store dealer contact details?

No. Dealer names, phone numbers and emails are sent as dealers publish them. For sole traders they are personal data: use them only where you have a lawful basis and do not store them or build a contact list from them.

Can I test without paying?

Yes. Sandbox keys are free and answer from a stored sample of fictional adverts for the 20 test models listed at GET /v1/sandbox/market-presets (about 2,000 for sale and 2,000 sold). Search the whole sample or name any of its makes and models; every filter, sort, count and statistic works on the sample. Worked examples are on the Example searches page once you sign in.

By use

More: API reference, error codes, changelog. Questions: support@dealerpricing.co.uk.