33 pre-game features per game, ready for your model.
Pinnacle lines (first and last pre-game snapshot), starting pitchers, bullpen, 7-day form, matchups, park factor, weather — and the real scores to predict. Every column was audited for whether it was known before the game.
Choose your option
One purchase, one download: CSV + Parquet and a README documenting every column.
Modeling Features
2023 → 2025, regular season.
- 6,561 games, one file per season + a combined file
- Column-by-column leakage table in the README
- CSV + Parquet
Download link valid 72 h, 5 downloads
Buy — €29MLB Complete Pack
All 5 datasets, all seasons.
- Full-Game Odds
- First 5 Innings
- First inning · NRFI
- Modeling Features
- Line Movements
Inputs and targets in one file
Inputs and targets live in the same file. You pick the columns; the README tells you which ones are safe for a backtest.
Train a totals model
Pre-game features as inputs, total_runs as target.
df = pd.read_parquet("mlb_modeling_features_2023_2025.parquet")
X = df.filter(regex="^(line_|sp_.*xwoba|bullpen|vavg|evavg|park|temp)")
y = df.total_runsLeak-free backtest
Prefer sp_*_xwoba_allowed (computed before game day) to sp_*_xera (end-of-season aggregate).
safe = df[df.sp_home_xwoba_pa >= 30]
safe[["sp_home_xwoba_allowed", "total_runs"]].corr()First versus last snapshot
The total moves in about one game in two; F5 and run line rarely move. Our first snapshot is not the market opening line.
(df.line_ft_current != df.line_ft_open).mean()Audited column by column: known before the game, or not.
Rolling windows (velocity, exit velo, HR over 7 days, bullpen over 14 days, lineup versus the starter) close strictly before game day. The starter's xwOBA allowed is season-to-date, strictly before the game.
Two families are not leak-free and we say so: the starter's xERA is an end-of-season aggregate, and weather is what was observed on game day, not the forecast.
What's in the file — and what isn't
Safe for a backtest
- Pinnacle lines (first and last pre-game snapshot)
- 7-day form
- Lineup versus the starter's throwing hand (L/R), 14 days
- Starter's xwOBA allowed, season-to-date before the game
Handle with care
- sp_*_xera and xera_diff: end-of-season aggregate
- temp_c, wind_kph: observed, not forecast
- bullpen_era_*: a proxy (home runs allowed from the 6th inning, 3 innings assumed per game day), not official ERA
- Gaps < 2% and starters under 30 prior PA: filled with the league average (sp_*_xwoba_pa shows it)
- score_*, total_runs*, margin: these are the targets
- 2026 season: not included
Every column, with its fill rate
Measured on the delivered file. 100% = no missing values.
Game
MLB game id, date, teams, scheduled start
Pinnacle lines
Total, F5 and run line: first and last pre-game snapshot
Starting pitchers
Identity, hand, xERA (season aggregate), xwOBA allowed before the game and PA count
Bullpen & form
14-day bullpen proxy; 7-day velocity, exit velo and HR of the team's games (both teams); lineup xwOBA versus the starter's hand, 14 days
Environment
Park factor, observed weather, roof
Targets
Real scores (full game and F5), totals, margin
The file, exactly as you'll get it
Six real rows, main columns. Download 50 free rows with every column to check it fits your pipeline.
| game_date | away_team | home_team | line_ft_current | sp_away_name | sp_home_name | sp_away_xwoba_allowed | sp_home_xwoba_allowed | bullpen_era_away | bullpen_era_home | park_pf | temp_c | total_runs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2025-05-13 | LAA | SD | 7.5 | José Soriano | Dylan Cease | 0.3224 | 0.3142 | 3.46 | 2.5 | 0.93 | 16.3 | 10 |
| 2025-06-01 | MIL | PHI | 8.0 | Jose Quintana | Ranger Suárez | 0.3314 | 0.2555 | 1.38 | 1.5 | 1.03 | 19.5 | 7 |
| 2025-06-23 | NYY | CIN | 10.0 | Allan Winans | Nick Lodolo | 0.3162 | 0.3134 | 0.92 | 1.5 | 1.08 | 33.8 | 7 |
| 2025-07-03 | MIN | MIA | 8.0 | David Festa | Eury Pérez | 0.3343 | 0.3035 | 0.69 | 1.0 | 0.92 | 30.3 | 5 |
| 2025-07-28 | AZ | DET | 8.5 | Eduardo Rodriguez | Troy Melton | 0.3203 | 0.3162 | 1.33 | 1.8 | 0.97 | 27.3 | 6 |
| 2025-08-04 | TOR | COL | 12.0 | Eric Lauer | Tanner Gordon | 0.2769 | 0.3472 | 2.77 | 1.25 | 1.32 | 34.7 | 16 |
Before you buy
Why keep xERA if it leaks?
For descriptive analysis. For a backtest use sp_*_xwoba_allowed: the alternative computed strictly before each game.
How do I get the file?
Right after payment a download link appears on screen and is emailed to you. The archive contains CSV and Parquet files plus a README documenting every column.
Can I use it in a commercial product?
Yes for your models, analyses and tools, commercial ones included. Reselling or redistributing the files themselves is not allowed.
A question before buying?
Email [email protected] — the founder answers, usually the same day.