I'm a machine learning engineer, computer vision by trade, and the creator and maintainer of the SportsDataverse: R, Python and JavaScript packages that make public sports data easy to get at. They share the same ideas about tidy data, the same automated release pipeline and, where it matters, the same models. I have spent most of my evenings since 2020 on it, and the goal hasn't changed: take the gathering out of the way of the research.
- The R packages finished a long CRAN campaign in 2026. cfbfastR, hoopR, wehoop, fastRhockey, baseballr, oddsapiR and cfbseedR are all current on CRAN; the rest of the family installs from sportsdataverse.r-universe.dev.
- sportsdataverse-py was rebuilt end to end on polars. ESPN across every league, the NBA and WNBA stats APIs, NHL, MLB and Statcast, HockeyTech, stats.ncaa.org, plus the same loaders and models the R packages ship.
- Models ship with the data. Every
load_*()function reads automated releases (sportsdataverse-data): play-by-play, box scores, schedules, rosters and, increasingly, fitted models (expected points, win probability, shot quality, expected goals) with the training code committed beside them. - Public data status. sportsdataverse.org/status shows, nightly, how fresh every producer's data is and whether its pipeline is passing.
- Logos, colors and headshots for plots and tables: sdvplotR for ggplot2, gt and reactable, and its Python sibling sdvplot (pre-release).
- Blazing the Nets, rebuilt. My 2021 Brooklyn Nets shooting dashboard, now on d3 v7 and Next.js and reading release parquet files at request time (write-up).
- The lab on my site: small, runnable ideas, like querying a release file from the browser with DuckDB.
From saiemgilani.com/notes, refreshed daily from the site's RSS feed.
- Blazing the Nets, rebuilt on d3 v7
- The badge that lies
- cfbseedR: Simulate and Evaluate College Football Seasons
- sportsdataversedata: sportsdataverse data storage functions
- sdvplotR: Sports Team Logo Plots in 'ggplot2', 'gt' and 'reactable'
| Package | What it covers | Version | Downloads |
|---|---|---|---|
| cfbfastR (source) | College football play-by-play, EPA and win probability | ||
| hoopR (source) | Men's basketball: ESPN, the NBA Stats API, KenPom, stats.ncaa.org | ||
| wehoop (source) | Women's basketball: ESPN, the WNBA Stats API, stats.ncaa.org | ||
| fastRhockey (source) | NHL, PWHL and the HockeyTech leagues | ||
| baseballr (source) | Bill Petti's baseball package, which I maintain | ||
| oddsapiR (source) | Sports odds from The Odds API | ||
| cfbseedR (source) | College football season simulation and playoff seeding | ||
| cfb4th (source) | Fourth-down decisions | ||
| cfbplotR (source) | College football logos and colors for ggplot2 | ||
| sdvplotR (source) | Logos, colors, headshots and themes across leagues for ggplot2, gt and reactable | ||
| recruitR (source) | College recruiting rankings | ||
| usfootballR (source) | MLS and NWSL from ESPN | ||
| sportsdataverse (R) (source) | The meta-package that installs and loads the family | ||
| sportsdataverse (Python) (source) | Every league above in one polars-first package | ||
| sdvplot (source) | Python sibling of sdvplotR (pre-release) | not yet on PyPI | |
| sportsdataverse (Node.js) (source) | ESPN, 247Sports and NCAA endpoints for Node.js |
Every package has a printable one-page cheat sheet at sportsdataverse.org/cheatsheets.
Live, from the nightly ecosystem snapshot. Out of season a league reads idle rather than stale; red means its update pipeline failed.
Live college football analytics built on the same expected-points and win-probability models the packages ship (source).
- Blazing the Nets: Brooklyn Nets shot charts, hex maps and shooting signatures (source).
- saiemgilani.com: notes on each package, written one at a time, and the lab.
- Sports-Research-Papers: a curated reading list of sports analytics research.
I presented the SportsDataverse at the Carnegie Mellon Sports Analytics Conference in 2021. The paper won the Data and Software contribution in the reproducible research competition's open track. Slides · Repository · Paper
The notes on my site pick up where that paper left off, one package at a time.
- ncaascrapR: Eric Hess's NCAA scraper (source)
- The FSU Sports Analytics Club course packages, fsu-sac and fsu-sac-2025
- Community packages in the SportsDataverse family: sportyR / sportypy, softballR, mlbplotR and more SportsDataverse packages
Data and ML: Python, R, polars, pandas, DuckDB, XGBoost, scikit-learn, PyTorch, TensorFlow, OpenCV
Web and apps: TypeScript, React, Next.js, Node.js, d3, FastAPI
Infrastructure: Docker, GitHub Actions, Vercel, AWS, GCP, Azure, Linux
If the packages save you time, you can help keep the data flowing:
· release notes and new datasets by email at sportsdataverse.org/join.
Earlier work
- cfbscrapR (archived): the college football scraper that became cfbfastR
- cfbfastR-py, hoopR-py and wehoop-py (archived): folded into sportsdataverse-py
- sportsdataverse-nhl: an NHL API TypeScript module




















