← Back to plays

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.

ComponentWeightHow 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 typeCadenceSourceStatus
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:

GraderTierTurnaround (days)Fee
PSARegular65$25
CGCStandard30$25
BGSStandard20$30
SGCStandard20$30
TAGStandard30$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.

← Back to today's plays