Data
NHL shot data with rink coordinates
Every NHL shot attempt since 2010-11 with rink coordinates, shot type, shooter and goalie, by game, team-season or player. REST or MCP, 500 free credits.
PuckAPI serves every NHL shot attempt since 2010-11 (goals, shots on goal, misses and blocks) with x and y rink coordinates, the shot type, the shooter and the goalie in net, queryable by game, by team and season, or by player.
The coordinates come back already normalised so every team shoots at the same end, which is the cleaning step that usually eats the first week of a shot-quality project. Filter by strength to get 5v5 only. The table below is read from the database.
Coverage by season
Counted from the database when this page was built: finished regular-season and playoff games.
| Season | Games | Covered | Shot attempts |
|---|---|---|---|
| 2025-26 | 1,394 | 100% | 163,818 |
| 2024-25 | 1,398 | 100% | 167,558 |
| 2023-24 | 1,400 | 100% | 171,256 |
| 2022-23 | 1,400 | 100% | 164,416 |
| 2021-22 | 1,401 | 100% | 160,574 |
| 2020-21 | 952 | 100% | 104,316 |
| 2019-20 | 1,212 | 100% | 139,200 |
| 2018-19 | 1,358 | 100% | 157,478 |
| 2017-18 | 1,355 | 100% | 160,727 |
| 2016-17 | 1,317 | 100% | 149,661 |
| 2015-16 | 1,321 | 100% | 148,192 |
| 2014-15 | 1,319 | 100% | 149,467 |
| 2013-14 | 1,323 | 100% | 149,845 |
| 2012-13 | 806 | 100% | 90,068 |
| 2011-12 | 1,316 | 100% | 147,461 |
| 2010-11 | 1,318 | 100% | 150,343 |
How to get it
get_shot_map, 10 credits a call. A full 2025-26 season is 82 calls and 820 credits, which fits in one month of Starter ($19/mo).
curl -X POST https://mcp.puckapi.com/v1/get_shot_map \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"season": "20242025",
"team": "BUF",
"strength": "5v5"
}'What comes back
| shots[].x_coord | Rink x, -100..100 |
| shots[].y_coord | Rink y, -42..42 |
| shots[].type | goal, shot-on-goal, missed-shot or blocked-shot |
| shots[].shot_type | wrist, snap, slap, tip-in, backhand, deflected, wrap-around |
| shots[].shooter | Shooter's NHL player ID |
| shots[].goalie | Goalie in net at the time |
| summary.capped_at | Hard cap of 2,000 shots per call |
Every field and a real response: get_shot_map docs.
Questions
How far back does NHL shot data go?
Every game from 2010-11 to today, regular season and playoffs, updated each morning in season.
Does it include expected goals for each shot?
Not per shot. Team and season expected goals come back from get_team_stats and get_standings; the shot map gives you the coordinates and shot types to build your own model.
Can I get one player's shots?
Yes. Pass a player id to get_shot_map for that shooter's attempts, or a team and season for a whole club.
Is it free?
Every account starts with 500 free credits and no card. Plans start at $19 a month for 10,000 credits.
What it will not do
- Nothing before 2010-11.
- Up to 2,000 shots a call; a team's season takes a few calls.
- No per-shot expected goals and no tracking data (shot speed, passes before the shot).
Works with
Start with 500 free credits
No card. REST or MCP.