CoolFace
Datasetpublic

Neonlightzz/mlb-player-props

SmartStake MLB Player Prop Odds and Results (2026) Minute-by-minute MLB player prop odds from ~75 sportsbooks and exchanges over the 2026 season, with the graded outcome of each prop attached. Every row is one book's price for one selection at one minute. This is the raw material behind the study "Sharpest Sportsbooks for MLB Player Props". Coverage Odds: late March 2026 through early July 2026. Graded outcomes: March through June (games that had settled at… See the full description on the dataset page: https://huggingface.co/datasets/Neonlightzz/mlb-player-props.

sourceHugging Facecc-by-4.0updated 2mo agoView on Hugging Face
1likes152downloads
Dataset Card

SmartStake MLB Player Prop Odds and Results (2026)

Minute-by-minute MLB player prop odds from ~75 sportsbooks and exchanges over the 2026 season, with the graded outcome of each prop attached. Every row is one book's price for one selection at one minute. This is the raw material behind the study "Sharpest Sportsbooks for MLB Player Props".

Coverage

  • Odds: late March 2026 through early July 2026.
  • Graded outcomes: March through June (games that had settled at export time). July rows carry odds but result and won are null.
  • Markets: total bases, hits, RBIs, home runs, strikeouts, batting walks.
  • Books: ~75 sportsbooks, exchanges, and prediction markets (Kalshi, ProphetX, Novig, Pinnacle, DraftKings, FanDuel, Fanatics, and more).

Schema

columntypedescription
game_idstringStable per-game identity. Group and grade on this.
start_timetimestampScheduled first pitch (UTC). Subtract ts for time-to-first-pitch.
playerstringPlayer name.
marketstringProp market (e.g. player total bases).
linedoubleThe over/under number for this selection.
sidestringover or under.
bookstringSportsbook / exchange.
tstimestampMinute the quote was live (UTC). One row per changed minute.
oddsdoubleDecimal odds.
resultdoubleThe player's actual stat for that market. Null if the game had not settled or the player was inactive.
wonbooleanWhether this side won. Null for a push (result == line) or an ungraded/void selection.

Loading

python
from datasets import load_dataset
ds = load_dataset("SmartStake/mlb-player-props", split="train")
python
import pandas as pd
df = pd.read_parquet("hf://datasets/SmartStake/mlb-player-props/mon=2026-05")
sql
-- DuckDB, straight from the hub
SELECT book, count(*) FROM 'hf://datasets/SmartStake/mlb-player-props/**/*.parquet' GROUP BY 1;

Provenance, license, and responsible use

Odds were collected from public sportsbook and exchange feeds; outcomes are from official box scores. Released under CC BY 4.0 for research and educational use. This dataset is informational and historical: past prices and results do not predict future outcomes, and betting carries risk of loss. Not affiliated with any sportsbook. 21+.

Citation

SmartStake (2026). SmartStake MLB Player Prop Odds and Results (2026). Hugging Face.

Reproduce a finding: per-book closing Brier score

Each book's closing-line accuracy (lower is sharper), straight from the Hub with DuckDB:

python
import duckdb
duckdb.sql("INSTALL httpfs; LOAD httpfs;")
print(duckdb.sql("""
WITH src AS (SELECT * FROM 'hf://datasets/SmartStake/mlb-player-props/**/*.parquet'),
closing AS (                 -- each book's last quote per selection before first pitch
  SELECT book, market, game_id, player, line, side,
         arg_max(odds, ts) AS odds, any_value(won) AS won
  FROM src WHERE result IS NOT NULL AND ts < start_time
  GROUP BY book, market, game_id, player, line, side),
devig AS (                   -- two-way no-vig probability for the over
  SELECT o.book, (1/o.odds)/(1/o.odds + 1/u.odds) AS p_over, o.won
  FROM closing o JOIN closing u USING (book, market, game_id, player, line)
  WHERE o.side='over' AND u.side='under' AND o.won IS NOT NULL)
SELECT book, count(*) n, round(avg((p_over - won::INT)*(p_over - won::INT)), 4) AS brier
FROM devig GROUP BY book HAVING n > 20000 ORDER BY brier
""").df())

This pools all lines; the full study refines it to each book's main (near 50/50) line to strip the alt-line bias, and adds the crossed-market analysis. Writeup: https://smartstake.app/learn/sharpest-sportsbooks-mlb-player-props