Every located shot a club took in a season, with player, outcome, body part, expected goals and pitch coordinates, plus totals by zone.
Code verified October 10, 2026. It takes one call to get_shot_map, 10 credits.
The call
team takes an abbreviation, a name or an id from list_teams. Season 2025 is 2025-26. Pass against: true to see the shots a club conceded.
import requests import pandas as pd API_KEY = "YOUR_API_KEY" resp = requests.post( "https://mcp.strikerapi.com/v1/get_shot_map", headers={"x-api-key": API_KEY}, json={ "team": "ARS", "season": 2025, }, timeout=60, ) resp.raise_for_status() data = resp.json()["data"] shots = pd.DataFrame(data["shots"]) print(data["totals"]) print(pd.DataFrame(data["zones"])[["zone", "shots", "goals", "xg", "conversion"]]) by_player = shots.groupby("player").agg(shots=("xg", "count"), xg=("xg", "sum"), goals=("outcome", lambda s: (s == "goal").sum())) print(by_player.sort_values("xg", ascending=False).head(8).round(2)) # x is distance from the goal line as a share of half the pitch, y runs across it. print(shots[["x", "y"]].describe().round(2)) You need requests and pandas (pip install requests pandas) and a free API key from StrikerAPI.
What comes back
The data object, trimmed to the first rows. Every value is real output from the run above.
{ "season": 2025, "zones": [ { "zone": "six_yard_box", "shots": 83, "goals": 19, "on_target": 28, "headers": 53, "xg": 26.8, "conversion": 0.229, "share": 0.16 }, { "zone": "penalty_area", "shots": 298, "goals": 34, "on_target": 97, "headers": 59, "xg": 35.57, "conversion": 0.114, "share": 0.573 }, "...2 more" ], "shots_total": 538, "totals": { "shots": 538, "located": 520, "goals": 67, "on_target": 169, "xg": 72.14, "xg_per_shot": 0.139 }, "shots": [ { "game_id": "740968", "date": "2026-05-24", "minute": 4, "team": "ARS", "player": "Gabriel Jesus", "outcome": "woodwork", "body_part": "right_foot", "zone": "penalty_area", "xg": 0.069, "x": 0.296, "y": 0.362 }, { "game_id": "740968", "date": "2026-05-24", "minute": 4, "team": "ARS", "player": "Noni Madueke", "outcome": "saved", "body_part": "left_foot", "zone": "penalty_area", "xg": 0.04, "x": 0.282, "y": 0.681 }, "...518 more" ], "unlocated_shots": 18 } What to do next
- get_events (10 credits). The shots, goals and cards of a single match, with the same xG.
- get_team_stats (5 credits). Per-match xG for and against, so you do not have to sum shots yourself.
Originally published at strikerapi.com.