finds.dev← search

// the find

pseudo-r/Public-ESPN-API

★ 548 · Python · updated Apr 2026

The Public ESPN API documentation provides a complete list of undocumented API endpoints, URL parameters, and JSON response formats across 20+ sports (NFL, NBA, MLB, NHL). Includes live curl examples, routing guides, and a Django REST API service for live scores, standings, and news. Optimized for search, developers, AI, and LLMs.

Reverse-engineered documentation of ESPN's undocumented internal APIs, covering 17 sports and 139 leagues across 6 API domains. Also ships a Django REST service that ingests ESPN data into Postgres and re-exposes it via a clean API. Aimed at developers building sports apps who don't want to pay for official data feeds.

The endpoint coverage is genuinely impressive — 449 endpoints mapped across core, site, CDN, fantasy, and now domains, including niche stuff like QBR splits, bracketology, and ATS records. The gotchas are documented (e.g., standings requires /apis/v2/ not /apis/site/v2/, CDN endpoints need xhr=1) which saves hours of trial-and-error. The Django service is not just a toy — it has Celery beat schedules, management commands, Docker compose, and a test suite, so it's actually deployable. The WADL-based discovery approach (mapping from ESPN's own application.wadl) is clever and produces more complete coverage than scraping.

The whole thing can break silently any time ESPN redeploys — there's no versioning contract, no change detection, and the Celery refresh tasks won't tell you an endpoint started returning 404 or a different schema. The Django service's stats storage is a JSON blob on AthleteSeasonStats, which kicks the normalization problem down the road and makes querying stats across athletes painful. No authentication layer on the Django service at all — the ingest POST endpoints are wide open, so you'd need to add that before putting this anywhere public-facing. The nhl_service directory exists but is largely empty skeletons with no tests, suggesting it was started and abandoned.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →