Skip to content

Guides

How do I see how an NHL player prop line moved before puck drop in Python?

Every capture of one player's prop line before puck drop, book by book, with the minutes to the start and both prices.

Code verified November 4, 2026. One call to get_prop_movement, 10 credits.

The call

Find a game id with get_games and a player id with search_players. Prop history starts in May 2023.

import requests
import pandas as pd

API_KEY = "YOUR_API_KEY"

resp = requests.post(
    "https://mcp.puckapi.com/v1/get_prop_movement",
    headers={"x-api-key": API_KEY},
    json={
        "game_id": "2026020117",
        "player_id": 8478402,
        "market": "player_shots_on_goal",
    },
    timeout=60,
)
resp.raise_for_status()
data = resp.json()["data"]

rows = [dict(s, bookmaker=b["bookmaker"]) for b in data["books"] for s in b["snapshots"]]
moves = pd.DataFrame(rows).sort_values(["bookmaker", "captured_at"])
print(data["player_name"], data["market"])
print(moves[["bookmaker", "minutes_before_scheduled_start", "line", "over_odds", "under_odds"]])

Replace YOUR_API_KEY with a key from your dashboard. Python needs requests and pandas (pip install requests pandas). JavaScript runs on Node 18 or newer, or in the browser.

Or use the official client: pip install puckapi

What comes back

The data object of the response, trimmed to the first rows. Every field is real output from the run above.

{
  "game_id": "2026020117",
  "player_id": 8478402,
  "player_name": "Connor McDavid",
  "market": "player_shots_on_goal",
  "books": [
    {
      "bookmaker": "draftkings",
      "snapshots": [
        {
          "captured_at": "2026-10-15T13:05:36.000Z",
          "minutes_before_scheduled_start": 714.4,
          "line": 3.5,
          "over_odds": 125,
          "under_odds": -170
        },
        {
          "captured_at": "2026-10-15T15:05:22.815Z",
          "minutes_before_scheduled_start": 594.6,
          "line": 3.5,
          "over_odds": 125,
          "under_odds": -170
        },
        {
          "captured_at": "2026-10-15T20:05:22.628Z",
          "minutes_before_scheduled_start": 294.6,
          "line": 3.5,
          "over_odds": 125,
          "under_odds": -170
        },
        {
          "captured_at": "2026-10-15T21:05:36.000Z",
          "minutes_before_scheduled_start": 234.4,
          "line": 3.5,
          "over_odds": 120,
          "under_odds": -165
        }
      ],
      "line_change": 0
    },
    {
      "bookmaker": "fanduel",
      "snapshots": [
        {
          "captured_at": "2026-10-15T01:05:36.000Z",
          "minutes_before_scheduled_start": 1434.4,
          "line": 3.5,
          "over_odds": 122,
          "under_odds": -160
        },
        {
          "captured_at": "2026-10-15T13:05:36.000Z",
          "minutes_before_scheduled_start": 714.4,
          "line": 3.5,
          "over_odds": 122,
          "under_odds": -160
        },
        {
          "captured_at": "2026-10-15T15:05:22.815Z",
          "minutes_before_scheduled_start": 594.6,
          "line": 3.5,
          "over_odds": 122,
          "under_odds": -160
        },
        {
          "captured_at": "2026-10-15T20:05:22.628Z",
          "minutes_before_scheduled_start": 294.6,
          "line": 3.5,
          "over_odds": 112,
          "under_odds": -146
        }
      ],
      "line_change": 0
    }
  ],
  "count": 36
}

The example player is Connor McDavid. The record against the line, market by market, is on the Connor McDavid prop history page.

What to do next

More guides

The same guide for other sports

The latest lines from every book are on the odds board. Today's props, with the best price on each side, are on the player props board. Rather ask Claude? 28 free Claude skills call these endpoints for you.

Start with 500 free credits every month

No card. REST or MCP.