"What is this car worth?" is not one question. It is at least four, with genuinely different answers, and a valuation product that does not say which one it is answering will produce numbers that are individually defensible and collectively incoherent.
| Question | Answer comes from | Typical relationship |
|---|---|---|
| What will the trade pay at auction? | Auction clearing prices | The floor |
| What is it listed for retail? | Classifieds asking prices | The ceiling — an aspiration |
| What does it actually retail for? | Asking price minus negotiation | Below the ceiling, by a variable amount |
| What will it cost me landed? | Hammer + fees + transport + duty + VAT | Above the floor, sometimes far above |
Confusing the first and second is the most common error, and it is expensive in both directions: it makes auction stock look like a bargain to a buyer, and makes a dealer's margin look larger than it is.
Why asking prices are not transaction prices
Classifieds data is abundant and easy to collect, which is exactly why it is over-trusted. An asking price is a seller's opening position, and four biases sit between it and reality:
- Negotiation. Most private and many dealer sales close below the advertised figure. The discount varies by market, by model and by how motivated the seller is.
- Survivorship, running backwards. The ads you can see today are disproportionately the ones that have not sold. Well-priced cars leave the dataset quickly; overpriced ones accumulate in it. A naive average of live ads is therefore biased upward.
- Listing age. A three-day-old ad and a ninety-day-old ad at the same price are telling you completely different things about that price.
- Presentation premium. Retail prices include reconditioning, warranty, preparation and a physical location. None of that is in a wholesale figure, so the spread is not pure margin.
Keeping the two datasets apart
It is tempting to merge auction lots and classifieds into one searchable index. It produces a search result nobody can act on: a user filtering for cars under €10,000 gets a mixture of things they can bid on and things they can buy, at prices computed on incompatible bases, with no indication of which is which.
We keep them structurally separate for that reason — auction sources are one surface, European retail classifieds are another, and they are never merged into the same search. The classifieds data exists to answer "what does this retail for", not to pad the inventory count.
# Wholesale: what the trade is paying
curl -s "https://api.thecarapi.com/api/search?brand=bmw&model=320d\
&year_from=2019&year_to=2021&limit=50" \
-H "X-API-Key: $API_KEY"
# Retail: what the same car is asked for, across European portals
curl -s "https://api.thecarapi.com/api/theparking/listings?brand=BMW\
&country=de,at,nl&price_to=30000" \
-H "X-API-Key: $API_KEY"Constructing a defensible reference price
A method that survives being questioned by someone with money at stake:
- 1Define the comparable set narrowly. Same make, model, registration year, fuel, gearbox and damage state. Mileage within a proportional band — ±15% rather than a fixed kilometre figure.
- 2Prefer clearing prices to live observations. A closed sale is a fact. A live asking price is a proposal.
- 3Adjust for mileage explicitly rather than pooling. State the adjustment so it can be checked.
- 4Bound the recency window to 60–90 days. Older data averages across a market that has moved.
- 5Report the sample size. An estimate from four observations and one from four hundred must not be presented identically.
- 6Report the dispersion, not just the centre. A tight cluster and a bimodal spread with the same median mean very different things about confidence.
The last two are what separate a reference price from a guess with a decimal point. A user who can see that the estimate rests on six cars with a wide spread will treat it appropriately; one shown a bare number will not.
{
"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"
}
}/api/top-offers. The reference travels with the lot, so a user who disagrees with the signal can see what it was based on.Reading the spread
Once you have both numbers for the same vehicle, the ratio between them is more informative than either alone — but it needs interpreting, because a wide spread has several possible causes:
- Genuine margin. Real, and the basis of the trade.
- Reconditioning cost. The retail car has had work the auction car has not. Not margin.
- Time cost. Weeks of holding, financing and forecourt space between the two prices.
- Condition difference the data does not capture. The most likely explanation for an outlier, and the most dangerous to ignore.
- Market segment mismatch. A wholesale lot compared against a retail listing for a slightly different trim.
A practical heuristic: an apparent spread far above the norm for that model is more often a data problem than an opportunity. Investigate the comparable set before acting on it.
Regional variation is signal, not noise
The same car does not cost the same across Europe, and the differences are systematic rather than random — driven by local taxation, emissions rules, fuel-type preference, climate and fleet composition. Diesel demand varies sharply between markets. Some countries apply registration taxes that make certain vehicles structurally more expensive.
For a valuation product this means a single European reference price is usually the wrong abstraction. Compute per-market references where you have the sample size, and be explicit about which market a number refers to. For a sourcing product, the variation is the whole opportunity.
What to build first
If you are adding valuation to an existing product, the order that delivers value soonest:
- 1A comparable set with the sample size shown. Even without a modelled price, showing a user the ten most similar recent sales is immediately useful and hard to argue with.
- 2A mileage-adjusted reference price on top of that set.
- 3The retail spread, once you have retail data for the same models.
- 4Per-market breakdowns, once your sample supports splitting.
- 5Trend over time, which requires the archive — and which is the reason price history needs to be collected before you need it.
Frequently asked questions
What is the difference between wholesale and retail used car prices?
Wholesale is what the trade pays at auction — a transaction price between professionals. Retail asking price is what a seller advertises to a consumer, and it includes reconditioning, warranty, preparation and premises, as well as room to negotiate. They measure different things and should never be pooled into a single average.
Why are classifieds asking prices biased upward?
Survivorship, running in the unfamiliar direction. Well-priced cars sell quickly and leave the visible set, while overpriced ones remain and accumulate. An average of currently-live advertisements therefore drifts above the true transaction level even in a flat market. Weighting by listing age partially corrects for it.
How many comparable vehicles do you need for a reliable price estimate?
There is no single threshold, which is why the sample size should be shown rather than hidden. An estimate from four observations and one from four hundred are both legitimate outputs but carry completely different confidence, and presenting them identically misleads the user. Report dispersion alongside the central figure.
Should auction listings and classifieds be searchable together?
No. They have different price bases, different availability semantics — one you bid on, one you buy — and different data shapes. Merging them produces search results a user cannot act on. Keep them as separate surfaces and use the classifieds data to answer "what does this retail for" rather than to inflate an inventory count.
Does the same car have the same value across Europe?
No, and the variation is systematic rather than random — driven by local taxation, emissions regulation, fuel-type preference and fleet composition. A single European reference price is usually the wrong abstraction; compute per-market references where the sample supports it, and always include landed cost before treating a cross-border price difference as an opportunity.
- market value
- valuation
- classifieds
- retail pricing
One API, seven auction sources
Normalized search, source-aware detail, CDN image galleries, price history and archive access — all included on every plan.