Skip to content

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.

SeasonGamesCoveredShot attempts
2025-261,394100%163,818
2024-251,398100%167,558
2023-241,400100%171,256
2022-231,400100%164,416
2021-221,401100%160,574
2020-21952100%104,316
2019-201,212100%139,200
2018-191,358100%157,478
2017-181,355100%160,727
2016-171,317100%149,661
2015-161,321100%148,192
2014-151,319100%149,467
2013-141,323100%149,845
2012-13806100%90,068
2011-121,316100%147,461
2010-111,318100%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_coordRink x, -100..100
shots[].y_coordRink y, -42..42
shots[].typegoal, shot-on-goal, missed-shot or blocked-shot
shots[].shot_typewrist, snap, slap, tip-in, backhand, deflected, wrap-around
shots[].shooterShooter's NHL player ID
shots[].goalieGoalie in net at the time
summary.capped_atHard 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.