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?
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_status
– status
values?
sport_event_status
– status
values?not_started
– The match is scheduled to be playedstarted
- The match has begunlive
– The match is currently in progresspostponed
– The match has been postponed to a future datesuspended
- The match has been suspendedmatch_about_to_start
- The match is about to begindelayed
– The match has been temporarily delayed and will be continued. Typically appears prior to match startinterrupted
- 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 insteadcancelled
– The match has been cancelled and will not be playedended
– The match is overclosed
– The match results have been confirmed
What are the valid sport_event_status
– match_status
values?
sport_event_status
– match_status
values?not_started
– The match is scheduled to be playedstarted
- The match has begun1st_half
– The match is in the first half2nd_half
– The match is in the second halfovertime
– The match is in overtime1st_extra
– The match is in the first extra period2nd_extra
– The match is in the second extra periodawaiting_penalties
– Waiting for announcement of penaltiespenalties
– Penalties are ongoingawaiting_extra_time
– Waiting on referee to announce extra timeinterrupted
– The match has been interruptedabandoned
– The match has been abandonedpostponed
– The match has been postponed to a future datestart_delayed
– The match has been temporarily delayed and will be continuedcancelled
– The match has been cancelled and will not be playedhalftime
– The match is in halftimeextra_time_halftime
– The match is in extra time halftimeended
– The match has endedaet
– The match has ended after extra timeap
– 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?
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?
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 a select number of results by default. To return more matches, an additional query string parameter must be used after your API key. Visit an endpoint page for minimum and maximum result values.
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_properties
– lineups_availability
in the Summary and Timeline endpoints?
sport_event_properties
– lineups_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
)?
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 halfdangerous
- Team in possession is in the opponent’s half but not near the penalty boxattack
- 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 stage
– phase
?
stage
– phase
?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?
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_round
– state
in the Season Links endpoint?
cup_round
– state
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?
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 event
– card_description
in the Timeline feeds?
event
– card_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 list
– type
in the Season Leaders endpoint?
list
– type
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
= Replay2
= 1st Replay3
= 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
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.