logo
theme
Premier League Live Scores
FREEMIUM
By heisenbug
Updated 9 months ago
Premier League Live Scores Overview

Premier League Live Scores API allows to retrieve historical data as well as current season results, scorers, lineups, substitutes, events, statistics, odds and much more all with live updates, for the top professional English football league. And more is coming…

provider
rating
Followers on API
Follow this API
resourcesTerms of Service
More Details

Premier League Live Scores

The Premier League Live Scores is already, without any doubt, in so little time from its birth, the best API available on the web for the top professional English football league and don't believe we have finished, indeed we are only at the start.
You too can help us to make even better this API asking on the API Support tab for the features you dream, our developers will try to make them real.
In the meantime give a look at the always growing list of its unique features.
Have fun!

The Premier League Ninja Team

Season results

It's possible to retrieve all the 2016-17 season matches calling the endpoint
/api/premierleague
You can call the API
-without submitting any parameter, to get all the matches for the day (if there isn't any match for the day you will get a 500 server error, that it isn't count as an API call)
-submitting the parameter date, to retrieve the matches for that date (in the format mmddyyyy)
-submitting the parameter team1, to retrieve the matches that the team has played at home (together with team2 return that very match)
-submitting the parameter team2, to retrieve the matches that the team has played away (together with team1 return that very match)
-submitting the parameter matchday, to retrieve the matches for that round

If matches are already played, the API will give you data about red cards number if any, referee , final and first half scores too, otherwise only the matches that will be played.
here it is an example response for a call with a match day already played (matchday=1)

 {"matches":[
   {"team1":{"teamScore":1,"teamName":"Manchester United","firstHalfScore":1},
     "team2":{"teamScore":0,"teamName":"Tottenham","firstHalfScore":0},
     "time":"FT","referee":"Jonathan Moss","when":"Saturday, Aug 8 2015"},
   {"team1":{"teamScore":0,"teamName":"Bournemouth","firstHalfScore":0},
     "team2":{"teamScore":1,"teamName":"Aston Villa","firstHalfScore":0},
     "time":"FT","referee":"Mark Clattenburg","when":"Saturday, Aug 8 2015"},
   .....
   .....
 ]}

and here it is an example response for a call wit a match day not yet played (matchday=20)

 {"matches":[
    {"team1":{"teamName":"Watford"},"team2":{"teamName":"Manchester City"},"when":"Saturday, Jan 2 2016"},
    {"team1":{"teamName":"West Bromwich Albion"},"team2":{"teamName":"Stoke"},"when":"Saturday, Jan 2 2016"},
    {"team1":{"teamName":"West Ham"},"team2":{"teamName":"Liverpool"},"when":"Saturday, Jan 2 2016"},
    {"team1":{"teamName":"Arsenal"},"team2":{"teamName":"Newcastle United"},"when":"Saturday, Jan 2 2016"},
    {"team1":{"teamName":"Crystal Palace"},"team2":{"teamName":"Chelsea"},"when":"Saturday, Jan 2 2016"},
    {"team1":{"teamName":"Everton"},"team2":{"teamName":"Tottenham"},"when":"Saturday, Jan 2 2016"},
    {"team1":{"teamName":"Leicester"},"team2":{"teamName":"Bournemouth"},"when":"Saturday, Jan 2 2016"},
    {"team1":{"teamName":"Manchester United"},"team2":{"teamName":"Swansea"},"when":"Saturday, Jan 2 2016"},
    {"team1":{"teamName":"Norwich"},"team2":{"teamName":"Southampton"},"when":"Saturday, Jan 2 2016"},
    {"team1":{"teamName":"Sunderland"},"team2":{"teamName":"Aston Villa"},"when":"Saturday, Jan 2 2016"}
 ]}

Take in mind that this API returns only final results ("time":"FT") or not already played matches, and the final ones only after a while the matches are really finished (usually always within 24 hours); if you need live updates you have to set thelive parameter to true (in this case time returns the minute for the match), if there isn't any playing match for the parameters specified, the API give you the 500 error message 'No games found'.
Take in mind that a live request can continue to give you the result even after a while, usually some hours, a match is finished; as soon as the API stop to give you the result for the match, you can get the result again removing the live parameter.

You can get historical results either setting the optional parameter season (default value 2016-17); for now you can get results from the season 2010-11.
Historical data are only available with the MEGA plan.

Match events

The premier League Live Scores API let you trace two different kind of events
Team events
Module-Start (tell you the team module, that is how players are on the pitch, as soon as the match start)
Module-Change (tell you each module change occurred during the match)
Players events
Yellow-Card
2ND-Yellow-Card
Red-Card
In and Out (substitutions)
Missed-Penalty (player fail to score from penalty)
Saved-Penalty (keeper save a penalty)
Saved-Goal (player avoid an already done goal clearance off the line)
Shot-On-Post
Error-Goal (player error that lead to a goal)
Assist-Goal (when a player intentionally do an assist that lead to a goal)
Goal-Disallowed
Penalty-Won (the player that won the penalty)
Penalty-Commited (the player that committed a penalty foul)
Changed-Captain (the new captain player if the previous goes out)

All teams and players events give you the minute the event occurred,
teams events have a value attribute more that get the value for the event (the team module),
players events instead a list of players name related to the event.

For example

 ....
{"eventName":"Module-Start","value":"4411","minute":"0'"}     *value is the formation module 4-4-1-1
....
{"players":[{"playerName":"Odion Ighalo"}],"eventName":"Shot-On-Post","minute":"19'"}
....

There are two API version to get the data events, that is, with (/api/live/premierleague/match/events) or without live updates (/api/premierleague/match/events).
The version without live update get you the data only after a while the match is finished (usually within few hours), the one with live updates instead get you real time data.
When the match is finished the live version continue to get you the answer that will be the same you get with the no live one if this last one has been synchronised (usually always within 24 hours).
All the two API versions require two parameters
team1 that is the home team name
and
team2 that is the away team name
and returns all the events for the two teams
for example with
team1= Tottenham
and
team2=Aston Villa
you will get

  {"team1":
    {"teamName":"Tottenham",
    "events":[
      {"eventName":"Module-Start","value":"4231","minute":"0'"},
      {"players":[{"playerName":"Mousa Dembélé"}],"eventName":"Out","minute":"69'"},
      {"players":[{"playerName":"Ryan Mason"}],"eventName":"In","minute":"69'"},
      {"players":[{"playerName":"Danny Rose"}],"eventName":"Out","minute":"81'"},
      {"players":[{"playerName":"Ben Davies"}],"eventName":"In","minute":"81'"},
      {"players":[{"playerName":"Josh Onomah"}],"eventName":"In","minute":"88'"},
      {"players":[{"playerName":"Dele Alli"}],"eventName":"Out","minute":"88'"}
    ]},
    "team2":
    {"teamName":"Aston Villa",
     "events":[
       {"eventName":"Module-Start","value":"4231","minute":"0'"},
       {"players":[{"playerName":"Ashley Westwood"}],"eventName":"Out","minute":"37'"},
       {"players":[{"playerName":"Jordan Ayew"}],"eventName":"In","minute":"37'"},
       {"players":[{"playerName":"Jordan Ayew"}],"eventName":"Yellow-Card","minute":"41'"},
       {"players":[{"playerName":"Gabriel Agbonlahor"}],"eventName":"Out","minute":"45'"},
       {"players":[{"playerName":"Rudy Gestede"}],"eventName":"In","minute":"45'"},
       {"eventName":"Module-Change","value":"4411","minute":"49"},
       {"players":[{"playerName":"Jack Grealish"}],"eventName":"Out","minute":"65'"},
       {"players":[{"playerName":"Carles Gil"}],"eventName":"In","minute":"65'"},
       {"players":[{"playerName":"Kieran Richardson"}],"eventName":"Yellow-Card","minute":"67'"},
       {"eventName":"Module-Change","value":"4231","minute":"68"},
       {"players":[{"playerName":"Leandro Bacuna"}],"eventName":"Shot-On-Post","minute":"78'"},
       {"players":[{"playerName":"Alan Hutton"}],"eventName":"Yellow-Card","minute":"91'"}
     ]}}

For now the API returns data for the current season only.

Talend Open Studio integration

You don't need to be a developer or to recruit one to use this API, thanks to his easy integration with the Talend Open Studio suite.
At the Talend marketplace you can now download for free the tFootballDataInput component that let you to easily consume the mashape Premier League API into your integration jobs in a blink just using your Mashape key and without writing a single line of code!
The component is now released in beta version v.04 that integrates only some features now available on Mashape, but we count to release new versions with weekly schedule to add more.
The component let you either to easily access other European Football Leagues Mashape API that is, La Liga, Ligue 1, Bundesliga and Serie A.
For any trouble using the component the preferred mode to get support is to ask to the community at the Talend Forum, instead for any bug or new features request is better to open a ticket on the API Support.
For a demo on how using Talend and the tFootballDataInput component take a look at this YouTube demo here.

Lineups, substitutes and coaches

It's possible to get data about teams players and coaches for a game using the following API
/api/premierleague/formations
The API requires two mandatory attributes, team1 and team2 to select the game of interest.
The result is a JSON object with two properties, team1 and team2, where each team property is an object containing the teamName and the players properties, where the first one is the name of the team (equals to the one in the request) and the second one an object with the arrays lineups and substitutes with each array item equals to an object containing the playerNamber, that is the shirt number for the player and the playerName attribute.
Captain players are identified by the property isCaptain.
Following an example response for the request
team1=Everton&team2=Manchester+United

 {"team1":{
 "teamName":"Everton",
 "players":{
   "substitutes":[
     {"playerNumber":"1","playerName":"Joel Robles"},
     {"playerNumber":"9","playerName":"Arouna Koné"},
     {"playerNumber":"11","playerName":"Kevin Mirallas"},
     {"playerNumber":"19","playerName":"Gerard Deulofeu"},
     {"playerNumber":"21","playerName":"Leon Osman"},
     {"playerNumber":"25","playerName":"Ramiro Funes Mori"},
     {"playerNumber":"27","playerName":"Tyias Browning"}
   ],
   "lineups":[
     {"playerNumber":"24","playerName":"Tim Howard"},
     {"playerNumber":"23","playerName":"Seamus Coleman"},
     {"playerNumber":"32","playerName":"Brendan Galloway"},
     {"playerNumber":"18","playerName":"Gareth Barry"},
     {"playerNumber":"5","playerName":"John Stones"},
     {"playerNumber":"6","playerName":"Phil Jagielka"},
     {"playerNumber":"12","playerName":"Aaron Lennon"},
     {"playerNumber":"16","playerName":"James McCarthy"},
     {"playerNumber":"10","playerName":"Romelu Lukaku"},
     {"playerNumber":"20","playerName":"Ross Barkley"},
     {"playerNumber":"14","playerName":"Steven Naismith"}
   ]},
   "coach":"Roberto Martinez"},
 "team2":
 {"teamName":"Manchester United","
 players":
   {"substitutes":[
     {"playerNumber":"7","playerName":"Memphis Depay"},
     {"playerNumber":"16","playerName":"Michael Carrick"},
     {"playerNumber":"17","playerName":"Daley Blind"},
     {"playerNumber":"27","playerName":"Marouane Fellaini"},
     {"playerNumber":"35","playerName":"Jesse Lingard"},
     {"playerNumber":"44","playerName":"Andreas Pereira"},
     {"playerNumber":"50","playerName":"Sam Johnstone"}
   ],
   "lineups":[
     {"playerNumber":"1","playerName":"David de Gea"},
     {"playerNumber":"36","playerName":"Matteo Darmian"},
     {"playerNumber":"5","playerName":"Marcos Rojo"},
     {"playerNumber":"31","playerName":"Bastian Schweinsteiger"},
     {"playerNumber":"4","playerName":"Phil Jones"},
     {"playerNumber":"12","playerName":"Chris Smalling"},
     {"playerNumber":"8","playerName":"Juan Mata"},
     {"playerNumber":"28","playerName":"Morgan Schneiderlin"},
     {"playerNumber":"10","playerName":"Wayne Rooney"},
     {"playerNumber":"21","playerName":"Ander Herrera"},
     {"playerNumber":"9","playerName":"Anthony Martial"}
   ]},
   "coach":"Louis van Gaal"}}

The lineups players are ordered from goalkeeper to forward, to get more insight on how players are on the pitch see the events Module-Start and Module-Change you can get from the match events API without forgetting the attribute position returned by the player match statistics API.

You can get the formations starting from 30 minutes before a match start using thelive parameter set to true, if the API give you the 500 error message, that means the game is already finished from a while or it's not playing or not going to play.
Take in mind that a live request can continue to give you the result even after a while, usually some hours, a match is finished; as soon as the API stop to give you the result for the match, you can get the result again removing the live parameter.

The APIs can either respond with a 500 error if doesn't exist a match in the 2016-17 season for them team1 and team2 parameters in the request (values are case sensitive, use the season results requests to find out valid values to use).

For now the API returns results for the current season only.

League Table

Using the endpoint API /api/premierleague/table you will get the table for the league.
The table is compute considering all the finished games returned by the season results API (the one with no live updates).
The API let you to restrict the games considered using the following three optional parameters
from to include all the games played from (default the first played game returned by the no live version of the season results API)
to to include all the games played till to (default the last played game return by the no live version of the season results API)
mode set to home to consider only home games, to away to consider only away games (default all games)
time to compute the table considering only the first half (FH) or the second half (SH). Default is full time (FT)

The JSON response give you data about the team name the game played, win, loss, goalsFor, goalsAgainst and points.
The API at the moment don't take into account any penalization a team could have to compute the total points number.

You can get table from previous seasons either setting the option parameter season; for now you can query for league table from the 2010-11 season (default value for season is 2016-17).

Match scorers

It's possible to get all the scorers for a match with a single API call.
There are two version for this API, one without live update /api/premierleague/scores that get you the answer after a while the game is finished (usually between few hours, and however always within 24 hours), and the other /api/live/premierleague/scorers with live updates, so you can get the answer even while the match is still playing (check the season results API live version to know the games with goals).
All two versions require two mandatory parameters
team1 that is the home team name
and
team2 that is the away team name
(to set with the values returned by the season results API).
The JSON response contains the player name who scored the goal and the minute it was scored, more it can contains other attributes either that qualify better the kind of goal.
At the moment the attributes handled by the API are:
isPenalty true if the goal is scored from a penalty, default false
isOwn true if the goal is an own goal, default false
isFromCorner true if the goal is scored from a corner, default false
isFreekick true if the goal is scored from a free kick, default false
isLeftFoot true if the goal is scored by left, default false
isRightFoot * true if the goal is scored by right, default false*
isHead true if the goal is scored by head, default false

Here it is a JSON response for the following query string
team1=West+Ham&team2=Chelsea

{"team1":{
  "teamName":"West Ham",
  "goals":[
    {"isRightFoot":true,"isFromCorner":true,"player":"Gary Cahill","minute":"55'"}
  ]},
"team2":{
  "teamName":"Chelsea",
  "goals":[
    {"isRightFoot":true,"isFromCorner":true,"player":"Mauro Zárate","minute":"17'"},
    {"isHead":true,"player":"Andy Carroll","minute":"78'"}
]}}

The API give you an answer even if there isn't any goal for a match, in that case the goals attribute will be an empty array.

For now the API returns results for the current season only.

Top scorers

The /api/premierleague/table/scorers let you the get the top five scorers for the league.
The JSON result give you the player name, the number of goals scored in order from the first till the fifth and the number of ones scored by penalty.
You can either use optional parameters to query for a different set of games, that is
from to consider only the games played from the match day specified (default 1)
to to consider only the games played till to the match day specified (default last final match day returned by the season results API no live version)
mode to consider only goals scored at home or away (default all)
player to get the result only for the player name specified (useful to get the number of goals scored by those players that aren't in top 5).
team *to consider only goals scored for the specified team *
If you specify a player name that hasn't scored any goal yet, you will get an empty response, that is:

{"scorers":[]}

otherwise, like for example querying for
player=Waney+Rooney

{"scorers":[{"playerName":"Wayne Rooney","goals":7","penalties":1}]}

or for for example with
mode=away&to=15

{"scorers":[
  {"playerName":"Jamie Vardy","goals":10","penalties":3},
  {"playerName":"Riyad Mahrez","goals":7","penalties":1},
  {"playerName":"Olivier Giroud","goals":6","penalties":0},
  {"playerName":"Philippe Coutinho","goals":5","penalties":0},
  {"playerName":"Romelu Lukaku","goals":4","penalties":0}
]}

or maybe simply without any parameter

{"scorers":[
  {"playerName":"Harry Kane","goals":22","penalties":5},
  {"playerName":"Sergio Agüero","goals":21","penalties":3},
  {"playerName":"Jamie Vardy","goals":21","penalties":4},
  {"playerName":"Romelu Lukaku","goals":18","penalties":1},
  {"playerName":"Riyad Mahrez","goals":16","penalties":4}
]}

For now the API returns results for the current season only.

Match statistics

The API requires two mandatory parameters
team1 the home team name for the match
team2 the away team name for the match
In the JSON response you can find the following impressive amount of statistics for each team of the match selected:
totalSaves touches aerialsWon passesTotal passesSuccessful cornersTotal cornersAccurate tackleSuccessful throwInsTotal</br> aerialsTotal offensiveAerials defensiveAerials shotsOffTarget tacklesTotal dribblesLost shotsTotal shotsBlocked</br> dribblesAttempted dribbledPast dispossessed foulsCommited shotsOnTarget offsidesCaught tackleUnsuccesful interceptions dribblesWon clearances possession</br> goals foulsWon penatyWon penaltyCommited

Here it is an example response for the query string team1=Stoke&team2=Liverpool

{"team1":{
  "teamName":"Stoke",
  "teamStats:{
     "cornersTotal":8,"dribbledPast":10,"tackleSuccessful":25,"throwInsTotal":25,"aerialsTotal":37,
    "offensiveAerials":21,"dispossessed":8,"foulsCommited":9,"passesTotal":412,"offsidesCaught":3,"shotsOnTarget":1,
    "tackleUnsuccesful":10,"defensiveAerials":16,"interceptions":13,"touches":571,"shotsOffTarget":4,"tacklesTotal":35,
    "dribblesWon":5,"dribblesLost":11,"shotsTotal":7,"shotsBlocked":2,"aerialsWon":16,"clearances":16,"dribblesAttempted":16}},
"team2":{
  "teamName":"Liverpool",
  "teamStats:{
    "cornersTotal":8,"dribbledPast":5,"tackleSuccessful":19,"throwInsTotal":22,"aerialsTotal":37,"offensiveAerials":16,
    "dispossessed":16,"foulsCommited":16,"passesTotal":478,"offsidesCaught":2,"shotsOnTarget":3,"tackleUnsuccesful":5,
    "defensiveAerials":21,"interceptions":13,"touches":642,"shotsOffTarget":1,"tacklesTotal":24,"dribblesWon":10,"dribblesLost":9,
    "shotsTotal":8,"shotsBlocked":4,"aerialsWon":21,"clearances":33,"dribblesAttempted":19}}}

Take in mind that this API exists in two version, the one without live update /api/premierleague/match/stats and the one with live update /api/live/premierleague/match/stats with the second one one giving you real time statistics updates during the game and the first one giving you only the final statistics after a while the match is finished, after this point in time all the two API give you the same answer.

For now the API returns results for the current season only.

Player statistics for a match

It's possible to get all the player statistics for a match using one of the two API version, the no live and the live one, with the first giving you the result only after a while the game is finished (usually within few hours and however always within 24 hours) and the second you giving you the result starting from the first minute match, that is with live updates.
The API requires three mandatory parameters
team1 the home team name for the match
team2 the away team name for the match
player the player name you want to know statistics

The result is a JSON format response containing player infos like data age, weight, height and player match stats like dribble won, fouls committed.
The complete data list handle at the moment from the API follows:
player info
isManOfTheMatch, shirtNo, name, weight, age, height, isFirstEleven, position
player match stats
totalSaves, touches, aerialsWon, passesTotal, passesSuccessful, cornersTotal, cornersAccurate, tackleSuccessful, <br> throwInsTotal, aerialsTotal, offensiveAerials, defensiveAerials, shotsOffTarget, tacklesTotal, <br> dribblesLost, shotsTotal, shotsBlocked, dribblesAttempted, dribbledPast, dispossessed, <br> foulsCommited, shotsOnTarget, offsidesCaught, tackleUnsuccesful, interceptions, dribblesWon, <br> clearances, possession, goals, foulsWon, penaltyWon, penaltyCommited

Follow an example for
player=Wayne+Rooney&team1=Arsenal&team2=Manchester+United

{"isFirstEleven":true,
 "isManOfTheMatch":false,
 "shirtNo":"10",
 "name":"Wayne Rooney",
 "weight":78,
 "position":"AMC",
 "age":30,
 "height":178,
 "stats":{
   "cornersTotal":2,
   "dribbledPast":1,
   "tackleSuccessful":3,
   "aerialsTotal":1,
   "offensiveAerials":1,
   "dispossessed":2,
   "foulsCommited":1,
   "passesTotal":49,
   "shotsOnTarget":2,
  "tackleUnsuccesful":1,
  "touches":67,
  "shotsOffTarget":1,
  "tacklesTotal":4,
  "dribblesWon":3,
  "dribblesLost":1,
  "shotsTotal":3,
  "aerialsWon":1,
  "dribblesAttempted":4
}}

For the position attribute you can get the following values:
GK = Goalkeeper
DM = Defensive Midfielder (1)
D = Defender (1)
M = Midfielder (1)
AM = Attacking Midfielder (1)
FW = Forward
Sub = substitute player

(1) the attribute value can have one letter more to specify better the field position, that is C for Center, L for Left and R for Right.

For now the API returns results for the current season only.

... and more

Missing players for a match
The API Missing players for a match requires two parameters
team1 and team2,
and returns a response a few days before a match with continue updates till the match starts.
Even after a match is played, the API continue to give you the last answer.
The response returns for each team the player name who will miss with the reason.
If there is any doubt about the player will play the match the reason will be inside square brackets, otherwise the reason will be with no bracket.
Typical reasons are * Injured, Suspended, Unfit, Other*.
For example calling the API with
team1=Everton&team2=Arsenal
you will have the following response

{"team1":
  {"teamName":"Everton",
    "players":{"missing":[
      {"reason":"Injured","playerName":"Tony Hibbert"},
      {"reason":"Injured","playerName":"Tyias Browning"},
      {"reason":"Suspended","playerName":"Gareth Barry"},
      {"reason":"[Injured]","playerName":"Bryan Oviedo"}]}},
  "team2":{"teamName":"Arsenal",
  "players":{"missing":[
      {"reason":"Injured","playerName":"Jack Wilshere"},
      {"reason":"Injured","playerName":"Tomas Rosicky"},
      {"reason":"Injured","playerName":"Santi Cazorla"},
      {"reason":"Injured","playerName":"Alex Oxlade Chamberlain"},
      {"reason":"Injured","playerName":"Petr Cech"},
      {"reason":"Injured","playerName":"Mikel Arteta"},
      {"reason":"Injured","playerName":"Aaron Ramsey"},
      {"reason":"Injured","playerName":"Mathieu Flamini"}]}}}

For now the API returns results for the current season only.

League players
The API League players requires only a mandatory parameter
team
and returns all the players for the team name specified.
In the response you will get
playerName
age
position
isActive that is if the player is still in the team or less.

Players details
The API Player details requires two mandatory parameters
team
player
and returns all data for the player name specified (the player name must by one returned by the previous API for that team name).
In the response you will get ah huge amount of data for the player, following a list of attribute you can find the the response (not all the attribute are applicable or available for all the players)
completeName you can find this when the player name is usually a nickname
nameInCountry you can find this when the player is named different in his country
birthDate
birthPlace
nationalities
shirtNo
foot right, left or both
marketValue the current value for the player, usually this value change during a season (ex. 2,00 Mill. € )
playerAgent
inTeamSince
contractUntil
lastContractExtension
presences in the current season
asFirstEleven presences in the current season in the first eleven
minsPlayed in the current season
yellowCard
redCard
goal
goalOwn
formerNational if the player has been a national but now no more
currentNational
nationalPresences
nationalGoals
outfitter
twitter
facebook
instangram
isActive that is if the player is still in the team or less.

You can query the API submitting the optional honours parameter (default false), in that case the API give you only the titles award by the players in his career.
Take in mind that at the moment the API is available only with ULTRA and MEGA plans.

Have a question about this API?Ask the API Provider.
Developers who viewed Premier League Live Scores also viewed

Install SDK for (Node.js)Unirest

OAuth2 Authentication
Client ID
Client Secret
OAuth2 Authentication