Rankings blend rate stats, power, speed, plate discipline, level, and age.
Refresh pulls current season numbers straight from MLB's official Stats API.
Data saves in this browser automatically.
Add player
Bulk import checklist
Paste player names, one per line. Plain names work; Name, POS is better.
Card-number prefixes (BDC-15 etc.) are stripped. Positions with P/RHP/LHP import as pitchers.
Duplicates get tagged with the product instead of re-added.
Scoring & how to use
Hitters (0–99): OPS is the backbone — from .550 (0 pts) up to 1.050 (62 pts).
Home runs add up to 12 pts (capped at 30), steals up to 10 pts (capped at 40), and plate
discipline (BB% minus K%) up to 16 pts. Being 20 or younger at AA or above adds a 6-pt bonus.
Pitchers (0–99): ERA drives it — 5.50 (0 pts) down to 1.80 (50 pts). WHIP adds
up to 20 pts (1.60→0.90), K/9 up to 22 pts (6→13), and BB/9 up to 8 pts (4.5→1.5).
Being 21 or younger at AA or above adds 6 pts.
Level multiplier: the subtotal is scaled by where the stats were earned —
MLB ×1.25, AAA ×1.05, AA ×1.00, A+ ×0.93, A ×0.86,
Rookie/CPX ×0.80. MLB numbers deliberately outweigh minor-league numbers: once a player
is called up, big-league production is what moves card value.
Small-sample guard: right after a promotion, a hot week can't spike the score. Until a
player logs 30 at-bats (hitters) or 12 innings pitched (pitchers) at the new
level, they keep being rated on their prior level's stats and that level's multiplier. The row
shows an amber “rated on” tag and a progress note (e.g. 14/30 AB at MLB) while the
guard is active; once the sample qualifies, the next refresh switches them to new-level stats
automatically.
Movement, momentum & injuries: each refresh snapshots the rankings first, so every
row shows how many spots a player climbed or fell (green ▲ / red ▼ under the rank
number). An L30 surging tag means their last-30-day line is running well ahead of their
season line at the same level (cooling = well behind it) — momentum often moves card
prices before season stats catch up. A red IL tag means the transaction log shows them
currently on the injured list, the fastest way card prices fall.
Transaction log: the ⇄ Transactions button opens a day-by-day log of every
official move involving your tracked players — promotions, demotions, call-ups, IL
placements, activations, and trades — over the last 1 to 30 days, searchable by player
and filterable by move type. It's the fastest way to answer "what happened while I was away."
Tiers: 80+ Scorching · 65+ Hot · 50+ Warm · 35+ Cool · under 35 Cold.
Promotions: refresh reads each player's official MLB transaction log and stamps the date
of their most recent upward move (call-up or promotion) as a green ↑ tag — backfilled
automatically, even for moves that happened before you started tracking. The 📅 button
sets or clears a date manually, and manual dates are never overwritten.
Card comps: the 🔍 button opens the player's recent eBay sold listings (real
prices and volume, newest first). The $ button logs the latest sale of their key card —
log a comp each time you check and the row shows the price with a ▲/▼ trend versus
your previous log. $ Import comps in the top bar logs a whole pasted list at once
(Name, price per line) — the fastest way is asking Claude to research current sold prices
for your top players and pasting its list straight in. Comps ride along into Excel exports.
Updating stats:⟳ Refresh all stats pulls every player's current season
line straight from MLB's official Stats API — no typing, no pasting. It also updates each
player's level, stamps promotion dates, and stores MLB IDs so later runs match instantly. The
⟳ button on a single row refreshes just that player. Players that can't be matched get a
note explaining why (usually spelling — match the name to MLB.com and refresh again).
Row buttons: ⟳ refresh this player · ☆ mark as owned ·
🔍 recent eBay sold listings · $ log a comp price · 📅 set
promotion date · ✕ remove player. Player names are clickable too — they
open that player's MiLB.com stats page in a new tab (or Baseball Savant once they're in the
majors). Names link after the player's first refresh, which is what stores their MLB ID.
Your collection: tap the star on any row to mark players whose cards you own —
they get a gold ★ by their name, and the ★ My collection filter in the top
bar shows just your inventory, ranked and sortable like everything else. Owned players carry
a starred column in Excel exports.
Managing the roster:+ Add player adds one name; ⇮ Bulk import takes
a pasted checklist (one name per line — card-number prefixes are stripped, duplicates get
product-tagged instead of re-added). ⇩ Excel downloads a dated, ranked snapshot of
everything, including comps and promotion dates. Filters, sorting, and a live name search are in the top bar. The rank column always shows
each player's overall heat rank — filter to one team or your collection and the
numbers keep their true place on the full board.
Your data: everything saves automatically in this browser on this computer. It does not
sync between devices or people — take an Excel export with you, or re-refresh on a new
machine. Reset to starter list restores the built-in roster and clears your changes.
Workflow tip: sort by Heat, look for a hot score with a fresh green ↑ MLB tag,
hit 🔍 to see if the market has priced it in, and log the comp. Strong performance plus
a flat comp trend is the window collectors look for. Heat measures on-field production —
prices also move on hype, autograph supply, and grading, so treat it as a signal, not a
guarantee.
Transaction log
Official MLB moves for your tracked players — promotions,
demotions, call-ups, injured list, activations, and trades.
Import comp prices
One player per line: Name, price — optional date third
(Name, 24.99, 2026-06-28; otherwise today is used). Names match your roster automatically,
accents ignored. Each line logs a comp, so pasting a list weekly builds every player's price
trend with zero per-player typing. Works with any source: your own eBay checks, a
SportsCardsPro/PriceCharting export, or a comps list you ask Claude to research for you.
Use plain numbers (no thousands separators).