Docs
Coverage MatrixDocumentationRelease LogLog InContact Us

Advanced Analytics FAQs

Frequently asked questions on Soccer Advanced Analytics v1

Click on the categories below or browse questions on the right panel.

Categories

.


Coverage


What leagues do you cover for soccer?

You can find all the leagues we cover, as well as a breakdown of advanced analytics offered, via our Coverage Matrix.


When is coverage information added to the endpoints?

On the first day of the season.


How do I find out the coverage for a particular match?

Find the node for coverage within the Summaries, Lineups, and Timeline endpoints.

Coverage nodes have three types: season level, group level, and sport_event level.

  • The season level describes data coverage you can expect for matches involved in that given season.
  • The group level is similar because there exists competitions where coverage levels differ at different stages or in different groups - mostly cup competitions.
  • The sport_event level describes the data depth of a specific match within the group and season.

Note: There are occasions when the sport_event coverage can vary from the anticipated season coverage. This node exists to highlight that instance and assist in handling any discrepancies.

<coverage type="sport_event">
    <sport_event_properties lineups="true" venue="true" extended_player_stats="true" extended_team_stats="true" basic_play_by_play="true" basic_player_stats="true" basic_team_stats="true"/>
</coverage>

How is coverage for a particular match defined?

The coverage nodes contain classifications of data types which are expressed as Boolean values or denoted as live or post.

<coverage type="sport_event">
    <sport_event_properties lineups="false" venue="false" extended_player_stats="false" extended_team_stats="false" 
      ballspotting="false" commentary="false" fun_facts="false" goal_scorers="false" scores="post" game_clock="false" 
      deeper_play_by_play="false" deeper_player_stats="false" deeper_team_stats="false" basic_play_by_play="false" 
      basic_player_stats="false" basic_team_stats="false"/>
</coverage>

How will a sport event behave when it is not covered with live scores?

When a sport_event is not covered live, the status and match_status will remain as not_started until results are entered post-match.

<sport_event_status status="not_started" match_status="not_started"/>

How are “Live” endpoints handled in the API?

Sport Events appear in the feed 10 minutes before the scheduled start time and are removed 10 minutes after the Sport Event is ended. Live endpoints include: Live Schedules.


How are friendlies handled in the Summary endpoints?

The Summary endpoints return all Friendlies played in the last 2 weeks and scheduled for the next 4 weeks.


What level of coverage is offered for friendly competitions?

Friendly competitions are handled uniquely, with coverage being set on a case-by-case basis. Selected matches will be scouted and will therefore have live coverage. We would suggest checking sport_event_properties within each sport_event to understand the coverage set for a particular match.


Why does the coverage of a cup competition not match the data?

For cup competitions, coverage levels may vary from the early rounds to latter stages. Coverage properties are set at a competition level and display the best coverage we offer for a sport event in this competition.


Why is goals_scored the only statistic available in Season Leaders and Season Competitor Statistics for some competitions?

This is determined by the assists="false" property in the Season Info feed which indicates that stats below goals_scored are not guaranteed for the competition in question.

<sport_event_properties basic_play_by_play="false" basic_player_stats="false" basic_team_stats="false" 
extended_player_stats="false" extended_team_stats="false" deeper_play_by_play="false" deeper_team_stats="false" 
deeper_player_stats="false" lineups="false" goal_scorers="false" scores="live" assists="false"/>


Integration


How can I find the values for various enum data points within the API?

Many enum values are listed in the FAQ below. For the most up-to-date values, please see the Schema section of the OpenAPI specification here


What format are date fields presented in?

When we present date only values we present these in the ISO 8601 standard format.

ex: 2013-04-03

We use these for attributes that have date and no time (such as birthdate). For more information: https://en.wikipedia.org/wiki/ISO_8601


What format are the date/time fields presented in?

All of our Date/Time attributes are in UTC, presented in the ISO 8601 standard format.

ex: 2013-04-03T18:15:00+00:00

For more information: https://en.wikipedia.org/wiki/ISO_8601


How do I locate the TTL (Time to Live)/cache on an API endpoint?

The cache (in seconds) can be accessed in the returned header information on each RESTful API call, under cache-control.

ex. cache-control: max-age=1, public, s-maxage=1 or
cache-control: public, must-revalidate, max-age=120



Sport Event Statuses


What are the valid sport_event_statusstatus values?

  • not_started – The match is scheduled to be played
  • started - The match has begun
  • live – The match is currently in progress
  • postponed – The match has been postponed to a future date
  • suspended - The match has been suspended
  • match_about_to_start - The match is about to begin
  • delayed – The match has been temporarily delayed and will be continued. Typically appears prior to match start
  • interrupted - The match began, but coverage has stopped for a short time. Note that match scores may not be updated during this period, the last recorded match score will be displayed instead
  • cancelled – The match has been cancelled and will not be played
  • ended – The match is over
  • closed – The match results have been confirmed

What are the valid sport_event_statusmatch_status values?

  • not_started – The match is scheduled to be played
  • started - The match has begun
  • 1st_half – The match is in the first half
  • 2nd_half – The match is in the second half
  • overtime – The match is in overtime
  • 1st_extra – The match is in the first extra period
  • 2nd_extra – The match is in the second extra period
  • awaiting_penalties – Waiting for announcement of penalties
  • penalties – Penalties are ongoing
  • awaiting_extra_time – Waiting on referee to announce extra time
  • interrupted – The match has been interrupted
  • abandoned – The match has been abandoned
  • postponed – The match has been postponed to a future date
  • start_delayed – The match has been temporarily delayed and will be continued
  • cancelled – The match has been cancelled and will not be played
  • halftime – The match is in halftime
  • extra_time_halftime – The match is in extra time halftime
  • ended – The match has ended
  • aet – The match has ended after extra time
  • ap – The match has ended after penalties


Event & Period Types


What are the possible event types?

  • break_start
  • canceled_decision_to_var
  • corner_kick
  • decision_to_var
  • decision_to_var_over
  • free_kick
  • goal_kick
  • injury
  • injury_return
  • injury_time_shown
  • match_ended
  • match_started
  • offside
  • penalty_awarded
  • penalty_kick
  • penalty_missed
  • penalty_shootout
  • period_score
  • period_start
  • player_back_from_injury
  • possible_decision_to_var
  • red_card
  • save
  • score_change
  • shot_off_target
  • shot_on_target
  • shot_saved
  • substitution
  • throw_in
  • video_assistant_referee
  • video_assistant_referee_over
  • yellow_card
  • yellow_red_card

* Availability of Video Assistant Referee is subject to the VAR capabilities of the league.


What are the possible period_type values?

  • regular_period
  • overtime
  • penalties
  • pause
  • awaiting_extra
  • extra_time_halftime
  • interrupted
<event id="1721757571" type="match_started" time="2024-04-16T19:01:48+00:00"/>
  <event id="1721757569" type="period_start" time="2024-04-16T19:01:48+00:00" period="1" period_type="regular_period" period_name="regular_period"/>
    <event id="1721758935" type="free_kick" time="2024-04-16T19:03:37+00:00" match_time="2" match_clock="1:49" competitor="away" x="49" y="18" period="1" period_type="regular_period">
      <players>
      <player id="sr:player:138156" name="Can, Emre"/>
        </players>
<commentaries>
        <commentary text="Free kick Atletico."/>
          </commentaries>
</event>
<event id="1721759321" type="throw_in" time="2024-04-16T19:04:08+00:00" match_time="3" match_clock="2:20" competitor="home" x="26" y="0" period="1" period_type="regular_period">
  <commentaries>
  <commentary text="Slavko Vincic awards the home team a throw-in."/>
    </commentaries>
</event>
"timeline": [
  {
    "id": 1721757571,
    "type": "match_started",
    "time": "2024-04-16T19:01:48+00:00"
  },
  {
    "id": 1721757569,
    "type": "period_start",
    "time": "2024-04-16T19:01:48+00:00",
    "period": 1,
    "period_type": "regular_period",
    "period_name": "regular_period"
  },
  {
    "id": 1721758935,
    "type": "free_kick",
    "time": "2024-04-16T19:03:37+00:00",
    "match_time": 2,
    "match_clock": "1:49",
    "competitor": "away",
    "players": [
      {
        "id": "sr:player:138156",
        "name": "Can, Emre"
      }
    ],
    "x": 49,
    "y": 18,
    "period": 1,
    "period_type": "regular_period",
    "commentaries": [
      {
        "text": "Free kick Atletico."
      }
    ]
  },
  {
    "id": 1721759321,
    "type": "throw_in",
    "time": "2024-04-16T19:04:08+00:00",
    "match_time": 3,
    "match_clock": "2:20",
    "competitor": "home",
    "x": 26,
    "y": 0,
    "period": 1,
    "period_type": "regular_period",
    "commentaries": [
      {
        "text": "Slavko Vincic awards the home team a throw-in."
      }
    ]
  },
  {
    "id": 1721760077,
    "type": "shot_on_target",
    "time": "2024-04-16T19:05:15+00:00",
    "match_time": 4,
    "match_clock": "3:26",
    "competitor": "home",
    "players": [
      {
        "id": "sr:player:862396",
        "name": "Ryerson, Julian"
      }
    ],
    "x": 95,
    "y": 76,
    "period": 1,
    "period_type": "regular_period",
    "commentaries": [
      {
        "text": "Julian Ryerson of Dortmund smashes in a shot on target. The keeper saves, though."
      }
    ]
  },
  {
    "id": 1721760083,
    "type": "shot_saved",
    "time": "2024-04-16T19:05:15+00:00",
    "match_time": 4,
    "match_clock": "3:26",
    "competitor": "away",
    "period": 1,
    "period_type": "regular_period"
  },


Which Timeline event types can be associated with a player?

  • corner_kick
  • injury
  • injury_return
  • offside
  • penalty_awarded
  • penalty_kick
  • penalty_missed
  • penalty_shootout
  • player_back_from_injury
  • red_card
  • score_change
  • shot_off_target
  • shot_on_target
  • substitution
  • yellow_card
  • yellow_red_card
<event id="1721787551" type="yellow_card" time="2024-04-16T19:47:26+00:00" match_time="45" match_clock="45:00" 
       competitor="away" stoppage_time="1" stoppage_time_clock="0:37" period="1" period_type="regular_period">
  <players>
    <player id="sr:player:353130" name="Hermoso, Mario"/>
  </players>
  <commentaries>
    <commentary text="Mario Hermoso (Atletico) has received a yellow card from Slavko Vincic."/>
  </commentaries>
</event>
{
  "id": 1721787305,
  "type": "injury_time_shown",
  "time": "2024-04-16T19:46:54+00:00",
  "match_time": 45,
  "match_clock": "45:00",
  "stoppage_time": 1,
  "stoppage_time_clock": "0:05",
  "period": 1,
  "period_type": "regular_period",
  "injury_time_announced": 2
},
{
  "id": 1721787551,
  "type": "yellow_card",
  "time": "2024-04-16T19:47:26+00:00",
  "match_time": 45,
  "match_clock": "45:00",
  "competitor": "away",
  "players": [
    {
      "id": "sr:player:353130",
      "name": "Hermoso, Mario"
    }
  ],
  "stoppage_time": 1,
  "stoppage_time_clock": "0:37",
  "period": 1,
  "period_type": "regular_period",
  "commentaries": [
    {
      "text": "Mario Hermoso (Atletico) has received a yellow card from Slavko Vincic."
    }
  ]
},

How does the possible_goal event type work?

This event will occur immediately if one team scores a goal or if they are in a very clear scoring opportunity (1on1 with the goalkeeper, clear shot at an empty net, etc).



Pagination


Why can't I find a particular match in the Daily Summaries, Season Summaries or Sport Events Updated endpoints?

These endpoints support pagination and return 200 entries by default. To return more matches, an additional query string parameter must be used after your API key. For example, appending &start=200 will return the next 200 entries per page, &start=400 will return the next 200, and so on.



Probabilities

What are markets and what are the different markets?

Markets is something you can bet on that we provide probabilities for. Over time we intend to provide more and more markets in the API. Currently the only market we provide is 3-way (will the home team win? Or the away team? Or will it be a draw?).


What are the valid outcomes for probabilities?

  • home_team_winner
  • away_team_winner
  • draw


Lineups / Rosters


When does the Lineups Availability update?

The lineups_availability data is updated 30 days before the sport event is scheduled to begin.


When will lineups confirmed show as true?

Lineups information displays as it is entered. Once complete, we confirm lineups and the lineups_confirmed attribute updates to true. This only appears for matches with lineups_availability="pre".


What are the valid lineup types (player position) values?

  • goalkeeper
  • defender
  • midfielder
  • forward

What are the possible values for sport_event_propertieslineups_availability in the Summary and Timeline endpoints?

  • pre
  • post

What are the valid lineups descriptions (player tactical position) values?

  • goalkeeper
  • right back
  • central defender
  • left back
  • right winger
  • central midfielder
  • left winger
  • striker

How is the order value in the Lineups endpoint organized?

Order number 1 is always the goalie (star marking) and formations as well as numbering should start with the goalkeeper.

In the example diagram the formation 4-2-3-1 is used.

4 is the number of players in the line in front of the goalkeeper, then comes the line with 2 players and so on.

Numbering in every line starts at the right-hand side of the goalkeeper – this causes the numbering to be mirrored for the home and away team.


Do you have player transfer data available?

We use roles from player profiles to create a Season Transfers endpoint. This displays any player recently assigned to a team in a season covered with player_transfer_history="true".

Transfers can include youth players recently added to a matchday squad. If there is no previous club within 10 days, then this will be understood to be a free agent and therefore no from_competitor will display.

For transfer_date, we use multiple sources and cannot guarantee the accuracy.


What are the possible reasons for a player to appear in the Missing Players endpoint?

  • injured
  • ill
  • other
  • suspension


Ball Location


How does the ball location attribute work?

Our scouts mark down the x (lateral) and y (longitudinal) coordinates as observed on the pitch. The data can come in sporadically as events on the field play out, but new ball_location data is potentially available every 1 sec. This is only available for matches with ballspotting="true".

The element ball_locations stores the last four known ball locations, after which the data is not available unless it corresponds with another event in the timeline such as throw_in or shot_on_goal. The ball_location order illustrates the most recent location as 4 and the oldest location as 1.


What is the scale of the X Y coordinates?

The pitch we use is 100 by 100. Here is a layout of the pitch:

X = Horizontal position on the pitch. X is a number between 0 and 100. The reference point 0 is at the home team’s goal.

Y = Vertical position on the pitch. Y is a number between 0 and 100. The reference point 0 is on the top of the pitch where the home team’s goal is on the left hand side.


What are the possible values for match situation status (match_situation.status)?

Listed below are the values and definitions for match_situation - status. These can be leveraged to determine the status of a ball in play.

  • safe - Team in possession of the ball is inside their defensive half
  • dangerous - Team in possession is in the opponent’s half but not near the penalty box
  • attack - Team in possession is in the opponent’s half, near the penalty box


Past Season Data


Why does the coverage of past seasons not match the data?

Coverage properties are set at a competition level and only reflect the current or last season of that competition. Previous seasons may have greater or lesser coverage.


How long is full match data available in the API?

Match data is archived after one year and you will only be able to service basic score information from the API.

A historical statistics API for Soccer is on the roadmap, but no ETA is available at this time.


How are seasonal competitor statistics handled?

Statistics from any qualification rounds will not be displayed. The feed will only display data from the main competition.



Standings / Tournaments


What are the valid standings types in the Standings endpoint?

  • total
  • home
  • away
  • first_half_total
  • first_half_home
  • first_half_away
  • second_half_total
  • second_half_home
  • second_half_away

What are the valid current outcome values?

  • AFC Champions League
  • AFC Cup
  • CAF Confederation Cup
  • Champions League
  • Champions League Qualification
  • Champions Round
  • Championship Round
  • Club Championship
  • Conference League Qualification
  • Copa Libertadores
  • Copa Libertadores Qualification
  • Copa Sudamericana
  • Cup Winners
  • Eliminated
  • European Cup
  • Final Four
  • Final Round
  • Finals
  • Group Matches
  • International Competition
  • Main Round
  • Next Group Phase
  • Placement Matches
  • Playoffs
  • Preliminary Round
  • Promotion
  • Promotion Playoff
  • Promotion Playoffs
  • Promotion Round
  • Qualification Playoffs
  • Qualified
  • Qualifying Round
  • Relegation
  • Relegation Playoff
  • Relegation Playoffs
  • Relegation Round
  • Semifinal
  • Top Six
  • UEFA Conference League
  • UEFA Conference League Qualification
  • UEFA Cup
  • UEFA Cup Qualification
  • UEFA Europa League
  • UEFA Europa League Qualification
  • UEFA Intertoto Cup

What are the possible values for stagephase?

  • 1st_part_of_season_1st_leg
  • 2nd_part_of_season_2nd_leg
  • 3rd_round
  • champions_round
  • conference
  • division
  • final_eight
  • final_four
  • final_phase
  • final_round
  • final_stage
  • grand_final
  • grand_finals
  • group_phase_1
  • group_phase_2
  • knockout_stage
  • main_round_1
  • main_round_2
  • none
  • placement_matches
  • placement_matches_13_to_16
  • placement_matches_5_to_8
  • placement_matches_9_to_12
  • placement_matches_9_to_16
  • playoffs
  • playout
  • pre-season
  • preliminary_round
  • president_cup
  • promotion_playoffs
  • promotion_round
  • qualification
  • qualification_playoffs
  • qualification_to_allsvenskan
  • regular season
  • relegation_playoffs
  • relegation_promotion
  • relegation_promotion_round
  • relegation_round
  • stage_1
  • stage_1 no_stats
  • stage_2
  • stage_2 no_stats
  • stage_3
  • uefa_europa_league_playoffs

Are Live Standings available?

Live standings are delivered by default in the Season Standings endpoint. Live standings use an automatic set of tiebreaker rules that are calculated based on the scores while matches are in progress.

We recommend adding the parameter live=false to a Season Standings request to retrieve standings when matches are not in progress. This will consider any additional tie-break criteria that a competition may use if competitors are level.


Why does the change attribute not update for live standings?

The change attribute is only available post-match and will display movement from the previous gameweek/round.

<standing rank="5" played="16" win="8" loss="4" draw="4" goals_for="23" goals_against="24" goals_diff="-1" 
points="28" current_outcome="Promotion Playoffs" change="1" points_per_game="1.75">
    <competitor id="sr:competitor:21" name="Preston North End" country="England" country_code="ENG" abbreviation="PNE" gender="male" form="DDLWW"/>
</standing>
<standing rank="6" played="16" win="8" loss="6" draw="2" goals_for="27" goals_against="17" goals_diff="10" 
points="26" current_outcome="Promotion Playoffs" change="2" points_per_game="1.63">
    <competitor id="sr:competitor:41" name="Sunderland AFC" country="England" country_code="ENG" abbreviation="SUN" gender="male" form="LLWDW"/>
</standing>
<standing rank="7" played="16" win="7" loss="4" draw="5" goals_for="26" goals_against="17" goals_diff="9" 
points="26" change="-2" points_per_game="1.63">
    <competitor id="sr:competitor:8" name="West Bromwich Albion" country="England" country_code="ENG" abbreviation="WBA" gender="male" form="DWWWL"/>
</standing>

What are the possible values for cup_roundstate in the Season Links endpoint?

Listed below are the values and definitions for cup_round - state. These can be leveraged to determine the status of a cup round.

  • empty - A matchup has been created but neither the match details nor the competitors are known.
  • unseeded_fixture - Match details are known but competitors are unknown.
  • partial_seeded - One competitor is known.
  • partial_seeded_fixture - Match details and one competitor are known.
  • seeded - Both competitors are known.
  • seeded_fixture - Match details and both competitors are known.
  • unstarted - Match(es) have been added.
  • on_going - The first match has started.
  • decided - The last match has ended.
  • winner - The winner is known.
  • cancelled – The matchup has been cancelled.

How are group IDs delivered in the stage array with the various types?

With the type of "league" they will have a sr:league prefix.
With the type of "cup" they will have a sr:cup prefix.



Video Assistant Referee (VAR)


Do you cover VAR events?

VAR events are supported with events video_assistant_referee & video_assistant_referee_over. However, we cannot guarantee the accuracy or frequency of these events.


What are the possible values for video assistant referee?

  • goal
  • penalty
  • red_card
  • no_red_card
  • no_penalty
  • no_goal

What are the possible values for video assistant referee over?

  • call_stands
  • call_overturned

What are the possible values for referee_assistant type?

  • first_assistant_referee
  • second_assistant_referee
  • fourth_official
  • video_assistant_referee
  • first_additional_assistant
  • second_additional_assistant
  • third_additional_assistant


Data Point Definitions

How do you define the key data points?

Data points and their descriptions can be found in our Data Dictionary.



Red / Yellow Cards


What are the possible values for eventcard_description in the Timeline feeds?

  • pre_match
  • half_time
  • post_match
  • player_on_bench
  • first_half
  • second_half
  • during_penalty_shootout


Leaders


What are the possible values for listtype in the Season Leaders endpoint?

  • points
  • goals
  • assists
  • red_cards
  • yellow_cards
  • yellow_red_cards
  • own_goals
  • shots_on_target
  • shots_off_target
  • goals_by_head
  • goals_by_penalty
  • clearances
  • interceptions
  • chances_created
  • crosses_successful
  • passes_successful
  • long_passes_successful
  • tackles_successful
  • clean_sheets
  • penalties_saved
  • dribbles_completed
  • loss_of_possession
  • minutes_played

Note: Not all values may be available for each season, based on the coverage available for that season.



Weather


What are the possible weather conditions?

  • indoor
  • good
  • medium
  • bad
  • extreme

What are the possible pitch values?

  • good
  • medium
  • bad


Simulations


Are simulations available for Soccer Advanced Analytics?

Simulations for Advanced Analytics are not currently available.



Replay Matches


How are replay cup matches handled?

Within the Summary, Timeline, or Lineups endpoints you can locate the round data for a given match. In that round data you can find the number of matches in the cup round (cup_round_number_of_sport_events) and the number of the given match in the cup round (cup_round_sport_event_number).

The values for cup_round_sport_event_number are detailed below:

  • 1 = Replay
  • 2 = 1st Replay
  • 3 = 2nd Replay


TV Coverage


Which regions are covered with TV channel data?

We offer network TV data for the United States.

This will be available for:

  • MLS
  • World Cup
  • EPL
  • UEFA Champions League
  • Bundesliga
  • Liga MX
  • Gold Cup.


Sport Events Updated


What prompts a match to appear in Sport Events Updated?

Changes to score, match status, or schedule in last 24 hours cause a match to display in this endpoint.



Commentary


When are fun facts added to the Sport Event Fun Facts endpoint?

Fun facts appear in Sport Event Fun Facts 7 days before a match and are available for a fixed amount of time (14 days typically).



Minutes Played


How is the minutes_played statistic calculated?


How is the minutes_played statistic calculated?

Minutes played is calculated based on 90 minutes in the match. We do not include stoppage_time.




🙋

More questions?

Reach out to [email protected] for further assistance.