NHL Stats API - schedule, scores, standings, rosters
Pricing
from $5.00 / 1,000 records
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
Maintained by CommunityActor 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
| Publisher | National Hockey League (NHL) |
| API | https://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 reads | GET /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 cadence | Live: 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 / attribution | NHL, 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 caveats | schedule 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
| Field | Type | Meaning |
|---|---|---|
mode | select | standings (default), schedule, scores_now, roster, player |
date | YYYY-MM-DD | schedule: first day (default today, UTC); standings: as-of date (default now) |
days | integer | schedule only: 1–28, default 7 |
team_abbrevs | array | roster only: TOR, EDM, BOS … |
player_ids | array | player only: 8478402 (McDavid), 8477934 (Draisaitl) … |
max_records | integer | Default 500 |
request_interval_ms | integer | Default 500 (floor 250) |
contact_email | string | Sent 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)
| Event | Price |
|---|---|
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.