Number plates.
What they're worth.
The first searchable index of private number plates with confirmed sale prices and AI-powered valuations. From the £518k Ferrari plate to the AU $11.25m world record.
Value my plateLoading…
Database not reachable.
Set DATABASE_URL in .env.local to a working Postgres instance, then refresh.
Failed query:
WITH s AS (
SELECT
plate_id,
MAX(sold_at)::text AS last_sold_at,
COUNT(*)::int AS sales_count,
(ARRAY_AGG(sold_price_minor ORDER BY sold_at DESC))[1]::bigint AS last_sold_price_minor,
(ARRAY_AGG(currency::text ORDER BY sold_at DESC))[1] AS last_sold_currency
FROM plate_sales
WHERE outcome = 'sold'
GROUP BY plate_id
),
l AS (
SELECT plate_id, MAX(ask_price_minor)::bigint AS live_ask_minor
FROM plate_listings
WHERE status = 'active'
GROUP BY plate_id
)
SELECT
p.id, p.registration, p.normalised, p.slug, p.market::text AS market,
p.region, p.format, p.desirability, p.current_status AS "currentStatus",
p.contains_word AS "containsWord", p.word_meaning AS "wordMeaning",
p.notes, p.tags, p.image_url AS "imageUrl",
p.character_count AS "characterCount",
s.last_sold_price_minor::float8 / 100 AS "lastSoldPriceMajor",
s.last_sold_at AS "lastSoldAt",
s.last_sold_currency AS "lastSoldCurrency",
COALESCE(s.sales_count, 0) AS "salesCount",
l.live_ask_minor::float8 / 100 AS "liveAskMajor"
FROM plates p
LEFT JOIN s ON s.plate_id = p.id
LEFT JOIN l ON l.plate_id = p.id
WHERE 1 = 1 AND p.market = $1::plate_market
ORDER BY s.last_sold_price_minor DESC NULLS LAST, p.created_at DESC
LIMIT $2 OFFSET $3
params: US,60,0AI Powered
Have a plate? Get an honest value in 10 seconds.
Drop in your registration and we'll cross-reference live retailer listings, recent confirmed sales, and a calibrated AI appraiser. No sign-up, no spam.
Value my plateSample valuation
“DAN 12L” · UK · auto · good condition
£4,800
range £3,500–£6,500 · 8 comparables · medium confidence
Indicative only — not investment advice. Past performance is not a reliable indicator of future value.