CoolFace
Datasetpublic

SmartStake/mlb-lineup-reactions

SmartStake MLB Lineup Reactions (2026) Full-resolution sportsbook odds movements around every Underdog MLB lineup post of the 2026 season, for the six player-prop markets a batting-order change moves. Every row is one book's price for one selection at one moment, in a window around a lineup drop. This is the raw material behind the study "MLB Lineup Drops", a companion to SmartStake MLB Player Prop Odds and Results. Coverage Events: 2,456 Underdog MLB lineup… See the full description on the dataset page: https://huggingface.co/datasets/SmartStake/mlb-lineup-reactions.

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

SmartStake MLB Lineup Reactions (2026)

Full-resolution sportsbook odds movements around every Underdog MLB lineup post of the 2026 season, for the six player-prop markets a batting-order change moves. Every row is one book's price for one selection at one moment, in a window around a lineup drop. This is the raw material behind the study "MLB Lineup Drops", a companion to SmartStake MLB Player Prop Odds and Results.

Coverage

  • Events: 2,456 Underdog MLB lineup posts with odds, 25 March through 17 July
  • Each post is one team's lineup; the All-Star Game is excluded.
  • Window: −5 to +20 minutes around each post (offset_sec), so both the pre-drop baseline and the full reaction are present.
  • Markets: total bases, hits, RBIs, runs, hits + runs + RBIs, strikeouts.
  • Books: 73 sportsbooks, exchanges, prediction markets, and DFS pick'em products.
  • Rows: ~85 million (one book's price for one selection at one moment).
  • Coverage gap: the odds archive was down on 26 May and from 20 to 29 June 2026, so lineup posts on those days (about 11% of the season's posts) have no odds and are absent.

Schema

columntypedescription
event_idstringOne lineup post: team~tweet_ts. Group on this.
teamstringThe team whose lineup posted.
tweet_tstimestampWhen Underdog posted the lineup (UTC).
game_idstringStable per-game identity.
playerstringCanonical player name.
player_idint64Stable player id (consistent across books).
marketstringbases, hits, rbis, runs, hits + runs + rbis, or strikeouts.
linedoubleThe over/under number for this selection.
sidestringover or under.
bookstringSportsbook / exchange / DFS product.
enginestringPricing engine; collapses shared-brain skins (see notes).
tstimestampWhen the quote was live (UTC), full resolution.
offset_secintts − tweet_ts, in seconds. Negative is before the post.
oddsdoubleDecimal odds. Null for DFS pick'em products (see notes).
is_suspendedbooltrue when odds ≤ 1.02: the market was pulled, not a real price.
is_altbooltrue for an alternate (non-main) line.

Notes and caveats

  • Suspensions are kept but flagged. A book (Pinnacle especially) often pulls a market before reposting a new number; those ticks carry odds ≤ 1.02 and is_suspended = true. Filter them out before treating odds as a price.
  • Skins are collapsed by `engine`. Books that share one pricing brain get one engine value so a single book is not counted several times: betmgm covers betmgm, bwin, and Sports Interaction; pinnacle covers pinnacle and its sister site. Every other book is its own engine.
  • The window is the whole game. A post names one team, but the window carries both teams' player props for that game (a lineup change moves the team's batters and the opposing pitcher's strikeouts). Filter by player/player_id for the players you care about.
  • DFS pick'em products are included, with a null price. PrizePicks, Underdog, Sleeper, DraftKings Pick6, Betr, SplashSports, OwnersBox, Dabble, and FanDuel Picks set a line without a two-sided price, so their odds is null. Their line and how it moves are still the signal, so the rows are kept.

Loading

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

Reproduce a finding: which books reprice first

For total bases, the median time each book takes to make its first real price move after a lineup post (lower is faster), 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-lineup-reactions/**/*.parquet'
  WHERE market='bases' AND side='over' AND NOT is_suspended AND NOT is_alt),
seq AS (                                   -- consecutive quotes per selection per book
  SELECT event_id, engine, player, line, offset_sec, odds,
         lag(odds) OVER (PARTITION BY event_id, engine, player, line
                         ORDER BY offset_sec) AS prev
  FROM src),
firstmove AS (                             -- first >=1pt implied-prob move after the post
  SELECT event_id, engine, min(offset_sec) AS move_off
  FROM seq
  WHERE offset_sec >= 0 AND prev IS NOT NULL
    AND abs(1/odds - 1/prev) >= 0.01
  GROUP BY 1, 2)
SELECT engine AS book, count(*) AS reactions, round(median(move_off)) AS median_seconds
FROM firstmove GROUP BY 1 HAVING reactions > 300 ORDER BY median_seconds
""").df())

The full study centres each book against the field per event to strip coverage and polling-cadence bias; this pooled version is a directional first look. Writeup: https://smartstake.app/learn/mlb-lineup-drops

Provenance, license, and responsible use

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

Citation

SmartStake (2026). SmartStake MLB Lineup Reactions (2026). Hugging Face.