Skip to content

FMV Methodology

How we compute fair-market-value for every edition.

FMV is computed per edition — uniquely identified by setID:playID for Top Shot and the equivalent composite key for NFL All Day. The base figure is the median of the edition's most recent typical on-chain sales: special serials (#1, jersey match, perfect mint) and outlier prints are set aside, and on a thinly traded edition only sales close in time to the newest one count. Serial multipliers are layered on top. The recency-weighted average sales price shown beside FMV on some tables is a separate diagnostic, not the FMV (it lagged a falling market, which is why the median replaced it). Both the sales feed and the listing feed are inputs — sales drive the headline price, listings drive the validation and the ask-only fallback when there are no sales to anchor against. Days since the last sale and the 30-day sales count are tracked alongside it as diagnostic features.

Most FMVs are priced from recent sales. When an edition has no recent sales at all, its FMV is derived from the lowest ask we have confirmed recently — an ask we have not re-confirmed in over a week no longer supports a price at all. When we have too little data to price an edition, we withhold the price rather than guess. Per-moment serial premiums and badge premiums are layered on top of the edition base FMV using regression-fit multipliers — the base FMV applies to a hypothetical median-serial moment with no premium badges.

Aggregates exclude editions priced only from asking prices. Listing-reward farming asks at $100K-$1M pollute the lowest-ask signal — wallets list moments at absurd prices to qualify for marketplace participation rewards, and those listings exist on-chain but are not real prices. Including ask-priced editions in pipeline totals or top-movers tables would mostly surface farming noise, so every total/avg/median figure on the dashboard is computed over sale-priced editions only.

Refresh cadence is approximately 10 minutes — the FMV pipeline runs continuously and recomputes per-edition snapshots as new sales land. The Top Movers table compares the current snapshot against the snapshot from N days ago (1, 7, or 30) and orders by % change. Check a mover's 30-day sale count before reading much into it — a mover with no sales in the last 30 days is the most likely to be noise (a single $0.18 sale that pumped to $12 will read as a +6,000% gainer but is not a real price discovery signal). The dashboard covers all five Flow collections — Top Shot, All Day, Pinnacle, Golazos and UFC Strike; Golazos and UFC Strike trade thinly, so expect fewer priced editions there.

Data sources

  • sales (Supabase, year-partitioned 2020–2026) — chain-event-indexed sales for Top Shot and All Day
  • fmv_snapshots (Supabase) — most recent FMV per edition
  • edition_offers (Supabase) — the live ask per edition, written by the offers-sweep cron; the ask-corroboration and ask-based-price inputs, both bounded by how recently the ask was confirmed
  • ts_listings + cached_listings (Supabase) — ask-side validation; ts_listings is the Top Shot order book, rebuilt from the Atlas firehose every ~2 minutes (see the Listings methodology)
  • analytics_fmv_pipeline_health / analytics_fmv_top_movers / analytics_fmv_tier_pulse RPCs

Refresh cadence

Every ~10 minutes

← Back to all methodology