Every sale on this site comes from Panini's own NFT marketplace (nft.paniniamerica.net). Mintalytics is not affiliated with Panini — this is independent secondary-market analysis of publicly visible blockchain transactions, not an official product.
Collection is manual: sales data is captured by scrolling Panini's marketplace listings in Chrome DevTools and exporting the network traffic (a HAR file), which is then parsed into per-card sales records. There is no live feed and no automated scraper — Panini's marketplace uses server-computed signature headers that block that. This means coverage is never complete or perfectly current: a card only appears once someone has manually captured it, and its numbers are only as fresh as its last capture.
Every card's detail page and Key Stats panel show when its data was last synced, so that staleness is visible rather than silently assumed away.
Number 1, Perfect Mint, and Jersey Mint variants are excluded from every stat by default — average price, momentum, volatility, turnover, conviction, all of it. These premium copies of a card routinely sell for many multiples of an ordinary copy, and folding them into the same average as everyday sales would badly distort what a "typical" price actually is. Where one exists, it's shown separately (card-detail.html's "Premium Sales" section) rather than hidden.
The one exception is a genuine 1-of-1: when a card's entire print run is a single copy, that copy IS simultaneously the Number 1 and Perfect Mint version — there's no separate "ordinary copy" to exclude it in favor of, so the exclusion is skipped rather than wiping out the card's only sale.
Not the single most recent sale — one lone data point can be a wild outlier (a card going from a $650 sale straight to a $40,000 one is a real pattern in this data), and anchoring "current price" to whichever sale happened to land last would repeat that fragility. Averaging the last three smooths it without going so wide that it stops reflecting where the card actually is right now.
How today's price compares to the card's own full history — not to any other card, and not to the market as a whole.
A trend line (ordinary least-squares regression) fit through the card's own daily median prices, not a simple comparison of the first half of its sales to the second half. A two-bucket comparison is sensitive to exactly where the midpoint falls — a card that spiked once mid-history and has been flat ever since can misleadingly show as "trending" purely because that spike landed on one side of an arbitrary split. The regression's R² doubles as a confidence read a two-bucket average has no way to produce: a steep slope through scattered, poorly-fitting points means there's a nominal direction, but it isn't a trustworthy one — which is why Momentum figures fade visually when the underlying fit is weak, rather than presenting every slope with equal confidence.
The standard deviation of day-over-day percentage moves in the card's daily median price — detrended dispersion, not raw price spread, so a steady climb isn't penalized as "risky" just for moving in one direction. Single-day swings are capped at ±300% before entering the calculation (winsorized): a lone near-zero-price sale, like a $1 promotional transfer, can otherwise produce a several-thousand-percent single-day "return" that swamps every other day's contribution.
How many times a card's print run has changed hands, expressed as a percentage of its own edition size — a /10 card with 15 recorded sales has 150% turnover (the average copy has changed hands 1.5 times).
The share of a card's sales that went to a unique buyer (or came from a unique seller), all-time and across just its most recent 20 trades. High turnover backed by a wide, ever-changing set of buyers and sellers is broad, healthy liquidity; high turnover backed by the same handful of accounts trading back and forth is a closed loop wearing the same number. Concentration on only one side isn't automatically a red flag on its own — one collector absorbing supply from many different sellers is just one-sided demand, not fake liquidity — so Conviction Score below only penalizes the case where both sides stay narrow at once.
The median number of days between a buyer's purchase and their own resale of that same card, resolved directly from the card's chain of custody (matching each sale's seller against their own most recent prior purchase of that exact card). A card can show high turnover either because it's flipped fast or because it's genuinely held a long time by a large, slowly rotating cast of owners — this is the one figure that tells those two apart.
The single default sort on most tables — the statistical answer to "how much broad, sustained, proven demand does this card actually have," as opposed to a raw turnover number that can't tell a launch-week flipping frenzy apart from years of genuine trading.
Cards in the bottom quartile of Conviction Score within their comparison set are shown at reduced opacity — still visible, just visually deprioritized — rather than hidden outright.
Two independent, plainly-explainable signals that a card's headline Turnover Rate or Conviction Score might be inflated by activity that isn't real price discovery — shown separately rather than silently baked into the score itself, so the reader judges for themselves rather than having it discounted for them.
A card only shows the ⚑ Low Trade Quality flag once one of these crosses 30% of its recorded sales.
Common, Uncommon, Rare, Ultra Rare, Epic, Legendary — read directly from Panini's own rarity classification on each sale, not inferred. Across the full catalog, this tier is close to a straight line on price: average sale price runs roughly $10 for Common up to five figures for Legendary, a spread of nearly three orders of magnitude.
A cardset (a parallel or insert type, like "Color Wheel" or "Base Prizms Blue") only qualifies as a cross-athlete pattern once it trades under 2 or more different athletes — one that only exists for a single athlete is just that athlete's own lineup, not a broader signal about the type itself.
Sale-weighted average Conviction Score across the cardset, scaled up by how many different athletes it spans — a type broadly traded across many athletes ranks above one that's only strong for one or two, without letting raw athlete count alone dominate the ranking (hence log₂ rather than a linear multiplier).
Grouping pools across every collection and year Mintalytics tracks, not just within one release — a cardset name that recurs (like a "Blue" parallel appearing in both a 2022 and a 2026 release) is automatically combined into one row rather than split. The Releases column and "Recurring Only" filter on the Patterns page surface exactly this: which designs have a proven track record across more than one release, and are therefore worth watching for the next one.
Panini periodically reissues the exact same cardset name under a brand-new collection years later. Wherever a cardset/athlete pair spans 2 or more collections, this compares the oldest release against the newest and reports the swing in average price.
Edition size is shown alongside every comparison and flagged when it differs between the two runs — a price gap between two runs of genuinely different supply isn't the same finding as one between two runs of the same size, and that distinction is left for the reader to weigh rather than corrected for automatically.
These answer different questions and deliberately use different data:
A rising price index says nothing about whether that's broad new demand or one whale re-trading; unique and new-buyer counts alongside $ volume are what actually tell those two apart.
Ranked both by total $ volume and by raw purchase count, kept as two separate lists rather than one blended score — a "whale" by volume and a high-frequency "grinder" by count are often two entirely different accounts. Each trader also carries their own Repeat-Pair % (the same idea as the card-level trade-quality flag, computed across that trader's whole history instead of one card), so a high count backed mostly by repeat-pair churn doesn't read the same as one backed by broad trading.
Any card with fewer than 15 recorded sales is marked (THIN SAMPLE) next to its Total Sales figure. Every stat is still computed and shown — this is a caution, not a suppression — but ratios and trends built on a handful of data points deserve more skepticism than the same numbers built on hundreds.
The Snapshot image generator classifies a card into exactly one of three states, based on Momentum: BREAKING OUT at +15% or above, COOLING DOWN at −15% or below, and HOLDING STEADY in between.
A few corrections have shaped the rules above, kept here rather than left as an invisible changelog: medians are computed as true statistical medians (averaging the two middle values on an even-count day), not a shortcut that quietly disagreed with itself between the build pipeline and the live comparison tool. Volatility and appreciation baselines are computed to resist a single near-zero promotional sale distorting an otherwise ordinary card's numbers. Every formula that exists in two places — the Python build pipeline and this site's own JavaScript — is deliberately kept identical between them, so a number never depends on which page happened to compute it.