CardSearch Market index methodology
The math, the rules, and the edge cases for every index we publish. Bookmark this page — every change to it generates a methodology version bump and a link from the affected figure.
All ten V1 indexes anchor at 2022-01-01 = 1000. That date matches the practical depth of the cleanest free price source we ingest (TCGCSV historical archive). Any value computed from earlier eBay sold-listing data lives in the per-card Vintage Backcast Series, not in the measured index.
The PMI universe is built from every (card, grade, grader) in the canonical entity layer that meets four tests on the rebalance date:
- Game match (Pokémon for V1; one universe per game in future releases)
- Era match for era-specific indexes (vintage = 1999–2003, modern = post-2020)
- Grade match for condition-specific indexes (PSA 10, Raw NM)
- Liquidity floor — minimum 30-day comp count and minimum liquidity score (per index, see definitions below)
Default is market-cap-listedwith a per-name cap so a single Charizard can't dominate the index. The cap is documented per index (8–12%). At each rebalance, weights above the cap are redistributed pro-rata to the rest of the eligible universe.
Composite indexes (HEAT, SUPP, BREADTH) compute an underlying metric per constituent and then average across the eligible universe — they're not market-cap-weighted.
Rebalance cadence is documented per index — quarterly for the core price indexes, monthly for liquidity, continuous for the breadth/supply composites. At each rebalance we apply a Laspeyres divisor adjustmentso the index value doesn't jump when a constituent enters or leaves; only actual price changes move the level.
When a constituent is delisted or fails a future eligibility test, the divisor adjustment ensures the prior series remains comparable. We never restate a published value retroactively.
On every comp ingest we flag clear data anomalies (suspect shipping, multi-card lots misclassified as singles, returned listings) using the existing CardSearch listing_observations confidence model. Comps below confidence 0.4 are excluded. The remaining comps are winsorized at the 5th / 95th percentile per (card, grade) before the weighted-median rolls forward.
When a constituent has no comp activity in a 7-day window we carry the prior weighted median forward but reduce that constituent's confidence contribution. If the gap exceeds 30 days the constituent is flagged and reviewed at the next rebalance for removal.
Market cap is shown four ways. They answer different questions and are never summed across methods.
- Listed market value — sum of currently active listings at list price. Largest of the four; useful for "how much paper is in the market right now".
- Realized market value— last 90 days of actual sold prices, scaled to total inventory. The figure most comparable to a stock's "market cap as if everyone sold at the last price".
- Population-adjusted— for graded entities, the realized value scaled by the most recent PSA pop snapshot so Charizard PSA 10 isn't double-counted with Charizard PSA 9.
- Tradable float — population-adjusted, then multiplied by an estimated turnover ratio derived from 120-day flip velocity. The "how much actually changes hands in a year" figure.
| Code | Universe | Weighting | Rebalance | Constituent cap | Min liquidity |
|---|---|---|---|---|---|
| PMI | Pokémon Market Index | market_cap | quarterly | 10% | 0.4 |
| PSI | Pokémon Singles Index | market_cap | quarterly | 10% | 0.45 |
| VINT | Vintage WOTC Index | market_cap | quarterly | 12% | 0.3 |
| MOD | Modern Index | market_cap | quarterly | 8% | 0.5 |
| PSA10 | PSA 10 Index | market_cap | quarterly | 8% | 0.5 |
| RAWNM | Raw NM Index | market_cap | quarterly | 8% | 0.55 |
| LIQ | Liquidity Index | liquidity | monthly | — | 0.4 |
| SUPP | Supply Pressure Index | composite | continuous | — | 0.4 |
| HEAT | Set Heat Index | composite | continuous | — | — |
| BREADTH | Market Breadth Index | equal | continuous | — | 0.4 |