Premier League shot location and xG data
The location, end point, outcome and body part of every Premier League shot ESPN charted since 2012-13, with our expected goals. REST or MCP.
StrikerAPI serves the shots of every Premier League match since 2012-13 as ESPN charted them: where each was taken, where it ended (saved, blocked, wide or in the net), the body part, whether it was a penalty, the player and the minute, and our expected-goals value for a shot from that distance and angle.
get_shot_map rolls a club's shots, the shots it conceded or a player's up into zones with goals, shots on target, xG and conversion, and returns every shot's x/y for drawing the map. get_events returns one match's shots in order with the rest of its events. The table below is read from the database.
Coverage by season
Counted from the database on October 8, 2026: finished regular-season and playoff games.
| Season | Games | Covered | Shot attempts |
|---|---|---|---|
| 2026-27 | 50 | 94% | 1,310 |
| 2025-26 | 380 | 100% | 9,072 |
| 2024-25 | 380 | 100% | 9,351 |
| 2023-24 | 380 | 100% | 9,755 |
| 2022-23 | 380 | 100% | 8,944 |
| 2021-22 | 380 | 100% | 9,079 |
| 2020-21 | 380 | 100% | 9,065 |
| 2019-20 | 380 | 100% | 9,406 |
| 2018-19 | 380 | 97% | 8,803 |
| 2017-18 | 380 | 94% | 8,773 |
| 2016-17 | 380 | 99% | 9,614 |
| 2015-16 | 380 | 100% | 9,615 |
| 2014-15 | 380 | 96% | 9,378 |
| 2013-14 | 380 | 96% | 8,769 |
| 2012-13 | 380 | 94% | 7,072 |
| 2011-12 | 380 | 92% | 1,073 |
| 2010-11 | 380 | 93% | 1,047 |
| 2009-10 | 380 | 92% | 1,034 |
| 2008-09 | 380 | 88% | 921 |
| 2007-08 | 380 | 94% | 3,649 |
| 2006-07 | 380 | 88% | 803 |
| 2005-06 | 380 | 88% | 828 |
| 2004-05 | 380 | 90% | 871 |
| 2003-04 | 380 | 87% | 910 |
| 2002-03 | 380 | 90% | 884 |
| 2001-02 | 380 | 0% | 0 |
How to get it
get_shot_map, 10 credits a call. A full 2025-26 season is 380 calls and 3,800 credits, which fits in one month of Starter ($19/mo).
curl -X POST https://mcp.strikerapi.com/v1/get_shot_map \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"game_id": "740916"
}'What comes back
| season | |
| zones[] | List of objects |
| zones[].zone | |
| zones[].shots | |
| zones[].goals | |
| zones[].on_target | |
| zones[].headers | |
| zones[].xg | |
| zones[].conversion | |
| zones[].share | |
| shots_total | |
| totals | |
| totals.shots | |
| totals.located |
Every field and a real response: get_shot_map docs.
Questions
What coordinate system do the shots use?
ESPN's: x is the distance from the goal line as a share of half the pitch, in a normalised frame where the penalty spot sits at 0.23 (about 11 m); y runs across the pitch from 0 to 1, with 0.5 the centre. Each shot also carries metres from the goal line and from the centre line.
How is expected goals calculated?
From the league's own shots: the goal rate for shots from the same distance (2 m buckets) and angle (15 degree buckets), header or foot, shrunk toward the distance's rate when a group is small. Penalties take the league's penalty conversion. It is a location model and does not see defenders or the pass.
How far back do the shots go?
Every shot is located from 2012-13 in the Premier League, La Liga, Serie A, the Bundesliga and Ligue 1, and in 2008-09 and from 2012 in MLS. Before that only goals carry a location, so an earlier season's shot map shows goals, not shots.
Can I use it from Claude or ChatGPT?
Yes. StrikerAPI is an MCP server as well as a REST API: add one URL to Claude, Cursor or any MCP client and ask in plain English.
What it will not do
- Shots land after the final whistle, not live.
- A shot's location is where the data provider placed it, to about a metre; the height it crossed the line is not recorded.
- No pass, carry or pressure locations: shots and set-piece events only.
Works with
Start with 500 free credits
No card. REST or MCP.