Tony Wang7 Min. LesezeitMLB-Daten scrapen 2026 (API & Python)
MLB-Daten 2026: MLBs undokumentierte Stats-API, No-Code-Tools oder eine strukturierte API — mit echten JSON-Beispielen und rechtlichen Basics.
MLB hat schon einen kostenlosen Weg, um an Baseball-Daten zu kommen: eine weit verbreitete, keyless JSON-API unter statsapi.mlb.com, die MLB.com selbst antreibt und hinter den beliebten Python-Libraries MLB-StatsAPI und pybaseball der Community steckt. Der Haken ist, dass MLB sie nie offiziell veröffentlicht hat — es gibt kein Entwicklerportal, kein Changelog, und keine Garantie, dass ein Feld beim nächsten Deploy nicht verschwindet oder sich verschiebt. Dieser Guide behandelt diesen undokumentierten Endpoint, No-Code-Tools und eine strukturierte, dokumentierte MLB-API, dazu, was MLB in seinen eigenen Nutzungsbedingungen tatsächlich zur Vervielfältigung und Weiterverbreitung seiner Daten sagt.
Warum MLB-Daten scrapen?
MLBs Schedule-, Standings-, Roster- und Stats-Daten treiben eine erkennbare Reihe von Produkten an:
- Fantasy-Baseball-Tools — Rosters, Spielerstats und Matchup-Schedules für Lineup-Entscheidungen.
- Sportwetten- und Odds-Kontext — Spielpläne, Ergebnisse und Standings neben Odds-Daten aus anderen Quellen.
- Historische und analytische Recherche — Liga- und Spieler-Stat-Splits nach Saison für Performance-Analysen.
- Fan- und Media-Apps — Live-Scoreboards, Standings-Widgets und Transaction-Tracker.
- Liga-übergreifende Sportabdeckung — kombiniere MLBs baseball-spezifische Tiefe mit den Multi-Sport-Scoreboards von ESPN oder der Live-Event-Abdeckung von SofaScore für eine breitere Sports-Data-Pipeline.
Ist es legal, MLB-Daten zu scrapen?
Option 1: MLBs eigene undokumentierte Stats-API (und warum sie riskant ist)
statsapi.mlb.com verlangt überhaupt keine Authentifizierung — kein API-Key, kein Bearer-Token, nur ein GET-Request:
curl "https://statsapi.mlb.com/api/v1/schedule?sportId=1&date=2026-04-15"
# team lookups work the same way:
curl "https://statsapi.mlb.com/api/v1/teams?sportId=1"
Das ist real, kostenlos, und genau das, was die von der Community gepflegten Python-Pakete MLB-StatsAPI und pybaseball unter der Haube aufrufen — sie werden viel für Hobby- und Analytics-Projekte genutzt und machen beide klar, dass sie inoffizielle, nicht verbundene Wrapper um genau diesen Endpoint sind. Die ehrliche Einordnung lautet also nicht „MLB hat keine API" — MLB hat eine, und sie ist seit Jahren keyless und offen. Das Problem ist, was „undokumentiert" dich in Produktion tatsächlich kostet:
- Nie offizielle Dokumentation. Jeder Endpoint, Parameter und Feldname im Umlauf (
sportId,hydrate, verschachtelteteams.home/teams.away-Formen) wurde von Dritten reverse-engineert, nicht von MLB veröffentlicht. - Kein Changelog, keine Stabilitätsgarantie. Weil es kein offiziell abgesegnetes Entwicklerprodukt ist, kann MLB Felder zwischen Deploys umbenennen, umstrukturieren oder entfernen, ohne irgendjemanden, der darauf angewiesen ist, zu benachrichtigen.
- Keine veröffentlichten Rate-Limits. Es gibt nichts, worauf du eine Retry-/Backoff-Strategie aufbauen könntest, außer Trial-and-Error aus der Community.
- Die Schema-Tiefe variiert je nach Call. Verschachtelte Ressourcen wie Boxscores oder Play-by-Play brauchen
hydrate-Parameter, die Community-Docs sich per Inspektion erarbeiten mussten, statt aus einer Spec. - Du bist nur ein MLB.com-Redesign von einer kaputten Pipeline entfernt — ohne Support-Kanal, um zu fragen, was sich geändert hat.
Option 2: No-Code-Tools
Generische No-Code-Scraper und Marketplace-Actors können das Scoreboard eines einzelnen Tages oder eine Standings-Tabelle für einen einmaligen Export ziehen. Sie kapseln meist dieselben undokumentierten statsapi.mlb.com-Endpoints darunter — erben also dasselbe Schema-Drift-Risiko wie Option 1 — und lösen nicht das Problem, MLB neben anderen Sportplattformen in einem einheitlichen Schema zu normalisieren.
Option 3: Eine strukturierte MLB-API (via Crawlora)
Eine strukturierte MLB-API gibt dir ein dokumentiertes, normalisiertes Schema, statt dass du einem Endpoint vertraust, den MLB ohne Vorwarnung umbauen könnte — ein Auth-Header, konsistentes JSON, neben anderen Sportplattformen wie ESPN und SofaScore. Hol dir den Schedule eines Teams:
curl -G "https://api.crawlora.net/api/v1/mlb/schedule" \
-H "x-api-key: $CRAWLORA_API_KEY" \
--data-urlencode "team_id=147" \
--data-urlencode "start_date=2026-04-01" \
--data-urlencode "end_date=2026-04-07"
{
"code": 200,
"data": {
"start_date": "2026-04-01",
"end_date": "2026-04-07",
"team_id": 147,
"total_games": 6,
"games": [],
"fetched_at": "2026-08-09T12:00:00Z",
"source_url": "https://statsapi.mlb.com/api/v1/schedule"
}
}
Hol dir dann Spieler- oder Team-Stats per id in Python (echte Felder — sieh dir für die vollständige splits[]-Form die docs an):
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/mlb"
teams = requests.get(f"{base}/teams", headers=h, params={"season": 2026}).json()["data"]["teams"]
stats = requests.get(
f"{base}/player-stats", headers=h,
params={"id": 660271, "season": 2026, "group": "hitting"},
).json()["data"]
print(stats["player_id"], stats["season"], stats["group"], stats["total"])
Stats auf Team-Ebene folgen derselben Form (eine echte, in der Preseason leere Response vom Live-Endpoint):
{
"code": 200,
"data": { "team_id": 147, "season": 2026, "group": "hitting", "splits": [] }
}
Roster-, Standings-, Transactions- und Game-Detail-Endpoints folgen demselben id-in-JSON-out-Muster: /mlb/team-roster (team_id, season, roster_type), /mlb/standings (season, type), /mlb/transactions (start_date, end_date, team_id, player_id) und /mlb/game / /mlb/game-boxscore / /mlb/game-play-by-play (id — eine game_id aus einer Schedule- oder Transactions-Response). Speichere eine Zeile pro Spiel oder pro Spieler-Saison und lass es nach Zeitplan erneut laufen.
Was du sammeln kannst
Öffentliche MLB-Stats-API-Daten, normalisiert: Schedule (nach Datum, Datumsbereich oder Team, mit total_games und einem games-Array); Standings (gruppiert nach Saison und Typ); Teams (vollständiges Saison-Roster aller Franchises); Team-Roster (nach Team und Saison, mit roster_type); Spieler-Detail und Spieler-Stats (nach id, Saison und Stat-Gruppe — Hitting, Pitching, Fielding); Team-Stats (dieselbe Gruppe/Saison-Aufteilung auf Team-Ebene); ligaweite Stat-Leader (league-stats, nach Saison und Gruppe); Game-Detail, Boxscore und Play-by-Play (nach game_id, mit plays[], linescore und decisions); und Transactions (Trades, Signings und Roster-Moves nach Datumsbereich, Team oder Spieler).
Grenzen und typische Herausforderungen
- Zwei unterschiedliche rechtliche Ebenen.
mlb.coms Nutzungsbedingungen regeln die Website und ihre Inhalte;statsapi.mlb.comhat keine eigenen veröffentlichten Bedingungen — grenze kommerzielle oder groß angelegte Nutzung sorgfältig gegen MLBs tatsächliche ToU ab, statt anzunehmen, dass keyless Zugriff uneingeschränkte Nutzung bedeutet. - Der undokumentierte Endpoint kann sich ohne Vorwarnung ändern. Wenn du direkt auf
statsapi.mlb.combaust, plane stille Feld-Umbenennungen ein — und dass es kein Changelog gibt, das du checken könntest. - Fan-out pro id. Ein vollständiger Game-Datensatz (Boxscore, Play-by-Play, Decisions) ist ein Call pro
game_id; eine ganze Saison an Spieler-Stats bedeutet, ids aus einer Roster- oder Search-Response zu durchlaufen. - In Preseason und Offseason sind die Daten dünn. Stat-Split- und Schedule-Responses können außerhalb der Saison legitim leere Arrays zurückgeben, wie oben gezeigt — das ist kein kaputter Call.
- Nur öffentliche Daten. Das sammelt, was MLB ohnehin schon über seine eigenen Live-Endpoints ausliefert — nie ein Weg, um MLBs Lizenzierung für die kommerzielle Weiterverbreitung seiner Inhalte zu umgehen.
Wo das eingesetzt wird
- Fantasy-Baseball-Tools — Lineup- und Waiver-Entscheidungen aus Rosters und Stat-Splits.
- Analytics und Recherche — historische Spieler- und Team-Performance nach Saison.
- Sports-Media-Dashboards — Live-Scoreboards, Standings und Transaction-Feeds.
- Liga-übergreifende Sportprodukte — MLBs Baseball-Tiefe neben den Multi-Sport-Scoreboards von ESPN oder der Live-Event-Abdeckung von SofaScore.
Sources
Leg los mit dem Sammeln
Probier es zuerst kostenlos aus: jage eine beliebige öffentliche URL durch den Free Web Scraper oder prüfe mit dem Anti-Bot Checker, ob eine Seite Bots blockiert — ohne Anmeldung.
Teste die Schedule-, Standings- und Player-Stats-Endpoints im Playground, sieh dir das Schema in den API docs an und wirf einen Blick aufs pricing. ESPN passt besser für liga-übergreifende Scoreboards und News über mehrere Sportarten hinweg; MLB ist die tiefere baseball-spezifische Quelle, sobald du saisonlange Stat-Splits, Rosters oder Play-by-Play brauchst. SofaScore rundet die Live-Event-Abdeckung für die Sportarten außerhalb von MLBs eigenem Scope ab. Auf der Gaming-Seite desselben Hub-Clusters deckt how to scrape PlayStation Store Console-Katalog-Preise und Deals ab. Sobald du den Spielplan hast, deckt how to scrape Ticketmaster die Ticket-Markt-Seite genau dieser Spiele ab. Siehe auch how to choose a web scraping API und is web scraping legal.
Häufig gestellte Fragen
Hat MLB eine offizielle öffentliche API?
Nicht selbstständig nutzbar und dokumentiert. MLB betreibt unter statsapi.mlb.com eine kostenlose, keyless JSON-API, die MLB.com selbst antreibt und hinter Community-Libraries wie MLB-StatsAPI und pybaseball steckt — aber MLB hat dafür nie offizielle Dokumentation, ein Changelog oder ein Entwicklerportal veröffentlicht. Sie wurde von der Community reverse-engineert, nicht als offizielles Produkt bereitgestellt.
Ist es legal, statsapi.mlb.com zu nutzen?
Das ist eine andere Frage als mlb.coms Nutzungsbedingungen, die die Vervielfältigung oder Weiterverbreitung von MLB Digital Properties ohne schriftliche Genehmigung einschränken. statsapi.mlb.com selbst hat keine veröffentlichten Bedingungen, auf die sich Dritte berufen könnten. Nicht-kommerzielle, private Nutzung von Daten, die MLB ohnehin schon keyless ausliefert, ist in der Praxis risikoarm; hol dir eine eigene rechtliche Einschätzung, bevor du etwas Kommerzielles oder groß Angelegtes baust. Das ist keine Rechtsberatung.
Kann ich mich für eine Produktions-App auf statsapi.mlb.com verlassen?
Du kannst, solltest aber Risiko einplanen: kein Changelog, kein SLA, und Felder können ohne Vorwarnung umbenannt oder umstrukturiert werden, weil MLB sich nie zu einem stabilen Schema für Drittnutzung verpflichtet hat.
Welche Daten bekomme ich über die MLB Stats API?
Schedule, Standings, Teams, Team-Rosters, Spieler- und Team-Stats nach Saison und Gruppe (Hitting/Pitching/Fielding), ligaweite Stat-Leader, Game-Detail mit Boxscores und Play-by-Play sowie Transactions (Trades, Signings, Roster-Moves).
Wie finde ich die Stats eines bestimmten Spielers?
Löse die MLB-id des Spielers aus einer Team-Roster-Response auf und rufe dann player-stats mit dieser id, einer Saison und einer Stat-Gruppe (z. B. Hitting oder Pitching) auf.
Deckt die API live laufende Spiele ab?
Game- und Play-by-Play-Endpoints geben den aktuellen Zustand eines Spiels nach game_id zurück, inklusive Linescore und Decisions — sie spiegeln also je nachdem, wann du sie aufrufst, laufende oder abgeschlossene Spiele wider.
Wie unterscheidet sich MLB in dieser Serie von ESPN oder SofaScore?
ESPN und SofaScore decken Scoreboards und Standings über viele Sportarten und Ligen gleichzeitig ab. MLBs strukturierte API geht tiefer in eine einzelne Sportart — vollständige Saison-Stat-Splits, Rosters und Play-by-Play — für Produkte, die baseball-spezifische Tiefe statt liga-übergreifende Breite brauchen.