How we score grading plays
A play is a (card, grader, service tier) tuple — "buy this Charizard raw, send it to PSA on Regular tier." Every play gets a composite score from 0 to 100 and an eligibility flag. Here's the full math.
Expected value, net profit, ROI
For every (card × grader) we have three outcomes weighted by historical grading distribution: a 10, a 9, or below 9. Each outcome has a comparable sale price from the last 90 days.
EV = P(10) × comp_10 + P(9) × comp_9 + P(<9) × comp_below9
Net profit is EV minus the four costs that hit a real flipper:
net = EV − raw_price − grading_fee − return_shipping − ebay_fee ebay_fee = EV × 13.25% + $0.30 (final-value fee + per-order fee) ROI = net / (raw_price + grading_fee + return_shipping)
eBay's 13.25% Final Value Fee is the standard rate for trading cards without a Store subscription. Return shipping from the grader is modeled as $20 — graders charge for the return; this is a real cost that smaller dashboards omit.
Composite play score
A weighted sum across five factors. Each component is normalized to 0–100 then weighted to a final 0–100 score.
| Component | Weight | How it's measured |
|---|---|---|
| Profit (log-scaled) | 40 | log(net + 1) normalized against a $1,000 cap. Diminishing returns above $500. |
| ROI | 25 | Capped at 200%. Punishes thin-margin plays where shipping or fee variance can flip the outcome. |
| Depth | 15 | Sample size of 90-day comps. Floor: 5 sales. Saturates around 30. |
| Pop velocity | 10 | 30-day delta in PSA-10 population. Negative below the 75% surge threshold (more 10s flooding the market = headwind for comp prices). Positive if the population is steady or thinning. |
| Liquidity | 10 | Comp recency + raw market activity. Heavier weight if a grade-10 sale happened in the last 30 days. |
Bands: 80+ Strong play. 60–79 Play. 40–59 Consider. <40 Skip.
Eligibility gates
Not every play with a positive net profit makes it onto the index. We filter aggressively to protect capital. To be eligible, a play must clear all four:
- Net profit ≥ $50. Anything thinner gets eaten by listing photos, packaging, or a mediocre comp.
- ROI ≥ 30%. If the upside is smaller than risk-free yield over the 30-to-90 day grading turnaround, it's not a play, it's a hobby cost.
- Sample size ≥ 5 sales (90 days). Comps below this threshold are noise.
- Pop-10 30-day growth ≤ 75%. If PSA-10 population is surging, comps are about to compress. We surface these in a transparency panel below the table — never on the main feed.
Pop velocity — the differentiator
Most grading dashboards show you static probabilities: "PSA grades 32% of these as 10s." That's frozen in time. The number that matters for a flip is whether the population is growing. If 50 new PSA-10 Charizards hit the census in 30 days, comp prices are about to compress before your card even gets back from the grader.
We track the 30-day delta in grade-10 population per (card, grader). Velocity is shown as a percentage on every play; saturation warnings appear at >50% growth on the detail page. This is the single biggest differentiator vs. SlabScore, PriceCharting, and PokemonPriceTracker.
Data freshness
Honest about what's live vs verifying. Each input below has a different cadence and a different source.
| Data type | Cadence | Source | Status |
|---|---|---|---|
| Pokémon raw prices | Daily | TCGplayer (via Pokémon TCG API) | LIVE 16,046 cards |
| MTG raw prices | Daily | TCGplayer (via Scryfall bulk) | LIVE 28,541 cards |
| Sealed product spot prices | Daily | PriceCharting + manual overrides | LIVE 208 / 323 tracked products |
| S&P 500 Total Return benchmark | Monthly | yfinance ^SP500TR | LIVE 1988-01-01 → present |
| Grade probabilities | — | Hand-curated seed (16 cards) + heuristic (60 cards) | VERIFYING verifying via PSA Public API + manual checks |
| Per-grade comp prices | — | Hand-curated seed + heuristic ratios | VERIFYING verifying via eBay sold listings |
| PSA pop reports | Daily (when active) | PSA Public API (rotation, 80 cards/day) | PENDING awaiting PSA_API_TOKEN |
| eBay sold-listing comps | Daily (when active) | eBay Browse API | PENDING awaiting EPN approval |
| Pop velocity (30-day Δ) | Daily (after second snapshot) | derived from PSA pop history | PENDING activates after second PSA snapshot |
The VERIFYING tag fires the BETA badge
on every play / optimizer card whose probabilities or comp prices
depend on synthetic inputs. The badge clears once that card is verified
via the PSA / eBay / manual-verification path.
Service-tier turnaround estimates lag if a grader publicly changes their queue. We refresh those quarterly. Submit dates can fluctuate ±10 days vs. the table below.
Service tiers + turnaround
Each grader's quoted turnaround drives APR — annualized return on the capital tied up in the submission. Defaults we use:
| Grader | Tier | Turnaround (days) | Fee |
|---|---|---|---|
| PSA | Regular | 65 | $25 |
| CGC | Standard | 30 | $25 |
| BGS | Standard | 20 | $30 |
| SGC | Standard | 20 | $30 |
| TAG | Standard | 30 | $30 |
APR is computed on the detail page as (net / cost_basis) × (365 / turnaround).
Faster graders make middling-net plays look better on a per-year basis;
the rank still uses raw composite score, not APR.
Honest limitations
- This is not investment advice. It's a discovery feed built from public market data. Population dynamics, eBay fees, and grading turnarounds change. Verify before submitting.
- Comp variance is real. A 90-day median ignores condition dispersion within "raw." A heavy-played raw will not get a 10. Buy near-mint or better, or budget for grade compression.
- Centering and surface matter more than population stats. Our model assumes the card meets the minimum centering bar for the grader. A miscut card will tank regardless of pop trend.
- Shipping insurance is not modeled. Add ~1–2% on high-dollar submissions if you're risk-averse.
- Tier-2 entries (flagged in JSON) use heuristic comps. We're transparent about which entries are heuristic vs. fully sampled. Heuristic plays are conservatively biased — verify against actual eBay sold listings before pulling the trigger.
Affiliate disclosure
eBay and TCGplayer "buy raw" links use our affiliate IDs. Grader submission links are also affiliate-tagged where the grader has a partner program. We earn a small commission if you buy or submit through these links — at no extra cost to you. It does not change which cards we list, the score they get, or whether they pass our eligibility gate.
Affiliate links use rel="sponsored noopener nofollow"
per FTC and search-engine guidelines.
Questions or corrections? Reach out. Spotted a comp that's off? Send it our way — we update the seed against eBay sold listings before serious launch and again at every refresh cycle.