Market intelligence

Car price history: reading auction price movement over time

A price is a fact about a moment. A price series is a fact about a market — and it is the only one you cannot go back and collect later.

TheCarApi EngineeringPlatform teamPublished Updated 10 min read

Nearly every question worth asking about a vehicle listing is comparative. Is this cheap? Is the seller moving on price? Has this model softened this quarter? None of those can be answered from the listing in front of you. They all need history, and history has an awkward property: it only accrues in real time. You cannot buy back the six months you did not record.

This is about what auction price series actually look like, the interpretation errors that make them worse than useless, and what you can build once you have them.

The shape of an auction price series

A wholesale lot generates several distinct kinds of price observation, and conflating them is the first and most damaging mistake.

ObservationWhat it meansSafe to compare across lots?
Opening / start priceWhere the seller chose to beginWeakly — it reflects strategy, not value
Current bidHighest bid so far, possibly below reserveNo — it is a floor, not a value
Buy-now priceA price at which the car is actually availableYes
Reserve met / not metWhether the current bid is transactableEssential context for any of the above
Final / hammerWhat it actually cleared atYes — this is the real signal
Relisted priceA second attempt after failing to sellYes, but flag it as a relist

The current-bid row is where most naive models go wrong. A lot sitting at €4,200 with an unmet reserve of €9,000 is not a €4,200 car. Feed unmet-reserve current bids into a valuation model as if they were sale prices and the model will systematically underestimate the market — badly, and in a way that looks fine on aggregate metrics.

What a price change actually tells you

When an observed price moves, there are at least five possible causes, only one of which is "the market changed":

  1. 1A genuine bid arrived — real demand signal.
  2. 2The seller reduced the asking or buy-now price — a supply-side signal about their urgency, which is different information.
  3. 3The auction moved to a new phase with different mechanics.
  4. 4An FX rate moved, on a non-euro source. Nothing about the car changed.
  5. 5A fee or VAT basis changed upstream, so the same underlying price is now presented differently.

Causes four and five are why a price series needs to record more than a number and a timestamp. If you cannot tell an FX move from a price cut, your "market softening" chart is partly a currency chart.

bash
curl -s "https://api.thecarapi.com/api/auction/openlane/11125938/price-history" \
  -H "X-API-Key: $API_KEY"
The series carries both the source-currency figure and the comparable EUR figure at each observation, along with which fields changed — so a currency move is distinguishable from a price move.

Sampling, and the gaps in your series

Any price history is a sampled series, not a continuous record. Two properties follow, and both matter for interpretation.

First, you see changes, not moments. If the observation interval is a few minutes, a burst of bidding in the final ninety seconds of an auction may be compressed into one or two points. The series will show the endpoints correctly and understate the volatility in between.

Second, absence of a point is not absence of change. A gap in the series means nothing was observed to have changed, which is different from nothing having changed — particularly around the close of an auction, when the interesting activity is densest and the pipeline is under the most load.

Building comparables

The practical output most teams want is: given this car, what have similar cars actually sold for recently? Building that is mostly a question of defining "similar" without letting the comparable set collapse to zero.

The matching hierarchy

  1. 1Same make, model and registration year. The non-negotiable core.
  2. 2Mileage within a band — proportional rather than absolute. ±15% is more sensible than ±20,000 km, which is a rounding error on a 200,000 km car and a different vehicle on a 30,000 km one.
  3. 3Same fuel and gearbox. These are large, discrete price effects and should never be pooled.
  4. 4Same damage state. Never compare a damaged car to a clean one. This is the single biggest source of nonsense comparables.
  5. 5Recency window — 60 to 90 days is usually the right trade-off. Shorter and you have no sample; longer and you are averaging across a market that has moved.

When the sample is too small

It frequently will be. Relax constraints in a deliberate order rather than all at once, and surface which ones you relaxed:

  • First widen the mileage band — the cheapest relaxation, and mileage is the easiest variable to adjust for.
  • Then widen the year range to ±1, adjusting for depreciation.
  • Then widen the geography, accepting that cross-border price levels differ.
  • Never relax fuel, gearbox or damage state. A comparable set that mixes those is not a comparable set.

And show the sample size. A valuation built on four observations and one built on four hundred should not look identical to the user. Confidence is information, and hiding it is how a price estimate becomes a liability.

Reference prices in practice

The /api/top-offers endpoint applies this logic to find lots priced below their reference, and — importantly — returns the reference with the lot rather than just a verdict:

json
{
  "auction_id": 11125938,
  "site_name": "openlane",
  "public_price_eur": 9800,
  "market_reference": {
    "price_eur": 12400,
    "mileage": 71000,
    "km_difference": -6205,
    "explanation": "Reference from comparable listings, adjusted for mileage difference"
  }
}
A deal signal you cannot inspect is a black box. The reference price, the mileage it was drawn at, and the adjustment are all returned so the number can be argued with.

That transparency matters more than the accuracy of any single estimate. Users will find cases where a signal looks wrong, and being able to show them the comparable set turns a credibility problem into a conversation.

Wholesale is only half the picture

Auction history tells you what the trade pays. It does not tell you what the car retails for, and the spread between those two is where the margin lives. Retail asking prices come from classifieds, which is a separate dataset with separate semantics — an asking price is not a transaction price, and the gap between them varies by model and by how long the ad has been running.

Used car market value and comparables covers combining the two properly, including why asking prices need discounting before you compare them to hammer prices.

Start recording now

The recurring theme: history is the one dataset that cannot be acquired retroactively. If price intelligence is anywhere on your roadmap — even eighteen months out — the archive needs to exist by then, which means either starting collection today or choosing a provider that already has it. Deciding later is deciding not to have it.

Frequently asked questions

What is a car price history API?

An endpoint returning the sequence of observed price changes for a specific auction lot over its lifetime — opening price, bid movements, buy-now changes and the final clearing figure — each with a timestamp and, ideally, an indication of which fields changed so a currency movement can be distinguished from a genuine price change.

Can I use current bids as market value?

No. A current bid below an unmet reserve is a floor, not a value — the car is not available at that price. Models trained on unmet-reserve current bids as if they were sale prices systematically underestimate the market, and the error is invisible in aggregate quality metrics. Weight final clearing prices instead.

How far back should price history go for valuation?

For comparables, 60 to 90 days is usually the right window — shorter leaves you without a sample, longer averages across a market that has moved. For detecting seasonal patterns or year-over-year depreciation you need at least two full years, which is why the archive depth of a provider matters more than most buyers realise at evaluation time.

Why do two providers disagree about what a car is worth?

Almost always the comparable set, not the arithmetic. Different mileage bands, different recency windows, different handling of damaged vehicles, different treatment of relisted lots, and different decisions about whether unsold lots count as observations all move the answer. A provider that shows you the comparable set is more useful than one that shows a more confident number.

Should relisted vehicles be counted twice?

No. A car that failed to sell and was relisted appears as two lots but is one vehicle, and counting both over-weights exactly the cars the market rejected. Deduplicate on VIN where it is published, and on a specification-plus-mileage signature where it is not — then flag the relist, because the fact that it failed to sell the first time is itself signal.

  • price history
  • valuation
  • market data
  • comparables
View as Markdown

One API, seven auction sources

Normalized search, source-aware detail, CDN image galleries, price history and archive access — all included on every plan.

Related reading