How the Model Works
No black box, no cherry-picked wins. This page explains exactly where the numbers come from, how often they update, and how every single prediction gets graded in public — including the ones that miss.
The daily cycle
Data refresh
Schedules, probable pitchers, player game logs, platoon splits, and park factors are pulled from MLB's official league data feed. This runs continuously through the day — the model never works from yesterday's snapshot.
Projections form
Every batter expected in a lineup gets home run, hit, strikeout, and walk probabilities built from recent performance, the opposing pitcher's profile, handedness matchups, and the ballpark. Until official lineups post (usually mid-afternoon ET), lineups are projected from each team's recent starts against same-handed pitching — clearly labeled as projected, and their probabilities carry a start-risk discount (multiplied by the chance a projected starter actually starts) so a projected-lineup number is an honest unconditional claim, not a best-case one.
Market lines join
Sportsbook odds from major U.S. books are matched to each batter and game and refreshed throughout the day, so you can see where the model and the market agree — and where they don't.
Freeze at first pitch
When a game starts, its last pre-game projection is frozen. That exact snapshot is what the site keeps displaying for the started game, and it is the only thing grading is allowed to score. Predictions are never edited after the fact.
Grade when final
Once a game goes final, the official box score is ingested and every frozen prediction is scored against what actually happened. A pick whose player never took a plate appearance counts as a miss — tagged DNP, never quietly dropped from hit rates — while probability diagnostics like Brier score use only batters who played, with the excluded DNP count disclosed. Postponed and suspended games are graded whenever they finish.
Publish the results
Hit rates, calibration, Brier scores, and model-versus-market comparisons are published on the public Accuracy page — generated from the same graded records, not a hand-picked highlight reel.
What we predict
Batter props. For every batter in today's lineups: the probability of a home run, a hit, a strikeout, and a walk — shown both as percentages and as American odds so they're easy to compare against a sportsbook line.
Game predictions. Each matchup is simulated thousands of times using the actual (or projected) lineups, starting pitchers, and bullpens, producing a win probability and expected run totals for both sides.
Daily boards. The same numbers power the slate views — today's top home run candidates, matchup scores, and lineup-by-lineup projections.
Where the data comes from
Everything starts from MLB's official league data feed: live scores, lineups, game logs, splits, probable pitchers, park data, and pitch-level detail. Sportsbook lines come from an odds feed covering major U.S. books. Our own graded prediction history — every frozen snapshot and its outcome — lives in our database and feeds the accuracy reporting.
There are no paid picks, no insider whispers, and no manual overrides of the model's output. If the data doesn't support a number, we'd rather show nothing than make one up.
How we grade ourselves
The core rule: predictions are frozen before first pitch and never touched again. Grading only ever scores that frozen snapshot, so there is no way to quietly rewrite a bad call after the game. What you saw before the game is what gets graded.
After each game goes final, official box scores are ingested and every frozen prediction is scored. The Accuracy page reports hit rates by probability tier, calibration (when we say 30%, does it happen about 30% of the time?), Brier scores, and how the model performed against the sportsbook consensus — all computed from the same graded records, misses included.
The same page also has a free, browsable prediction history: every frozen batter row and each reconciled nightly Blast Board can be inspected directly. Individual rows carry the version that produced them, final box-score outcomes appear only after a game is final, and DNPs remain on the record as misses.
Model versions & tuning
Every prediction is tagged with the model version that produced it, and accuracy numbers are never blended across versions — a new version starts its record from zero instead of inheriting (or polluting) the old one's track record.
Once a week, an automated backtest replays recent history using only the information that was available before each game — no hindsight allowed — and compares candidate adjustments against the current model on the exact same games. Changes are rejected outright when the sample is too thin to be meaningful, and every run stores a before/after report.
Configured prop versions are listed in model order. Capture is when a version first appeared in a frozen projection; grading begins only when a board is eligible and final.
| Version | Configured | First captured | First graded | Board picks | Hits |
|---|
Coverage: all graded Top-25 slates before the current ET slate. Excluded from version totals: 0 mixed slates (0 picks) and 0 unavailable slates (0 picks).
Pitcher lines — how K Watch is built
K Watch projects a full line — strikeouts, innings, walks, hits, earned runs and home runs allowed — for every probable starter on the slate. The skeleton is the same as the batter model: a Marcel-style weighted average of the last three seasons (5/4/3 weights, computed per batter faced), the deliberately simple baseline Tom Tango proposed that serious projection systems get measured against.
Each per-BF rate is then regressed toward league average in proportion to how quickly that stat becomes reliable — strikeout rate stabilizes fast, home run rate very slowly — following the stabilization-point research popularized by Russell Carleton. A recent call-up gets pulled hard toward the league line; a three-year workhorse barely moves.
Context comes in as league-relative multipliers: how much the opposing lineup strikes out, walks, and hits (team K%, BB% and wOBA) against the starter's throwing hand — kept neutral when the split sample is under 150 PA — plus the ballpark's HR and contact factors. Expected workload blends the last five starts with season batters-faced per start, capped for openers and call-ups. Earned runs assume roughly 92% of runs allowed are earned, and innings convert from outs at ~4.25 batters per inning of work.
The headline number is the closed-form product — K rate × expected batters faced — and the K/IP ranges come from 1,000 seeded simulations of the outing (25th/50th/75th percentiles). Every row's expandable trace shows this exact arithmetic, and it reconciles to the displayed number by construction. Like every board on the site, lines freeze at first pitch, are graded against the official MLB Stats API box score the next morning, and the misses stay on the record — K MAE, IP MAE and the ±1K hit rate are on the Accuracy page.
What the model can't do
Baseball is ruled by variance. A 6% home run probability is a real edge worth knowing about — and it still means no home run about 16 times out of 17. Single-game outcomes prove nothing in either direction; the calibration record over hundreds of games is the honest measure, which is why we publish it.
The model only knows what's in the data. Late scratches, sudden weather, a quietly injured hitter, or a bullpen decision made mid-game can invalidate a pre-game number. Early in the season, samples are thin and projections are less stable. Market lines also keep moving after we snapshot them.
And plainly: no model guarantees profit. Treat these numbers as one well-documented input to your own research, not an oracle.
Walk through one real prop — from today's lineup to the graded result, every step on live tools →
How trade grades work
The Trade Ledger grades real MLB trades in expected surplus value — wins and dollars, never letter grades. Each grade is frozen the day the trade is announced, then re-graded on a public schedule as the players' careers actually play out. Every number ships with its full math trace: the steps, the constants, and the sources.
The valuation chain, for MLB players:
- Project the player's remaining production from current-season rates (a deliberately simple Marcel-style projection), convert it to runs — basic Bill James Runs Created for hitters, ERA-based runs prevented for pitchers — measured against FanGraphs' published replacement level.
- Convert runs to wins at the canonical ~10 runs per marginal win, and wins to dollars at the open-market price of a win (FanGraphs' 2026 estimate: $11.23M per WAR).
- Subtract the salary the receiving team actually takes on (cited to a public payroll source on every trade), then apply a win-now leverage multiplier (0.9×–1.2× by contention tier, an internal heuristic, disclosed on the trace) to rest-of-season dollars only.
- Value future control years the same way with an 8%/year decay, without the leverage multiplier.
Prospects are valued from Craig Edwards' FanGraphs research putting dollar values on Future Value grades — including the documented haircut for pitching prospects, who bust more often. That research is denominated in 2018 dollars; we say so on every prospect trace rather than silently inflating it.
Uncertainty bands come from the outcome spread behind each method — prospect bust/star rates, projection error on veterans — and each side's band is the sum of its assets' bands. Re-grades count realized production at its flat market price (no leverage on sunk wins) plus a fresh valuation of what remains.
Minor leaguers in the Trade Analyzer (the fantasy-style 0–100 tool, distinct from the Ledger's dollar grades) are priced with classic minor-league equivalencies: current-season AAA or AA stats are discounted to MLB terms — AAA ×0.80, AA ×0.70 on rate production, the Bill James MLE idea carried forward by Clay Davenport and Dan Szymborski — then scored through the exact same 162-game-pace math as a partial MLB season. Every translated value is marked ~ and labeled an estimate. Below AA we don't price at all: tiny samples against teenage competition would be false precision. The moment a player has real current-season MLB stats, those take over and the translation disappears.
- FanGraphs — Converting Runs to Wins ↗
- B. Clemens, FanGraphs — What Are Teams Paying For A Win In Free Agency? 2026 Edition ↗
- FanGraphs — Replacement Level ↗
- Bill James — basic Runs Created ↗
- C. Edwards, FanGraphs — An Update to Prospect Valuation (2018) ↗
- C. Edwards, FanGraphs — Prospects Outside the Top 100 (2018) ↗
- Prospect FV grades are third-party scouting opinion. We cite the board used on every valuation — we do not scout players ourselves.
- Single-prospect outcome distributions are extremely wide. The bands say so: a 45 FV arm can be a zero or a rotation piece, and both live inside the published range.
- We grade value, not intent. A team can "lose" a trade in expected surplus and still have made the right baseball decision — the win-now multiplier prices urgency, but only crudely.
- The v1 pitcher projection is pace-and-ERA only, and prospect dollars are 2018-vintage research. Every constant is versioned (the valuation code appears on each grade), and when constants change, old grades are never rewritten — changes land as corrections in the changelog.
See it applied: the Trade Ledger — every trade, every grade, and the date it gets re-graded next.
Where the player database comes from
Career pages cover roughly 29,000 players across MLB and every affiliated minor-league level (Triple-A through Rookie ball). Two kinds of data live side by side, and we hold them to different standards: automated stats, rebuilt nightly from primary sources, and curated facts (prospect ranks, contracts), entered by hand with a citation on every row.
Automated, from primary sources:
- Game logs, rosters, schedules and transactions come from the MLB Stats API — the same feed MLB.com and MiLB.com render. Box scores are ingested per game each night for all six levels, then summed into per-season, per-level lines. Stats displayed on career pages are served only from those pre-computed lines, so a sync problem can slow updates but never corrupt what you see mid-rebuild.
- Player identity — who someone is across id systems — is anchored by the Chadwick Bureau register, an open-source baseball id crosswalk, refreshed monthly. It links MLBAM ids to FanGraphs and Baseball-Reference ids where a confident match exists (matches are near-complete for MLB players; many minor leaguers have no cross-ids yet, and we leave those blank rather than guess).
- A verification harness compares our season lines field-by-field against MLB's official totals for a fixed panel of players — including a mid-season three-level promotion arc — and must pass exactly before we trust a backfill.
Curated, with citations:
- Prospect ranks and contract terms are not licensed feeds — each row is entered manually and must carry a public citation URL (the outlet that published the rank, the reporter who broke the deal). Rankings are always presented as the cited outlet's opinion, never as our own scouting.
- Corrections never overwrite history: snapshots are append-only and contracts are supersede-only, so an updated figure sits alongside the record of what we previously showed — the same discipline the Trade Ledger uses for re-grades. Fields no outlet has published (like scouting grades) stay blank; we don't fabricate to fill a column.
Team control is an estimate:
MLB does not publish service time in its public API, so the contract-control years shown on career pages are a documented heuristic estimated from debut date: a player debuting on or before April 15 accrues a full first service year (club control through debut year + 5); any later debut adds a partial year (control through debut year + 6). That deliberately ignores option yo-yos, Super Two arbitration, and extensions — when a specific player's real number matters (Trade Ledger grades, for example), it's set manually from a cited report and the manual value is never overwritten by the heuristic. Estimates are labeled as such wherever they appear.
Stats © MLB Advanced Media, L.P. — this site is not affiliated with or endorsed by MLB. Identity data: Chadwick Bureau (open-source). Prospect ranks and contract figures: credited to their cited outlets on each row.
Responsible use
FullCountProps is for entertainment and informational purposes only. It is not a sportsbook, does not accept wagers, and nothing on this page or anywhere else on the site is betting advice. If you choose to bet, do so legally and responsibly — see our Responsible Gaming page. 21+. 1-800-GAMBLER.
Questions about the methodology? Ask us directly — every submission is read.