Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Retrieving Game, Season, and Split Statistics

Retrieve and render MLB game-level, season-level, and split statistics

This integration scenario explains how to retrieve and render MLB game statistics, season-to-date statistics, player profile data, and statistical splits using the Sportradar MLB API. It covers both team and player performance data, including game-level boxscore statistics, full season aggregates, situational splits, pitch metrics, and advanced statistical leaders.

This scenario is commonly used to:

  • Display team and player boxscore statistics
  • Build player stat pages and profile pages
  • Render team season dashboards
  • Power split views (home/away, day/night, venue, handedness, etc.)
  • Support advanced pitch metrics and Statcast leaderboards

This scenario focuses strictly on performance statistics and splits. Standings, rankings, and awards are covered separately in the Retrieving Standings and Rankings integration scenario.



Overview

MLB statistics are available at multiple levels:

  • Game-level statistics (single game performance)
  • Season-level statistics (cumulative totals by season and season type)
  • Split statistics (performance segmented by situation or context)
  • Advanced metrics (Statcast and pitch-level metrics)
  • Player Profile data (biographical information plus current and historical season totals)

From an integration perspective:

  • Game Summary / Extended Summary provide per-game team and player stats
  • Seasonal Statistics provide cumulative team and roster-level totals
  • Seasonal Splits provide contextual breakdowns
  • Player Profile provides player bio data plus historical season totals and splits
  • Seasonal Pitch Metrics provide advanced pitch analytics
  • League Leaders provide traditional season leaderboards (batting, pitching, etc.)
  • Statcast Leaders provide advanced tracking-based leaderboards

These feeds can be combined to build complete team pages, player profile pages, comparison tools, and advanced analytics dashboards.


Before You Begin: Seasonal Stat Update Timing

Most MLB statistics update shortly after a game is finalized. However, certain advanced seasonal metrics update once daily during the MLB season rather than immediately after each game.

If your application displays advanced metrics, be aware they may not reflect the most recently completed game until the next daily update cycle.

Examples of these metrics include the following:

MetricDefinition
warWins Above Replacement. A comprehensive metric estimating how many wins a player contributes above a replacement-level player. Applies to both hitters and pitchers.
wobaAdvanced offensive metric that assigns run values to different offensive outcomes (1B, 2B, HR, BB, etc.) to measure overall offensive contribution.
wraaMeasures the number of runs a player contributes above league average based on wOBA.
era_minusERA adjusted for league and park factors. Scaled so 100 is league average; lower than 100 is better.
fipPitching metric estimating performance based only on strikeouts, walks, hit batters, and home runs allowed.
xfipVariation of FIP that normalizes home run rate to league-average HR/FB ratio.
wgdpWeighted metric evaluating the run impact of grounding into double plays relative to league context.

Mid-Season Team Changes

Additionally, when players switch teams mid-season:

  • Season statistics are divided by team
  • Separate team entries are provided
  • An overall cumulative season total is also available

Design your UI accordingly if you display both team-specific and full-season totals.


Relevant Feeds

The following feeds provide MLB game, season, split, and advanced statistical data for teams and players.

FeedPurpose
Game BoxscoreHigh-level, structured boxscore statistics for a single game
Game SummaryGame-level team and player statistics
Game Extended SummaryExpanded game statistics and substitution tracking
Event TrackingEvent-level tracking data for all players on the field during a specific event (available with Statcast access)
Seasonal StatisticsSeason-to-date team and roster totals
Seasonal SplitsSeason-to-date split breakdowns
Player ProfilePlayer bio data, historical season totals, and splits
Seasonal Pitch MetricsAdvanced seasonal pitch analytics
League LeadersTraditional season leaderboards (batting and pitching categories)
Statcast LeadersLeague-wide Statcast leaderboards
GlossaryTranslate statistical and metric identifiers
Daily Change LogMonitor stat revisions and updates


High-Level Workflow

A typical statistics integration follows this flow:

Schedule or Season → IDs → Game Stats (Live and Postgame) → Season Stats and Splits → Player Profile → Advanced Metrics

  1. Identify the season_year and season_type context
  2. Retrieve team, player, and game IDs
  3. Pull game-level stats
  4. Pull season-level statistics and splits
  5. Retrieve Player Profile data for detailed player pages
  6. Enrich player profile data with advanced metrics


Integration Steps

Although there are multiple ways to access Sportradar statistics, the following steps represent a common and recommended integration flow.


1. Identify Season Context and Required IDs

Start by determining the correct:

  • season_year
  • season_type (e.g., PRE, REG, PST, AST, WBC)

Then retrieve the necessary identifiers:

  • team.id
  • player.id
  • game.id (if building game-level views)

Season and schedule discovery are covered in the Pulling Schedules guide, but at minimum your statistics workflow must establish these values before making downstream calls.


2. Retrieve Game-Level Statistics (Live and Postgame)

For single-game team and player statistical views, reference:

GET /mlb/{access_level}/v8/{language_code}/games/{game_id}/summary.{format}
<scoring>
      <inning number="1" sequence="1" runs="0" hits="1" errors="0"/>
      <inning number="2" sequence="2" runs="0" hits="2" errors="0"/>
      <inning number="3" sequence="3" runs="3" hits="3" errors="0"/>
      <inning number="4" sequence="4" runs="0" hits="1" errors="0"/>
      <inning number="5" sequence="5" runs="0" hits="1" errors="0"/>
      <inning number="6" sequence="6" runs="1" hits="2" errors="0"/>
      <inning number="7" sequence="7" runs="0" hits="1" errors="0"/>
      <inning number="8" sequence="8" runs="0" hits="1" errors="0"/>
      <inning number="9" sequence="9" runs="0" hits="1" errors="0"/>
      <inning number="10" sequence="10" runs="0" hits="0" errors="0"/>
      <inning number="11" sequence="11" runs="0" hits="1" errors="0"/>
    </scoring>
    <statistics>
      <hitting>
        <overall ab="43" lob="31" rbi="4" abhr="43" abk="3.583" bip="30" babip="0.433" bbk="0.333" bbpa="0.078" iso="0.139" obp="0.408" ops="0.873" seca="0.233" slg="0.465" xbh="4" pitch_count="192" lob_risp_2out="7" team_lob="14" ab_risp="17" hit_risp="3" rbi_2out="0" linedrive="18" groundball="9" popup="1" flyball="5" ap="51" avg=".326" gofo="1">
          <onbase s="10" d="3" t="0" hr="1" tb="20" bb="3" ibb="1" hbp="2" fc="1" roe="0" h="14" ci="0" rov="0" cycle="0"/>
          <runs total="4"/>
          <outcome klook="37" kswing="22" ktotal="59" ball="63" iball="0" dirtball="7" foul="28"/>
          <outs po="1" fo="4" fidp="0" lo="5" lidp="0" go="9" gidp="1" klook="1" kswing="11" ktotal="12" sacfly="0" sachit="2"/>
          <steal caught="1" stolen="1" pct="0.5" pickoff="0"/>
          <pitches count="192" btotal="72" ktotal="120"/>
        </overall>

These endpoints support:

  • Live boxscore and statistical tracking during games
  • Postgame statistics rendering
  • Historical single-game stat retrieval

The following example illustrates how Game Summary data can be rendered as a traditional boxscore view, displaying individual player performance for a single game.

Game feeds update during live play and remain available after games are final, making them suitable for both live experiences and archived game pages.

For live sequencing and state management, see the Tracking Live Games integration scenario.


3. Retrieve Season-Level Team and Player Statistics

Season-level totals require a team.id, season_year, and season_type. You can access seasonal stats by calling the Seasonal Statistics feed.

GET /mlb/{access_level}/v8/{language_code}/seasons/{season_year}/{season_type}/teams/{team_id}/statistics.{format}
<season xmlns="http://feed.elasticstats.com/schema/baseball/v8/statistics.xsd" id="a91f72a5-9812-4acd-b3fd-482cb31468cd" year="2025" type="REG">
  <team name="Diamondbacks" market="Arizona" abbr="AZ" id="25507be1-6a68-4267-bd82-e097d94b359b">
    <statistics>
      <hitting>
        <overall ab="5480" lob="2335" rbi="768" abhr="25.607" abk="4.164" bip="4014" babip="0.29" bbk="0.414" bbpa="0.088" iso="0.182" obp="0.325" ops="0.758" seca="0.296" slg="0.433" xbh="529" pitch_count="24049" lob_risp_2out="584" team_lob="1112" ab_risp="1379" hit_risp="344" rbi_2out="262" linedrive="978" groundball="1799" popup="297" flyball="1191" ap="6210" avg=".251" gofo="0.99">
          <onbase s="848" d="277" t="38" hr="214" tb="2372" bb="524" ibb="21" hbp="81" fc="127" roe="29" h="1377" ci="3" rov="0" cycle="0"/>
          <runs total="791"/>
          <outcome klook="4101" kswing="2725" ktotal="6826" ball="8036" iball="0" dirtball="505" foul="4333"/>
          <outs po="292" fo="850" fidp="3" lo="368" lidp="6" go="1378" gidp="109" klook="294" kswing="1022" ktotal="1316" sacfly="64" sachit="37"/>
          <steal caught="39" stolen="121" pct="0.756" pickoff="12"/>
          <pitches count="24049" btotal="8622" ktotal="15427"/>
        </overall>

This endpoint returns:

  • Cumulative team hitting, pitching, and fielding totals
  • Pitching breakdowns (overall, starters, bullpen)
  • Full roster season statistics

Seasonal aggregates reflect the cumulative results of completed games and update as official game statistics are finalized.


⚠️

Know When Seasonal Stats Update

Ensure to familiarize yourself with the data entry workflow and update frequencies so you know when to expect seasonal stat updates.


The response also includes player-level season totals, which provide the player.id needed for deeper player-specific integrations.


4. Retrieve Seasonal Splits

To add contextual breakdowns, call the Seasonal Splits feed.

GET /mlb/{access_level}/v8/{language_code}/seasons/{season_year}/{season_type}/teams/{team_id}/splits.{format}

Split data complements cumulative totals by breaking stats into the following categories:

  • Day vs Night
  • Home vs Away
  • Venue-specific performance
  • Other situational contexts

Splits are ideal for filtered dashboards and comparative analysis modules that highlight team performance across different contexts.


5. Enrich Your Experience with Player Profile Data

With a player.id obtained from Seasonal Statistics, retrieve career and cross-team context with the Player Profile endpoint.

GET /mlb/{access_level}/v8/{language_code}/players/{player_id}/profile.{format}

This feed provides:

  • Player biographical information
  • Team history
  • Multi-season statistics
  • Cross-season performance totals

The Player Profile endpoint is particularly useful when building full player pages that extend beyond a single team-season view.


6. Add Advanced Metrics, Leaderboards, and Drilldown Analytics

To provide league-wide context and ranking views, integrate both traditional and advanced leaderboards.

For standard seasonal leaderboards across batting and pitching categories, use the League Leaders feed:

GET /mlb/{access_level}/v8/{language_code}/seasons/{season_year}/{season_type}/leaders/statistics.{format}

League Leaders supports:

  • Traditional batting and pitching leaders
  • Category-based ranking views
  • Season leader modules for AL, NL, or MLB-wide comparisons

For advanced tracking-based leaderboards, use the Statcast Leaders feed:

GET /mlb/{access_level}/v8/{language_code}/seasons/{season_year}/{season_type}/leaders/statcast.{format}

Statcast Leaders supports:

  • Exit velocity and launch speed rankings
  • Advanced batted-ball and tracking metrics
  • “Top 10” Statcast-based modules

To enable deeper player-level analysis behind those rankings, use Seasonal Pitch Metrics:

GET /mlb/{access_level}/v8/{language_code}/players/{player_id}/pitch_metrics.{format}

Seasonal Pitch Metrics provide:

  • Pitch-type usage distribution (FA, CH, CU, etc.)
  • Average, minimum, and maximum velocity
  • Swing rate, strike percentage, and whiff rate
  • Multi-season pitch analytics for trend analysis

For event-level tracking data during a specific play or pitch, use the Event Tracking endpoint (Statcast access required):

GET /mlb/{access_level}/v8/{language_code}/games/{game_id}/events/{event_id}/tracking.{format}

Event Tracking provides:

  • Pitch-level tracking data and strike zone coordinates
  • Batted-ball metrics such as launch speed, launch angle, and projected distance
  • Runner movement and outcomes
  • Advanced tracking metrics for all players on the field during that event

How They Work Together

A common pattern is:

  1. Display leaders using League Leaders or Statcast Leaders
  2. Allow users to select a ranked player
  3. Retrieve Seasonal Pitch Metrics using that player.id
  4. Link to a specific game or play
  5. Retrieve Event Tracking data using game_id and event_id
  6. Surface detailed pitch mix, tracking coordinates, and on-field player metrics

This progression supports high-level ranking views, player-level analytical drilldowns, and event-level tracking insights within the same experience. For more on standings and official rankings, see Retrieving Standings and Rankings.


Best Practices

  • Use consistent team and player IDs across feeds.
  • Combine Seasonal Statistics with Seasonal Splits for filterable dashboards.
  • Use Player Profile for career totals and full-season aggregates across multiple teams, and use Seasonal Statistics when you need team-specific season totals by stint.
  • Use League Leaders for traditional statistical categories and Statcast Leaders for advanced tracking-based metrics.
  • Clearly label advanced metrics such as WAR and wOBA for end users.
  • Cache season-level data appropriately, since updates are less frequent than live game feeds.
  • Be aware that certain advanced seasonal metrics update daily rather than immediately after games conclude.
  • Use the Daily Change Log to monitor postgame updates and seasonal stat revisions.