Skip to main content

sportsdataverse-py

Lifecycle PyPI Contributors Twitter
Follow

See CHANGELOG.md for details.

sportsdataverse-py gives the community free, tidy, analysis-ready sports data in Python. It is the Python member of the SportsDataverse family and deliberately mirrors its R sisters — hoopR (NBA/MBB), wehoop (WNBA/WBB), cfbfastR (CFB), baseballr (MLB), and fastRhockey (NHL/PWHL) — so the function you know in R is the function you call in Python. The NFL module mirrors the nflverse's nflreadpy, and the package plays well with the wider PySport ecosystem. Beyond aggregation and tidying, the project also exists to make open-source expected-points and win-probability models reproducible and benchmarkable, especially for American football.

New here? Read Ecosystem & philosophy for the design philosophy, the full function-naming paradigm, and how the Python and R packages line up.

Quickstart​

pip install sportsdataverse

:::caution Deprecated sportsdataverse.parsed.* is deprecated. The league wrappers already default to return_parsed=True, so call sportsdataverse.nba (etc.) directly; the parsed namespace is a thin alias kept for back-compat. :::

# Today's NBA scoreboard: a polars DataFrame by default
from sportsdataverse.nba import espn_nba_scoreboard
df = espn_nba_scoreboard() # → polars
print(df.select(["game_id", "home_name", "away_name",
"home_score", "away_score"]).head())
raw = espn_nba_scoreboard(return_parsed=False) # → the raw Dict

# Aaron Judge's 2024 season stats from the official MLB API
from sportsdataverse.mlb import mlb_person_stats, parse_mlb_api_person_stats
judge = parse_mlb_api_person_stats(
mlb_person_stats(person_id=592450, stats="season", season=2024)
)
print(judge.select(["stats_group", "stat_home_runs", "stat_avg"]))

# Connor McDavid's 2024-25 EDGE skating speed profile
from sportsdataverse.nhl import nhl_edge_skater_detail, parse_edge_detail
mcdavid = parse_edge_detail(nhl_edge_skater_detail(8478402))
print(mcdavid.select(["player_first_name_default", "top_shot_speed_metric"]))

Parser-backed wrappers return a polars DataFrame by default (0.0.54+); pass return_parsed=False for the raw Dict. Compose with the matching parse_* function for NHL / MLB sibling APIs. See Polars / pandas parser layer below.

Supported leagues and data sources​

LeagueModuleData sources
NBAsportsdataverse.nbaESPN (123), sportsdataverse-data releases (53), NBA Stats API (130), Fox Sports API (26), Basketball-Reference (9), RealGM (18), Public model datasets (7)
WNBAsportsdataverse.wnbaESPN (127), sportsdataverse-data releases (39), WNBA Stats API (113), Fox Sports API (26)
NBA G Leaguesportsdataverse.nbaglESPN (112)
NBLsportsdataverse.nblESPN (112)
FIBAsportsdataverse.fibaESPN (112)
Olympics men's basketballsportsdataverse.olympics_mbkESPN (112)
Olympics women's basketballsportsdataverse.olympics_wbkESPN (112)
NBA Summer League (Las Vegas)sportsdataverse.nbasl_lvESPN (112)
NBA Summer League (Utah)sportsdataverse.nbasl_utESPN (112)
NBA Summer League (California)sportsdataverse.nbasl_caESPN (112)
NBA Summer League (Sacramento)sportsdataverse.nbasl_sacESPN (112)
NBA Summer League (Orlando)sportsdataverse.nbasl_orlESPN (112)
NBA Summer League (Golden State)sportsdataverse.nbasl_gsESPN (112)
MBBsportsdataverse.mbbESPN (129), sportsdataverse-data releases (34), stats.ncaa.org (136), KenPom (32), Bart Torvik T-Rank (5), Fox Sports API (27)
WBBsportsdataverse.wbbESPN (132), sportsdataverse-data releases (34), stats.ncaa.org (114), Bart Torvik Women's T-Rank (1), Fox Sports API (27), Her Hoop Stats (5)
CFBsportsdataverse.cfbESPN (132), sportsdataverse-data releases (74), stats.ncaa.org (1), On3 Recruit Database (82), 247Sports Recruit Database (47), Yahoo Sports Shangrila (7), Fox Sports API (29)
NFLsportsdataverse.nflESPN (125), NFL.com Shield API (22), NFL Pro (32), Sleeper fantasy API (15), PFF Developer API (68), PFF Premium Stats (LEGACY) (46), nflverse data releases (48), sportsdataverse-data releases (21), Fox Sports API (25)
MLBsportsdataverse.mlbESPN (123), sportsdataverse-data releases (34), MLB Stats API (79), Baseball Savant (Statcast) (43), Fox Sports API (23)
NHLsportsdataverse.nhlESPN (119), sportsdataverse-data releases (32), NHL Web API (28), NHL EDGE (35), NHL Stats REST (21), NHL Records (50), Fox Sports API (25)
MCHsportsdataverse.hockey.mchESPN (118)
WCHsportsdataverse.hockey.wchESPN (118)
College baseballsportsdataverse.baseball.college_baseballESPN (122), stats.ncaa.org (3)
College softballsportsdataverse.baseball.college_softballESPN (121)
UFLsportsdataverse.football.uflESPN (114)
XFLsportsdataverse.football.xflESPN (112)
CFLsportsdataverse.football.cflESPN (112)
Soccer (all)sportsdataverse.soccerESPN (112), American Soccer Analysis (16), FotMob (14), UEFA (7), FIFA (9), Football-Data.co.uk (3), OpenLigaDB (11), kloppy open event data (8)
EPLsportsdataverse.soccer.eplESPN (113)
LaLigasportsdataverse.soccer.laligaESPN (112)
Bundesligasportsdataverse.soccer.bundesligaESPN (112)
Serie Asportsdataverse.soccer.serieaESPN (112)
Ligue 1sportsdataverse.soccer.ligue1ESPN (112)
MLSsportsdataverse.soccer.mlsESPN (113), MLS official web API (12)
Liga MXsportsdataverse.soccer.ligamxESPN (112)
UCLsportsdataverse.soccer.uclESPN (113)
UELsportsdataverse.soccer.uelESPN (112)
NWSLsportsdataverse.soccer.nwslESPN (112), NWSL official web API (9)
WWCsportsdataverse.soccer.wwcESPN (112)
WCsportsdataverse.soccer.wcESPN (112)
Cricketsportsdataverse.cricketESPN (112)
PWHLsportsdataverse.pwhlsportsdataverse-data releases (27), HockeyTech / LeagueStat (25)
AHLsportsdataverse.hockey.ahlHockeyTech / LeagueStat (11)
OHLsportsdataverse.hockey.ohlHockeyTech / LeagueStat (11)
WHLsportsdataverse.hockey.whlHockeyTech / LeagueStat (11)
QMJHLsportsdataverse.hockey.qmjhlHockeyTech / LeagueStat (11)
ECHLsportsdataverse.hockey.echlHockeyTech / LeagueStat (12)
SPHLsportsdataverse.hockey.sphlHockeyTech / LeagueStat (12)
CHLsportsdataverse.hockey.chlHockeyTech / LeagueStat (12)
USHLsportsdataverse.hockey.ushlHockeyTech / LeagueStat (12)
BCHLsportsdataverse.hockey.bchlHockeyTech / LeagueStat (12)
AJHLsportsdataverse.hockey.ajhlHockeyTech / LeagueStat (12)
SJHLsportsdataverse.hockey.sjhlHockeyTech / LeagueStat (12)
OJHLsportsdataverse.hockey.ojhlHockeyTech / LeagueStat (12)
CCHLsportsdataverse.hockey.cchlHockeyTech / LeagueStat (12)
GOJHLsportsdataverse.hockey.gojhlHockeyTech / LeagueStat (12)
MHLsportsdataverse.hockey.mhlHockeyTech / LeagueStat (12)
NOJHLsportsdataverse.hockey.nojhlHockeyTech / LeagueStat (12)
VIJHLsportsdataverse.hockey.vijhlHockeyTech / LeagueStat (12)
KIJHLsportsdataverse.hockey.kijhlHockeyTech / LeagueStat (12)
MJHLsportsdataverse.hockey.mjhlHockeyTech / LeagueStat (12)
Betting oddssportsdataverse.oddsThe Odds API (11), Polymarket (8), Kalshi (9)
CBS Sportssportsdataverse.cbsCBS Sports NAPI (82)
Yahoo Sportssportsdataverse.yahooYahoo Sports Shangrila (107)
Fox Sportssportsdataverse.foxFox Sports API (33)
EuroLeaguesportsdataverse.euroleagueEuroLeague Competition Engine (15)
Formula 1sportsdataverse.f1Jolpica F1 API (Ergast-compatible) (16)
ESPN content (news)sportsdataverse.espn_contentESPN (3)
TheSportsDBsportsdataverse.thesportsdbTheSportsDB (12)
SIHF (Swiss hockey)sportsdataverse.hockey.sihfSIHF statistics API (33)
DELsportsdataverse.hockey.del_eSports hokejovyzapis (DEL, ICEHL, EIHL, Metal Ligaen) (12)
ICE Hockey Leaguesportsdataverse.hockey.icehleSports hokejovyzapis (DEL, ICEHL, EIHL, Metal Ligaen) (12)
EIHLsportsdataverse.hockey.eihleSports hokejovyzapis (DEL, ICEHL, EIHL, Metal Ligaen) (9)
Metal Ligaensportsdataverse.hockey.metaleSports hokejovyzapis (DEL, ICEHL, EIHL, Metal Ligaen) (8)
Czech Extraligasportsdataverse.hockey.elhhokej.cz (Czech Extraliga) (9)
Liigasportsdataverse.hockey.liigaLiiga API (23)
SHLsportsdataverse.hockey.shlSHL site API (29)
HockeyAllsvenskansportsdataverse.hockey.haHockeyAllsvenskan site API (12)
National Leaguesportsdataverse.hockey.nlNational League app API (17)
Ligue Magnussportsdataverse.hockey.magnusLigue Magnus (11)
KHLsportsdataverse.hockey.khlKHL (site REST + webcaster API) (25)
VHLsportsdataverse.hockey.vhlVHL (14)
FIBA (digital API and game pages)sportsdataverse.basketball.fiba_hubFIBA digital API and game pages (173)
Genius Sports LiveStatssportsdataverse.basketball.geniusGenius Sports LiveStats (59)
Sportradar Atriumsportsdataverse.basketball.atriumSportradar Atrium embed API (63)
NBL Australia (Rosetta)sportsdataverse.basketball.nbl_auNBL Rosetta proxy (NBL, WNBL, NBL1) (22)
Spanish FEBsportsdataverse.basketball.febSpanish FEB LiveStats + baloncestoenvivo (11)
BBL / DBBL (SCB)sportsdataverse.basketball.scbSCB basketball API (BBL, DBBL) (23)
Lega Basket Serie Asportsdataverse.basketball.lbaLega Basket Serie A (19)
ACBsportsdataverse.basketball.acbACB (Liga Endesa) (45)
Israeli Premier Leaguesportsdataverse.basketball.ibbaIBBA (Israeli Premier League) and Segev Stats (22)
W League (Japan)sportsdataverse.basketball.wjblW League (Japan) (19)
VTBsportsdataverse.basketball.vtbVTB United League (38)
KBLsportsdataverse.basketball.kblKBL (Korea) (22)
B.LEAGUEsportsdataverse.basketball.bleagueB.LEAGUE (Japan) (14)
KZSsportsdataverse.basketball.kzsKZS (Basketball Federation of Slovenia) (23)
LKLsportsdataverse.basketball.lklLKL (Lithuania) (14)
TBFsportsdataverse.basketball.tbfTBF app API (BSL, TBL, KBSL) (32)
CEBLsportsdataverse.basketball.ceblCEBL stats API (12)
ABA Leaguesportsdataverse.basketball.abaABA League (12)
EASLsportsdataverse.basketball.easlEASL (third-party sync server over Sportradar DataCore) (18)
BNXT Leaguesportsdataverse.basketball.bnxtBNXT League (Sportpress) (28)
TPBLsportsdataverse.basketball.tpblTPBL (Taiwan) (16)
P. LEAGUE+sportsdataverse.basketball.plgP. LEAGUE+ (Taiwan) and Preciser (19)
CBAsportsdataverse.basketball.cbaCBA data API (China) (27)
Basketligaensportsdataverse.basketball.dblBasketligaen (Denmark, Sportality) (27)

Errors (0.1.5)​

  • NoDataError — the fetch SUCCEEDED and there is nothing there (a 404, or ESPN's 200-with-code:404 body).
  • AssetFetchError — the fetch FAILED and the answer is unknown (403, rate limit, exhausted retries). Never record this as an empty season.
  • ValueError — a 400 / 422: the request itself is wrong, so retrying cannot help.

As of 0.1.5 the hand-written ESPN scrapers and every generated flat-API getter raise rather than returning an error body or an empty dict.

Asking the package about itself​

sdv-docs is an MCP server over a prebuilt index of this surface — exact columns, function signatures, provider endpoints and released datasets:

claude mcp add sdv-docs -- uvx --from 'sportsdataverse[mcp]' sdv-docs

Needs 0.1.5 or newer and Python >= 3.10.

Polars / pandas parser layer​

Parser-backed wrappers return a polars DataFrame by default (0.0.54+); pass return_parsed=False for the raw Dict. The parser layer in sportsdataverse._common_espn_parsers (plus matching modules for the MLB and NHL sibling APIs) turns those payloads into tidy polars (or pandas) DataFrames.

For ESPN wrappers, return_parsed=True is now the default for parser-backed endpoints. Pass return_parsed=False to recover the raw Dict, or return_as_pandas=True to get a pandas DataFrame:

from sportsdataverse.nba import espn_nba_team_roster

df = espn_nba_team_roster(team_id=13) # → polars (default)
raw = espn_nba_team_roster(team_id=13, return_parsed=False) # → Dict
pdf = espn_nba_team_roster(team_id=13,
return_as_pandas=True) # → pandas

For NHL / MLB sibling-API wrappers, compose the wrapper with its parser:

from sportsdataverse.nhl import nhl_web_pbp, parse_nhl_web_pbp
df = parse_nhl_web_pbp(nhl_web_pbp(2023030417)) # 331-row polars frame

See the Architecture and Parsers pages for full details.

Installation​

pip install sportsdataverse (or uv add sportsdataverse). The Install & CLI guide covers uv, the optional extras, the supported Python and polars versions, the sdv command line and the sdv-docs MCP server.

Our Authors

Citations​

To cite the sportsdataverse-py Python package in publications, use:

BibTeX Citation

@misc{gilani_sdvpy_2021,
author = {Gilani, Saiem},
title = {sportsdataverse-py: The SportsDataverse's Python Package for Sports Data.},
url = {https://py.sportsdataverse.org},
season = {2021}
}