NEWS
nhlscraper 0.7.0.9000
game_roster() returns the dressed players for one game with gameId as its
leading column, while game_rosters() loads the corresponding season-level
roster snapshot from NHL_DB.
gc_play_by_play() and wsc_play_by_play() now assign blocked-shot zoneCode
from the normalized block location, so teammate blocks no longer get blindly
flipped to the wrong zone. Blocked-shot coordinates and derived distance/angle
continue to describe the recorded block location, not the shot-release
location.
nhlscraper 0.7.0 (2026-06-28)
calculate_expected_goals() now scores against the completed rolling XGBoost xG model assets from the companion NHLxG project.
- The package ships the small frozen preprocessing bundle and downloads needed versioned boosters into the user's R cache on first use.
- The scorer now routes each shot by target-season vintage and six game-state partitions for
2013-14 through the 2026-27 deployment vintage.
- Removed minimum-dependency package language now that runtime scoring relies on external modeling packages.
- Standardized all
R code.
- Improved all articles.
calculate_shift_times_by_situation() is now added to split player-period
time on ice by exact situationCode, with situation columns expressed from
the player's team perspective rather than the play-by-play's away/home
perspective.
nhlscraper 0.6.1 (2026-05-24)
shift_chart() now returns periodNumber instead of period.
shift_chart_summary() now returns per-strength TOI splits per player per period.
shift_chart_summaries() now returns season-aggregate version of above.
gc_play_by_play() and wsc_play_by_play() (and subsequently gc_play_by_plays() and wsc_play_by_plays()) now follows new logic documented in the "Article" section on the documentation website.
nhlscraper 0.6.0 (2026-04-07)
- Documentation website now features more guided examples and explanation articles.
replays() is now added to retrieve season-aggregate replays.
contracts() now returns more contracts, dating back to the 90's (and then some).
shift_chart() (and consequentially, shift_charts()) now returns completed shift charts for all games where at least either one of API or HTML report is available.
gc_play_by_play() and wsc_play_by_play() now return new schema.
- HTML-report-derived on-ice goalie/skater ID columns are now added, limited to
faceoff, hit, shot-on-goal, giveaway, missed-shot, blocked-shot, goal, delayed-penalty, takeaway, and failed-shot-attempt, while situationCode-derived strength/count columns remain available wherever situationCode itself is available. Check out our "Article" section on the documentation website to learn more.
- Helpers now consistently expect the current public schema instead of silently backfilling the package's older alias names.
add_shift_times() is now added to populate scalar on-ice shift time elapsed columns via C.
add_deltas() now handles event-to-event deltas in C, returns raw and normalized X/Y deltas alongside distance and angle deltas, and properly handles same-second events and shootouts/penalty shots with 1/n estimation.
calculate_speed() is now defunct; use add_deltas() instead.
gc_play_by_play_raw() and wsc_play_by_play_raw() now returns raw play-by-play data; note that there are heavy inconsistencies in this uncleaned data as audited.
calculate_expected_goals() now uses a fixed six-partition xG model.
- The scorer now mirrors the training-time preprocessing with delta, biometric, previous-event, and shift-timing context where available.
- The scorer now expects the current public play-by-play schema directly and no longer backfills legacy xG alias columns such as
typeDescKey, period, SOGFor, SOGAgainst, and SOGDifferential.
ig_game_shot_locations(), x_game_shot_locations(), ig_game_cumulative_expected_goals(), and x_game_cumulative_expected_goals() still accept model for backward compatibility, but it is now ignored.
- Check out our "Article" section on the documentation website to learn more.
nhlscraper 0.5.0 (2026-02-24)
- All return IDs, codes, and names are now standardized (i.e., no more arbitrary
id columns and inconsistent column names across functions).
contracts() is now added to get all NHL contracts since the 2011-2012 season.
ig_game_shot_locations() and x_game_shot_locations() now use continuous xG scale instead of bins.
calculate_expected_goals() now combines the previous xG calculation functions; as a result, calculate_expected_goals_v1(), calculate_expected_goals_v2(), and calculate_expected_goals_v3() are now defunct.
calculate_speed() is now added to calculate event-to-event deltas in play-by-plays.
add_shooter_biometrics() is now added to add shooter biometrics to Fenewick events in play-by-plays.
add_goalie_biometrics() is now added to add goalie biometrics to Fenewick events in play-by-plays.
ps() is now deprecated; use pss() instead.
nhlscraper 0.4.2 (2026-01-28)
shift_charts() is now added to access season-aggregate shift charts.
add_on_ice_players() is now added to merge play-by-plays with shift charts.
- Previous cleaning functions are now internalized and implemented by default to:
gc_play_by_play()
gc_play_by_plays()
wsc_play_by_play()
wsc_play_by_plays()
shift_chart()
shift_charts()
shifts() is now deprecated; use shift_chart() instead.
nhlscraper 0.4.1 (2025-12-17)
- All API call functions are now wrapped with try-catch.
nhlscraper 0.4.0 (2025-11-30)
- Documentation website now features proper example.
- New functions to help clean the data are now available:
strip_game_id()
strip_time_period()
strip_situation_code()
flag_is_home()
flag_is_rebound()
flag_is_rush()
count_goals_shots()
normalize_coordinates()
calculate_distance()
calculate_angle()
- New functions to run built-in models are now available:
calculate_expected_goals_v1()
calculate_expected_goals_v2()
calculate_expected_goals_v3()
- New function to help graph the data is now available:
- New functions to help share the data are now available:
ig_game_shot_locations()
x_game_shot_locations()
ig_game_cumulative_expected_goals()
x_game_cumulative_expected_goals()
nhlscraper 0.3.0
- Documentation website now features disclosure and history.
- Documentation is now standardized.
- All API calls now handle rate-limits with exponential backoff.
- Parameters are now standardized and can handle robust arguments.
- Error-handling is now more elegant, returning messages alongside empty data.
- New functions to access data about the entire league are now available:
seasons()
season_now()
game_type_now()
standings_rules()
standings()
schedule()
venues()
attendance()
- New functions to access data about the franchises are now available:
franchises()
franchise_statistics()
franchise_team_statistics()
franchise_season_statistics()
franchise_versus_franchise()
franchise_playoff_situational_results()
- New functions to access data about the teams are now available:
teams()
team_seasons()
team_report_configurations()
team_season_report()
team_game_report()
team_season_statistics()
roster()
roster_statistics()
team_prospects()
team_season_schedule()
team_month_schedule()
team_week_schedule()
team_logos()
- New functions to access the team EDGE statistics are now available:
team_edge_seasons()
team_edge_leaders()
team_edge_summary()
team_edge_zone_time()
team_edge_skating_distance()
team_edge_skating_speed()
team_edge_shot_location()
team_edge_shot_speed()
- New functions to access data about the players are now available:
players()
player_seasons()
player_summary()
player_game_log()
spotlight_players()
- New functions to access data about the skaters are now available:
skater_report_configurations()
skater_season_report()
skater_game_report()
skater_statistics()
skater_regular_statistics()
skater_playoff_statistics()
skater_season_statistics()
skater_series_statistics()
skater_leaders()
skater_milestones()
- New functions to access the skater EDGE statistics are now available:
skater_edge_seasons()
skater_edge_leaders()
skater_edge_summary()
skater_edge_zone_time()
skater_edge_skating_distance()
skater_edge_skating_speed()
skater_edge_shot_location()
skater_edge_shot_speed()
- New functions to access data about the goalies are now available:
goalie_report_configurations()
goalie_season_report()
goalie_game_report()
goalie_statistics()
goalie_regular_statistics()
goalie_season_statistics()
goalie_game_statistics()
goalie_series_statistics()
goalie_scoring()
goalie_game_scoring()
goalie_leaders()
goalie_milestones()
- New functions to access the goalie EDGE statistics are now available:
goalie_edge_seasons()
goalie_edge_leaders()
goalie_edge_summary()
goalie_edge_save_percentage()
goalie_edge_five_versus_five()
goalie_edge_shot_location()
- New functions to access data about the games are now available:
games()
scores()
gc_summary()
wsc_summary()
boxscore()
game_rosters()
gc_play_by_play()
wsc_play_by_play()
shifts()
game_odds()
- New functions to access data about the events (plays) are now available:
- New functions to access data about the playoffs are now available:
series()
playoff_season_statistics()
bracket()
series_schedule()
- New functions to access data about the awards are now available:
- New functions to access data about the drafts are now available:
drafts()
draft_picks()
draft_prospects()
draft_rankings()
combine_reports()
lottery_odds()
draft_tracker()
expansion_drafts()
expansion_draft_picks()
- New function to access data about the general managers is now available:
- New functions to access data about the coaches are now available:
coaches()
coach_career_statistics()
coach_franchise_statistics()
- New function to access data about the officials is now available:
- New functions to access other data are now available:
glossary()
countries()
location()
streams()
tv_schedule()
- Some functions are now deprecated:
get_seasons()
get_standings_information()
get_standings()
get_schedule()
get_venues()
get_attendance()
get_franchises()
get_franchise_team_totals()
get_franchise_season_by_season()
get_franchise_vs_franchise()
get_teams()
get_team_seasons()
get_team_roster()
get_team_roster_statistics()
get_team_prospects()
get_team_schedule()
get_players()
get_player_landing()
get_player_game_log()
get_spotlight_players()
get_skater_leaders()
get_skater_milestones()
get_goalie_leaders()
get_goalie_milestones()
get_games()
get_scores()
get_scoreboards()
get_game_landing()
get_game_story()
get_game_boxscore()
get_gc_play_by_play()
get_wsc_play_by_play()
get_shift_charts()
get_bracket()
get_series_schedule()
get_awards()
get_award_winners()
get_drafts()
get_draft_picks()
get_draft_rankings()
get_draft_tracker()
get_officials()
get_glossary()
get_countries()
get_streams()
get_tv_schedule()
get_partner_odds()
- Some functions are now defunct:
get_season_now()
get_team_statistics()
get_team_scoreboard()
get_skaters()
get_skater_statistics()
get_goalies()
get_goalie_statistics()
get_series()
ping()
get_configuration()
- New ESPN functions are now available:
espn_teams()
espn_team_summary()
espn_players()
espn_player_summary()
espn_games()
espn_game_summary()
espn_play_by_play()
espn_game_odds()
espn_transactions()
espn_futures()
espn_injuries()
- Some ESPN functions are now deprecated:
get_espn_athletes()
get_espn_athlete()
get_espn_even()t
get_espn_event_play_by_play()
get_espn_event_odds()
get_espn_injuries()
- Some ESPN functions are now defunct:
get_espn_teams()
get_espn_team()
get_espn_athlete()
get_espn_events()
get_espn_event_stars()
get_espn_event_officials()
get_espn_coaches()
get_espn_coach()
get_espn_coach_career()
get_espn_transactions()
get_espn_futures()
nhlscraper 0.2.0 (2025-07-17)
- Documentation website now features dark theme and example.
- New functions to access data about the franchises are now available:
get_franchise_season_by_season()
get_franchise_team_totals()
get_franchise_vs_franchise()
- New function to access data about the players is now available:
- New functions to access data about the playoffs are now available:
get_bracket()
get_series()
- New functions to access data about the awards are now available:
get_awards()
get_award_winners()
- New function to access data about the drafts is now available:
- New functions to access other data are now available:
get_venues()
get_attendance()
get_officials()
- New functions to access the ESPN API are now available:
get_espn_teams()
get_espn_team()
get_espn_athletes()
get_espn_athlete()
get_espn_coaches()
get_espn_coach()
get_espn_coach_career()
get_espn_events()
get_espn_event()
get_espn_event_play_by_play()
get_espn_event_stars()
get_espn_event_officials()
get_espn_event_odds()
get_espn_transactions()
get_espn_injuries()
get_espn_futures()
nhlscraper 0.1.1 (2025-06-11)
- Some functions are now more optimized.
nhlscraper 0.1.0
News.md now tracks changelog.
- New functions to access data about the entire league are now available:
get_seasons()
get_schedule()
get_standings_information()
get_standings()
- New functions to access data about the franchises/teams are now available:
get_teams()
get_franchises()
get_team_seasons()
get_team_statistics()
get_team_roster()
get_team_roster_statistics()
get_team_prospects()
get_team_schedule()
get_team_scoreboard()
- New functions to access data about the players are now available:
get_player_game_log()
get_player_landing()
get_spotlight_players()
- New functions to access data about the skaters are now available:
get_skaters()
get_skater_statistics()
get_skater_leaders()
get_skater_milestones()
- New functions to access data about the goalies are now available:
get_goalies()
get_goalie_statistics()
get_goalie_leaders()
get_goalie_milestones()
- New functions to access data about the games are now available:
get_games()
get_scores()
get_scoreboards()
get_game_boxscore()
get_gc_play_by_play()
get_wsc_play_by_play()
get_shift_charts()
get_game_landing()
get_game_story()
- New function to access data about the playoffs is now available:
- New functions to access data about the drafts are now available:
get_draft_picks()
get_draft_rankings()
get_draft_tracker()
- New functions to access other data are now available:
ping()
get_glossary()
get_configuration()
get_countries()
get_streams()
get_tv_schedule()
get_partner_odds()
get_season_now()