Independent analytics for baseball prospect-card collectors
Not affiliated with, endorsed by, or sponsored by Topps, Bowman, Fanatics, or Major League Baseball.
"Bowman" is referenced descriptively to identify trading card products. Player statistics via MLB's
public Stats API. Comp prices track each player's base 1st Bowman Chrome Autograph where one exists (ungraded market value; base card otherwise). Scores are informational signals, not financial advice.
Add player
Add card
This box stays open while you check other tabs — fill it at your own pace.
⚾ Parallel deal check
⚖️ Compare players
Savant-style percentile bars — each bar shows where the player ranks on this board (hitters vs hitters, pitchers vs pitchers). Longer + hotter = higher percentile.
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.
Outlook (the second score): Heat asks "how is he performing right now?" — Outlook
asks "how likely is this card to be worth much more later?" It blends youth vs level (up to
26 pts — confirmed by our cohort study as the strongest predictor), tool pace (HR and
SB per 600 PA, up to 22 pts; K/9 for pitchers), contact safety (up to 8 pts —
deliberately light, as the study measured only a modest edge), trajectory (a promotion in the last 75 days, weighted by destination — +12 to MLB, +9 to AAA, +7 below — plus +6 for surging momentum, capped at 15),
proximity to the majors (up to 12, peaking at AAA where the call-up pop is next), an +8
premium for SS/CF (the study measured nearly double the star rate), a historical-cohort
anchor (up to 14 pts, driven by the measured regular-and-star rates of 2010-2019 players
with the same profile), and a 15% pitcher discount for injury and attrition risk. The
weights are calibrated to the cohort study rather than judgment.
Tiers: 80+ Elite · 65+ Strong · 50+ Solid · 35+ Fringe · under 35 Long Shot.
Reading the two scores together: high Heat + high Outlook = hold, or buy the hype.
Low Heat + high Outlook = the undervalued buy — young and toolsy but slumping; these
rows get a purple value watch tag. High Heat + low Outlook = sell into strength (often
an old-for-level player having a career month). Low both = avoid. And click any score chip — on a row or a
dashboard — for a plain-language breakdown of exactly why that player earned
that number, with a one-line definition under every component explaining what it measures
and why it matters.
Player dashboards: click anywhere on a row to open that player's full dashboard —
both scores with the complete Outlook point breakdown, a month-by-month trend chart
(OPS for hitters, ERA for pitchers, tagged improving / steady / declining), season line, rank
and movement, promotion/IL/momentum history, your logged comps, and every action button — including 📰 News, which
opens recent articles, call-up chatter, and scouting coverage for that player in a new tab. The dashboard's own
⇩ Excel button downloads a one-page snapshot of that player — scores,
Outlook breakdown, season line, monthly trend, history, and comps — plus a second
Report tab carrying the full written analysis: the Heat and Outlook narratives with
their point breakdowns and the promotion-readiness read.
Improving-before-everyone-notices is the chart's whole purpose. Dashboards also show the
player's next game — date, matchup, and venue in your local time, with a Gameday
link to live pitch-by-pitch (and a green LIVE indicator when his team is mid-game) —
pulled from the official schedule. The index rows carry a compact version too: once a player
has been refreshed (which records his club), his next game and a Gameday link appear right
under his name on the main board — with a green LIVE dot during games. A Confidence label
(High = 250+ PA or 60+ IP, Medium = 120+/30+, Low = less) tells you how much sample sits
behind the scores.
◎ Value Board: the daily-read summary — buy-low value watch,
sell-into-strength, biggest rank climbers and fallers, surging players, current IL, and
(once you've logged comps on 6+ players) names priced below their Outlook. Every entry
clicks through to the dashboard. The board's ⇩ Weekly report button generates an
on-demand Buy / Sell / Watch spreadsheet with a written reason beside every name. Every report
call is also logged to the Track record (button beside it): a timestamped predictions
ledger graded by pre-registered rules — Buy/Watch hits need the comp up 10%+ within
45–150 days, Sell hits need it flat or down, entries come from your logged comps. Hit
rates by call type build the public proof (or honest disproof) of the model over time; a
meaningful record needs 30+ graded calls, and the ledger exports to Excel.
Promotion readiness: each dashboard estimates how ripe a player is for the next level
by comparing his line to the typical run environment at his level (dominance), how much
sample he's banked (orgs promote on proof, not hot weeks), momentum, and whether he's an
old-for-level dominator — the profile teams push fastest. Labels run Developing →
Building the case → Trending toward a move → Knocking on the door, and 70+ names
surface on the Value Board. The readiness score itself remains a heuristic, but it now sits beside the real record: a
VS PEERS block shows where the player's line lands among all 2010-2025 seasons at
his level (historical percentile, 60,706 player-seasons), what happened to historical peers with his profile
(measured promotion rates from the 2010-2024 record — in-season and within a year, with
cohort sizes; e.g. young AA hitters +150 over league were promoted in-season 47% and
within a year 92% (n=152), vs 7% and 36% below league — and the modern
era moves even faster: 97% within a year in 2021-24 alone), and his live standing vs this season's qualified players at the level, fetched fresh:
rank, league average, and percentile bars for each core stat (OPS, HR and SB pace, K%, BB%;
ERA, WHIP, K/9, BB/9 for arms) — plus the promotion rate one dominance tier higher, so
the next threshold is always visible. Below the live bars, the same stats repeat against
the decade: each measured as distance from league and placed within the 60,706 harvested
2010-2025 player-seasons at that level, so era differences wash out. Two rulers, one scroll
— this season's field, then ten years of it. "Promoted" in the historical record means establishing a qualifying sample at
a higher level, so in-season rates run conservative.
MLB Odds (historical cohort): built from a decade of harvested MiLB history —
41,119 player-seasons, 2010–2019, careers now resolved — each dashboard shows what
actually happened to players with this exact profile: same level, same age-vs-level bucket,
same dominance over that year's league environment. Three rates appear with the cohort size:
reached MLB, became a regular (1,500+ PA / 300+ IP), and star-length career (4,000+ PA /
900+ IP). Study headlines: age rules everything (3+ years young and dominant at AA: 79%
became regulars, 48% stars — a cohort containing Trout, Altuve, and Bogaerts; old-for-level
dominators at any level: under 13% regulars, ~1% stars, confirming the sell-into-strength
signal empirically); SS/CF nearly doubles star rates versus corner bats (30% vs 16%). Small
cohorts mean wide uncertainty; these are historical rates, not guarantees.
⚾ Statcast quality (MLB players): drop Baseball Savant leaderboard CSVs
(Expected Statistics and Exit Velocity & Barrels, batters and pitchers) into the
Statcast import and every matched MLB player gains a quality panel — xwOBA, hard-hit
rate, barrel rate, and exit velocity, barrels per PA, max exit velocity, and sweet-spot rate (xERA, xwOBA-against,
and contact allowed for pitchers) shown as percentiles against the whole league, headed by an
expected-vs-actual table (BA/xBA, SLG/xSLG, wOBA/xwOBA with the gaps colored). When expected production runs 30+ wOBA points ahead of
actual (0.60+ runs of ERA for pitchers), the row earns an x-quality ▲ tag and
the player surfaces on the Value Board's buy-the-dip list: the surface line undersells the
contact, which is where post-call-up cards get mispriced. For MLB players with Statcast on
file, Outlook's tool components are replaced by contact-quality and expected-production
percentiles — underlying quality instead of surface stats, exactly where surface stats
lie the most. Matching is by MLB ID. Two ways to feed it: re-download the Savant CSVs weekly with your price
files (manual, always works), or save a Cloudflare Worker URL in the Statcast import
and the site refreshes quality data by itself every visit (12-hour throttle), falling back to
manual drops if the worker is ever unreachable.
Rookie cohort (MLB players): a second harvested study — every 2010-2017 MLB
debut with careers now resolved — gives first-year players the peer context percentiles
can't: rookies who debuted at the same age, in a similar-length debut, performing similarly
vs league, and what became of them (everyday player: 1,500+ PA / 300+ IP; star-length:
4,000+ PA / 900+ IP). It appears as a dashboard panel and fills the Outlook cohort component
for MLB players (which previously sat neutral). Headline findings: debut age rules —
22-and-under debuts became everyday players at 73% and stars at 44%, versus 26% and 8% for
25-plus — and early results mislead: Trout and Judge both debuted below league. Age and
stage carry the weight by design.
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 90 days, searchable by player
and filterable by move type. It's the fastest way to answer "what happened while I was away."
The log's own ⇩ Excel button downloads exactly what you're viewing — date
window, move filter, and search all applied — as its own styled spreadsheet.
Tiers: 80+ Scorching · 65+ Hot · 50+ Warm · 35+ Cool · under 35 Cold.
Promotions: refresh walks each player's official MLB assignment sequence
chronologically across the current and prior season — only a genuine arrival at a
higher level counts, so same-level paperwork re-assignments can't shift the date, and
late-last-season promotions land correctly on backfilled price charts — 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 dashboard adds a 🛒 Buy on eBay button
that opens live for-sale listings for the player, lowest total price first — research
and purchase, one click apart. All comp figures follow one convention: the player's base 1st Bowman Chrome Autograph,
ungraded market value (his base card where no auto exists). On SportsCardsPro, autos live on
their own "…Autographs" set pages — download those CSVs; their non-parallel rows
are the base autos, so the importer reads them natively. Drop auto sets first in a session so
the auto wins as each player's canonical card. Once a player is priced via CSV, hovering his
row price shows the exact set being tracked, and his dashboard headers name it too. If
you ever need to switch a player to a different card (say his auto set turns out to live
under a different name, or releases later), his dashboard's Reset price history button
wipes his stream so the next import starts it fresh on the right card. You'll rarely need it,
because the convention is enforced automatically: an Autographs set supersedes a
base-card stream, and an earlier-year set supersedes a later one — the 1st
Bowman is the earliest — with the old history replaced and the stream restarted on the
truer card (the toast reports how many re-anchored). Prices from any other set than a
player's tracked card are simply ignored, so drop order can't pollute a stream. The master sync
follows the same rule across devices: when a player's tracked card changes, his history is
replaced, never mixed — but only when the master's stream is newer than the
device's own. A stale master can never revert fresh local imports; publish after importing
and the direction always points the right way. 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 — logging again the same day updates that day's point instead of stacking a duplicate. $ 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. The import box also accepts a SportsCardsPro set CSV
directly — drop the file in and base-card (ungraded) prices auto-fill for every matched
roster player; re-download the same set weekly so each player's comp tracks the same card.
Dropping a CSV stages prices; clicking Import comps saves them — and the
footer's priced count updating is your save receipt. Dated lines (e.g. a history backfill) sort into chronological place
automatically; if backfilling from another price source, scale its history to the stream's
current level first — sources measure price at systematically different levels, and an
unscaled splice creates a phantom jump at the seam. Per-sale history exports (Date,Price CSVs, e.g. from
CardHedge) can be dropped straight into the import: the player is matched from the filename,
sales collapse to weekly medians, and the history anchors to the stream where the two overlap
in time — so older points backfill and newer points move the current price.
Market value context: once 25+ cards are priced, each priced player's dashboard shows
where his price sits against a fair-value curve fit to this board (log price vs Outlook, with
a ±1 SD band and a similar-Outlook peer percentile). It is a mispricing screen, not
a forecast — the honest claim is "cards with this profile trade around $X–$Y
and his sits Z% under the curve," and the ledger tests whether such discounts close. After the backtest validated the residual
as the strongest signal in the system (+148% vs +63% on cheap-vs-rich halves), it is now
first-class: sort the board by % vs curve, the Value Board ranks the biggest
discounts, and the Weekly report leads with them (rich-for-score cards lead the trim side).
The 📰 Email edition button builds a send-ready weekly newsletter — the
gap list, hot bats and arms of the week from live 7-day lines, and a transaction watch,
every name deep-linked to his profile (a #p= link opens that player directly). Open the
downloaded file, select-all, copy, paste into an email, send; automated subscriber delivery
joins the Cloudflare Worker once deployed.
👁 Watchlist & 💼 Portfolio: on any player's dashboard, Watch
follows him and Add to portfolio records cards you own (price paid and quantity, in
lots) — his dashboard then shows Your Position with live P/L. Variations are welcome
— PSA 10s, colored refractors, numbered parallels: describe the card when adding the
lot and it is pegged as a multiplier of the tracked base card (calibrated from the
value you give at entry), so it rides the player's market automatically. The honest
limitation: variation-specific drift (pop reports, grading-premium cycles, color manias)
is not captured — use each lot's mark link to re-calibrate against a fresh comp
whenever you check one. The base 1st Bowman auto (raw) remains the analytical index all
variations mark against. The 👁 My Collection page gathers everyone you follow — ★ owned, 👁 watched, or held in the portfolio — with verdict
chips, prices, positions, and next games in one daily check-in, with a portfolio total up
top; filter the main board by Watchlist or Portfolio too. Scaling the roster: importing a full checklist (e.g. all 2024 1st Bowman players) is
supported and the board stays fast at 500+ players — the one linear cost is the full
⟳ Refresh, which grows with roster size. The playbook: bulk-import per product wave,
run one full Refresh after a big import, then use the org and product filters with
⟳ Filtered to update just the slice you're working (one org, one product year,
your watchlist) between full passes. Filter dropdowns build themselves from the roster, so
new products and orgs appear automatically. The weekly email scans active players (Heat 35+,
priced, or yours) to stay quick at any roster size.
House style: everything we publish should be understandable by a young collector
reading it for the first time — short sentences, plain words, the answer before the
evidence. 📌 The event log: the site records every promotion, IL move,
activation, and organization change per player automatically, and the dashboard's
Log event action pins anything else — awards, Futures Game selections, trades
— with a date. Pinned events mark the price chart (gold dots) and feed the next round
of studies: awards, Futures, trades, and injury-length effects publish as their data grows.
🔗 Link MLB ID: the roster directory matches players by name, and baseball has
many repeated names — if a player's stats look wrong or empty (a Juan Sanchez problem),
his dashboard's Link MLB ID action searches MLB's index and lets you pick the right person,
or accepts a pasted mlb.com / milb.com URL. A manually linked ID is authoritative and is
never overwritten by name matching. Positions fill themselves: if a player is added without
one, refresh pulls his official position from MLB and — critically — corrects
hitter-vs-pitcher typing before fetching stats, so bare name lists import cleanly, and ages flow from official MLB birthdates on every
refresh (players added by name get their real age automatically — youth scoring and
cohort anchors depend on it). One calibration born of a good argument: the pitcher discount
(×0.85) prices minor-league attrition risk, so it is waived for arms who have
already proven it at MLB (60+ IP with an ERA of 3.30 or better) — a pitcher
mid-Cy-Young-season has paid the risk the discount charges for. The waiver appears as a
line in his Outlook breakdown. The hitter mirror: MLB hitters without a Statcast row are
scored on actual production (OPS) plus power pace, not just tools — a
near-1.000-OPS season now earns what it is. (With Statcast loaded, the xwOBA branch already
does this, and better — keep the Savant CSVs current.) And the third graduation rule:
for arrived MLB players past the promotion window, Trajectory becomes role security
— full-season playing-time pace (560 PA / 170 IP = full credit), since an everyday
role is the organization's daily vote of belief. Bench bats and shuttle arms earn
proportionally less; recent call-ups keep the promotion credit, which is larger. Player photos are official MLB headshots served
from MLB's public photo CDN — the same posture as the stats feed the site runs on.
Card artwork is deliberately not embedded: card designs are Topps/Bowman intellectual
property, and scans on marketplaces carry their own rights — publicly viewable is not
publicly reusable, and snipping marketplace photos takes both the seller's photograph and
the underlying artwork — the workaround that works is scanning cards you own:
photograph your copy, drop the file into a cards/ folder inside your deploy folder,
deploy, and use the dashboard's 🖼️ Card image action to point at it
(e.g. cards/bazzana.jpg). Self-scans for identification and commentary are the
hobby-standard posture; your scans ride the master file so visitors see them too. This data is private to your
browser — it never rides the master file to other visitors (use Backup/Restore to
move it between your own devices). Once the Cloudflare Worker is live, the same list powers a
directed newsfeed and email alerts for just your players.
THE INVESTMENT THESIS (codified from the backtests): 1. Demand evidence —
never pay hype prices for players without a qualifying pro record; every such card in the
backtest lost (−34% to −71%). 2. Buy the gap, not the name — the
market already charges ~7% per Outlook point, so raw quality is priced in; the edge is
quality trading under the curve (cheap half +148% with 100% winners vs +63% rich).
Target buy = −20% vs curve; deep value = −1 SD; both printed on every priced
dashboard, the Value Board, the Targets sheet, and the newsletter. 3. Trim the rich — and rotate, never liquidate:
+40% over the curve, old-for-level dominators (under 13% became regulars), and
results-ahead-of-quality Statcast profiles are the trim list — but the proceeds belong
in the gap list, not in cash. Tested on 88 Bowman Draft 2024 cards from July 2025: selling
the rich half to cash returned +11% while the class rose +66%; rotating those sells
into the cheap half returned +100%, beating holding everything (+66%). The signal
ranks cards against each other; it is not a market-timing call. 4. Size by value, not fame —
one expensive fully-priced card dragged a whole naive portfolio from +40% to +30%.
5. Buy dips, not spikes — weekly moves partially reverse (−0.24), so a
hot week is a worse entry than a quiet one on a strong profile. 6. Never buy at
release — measured on 46 release-anchored histories on this board, the median
card sat at 42% of its first-sales price within 30 days, 35% by 60, and 34% at six
months, with only 2-3 cards ever above water at any horizon; even the 75th-percentile
outcome halved. Seasoned cards (bought 6+ months post-release) gained a median +30% over
the following year with two-thirds winners (n=105). Release prices carry maximum hype at
the moment of minimum evidence. 7. Sell the debut, don't buy it — across 10
MLB call-ups, the median card popped +12% in week one, then fell to 76% of pre-call
price by day 30 (3/10 winners) and stayed depressed through 90 days; minor-league
promotions, by contrast, are a mild tailwind (+9% at 7 days, +7% at 30, n=101). The debut
pop is a roughly day-3-to-10 selling window, not an entry signal — unless you enter
early on purpose: buying ~30 days pre-call and selling into the debut pop returned a
median +34% (7/10 winners) across the same ten call-ups, while holding that entry
through day 30 flipped it to −10%. The Call-Up Flip is a recognized trade (the Value
Board surfaces AAA players at the 85th+ readiness percentile), and its sell rule is the
entire edge. One year of evidence, not a
law of nature: the ledger grades every one of these rules forward. Every board row carries an action pill
(BUY / NEAR / HOLD / SELL / AVOID) with the target range in its tooltip — click it to
open the full case. The 📊 Research page presents all house findings as
visual cards with their charts, sample sizes, and caveats. The thesis renders itself
on every dashboard as THE BOTTOM LINE — a plain-English verdict card up top (BUY
ZONE / NEAR TARGET / FAIRLY PRICED / RICH — TRIM / NO RECORD) with the profile, the price vs
fair value and targets, and the cohort odds in two or three sentences, so a first-time
visitor gets the answer before the evidence. Two
empirical notes from our price-history study: these cards barely move together (mean weekly
co-movement +0.12), meaning prices respond to each player's own news — the best possible
regime for fundamentals-based screening; and weekly moves partially reverse (mean
autocorrelation −0.24), so chasing a single hot week is empirically poor timing, while
buying fundamentally strong dips is supported.
Tying price to fundamentals, looking back: the dashboard price chart is time-scaled
across the full history with promotion and IL markers drawn on the price line, so
event pops and slides are visible at a glance; a month-by-month table pairs the
player's monthly OPS/ERA with his monthly median card price and its change (with a
small-sample association note); and the Value Board's After Promotion panel measures,
from your own price data, what promotions actually did to prices at +7 and +30 days —
per player and as a running median that sharpens with every backfill. The chart itself is
clickable: tap any point and a detail card shows that price, its move vs the prior
point, what the price did over the next ~30 days, any promotion or IL within two weeks, and
— fetched live from MLB's records — the player's actual line from the 14 days
leading into that price, so every spike or slide can be interrogated against the
performance underneath it. A Price Statistics panel adds the card's own profile:
52-week range, distance from the high, total return, weekly volatility with a typical
4-week range, max drawdown, and the biggest weekly moves (each clickable to investigate). Bulk imports log one comp per player per day — re-importing another set the same
day keeps the first (canonical) price, so multi-set uploads stay clean. Once a player has two
or more dated comps, his dashboard charts the price history alongside the list.
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 search (player name, organization, or minor-league club) 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. The View toggle swaps each row's stat
columns between traditional stats and value signals: rank move, L30 line, momentum,
Outlook−Heat gap, latest comp and its trend, confidence, and promotion date.
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. When the
site's built-in roster gains new players in an update, they merge into your saved data
automatically on your next visit — your stats, stars, comps, and removals are untouched. Do data work in one tab at a time
— tabs now sync automatically when one saves, but close leftover tabs after site updates,
since a tab running old code can still overwrite newer data. The footer's ⇩ Backup
downloads your entire dataset — players, comps, collection, and track record — as a
single file, and ⇮ Restore brings it back in any browser on any device. Back up
after big imports.
Master dataset: if a master-data.json file is published alongside the site, it
becomes the baseline everyone builds on. Brand-new visitors inherit it wholesale —
players, stats, comps, promotion dates (collection stars stay personal). Returning users get
a sync on every visit: the master adds players they lack, fills fields they've never set,
merges in new price days (their own same-day prices always win), and carries the
master's manual 📅 promotion corrections over local auto-stamps — but
never overwrites a user's own manual edits. To publish a master: click
⇩ Backup, rename the file to master-data.json, and deploy it in the same folder
as index.html. Keep both files in one local folder and always deploy the folder together
— deploying index.html alone removes the master file (the site still works; the
baseline just reverts to the built-in roster). The footer shows your data home — the exact web address this
data lives under — plus how many players carry prices and the last price date. Storage
is per-address: www and non-www are different homes, so if prices ever look missing,
check that the footer's home matches where you imported (and set a primary domain in your
host so every variant redirects to one address). Site updates never touch stored data. Price history is append-protected:
every save re-checks storage and preserves price days the saving tab doesn't have, so a
leftover stale tab can no longer erase prices — only explicit actions (a card
supersede, Reset price history, Clear today's comps, or Restore) remove price days.
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.
PROSPECTOR INDEX
📈 Value Board
Today's signals across your board. Click any player for their dashboard.
Track record
Every Weekly-report call is logged with its date, scores, and entry comp,
then graded by pre-registered rules: Buy/Watch hit = comp up 10%+ within 45–150 days;
Sell hit = comp flat or down. Entry = your latest logged comp at call time (or one logged within
7 days after). Rules were fixed before results — that's the credibility.
Transaction log
Official MLB moves for your tracked players — promotions,
demotions, call-ups, injured list, activations, and trades.
The Fair-Value Math
PROSPECTOR INDEX · RESEARCH
Why the Market Gets It Wrong
The evidence behind the Prospector Index investment strategy.
Prospect cards are frequently priced by name recognition, draft position and current hype. Our research shows that long-term opportunity is better explained by age, level, performance, future role and price relative to comparable players.
The hobby buys names. We buy profiles.
PROSPECTOR INDEX
THE WIRE
THE DAILY FRONT PAGE OF BASEBALL’S FUTURE
Loading…
Loading…
PROSPECTOR INDEX
My Collection
PROSPECTOR INDEX
Data & Imports
$ Card prices
Weekly SportsCardsPro CSVs, pasted comp lists, and per-sale history backfills (Date,Price files) — staged for review, then imported.
⚾ Statcast quality
Savant leaderboard CSVs for MLB players, or a Cloudflare Worker URL for automatic refresh.
⇮ Roster bulk import
Add many players at once by pasted list.
🔎 Scouting grades & the v2 race
Load a scouting board CSV (needs Name and FV columns) — you pick whether it’s FanGraphs, Baseball America, or MLB Pipeline, and each player’s v2 uses the average of every source you’ve given him. Single grades can be typed on any player’s page. All grades stay private on your device (Publish copy strips them); they power Outlook v2, the challenger. Snapshot the race weekly; the ledger decides the winner.
🛡 Backup & publish
Backup is your full private file — keep it safe, never deploy it. Publish copy downloads a cleaned master-data.json, already named, with your stars, lots, and scouting grades stripped out — that one goes in the site folder.
🔌 SCP PRICE API — AUTOMATIC DAILY PRICES
Your SportsCardsPro subscription includes an API. Once its token lives in the worker, the heartbeat fetches every mapped card’s price on its own — this button pulls the latest batch into the comps box for review.
☁️ CLOUD SYNC — ONE BOARD, EVERY DEVICE
Your own free Cloudflare worker holds the latest save. Push from wherever you worked; pull from wherever you are. Tokens ride along, so the work PC needs one paste of these two boxes — ever.
⇮ Restore
Load a backup JSON, replacing current data on this device.
⚠ Maintenance
Undo a bad price import, or reset the roster to the starter list (prices and ledger survive resets).
⚾ Statcast import
Drop Baseball Savant leaderboard CSVs — Expected Statistics
and Exit Velocity & Barrels, batters and/or pitchers, any or all at once. Rows match your MLB-level
players by MLB ID (name as fallback); percentiles are computed against the full imported leaderboard.
Re-download and re-drop weekly alongside your price CSVs.
With a worker saved, Statcast refreshes itself every visit (12h throttle). Manual drops below always work as fallback.
Import comp prices
build r24 · 2026-08-15 · the morning prospect market opens
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). Convention: all prices track each player's base 1st Bowman Chrome Autograph, ungraded
— download the Autographs set pages from SportsCardsPro (their non-parallel rows
ARE the base autos). Drop auto-set CSVs first; base sets after act as a fallback for players
without an auto.
leave blank for today \u2014 set it when dropping an OLD saved CSV so its snapshot lands on the right date
PROSPECTOR INDEX
🔑 Curator sign-in
First time? Whatever you type becomes the password.