NHL Scraper avatar

NHL Scraper

Pricing

from $0.50 / 1,000 results

Go to Apify Store
NHL Scraper

NHL Scraper

NHL games from ESPN with goals by period, overtime and shootout results, TV channels and the puck line, total and moneyline before puck drop. Read up to 120 days per run, or switch to standings with points and regulation wins, rosters or team schedules.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

deriverge s.r.o.

deriverge s.r.o.

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

4

Monthly active users

8 days ago

Last modified

Share

NHL Scraper returns one row per National Hockey League game from ESPN's public scoreboard: both teams, the goals of each period, the period and clock while the game is live, the arena, attendance, TV channels and the betting line before the puck drops. Overtime and shootouts show up as extra periods. Enter a date or a range and click Start. It costs $1.00 per 1,000 results on the Free plan ($0.50 on Business), and the $5 of monthly credit in Apify's Free plan covers about 5,000 results.

Fields in a game row

Standings, rosters, team schedules and news are other modes of the same actor; they are described after the limits.

FieldDescription
gameId, keyESPN's game ID and the row key espn:nhl:401803408, which stays the same when a later run reads the game again.
name, shortNameVisitors first: St. Louis Blues at Winnipeg Jets, STL @ WPG.
startsAtScheduled puck drop in UTC.
status, statusDetail, completedpre, in or post, and ESPN's text: 6:55 - 3rd Period during play, Final, Final/OT or Final/SO at the end.
period, clock1 to 3 in regulation, 4 for overtime and 5 for a shootout. The clock counts down within the period, as in 6:55.
seasonYear, seasonTypeThe season labeled by its closing year, so 2026-27 is 2027, and the phase, preseason or regular-season.
home, awayTeam id, name, shortName, score, winner, periodScores (goals per period, plus the overtime and shootout entries) and logo. record holds wins, losses and overtime losses, like 2-1-0.
venueArena, city, province or state (MB for Winnipeg), country (Canada) and indoor.
attendanceReported crowd, for example 14082.
broadcastsUS and Canadian channels, such as ESPN+, TNT, TSN5 and RDS.
oddsThe line before puck drop: the home team's puck line in spread (-1.5 or 1.5), total goals in overUnder (6.5), both moneylines and all prices. details names the moneyline favorite, as in CAR -130. The field is null once the game starts.
urlThe game page on espn.com.

How to scrape NHL scores

  1. Keep nhl in Leagues, the one league this actor covers.
  2. With What to return on Games and results, enter From date and To date, for example 2026-03-15 for one day. A run covers up to 120 days. The 2026-27 regular season runs from 29 September 2026 to April 2027, so a full season takes two runs.
  3. Choose Game status: Finished for results, In progress for games being played, Not started yet for upcoming games and their lines.
  4. Turn on Include box score and injuries for shots, hits, faceoffs and power plays per team. Injury report in What to return lists every injured player in the league and ignores the dates.
  5. Click Start and open the Output tab, which exports the table as CSV, Excel or JSON; the API tab has the call for scripts.

A month of results with box scores, started through the API:

{
"leagues": ["nhl"],
"dateFrom": "2026-03-01",
"dateTo": "2026-03-31",
"statusFilter": "final",
"includeGameDetail": true
}

Example output

One row from a run on 27 September 2026: Winnipeg's 3-2 regulation win over St. Louis on 15 March 2026. That run came before the record fix of 30 September 2026, so both record values are null; the same game now returns 28-28-10 for Winnipeg and 27-30-10 for St. Louis.

{
"key": "espn:nhl:401803408",
"type": "game",
"sport": "hockey",
"league": "nhl",
"leagueName": "National Hockey League",
"gameId": "401803408",
"name": "St. Louis Blues at Winnipeg Jets",
"shortName": "STL @ WPG",
"round": null,
"startsAt": "2026-03-15T19:00:00.000Z",
"status": "post",
"statusDetail": "Final",
"completed": true,
"period": 3,
"clock": "0:00",
"seasonYear": 2026,
"seasonType": "regular-season",
"home": {
"id": "28",
"kind": "team",
"name": "Winnipeg Jets",
"shortName": "WPG",
"location": "Winnipeg",
"score": 3,
"winner": true,
"record": null,
"position": 0,
"homeAway": "home",
"periodScores": [
2,
0,
1
],
"logo": "https://a.espncdn.com/i/teamlogos/nhl/500/scoreboard/wpg.png"
},
"away": {
"id": "19",
"kind": "team",
"name": "St. Louis Blues",
"shortName": "STL",
"location": "St. Louis",
"score": 2,
"winner": false,
"record": null,
"position": 1,
"homeAway": "away",
"periodScores": [
0,
0,
2
],
"logo": "https://a.espncdn.com/i/teamlogos/nhl/500/scoreboard/stl.png"
},
"venue": {
"name": "Canada Life Centre",
"city": "Winnipeg",
"state": "MB",
"country": "Canada",
"indoor": true
},
"attendance": 14082,
"neutralSite": false,
"broadcasts": [
"FanDuel SN MW",
"NHL Net"
],
"odds": null,
"url": "https://www.espn.com/nhl/game/_/gameId/401803408/blues-jets"
}

How much does it cost to scrape NHL games?

Free planStarterScaleBusiness
1,000 results$1.00$0.80$0.65$0.50
Box score and injuries, per 1,000$1.00$0.80$0.65$0.50

You pay only for the events in the table. There is no start fee, and compute time and proxies are included.

Each team plays 84 games in 2026-27, 1,344 in all, so a regular season of results costs $1.344 on the Free plan and $0.672 on Business. Our run for 10 March 2026 returned 13 games: on the Free plan that is $0.013, plus $0.013 for their box scores. Games outside the chosen Game status and games unchanged since the last run in the change mode are not charged.

Limits

  • Preseason games had no betting line in our runs. Regular-season games from 29 September 2026 did, up to ten days ahead on 30 September 2026.
  • The injury list in the box score held at most five players per team in our runs. Injury report has no such cap.
  • The standings in League table are always the current season's. On 28 September 2026 every team still had 0 points.
  • Moving dates are counted in UTC, while ESPN files games under their US date: SJ @ VGK at 2026-09-27T02:00:00.000Z is a game of 26 September in Las Vegas.

Overtime and shootouts

A game tied after three periods goes to overtime and, in the regular season, then to a shootout. statusDetail says Final/OT or Final/SO, and periodScores gets a fourth entry for overtime and a fifth for the shootout. On 10 March 2026 Boston beat Los Angeles 2-1 in overtime with the line [0, 0, 1, 1], and Carolina beat Pittsburgh 5-4 in a shootout: the fifth entry is 1 for Carolina and 0 for Pittsburgh, and it counts as the deciding goal in score. The first three entries give the score after regulation.

Standings, rosters, box scores and injuries

League table returns 32 rows, one per team, with Eastern Conference or Western Conference in group. stats has the figures the NHL table is built on: points, wins, losses, otLosses, regWins (regulation wins), rotWins (regulation and overtime wins, shootouts excluded), shootoutWins, pointsFor and pointsAgainst (goals), streak, and text records such as overall in the form 0-0-0, 0 PTS. Team rosters lists skaters and goalies with jersey, position, heightCm, weightKg, age and status. Team schedules take ESPN's season label, so Season year 2027 returns Boston's 88 games of 2026-27: 4 preseason and 84 regular-season games, with seasonType left empty on these rows. League news returns the stories in ESPN's NHL feed, 6 of them on 30 September 2026.

With Include box score and injuries on, each game also gets a detail object, billed as a separate event, with 14 totals per team: shotsTotal, hits, blockedShots, takeaways, giveaways, powerPlayGoals, powerPlayOpportunities, powerPlayPct, shortHandedGoals, shootoutGoals, faceoffsWon, faceoffPercent, penalties and penaltyMinutes. In the Boston overtime game Los Angeles had 16 shots to Boston's 23. injuries lists players with a status such as Injured Reserve, Day-To-Day or Suspension, as ESPN shows it at run time.

Injury report reads the league-wide list once and returns one injury row per player. A week into the 2026-27 season, on 11 October, 123 players were on it: 92 on Injured Reserve, 22 Day-To-Day, 8 Out and 1 suspended. NHL clubs often disclose only Upper Body or Lower Body, which is what injuryType then says. Anaheim's list (ana) and Montreal's (10) together gave 11 rows when both were put in Team identifiers.

FAQ

ESPN publishes NHL scores, schedules and standings openly, and they are facts anyone can look up. The actor reads ESPN's public feed with no account and returns game and team data. Player names appear in rosters, injury lists and news headlines, as ESPN shows them. You are responsible for how you use the results, especially if you republish them.

Can I track games while they are played?

Yes. Leave both dates empty, set Game status to In progress and schedule a task with Return only what changed since the last run every few minutes. The clock is part of statusDetail, so a live game comes back on every run with its new time and score.

Does it include goalie and skater stats?

No. Goals, assists, saves and time on ice of individual players are not in the output, and the box score option gives team totals. For players you get the roster data: position, jersey number, height, weight, age and status.

Support

This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the Issues tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the API tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.