NHL API - Hockey Statistics
Pricing
from $0.01 / 1,000 results
NHL API - Hockey Statistics
Access NHL hockey statistics, schedules, standings, player stats & game results. Historical data & live updates for sports betting & analytics applications.
Pricing
from $0.01 / 1,000 results
Rating
0.0
(0)
Developer

John Rippy
Actor stats
0
Bookmarked
3
Total users
2
Monthly active users
a day ago
Last modified
Categories
Share
NHL API
"Live NHL Data Without the Hassle" by John Rippy | johnrippy.link
🏆 2025 Zapier Automation Hero of the Year — Project Phoenix: A 95-step AI sales pipeline cutting development time by 50%. Read more →
Free Access to Official NHL Stats
The NHL API is free but undocumented and complex. Endpoints change, authentication is confusing, and data structures are nested 10 levels deep.
What if you could get clean, simple NHL data with one API call?
The NHL API actor wraps the official NHL Stats API and returns clean, structured data:
- All 32 NHL teams with details
- Full team rosters with player info
- Live and historical standings
- Complete game schedules
- Individual player statistics
- Box scores with game events
- League leaders by category
No API key required. No authentication needed. Just simple JSON responses.
Why Use This Instead of Direct API Access
1. Clean Data Structure
Raw NHL API returns deeply nested JSON. We flatten and normalize everything.
Raw NHL API:
{"teams": [{"id": 1,"name": "New Jersey Devils","teamStats": [{"splits": [{"stat": {"gamesPlayed": 82,"wins": 52,"losses": 22}}]}]}]}
Our API:
{"team": "New Jersey Devils","teamId": 1,"gamesPlayed": 82,"wins": 52,"losses": 22}
2. No Authentication Needed
We handle all the complexity. You just make requests.
3. Stable Endpoints
NHL changes their API frequently. We maintain compatibility.
4. Webhook Support
Get data delivered to your endpoint automatically.
Available Tasks
| Task | Description | Required Params |
|---|---|---|
teams | All 32 NHL teams with basic info | None |
team_roster | Full team roster with players | teamId |
team_schedule | Team's season schedule | teamId |
standings | Current division standings | None |
player_stats | Individual player statistics | playerId |
game_boxscore | Full game box score | gameId |
schedule | League schedule by date | date |
leaders | League leaders by category | leaderCategory |
Quick Start Examples
Example 1: Get Current Standings
{"task": "standings"}
Example 2: Get Team Roster
{"task": "team_roster","teamId": 24}
Example 3: Get Player Stats
{"task": "player_stats","playerId": 8478402,"season": "20242025"}
Example 4: Today's Schedule
{"task": "schedule","date": "2025-12-23"}
Team IDs Reference
| Division | Teams (Abbreviation → ID) |
|---|---|
| Atlantic | BOS→6, BUF→7, DET→17, FLA→13, MTL→8, OTT→9, TBL→14, TOR→10 |
| Metropolitan | CAR→12, CBJ→29, NJD→1, NYI→2, NYR→3, PHI→4, PIT→5, WSH→15 |
| Central | ARI→53, CHI→16, COL→21, DAL→25, MIN→30, NSH→18, STL→19, WPG→52 |
| Pacific | ANA→24, CGY→20, EDM→22, LAK→26, SEA→55, SJS→28, VAN→23, VGK→54 |
Output Examples
Standings Response
{"task": "standings","success": true,"data": {"season": "2024-25","standings": [{"division": "Atlantic","teams": [{"rank": 1,"team": "Florida Panthers","teamId": 13,"gamesPlayed": 40,"wins": 25,"losses": 12,"otLosses": 3,"points": 53,"goalsFor": 120,"goalsAgainst": 95,"goalDifferential": 25,"streakType": "W","streakCount": 3}]}]}}
Player Stats Response
{"task": "player_stats","success": true,"data": {"player": {"id": 8478402,"name": "Connor McDavid","team": "Edmonton Oilers","position": "C","jerseyNumber": 97,"age": 27,"stats": {"gamesPlayed": 40,"goals": 28,"assists": 52,"points": 80,"plusMinus": 18,"pim": 12,"powerPlayGoals": 8,"gameWinningGoals": 5,"shots": 142,"shootingPct": 19.7,"timeOnIcePerGame": "22:15"}}}}
Pay-Per-Event Pricing
You only pay for what you use. No API key costs. No rate limit fees.
| Event | Description | Price |
|---|---|---|
api_request | Each task executed | $0.01 |
Cost Examples
| Usage | Monthly Cost |
|---|---|
| 100 requests | $1 |
| 1,000 requests | $10 |
| 10,000 requests | $100 |
Free tier available for testing.
Use Cases
Fantasy Hockey
- Player tracking: Monitor stats for your roster
- Injury updates: Check player status
- Lineup optimization: Get recent performance data
- Trade analysis: Compare player statistics
Sports Analytics
- Team performance: Analyze wins, losses, goal differentials
- Player comparisons: Compare stats across players
- Trend analysis: Track performance over time
- Predictive models: Feed data into ML models
Apps & Websites
- Live scores: Display current standings
- Schedule displays: Show upcoming games
- Stats pages: Build player stat cards
- Team pages: Roster and team info
Media & Content
- Article research: Get accurate stats for articles
- Broadcast support: Quick stats lookup
- Social content: Stats for posts and graphics
API Integration
Using the Apify API (JavaScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('localhowl/nhl-api').call({task: 'player_stats',playerId: 8478402});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].data.player);
Using cURL
curl -X POST "https://api.apify.com/v2/acts/localhowl~nhl-api/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"task": "standings"}'
Webhook Integration
Webhook Payload Format
{"event": "task_completed","timestamp": "2025-12-23T12:00:00.000Z","actor": "nhl-api","task": "standings","success": true,"data": { ... }}
Automation Ideas
- Daily standings: Update your database every morning
- Game alerts: Trigger when your team plays
- Stat tracking: Log player stats to Google Sheets
- Discord bot: Post updates to your server
Limitations
- Historical data: Limited to current and recent seasons
- Real-time: Not truly live (refresh every few minutes)
- Rate limits: Built-in delays to respect NHL servers
- Season gaps: Some data unavailable during offseason
Webhook Integration
Send results directly to your automation platforms (Zapier, Make, n8n) or custom endpoints.
Setup
Add a webhookUrl parameter to your input:
{"task": "standings","webhookUrl": "https://hooks.zapier.com/hooks/catch/12345/abcde/"}
Webhook Payload
The actor sends a POST request with this format:
{"actorId": "nhl-api","status": "success","timestamp": "2025-01-12T12:00:00.000Z","data": {"task": "standings","success": true,"timestamp": "2025-01-12T12:00:00.000Z","data": { ... }}}
Supported Platforms
- Zapier: Use a "Catch Hook" trigger
- Make (Integromat): Use a "Webhook" trigger
- n8n: Use a "Webhook" node
- Custom endpoints: Any HTTPS endpoint that accepts POST requests
Automation Ideas
- Fantasy hockey alerts: Push player stats to your fantasy league app
- Game notifications: Get live score updates
- Discord bot: Post NHL standings to your server
- Stats tracking: Log player performance to Google Sheets
Support
- Email: john@johnrippy.link
🏆 2025 Zapier Automation Hero of the Year — Project Phoenix: A 95-step AI sales pipeline cutting development time by 50%. Read more →
- GitHub: Report issues on the repository
Built by John Rippy | johnrippy.link
🏆 2025 Zapier Automation Hero of the Year — Project Phoenix: A 95-step AI sales pipeline cutting development time by 50%. Read more →
Keywords
nhl api, hockey api, nhl stats, hockey statistics, nhl standings, nhl scores, hockey data, nhl player stats, fantasy hockey api, sports data api, nhl schedule, hockey scraper, nhl data feed, sports analytics