NHL Stats API - schedule, scores, standings, rosters avatar

NHL Stats API - schedule, scores, standings, rosters

Pricing

from $5.00 / 1,000 records

Go to Apify Store
NHL Stats API - schedule, scores, standings, rosters

NHL Stats API - schedule, scores, standings, rosters

Read the NHL's public web API (api-web.nhle.com) and get flat rows: standings with GP, W, L, OTL, points, GF/GA, streak; games with state, teams, scores, venue; today's scoreboard; rosters with position, number, shoots/catches; player bio + season/career totals. Default: standings now (32 rows).

Pricing

from $5.00 / 1,000 records

Rating

0.0

(0)

Developer

RetrainMap Team

RetrainMap Team

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

NHL Stats API — schedule, scores, standings, rosters

Flat rows from the NHL's public web API (api-web.nhle.com, no key — the API behind nhl.com): the current standings with GP, W, L, OTL, points, point %, regulation wins, GF/GA, home/road/last-10 records and streak; every game in a date window with state, teams, scores, venue and broadcasters; today's scoreboard; team rosters with position, number, shoots/catches and bio; player pages with bio, draft, season and career totals. Normalised, one row per team / game / player, ready for CSV or JSON.

The default input (standings now) is one request, succeeds within 5 minutes and returns 32 rows — Apify auto-tests it daily. In the off-season the API keeps serving the last season's final table; if it ever answers an empty list, the Actor writes the next week of scheduled games the API points to and says so in the log, the status message and RUN_SUMMARY.details.fallback_mode.

Data source and status

PublisherNational Hockey League (NHL)
APIhttps://api-web.nhle.com/v1 — public, no key. The NHL publishes no formal documentation; the endpoints are the ones behind nhl.com and are documented by the community (https://github.com/Zmalski/NHL-API-Reference)
What this Actor readsGET /standings/now (or /standings/{date}), GET /schedule/{date} (7 days per request, following the API's nextStartDate), GET /score/now, GET /roster/{TEAM}/current, GET /player/{id}/landing — plain GETs, at most one per 500 ms by default
Refresh cadenceLive: game state, period, clock and scores update during games; standings update after each game (standings_date on each row); rosters change with transactions; player totals update after each game. The Actor reads live on every run; fetched_at on each row is the fetch time
Terms / attributionNHL, the NHL Shield and team marks are trademarks of the NHL and its teams; the data are © NHL and its terms of service (https://www.nhl.com/info/terms-of-service) govern reuse — personal, non-commercial use unless licensed. You are responsible for using the data within those terms
Known caveatsschedule serves whole weeks — the Actor cuts to days from date and, when the default week is empty (off-season), jumps once to the API's next scheduled week and says so; scores_now reflects the API's currentDate (the next game day in the off-season). Preseason, regular-season and playoff games are all included (game_type). Roster sweater_number is absent for players without a number yet; player rows carry the API's featuredStats season (skater fields; goalie seasons carry goalie fields inside season_stats / career_stats). An unknown team code or player id makes the API answer HTTP 404 and the run fails with that message

Honesty note: sports data only, as published by the NHL's API — nothing is inferred; for information, not for wagering; not affiliated with the National Hockey League.

Identification: the requests carry a product-token User-Agent and the operator's contact address in the standard From: header (RFC 9110 §10.1.2).

Input

FieldTypeMeaning
modeselectstandings (default), schedule, scores_now, roster, player
dateYYYY-MM-DDschedule: first day (default today, UTC); standings: as-of date (default now)
daysintegerschedule only: 1–28, default 7
team_abbrevsarrayroster only: TOR, EDM, BOS
player_idsarrayplayer only: 8478402 (McDavid), 8477934 (Draisaitl) …
max_recordsintegerDefault 500
request_interval_msintegerDefault 500 (floor 250)
contact_emailstringSent in the From: header

Example — current rosters of Toronto and Edmonton (2 requests, ~56 rows):

{ "mode": "roster", "team_abbrevs": ["TOR", "EDM"] }

Output (dataset row)

Every row carries mode, nhl_url and fetched_at.

  • standings: season_id, standings_date, conference, conference_abbrev, division, division_abbrev, team_abbrev, team_name, team_common_name, place_name, league_rank, conference_rank, division_rank, wildcard_rank, games_played, wins, losses, ot_losses, points, point_pctg, regulation_wins, regulation_plus_ot_wins, goals_for, goals_against, goal_differential, home_record, road_record, last_10 (W-L-OTL), streak (e.g. W3), clinch_indicator, game_type_id.
  • schedule / scores_now: game_id, date, season, game_type_id, game_type, start_time_utc, game_state (FUT / LIVE / OFF / FINAL …), schedule_state, away_team_id, away_abbrev, away_team, away_score, away_record, home_team_id, home_abbrev, home_team, home_score, home_record, venue, neutral_site, period, period_type, last_period_type (REG / OT / SO), clock, tv_broadcasts.
  • roster: team_abbrev, player_id, first_name, last_name, full_name, position (C / L / R / D / G), group, sweater_number, shoots_catches, height_in, weight_lb, birth_date, birth_city, birth_country, headshot.
  • player: player_id, first_name, last_name, full_name, is_active, team_abbrev, team_name, position, sweater_number, shoots_catches, height_in, weight_lb, birth_date, birth_city, birth_state_province, birth_country, draft_year, draft_team, draft_round, draft_overall_pick, featured_season, season_games_played, season_goals, season_assists, season_points, season_plus_minus, season_stats (object), career_games_played, career_goals, career_assists, career_points, career_stats (object), in_hhof, headshot.

A run summary (mode, filters, requests, off-season fallback, whether the pay-per-event budget stopped the run) is stored as RUN_SUMMARY in the run's key-value store.

Pricing (pay per event)

EventPrice
run-start — once per run$0.10
record — per row written$0.005

The default standings pull (32 rows) costs $0.26; a full week of games (~50 rows) about $0.35. Rows stop when your run's maximum charge is reached; the run summary says so.

Operator

Steelyard Ventures LLC (RetrainMap) — info@steelyardclinical.com. Not affiliated with the National Hockey League. The Actor writes only to its own dataset and key-value store; it stores no credentials and sends nothing else.