Guide

How DealScore grades work

DealScore compares a listing's asking price to expected market value from live comps, then maps the gap to a grade. No guesswork when data is thin — DealScore would rather say cannot_score than invent a Great deal.

The core number: delta_pct

Every score starts with one ratio. delta_pct = (asking_price - expected_price) / expected_price. Negative means the ask is below market; positive means above.

Expected price comes from dealer listing comps. The default score uses US national inventory. ZIP is optional local refine. Production at cardealscore.com uses live comps (data_source: live). Local dev may use deterministic mock data instead. A private-party ask may grade lower than a dealer ask for the same car, because the comps are dealer-market.

score_v1 grade bands

Rubric version score_v1 turns delta_pct into one of five grades and a 0–100 score (linear map: score = clamp(100 - delta_pct × 200, 0, 100)).

Great

delta_pct ≤ -10%

Asking well below expected market value.

Good

delta_pct ≤ -3%

Asking modestly below market.

Fair

delta_pct ≤ +3%

Roughly in line with comps.

High

delta_pct ≤ +10%

Asking above market, but not wildly so.

Overpriced

delta_pct > +10%

Asking well above what comps support.

Want the math without scoring a car? POST /api/explain accepts a delta_pct and returns the grade breakdown.

Live comps vs. cannot_score

Production fetches fresh comps on each score request. We don't cache across requests — each call is independent.

  • scored — enough nearby comps to compute expected price and a grade.
  • cannot_score — live data unavailable, upstream failed, rate limits hit, or comps are too thin. No silent fallback to mock data.
  • partial — mock mode only (dev). Fine for local testing, not production truth.

Confidence adjusts with comp count and whether data is live or mock. Fewer comps → lower confidence, even when we can score.

What we don't do

  • No Facebook Marketplace or Craigslist URL fetch. Paste listing text on the homepage, or send year/make/model (or VIN), asking price, and mileage. ZIP is optional.
  • No affiliate links, no invented testimonials, no fake comp counts.
  • No cross-request comp caching. Each call is independent.

See also: how to judge if a car is a good deal, scoring by VIN, scoring with an agent, or call the API from an agent.