Flashscore API endpoint
Returns per-player statistics for a football match with player-statistics coverage: the Flashscore rating, highlight badges and every statistic of the player-statistics tabs (shots, expected goals, passes, duels, goalkeeping and more) with display text, unrounded value and rank, plus the statistic and group definitions. The full response is large; narrow it with group, or with player_id for a single player. Other sports and matches without coverage return not found.
/flashscore/match-player-statsQuery parameters:
id (required): eight-character football match id from a Flashscore match URL, for example j52jHsN8.player_id (optional): eight-character Flashscore player id of a player in this match (the id of an entry in players, or a player id from the lineups). Returns only that player, which is far smaller than the full response. An id that is not part of the match returns 404.group (optional): narrows the statistics to one tab of the player-statistics page. One of top_stats, shots, attack, passes, defense, goalkeeping, general. Letter case is ignored; any other value is rejected with 400 before a request is made. Omit it to return every group.Returns per-player football statistics for matches with player-statistics coverage. The full response covers about 40 players with roughly 60 statistics each, so prefer group or player_id when you only need part of it.
teams: id, name and side (home or away).groups: the statistic groups returned (key is one of the group values above, label, goalkeeper_only and the member stats keys). The groups were read from three football matches (Premier League, Argentine Liga Profesional, Spanish LaLiga2) and were identical in all three.stat_types: the definition of every returned statistic: key (lowercase, for example shots_total, expected_goals, passes_accurate), label, format (count, percentage or count_two_decimal_places), sentiment (positive when a higher value is good, negative otherwise) and the groups it belongs to. combined is set where Flashscore prints a statistic with its total and share, for example 25/32 (78.13%): template is %s/%s (%s) and stats lists the three keys to fill it with, so those totals and shares are included even though they belong to no group. fs_rating is the group entry for the rating, which is returned in each player's rating field instead of in stats.players: id, name, short_name, slug, team_id, side (home or away), position (for example Goalkeeper, Centre back, Midfielder, Striker; the list is the provider's own and not closed), starter, rating, top_rated, highlights and stats.rating is the Flashscore match rating, or null for players who did not play. top_rated is true for the highest-rated player of the match; it is the rating leader and can differ from the editorial man of the match named in /api/v1/flashscore/match-report.highlights are the badges shown beside a player, lowercase: for example goals, assists, winning_goal, big_chances_created, big_chances_missed, big_chances_saved, clean_sheet, goals_conceded, errors_leading_to_shot, dueling_negative, last_man_tackles, finishing_positive, dribbling, hit_the_woodwork, passing and shot_stopping. These are the values seen in one match; the provider may add others.stats maps a stat_types key to {"value", "raw", "rank"}: value is the displayed text (0.11, 78.12%), raw the unrounded number (a share runs from 0 to 1) and rank the player's position among all players of the match for that statistic (omitted when the provider gives none).Matches without player-statistics coverage, matches of other sports and unknown ids return 404.
Example response (shortened, with group=shots and player_id=trpxfbO3):
{"code":200,"msg":"OK","data":{"source_url":"https://2.ds.lsapp.eu/pq_graphql?_hash=epmsdp&eventId=j52jHsN8&playerId=trpxfbO3&providerId=7","match_id":"j52jHsN8","teams":[{"id":"2XrRecc3","name":"Brighton","side":"home"},{"id":"hA1Zm19f","name":"Arsenal","side":"away"}],"groups":[{"key":"shots","label":"Shots","goalkeeper_only":false,"stats":["shots_total","goals","expected_goals"]}],"stat_types":[{"key":"shots_total","label":"Total shots","format":"count","sentiment":"positive","groups":["shots"]}],"players":[{"id":"trpxfbO3","name":"Gross Pascal","slug":"gross-pascal","team_id":"2XrRecc3","side":"home","position":"Midfielder","starter":true,"rating":8.3,"top_rated":true,"highlights":["goals","winning_goal","assists","big_chances_created"],"stats":{"shots_total":{"value":"2","raw":2,"rank":2},"expected_goals":{"value":"0.11","raw":0.1074,"rank":9}}}]}}
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| id | 40 | |
| name | 40 | “Verbruggen Bart” and 39 other values |
| short_name | 40 | “Verbruggen B.” and 39 other values |
| slug | 40 | |
| team_id | 40 | |
| side | 40 | home (20), away (20) |
| position | 40 | “Goalkeeper” and 8 other values |
| starter | 40 | true in 22 of 40 |
| rating | 28 | 5.8 to 8.3, median 6.6 |
| top_rated | 40 | true in 1 of 40 |
| highlights | 22 | median 2 entries |
| stats | 40 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Eight-character Flashscore football match id | j52jHsN8 | |
| player_id | string | No | Eight-character Flashscore player id from this match; returns only that player | trpxfbO3 | |
| group | string | No | Optional statistic group Allowed values: top_stats, shots, attack, passes, defense, goalkeeping, general. | shots | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/flashscore/match-player-stats?id=j52jHsN8&group=top_stats" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://2.ds.lsapp.eu/pq_graphql?_hash=epmsdp&eventId=j52jHsN8&playerId=trpxfbO3&providerId=7",
"match_id": "j52jHsN8",
"teams": [
{
"id": "2XrRecc3",
"name": "Brighton",
"side": "home"
},
{
"id": "hA1Zm19f",
"name": "Arsenal",
"side": "away"
}
],
"groups": [
{
"key": "shots",
"label": "Shots",
"goalkeeper_only": false,
"stats": [
"shots_total",
"goals",
"expected_goals"
]
}
],
"stat_types": [
{
"key": "shots_total",
"label": "Total shots",
"format": "count",
"sentiment": "positive",
"groups": [
"shots"
]
}
],
"players": [
{
"id": "trpxfbO3",
"name": "Gross Pascal",
"slug": "gross-pascal",
"team_id": "2XrRecc3",
"side": "home",
"position": "Midfielder",
"starter": true,
"rating": 8.3,
"top_rated": true,
"highlights": [
"goals",
"winning_goal",
"assists",
"big_chances_created"
],
"stats": {
"shots_total": {
"value": "2",
"raw": 2,
"rank": 2
},
"expected_goals": {
"value": "0.11",
"raw": 0.1074,
"rank": 9
}
}
}
]
}
}Request schema
No body schema
Response schema
#/definitions/flashscore.matchPlayerStatsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | flashscore.matchPlayerStatsDataDoc | No | ||||
| data.groups | array | No | ||||
| data.groups[].goalkeeper_only | boolean | No | false | |||
| data.groups[].key | string | No | top_stats, shots, attack, passes, defense, goalkeeping, general | shots | ||
| data.groups[].label | string | No | Shots | |||
| data.groups[].stats | array | No | shots_total,goals | |||
| data.match_id | string | No | j52jHsN8 | |||
| data.players | array | No | ||||
| data.players[].highlights | array | No | goals,assists | |||
| data.players[].id | string | No | trpxfbO3 | |||
| data.players[].name | string | No | Gross Pascal | |||
| data.players[].position | string | No | Midfielder | |||
| data.players[].rating | number | No | 8.3 | |||
| data.players[].short_name | string | No | Gross P. | |||
| data.players[].side | string | No | home, away | home | ||
| data.players[].slug | string | No | gross-pascal | |||
| data.players[].starter | boolean | No | true | |||
| data.players[].stats | object | No | Stats maps a statistic key from stat_types to this player's value. | |||
| data.players[].team_id | string | No | 2XrRecc3 | |||
| data.players[].top_rated | boolean | No | true | |||
| data.source_url | string | No | https://2.ds.lsapp.eu/pq_graphql?_hash=epmsd&eventId=j52jHsN8&providerId=7 | |||
| data.stat_types | array | No | ||||
| data.stat_types[].combined | flashscore.playerStatCombinedDoc | No | ||||
| data.stat_types[].combined.stats | array | No | passes_accurate,passes_total,passes_accuracy | |||
| data.stat_types[].combined.template | string | No | %s/%s (%s) | |||
| data.stat_types[].format | string | No | count, percentage, count_two_decimal_places | count | ||
| data.stat_types[].groups | array | No | ||||
| data.stat_types[].key | string | No | shots_total | |||
| data.stat_types[].label | string | No | Total shots | |||
| data.stat_types[].sentiment | string | No | positive, negative | positive | ||
| data.teams | array | No | ||||
| data.teams[].id | string | No | 2XrRecc3 | |||
| data.teams[].name | string | No | Brighton | |||
| data.teams[].side | string | No | home, away | home | ||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/flashscore/match-player-stats?id=j52jHsN8&group=top_stats" \
-H "x-api-key: $CRAWLORA_API_KEY"