How the numbers are made
This site is about how teams play, not who’s going to win. Everything here is built from the NHL’s own public data, and four things set it apart from most stats sites: we correct for each arena’s scorers, we blend this season with last by an amount that depends on the trait, we rate every chance with our own model, and player ratings account for linemates and opponents. This page walks through all of it, in the order the numbers are built.
Where the numbers come from
The NHL’s public game data, refreshed twice a day, with a few things left out on purpose.
Games. Play-by-play, shifts, boxscores, rosters, standings and the schedule come from the NHL’s public game data, pulled every morning and afternoon. When the shift feed is missing a game, the NHL’s official time-on-ice reports fill the gap, and every player’s ice time is checked against the boxscore.
Skating and shot speed. Player pages use NHL EDGE, the league’s puck and player tracking.
Rating every chance
Every shot gets a rating: how often shots like it go in.
Goals are rare and streaky, so most of this site works from expected goals: every shot that gets past the shot blockers gets a chance of going in, and adding those up says how many goals a team’s chances were worth. The model is our own, trained on about 360,000 shots from three seasons. For each shot it looks at where it came from, what kind of shot it was, what happened just before (a save, a turnover, a faceoff win) and how long before, the manpower, the score and the period. It deliberately doesn’t know who shot or who was in net, so a goalie or a sniper is judged against the shot, not against himself.
Tested on a full season it had never seen, it was about as sharp as the best public models on the same shots, and well calibrated: shots it rated around 10% went in about 10% of the time. Because one model rates every season, a team’s numbers from different years can be compared fairly. See how it rated the chances in recent games.
Score effects
Teams that are behind shoot more, and so do home teams. Shot numbers are corrected for both.
A team protecting a lead sits back; a team chasing one throws everything at the net. Raw shot totals would reward teams for trailing. So each 5-on-5 shot is weighted by the score when it was taken and by whether the shooter was at home, with weights set so that across three seasons the home and away totals come out even in every score situation. Behavior that depends on the score, like hitting, is measured only while the game is close.
The arena correction
Hits, giveaways, takeaways and blocked shots are counted by people, and some buildings count a lot more than others.
Every arena has its own off-ice scorers, and they don’t agree on what a hit is. At Scotiabank Arena scorers log about 52 hits per 60; when the Maple Leafs and their opponents play anywhere else, the same kind of games produce about 43. Teams don't regularly hit more just because they're at home. Leave that alone and every team looks more physical for the nights they play in a generous building, and the home team looks like bruisers when they may be ordinary.
How we measure it. For each arena we compare two sets of games from the last three seasons (2023-24 to 2025-26): the home team’s games in their own building, and the same team’s road games. Both sets have the same team in them, so that team’s own style cancels out, and what’s left is the building. The opponents differ, but over 120-odd road games the home team visits every other arena, so those quirks wash out. Dividing one rate by the other gives the arena’s factor: 52.29 ÷ 42.75 = 1.22 for hits at Scotiabank Arena.
Not taking it at face value. Even three seasons is a limited sample, so each factor is pulled part of the way back toward “no difference”, as if we’d also watched 20 perfectly ordinary games there. With 123 home games that keeps about 86% of the gap, and Scotiabank Arena settles at 1.19. A building with only a season of games behind it is pulled harder toward neutral and earns its factor as games come in.
Applying it. Each event is divided by the factor of the building it happened in, for both teams. Thirty hits at Scotiabank Arena count as about 25; thirty at SAP Center at San Jose, where scorers are stingy, count as about 34. That feeds Physicality and Forecheck pressure on team pages, and hits, blocks, takeaways and giveaways on player pages and post-game report cards.
Home teams get more everywhere. Separately from any one building, home teams across the league are credited with about 4% more hits, 8% more giveaways and 9% more takeaways than visitors, and 3% fewer blocks. It might be scorers watching the home side more closely, or teams really having the puck more at home; public data can’t tell the two apart. Either way it would flatter a team in the middle of a long homestand, so events are reweighted to put home and road games on the same footing.
What we tried and threw out. We tested whether some buildings tilt toward their own team more than others. In any one season it looks that way, but the arenas that tilted one year weren’t the ones that tilted the next, so it’s the bounces of a season rather than a habit of the scorers. Correcting for it would make the numbers worse, so we don’t.
Why it’s a score, not a count. We never show an adjusted count of “real hits” because that is, in the end, just another subjective number. We take arena-scored stats and turn them into a score where 100 is the league average. Flipping the switch at the top of every page toggles the score with raw numbers, so you can see how arena scoring impacts your team and use the site with the league’s official numbers if it suits you.
Every arena’s factors
How much more or less each building records than its home team’s road games do, after the pull toward neutral. “+19%” means 19% more.
| Arena | Home team | Hits | Giveaways | Takeaways | Blocked shots |
|---|---|---|---|---|---|
| Honda Center | ANA | −4% | +7% | even | +1% |
| TD Garden | BOS | +7% | +4% | +7% | −2% |
| KeyBank Center | BUF | +4% | −8% | −8% | +4% |
| Lenovo Center | CAR | −1% | +5% | +12% | −3% |
| Nationwide Arena | CBJ | −10% | −5% | −12% | −1% |
| Scotiabank Saddledome | CGY | −1% | +3% | +9% | +3% |
| United Center | CHI | −5% | even | +5% | −5% |
| Ball Arena | COL | −2% | −9% | +4% | even |
| American Airlines Center | DAL | +5% | −4% | even | −5% |
| Little Caesars Arena | DET | −3% | −5% | −11% | −1% |
| Rogers Place | EDM | +10% | +8% | +9% | +2% |
| Amerant Bank Arena | FLA | −1% | +2% | −5% | +5% |
| Crypto.com Arena | LAK | −4% | −3% | −20% | +4% |
| Xcel Energy Center | MIN | −3% | even | −9% | −7% |
| Centre Bell | MTL | even | +15% | −9% | +5% |
| Prudential Center | NJD | −9% | −7% | −4% | −1% |
| Bridgestone Arena | NSH | even | +13% | +8% | −1% |
| UBS Arena | NYI | even | +4% | −5% | even |
| Madison Square Garden | NYR | −3% | −3% | −6% | −3% |
| Canadian Tire Centre | OTT | −1% | +10% | even | +2% |
| Wells Fargo Center | PHI | −5% | −4% | −6% | even |
| PPG Paints Arena | PIT | −2% | −1% | +2% | +6% |
| Climate Pledge Arena | SEA | −4% | −13% | +15% | +1% |
| SAP Center at San Jose | SJS | −13% | −3% | +7% | −3% |
| Enterprise Center | STL | +3% | −1% | +21% | −3% |
| Amalie Arena | TBL | +7% | −5% | −1% | +1% |
| Scotiabank Arena | TOR | +19% | +6% | +8% | −4% |
| Rogers Arena | VAN | +2% | −4% | −6% | −3% |
| T-Mobile Arena | VGK | −2% | −5% | even | even |
| Canada Life Centre | WPG | +4% | +5% | −5% | even |
| Capital One Arena | WSH | +3% | +5% | +8% | +2% |
Utah’s arena doesn’t appear in this table because there’s not enough data to go on. We’ll see you next year, Mammoth.
Blending this season with last
10 games in, some things about a team are already clear and some are still mostly bounces. Each trait gets its own answer.
Early in a season, a team’s shot volume already tells you a lot about them, while their goaltending numbers barely tell you anything yet. Most sites either show the raw season numbers, which swing wildly in October, or lean on last season, which misses real change. We do something in between, and how far each number leans depends on the trait.
How long each trait takes to settle. We took three full seasons, split every team’s games into odd and even nights, and checked how well one half predicted the other. Shot volume barely changes from one half to the other, so it’s a habit. Second chances in one half say almost nothing about the other. From that comparison we get, for each trait, the number of games at which this season’s results and what we knew before count equally:
- Depth4 games
- Shot volume4 games
- Forecheck pressure5 games
- Physicality5 games
- Shots from defensemen6 games
- Shot suppression9 games
- Shot quality11 games
- Pace16 games
- Quality allowed17 games
- Shots from in close21 games
- Power play22 games
- Penalty kill41 games
- Power kill46 games
- Discipline58 games
- Off-turnover offense100 games
- Breakdowns avoided135 games
- Goaltending145 games
- Second chancesover 300 games
What “what we knew before” means. It’s last season, but not last season raw: last season gets the same treatment, pulled toward league average by the same number of games. So for a trait that settles quickly, last season counts almost in full; for a slow one, even a whole season doesn’t move far from average.
What that does 10 games in. A team’s shot volume is about 73% this season and 26% last season. Their penalty kill is 20% this season, 54% last season and 27% league average. Their goaltending is only 6% this season, which is why a hot two weeks in net barely shows on the blended view.
Goaltending follows the goalies. A team’s system carries over from one season to the next and pulls new players into it; their goaltending belongs to whoever is in net. So for goaltending, “what we knew before” is the goalies who have actually played for the team this season, each on his own last season wherever he played it (pulled toward league average the same way), weighted by his time in net. We tested it on the last two seasons: a team’s goaltending one season says almost nothing about the next, even when the starter stays the same, and we get better results relying on a goalie’s own records.
An example from today. As of October 10, the Maple Leafs rank 30th in off-turnover offense on this season alone but 1st blended. After only 5 games that’s still mostly bounces, so the blend leans on what we knew before.
The likely range. Every number carries a whisker: the middle 80% of results when a team’s games are reshuffled at random and the whole calculation is redone. Early in a season, or for a slow trait, it’s wide.
This season only. The switch at the top of every page turns blending off and shows this season’s raw numbers, swings and all. Player ratings blend the same way, measured in ice time rather than games (see Player ratings).
Lines, power plays and penalty kills
First line, second line and so on are decided by ice time together, not reputation.
Lines and pairs are numbered by how much 5-on-5 time each group has played together over the team’s last ten games, with each older game counting half as much as the one after it. It’s not perfect, but relying heavily on the latest combinations gives us the best guess for the next game: tested on the last two seasons, lines picked this way covered about 45% of the next game’s forward ice time, against about 30% when all ten games counted equally. A group’s ice time is its average in the games it was one of that night’s lines, our best guess for its time together next game. We count how many of the past ten games this season that line played, with “in 3 of last 5” when it wasn’t a line every game. A group that was a line for the first time in ten games the previous game is marked “New.” When a team’s four most-used trios cover under a third of their forwards’ 5-on-5 time (a typical team’s cover about half), the page lets you know that their lines keep changing. Each line is rated against the same-numbered line on the other 31 teams: first lines with first lines, third pairs with third pairs.
Power-play units are built around the defenseman running them, because that’s how fans tell units apart: the first unit is the quarterback with the most power-play time plus the four skaters most often out with him, the second is built the same way around the next one. Forwards who stay out for both are listed on both. When one player takes the draw and then changes for someone else, he’s shown as the faceoff specialist and his time goes to whoever replaces him (looking at you, Jordan Staal). Special teams units use the current season only, no blending. A player’s role tags are awarded based only on a player’s games with his current team.
Penalty kills are too loose for fixed units: the most common foursome covers only about a tenth of a typical team’s shorthanded time. So penalty killers are grouped by when they go on: the ones who start most kills (usually for the defensive-zone draw), the second wave who come on after the first change, and spot duty. Most teams work this way.
Matchups are split by home and road, because the home coach has the last change. Each line’s share of time against each opposing line is shown beside the share it would get with no line matching, where each group faces an opposing line about as often as that line is on the ice.
Player ratings
Each player is compared with others who play his position, after accounting for who he plays with and against.
Settling, for players. Ratings blend the same way team traits do, but the yardstick is ice time (or shots, or faceoffs) rather than games, and a short sample is pulled toward the average for his position. Shot volume and hitting settle within a few games; finishing and power-play scoring take seasons, so they barely move early on. “This season and last” also leans on his own previous season. Even “this season only” keeps the pull toward the position average, or five-game players would fill the top of every list.
Who he’s compared with. Forwards are compared with forwards and defensemen with defensemen, among regulars (20+ games over two seasons, or 3 this season). Centers and wingers are split only where they really play different games: shooting volume, creating their own chances, shot blocking, hardest shot and distance skated. We checked every rating and split only where the gap was large; defense showed none. A player is listed as better or worse than most only when even the cautious end of his likely range is clearly away from the middle.
Creating and preventing chances isolate what a player adds at 5-on-5. Every shift of this season and last goes into one model that rates all players at once, so each player gets credit or blame only for what’s left after his linemates, the opponents on the ice, where the shift started and the score are accounted for. A shutdown centre who faces top lines every night isn’t punished for their chances, and a winger riding with a star doesn’t take the star’s credit. This is regularized adjusted plus-minus (RAPM); it pulls everyone toward average, harder the less he has played. It measures chances, so it can’t see good stick work that stops a pass before a shot.
Competition on a player’s Role section is how dangerous his 5-on-5 opponents are, from those same ratings, split by home and road.
Players who changed teams. Last season still counts, but not equally for everything. Over three seasons, personal habits (shooting volume, the danger of his shots, hitting, shot blocking, penalties) carried to a new team almost as well as for players who stayed put. Setting up goals, finishing, faceoffs and power-play chances carried far less, because they depend on linemates and role, so for a player on a new team those lean on last season only 35% to 60% as much.
Previews and post-game pages
Every preview call is written down before puck drop and graded afterwards, never rewritten.
Previews are procedurally generated, looking out for a few things: two of a team’s traits meeting head on, a coach’s matching habit at home, a team playing unlike their usual selves, and a few more. Each prediction is saved as a checkable claim (meaning specific numbers that will clearly happen or not happen) and frozen at puck drop. After the game, the same rule grades it from that game’s data: held, partly, or didn’t happen. The Track record keeps the season’s tally.
Report cards judge each player only against earlier games, so a card never changes. The scoresheet isn’t everything, and we want to know if a player fulfilled the responsibilities he normally shoulders for his team on a given night, AKA “doing his job.” We assigned jobs based on what a player is relied on for (power play, penalty kill, faceoffs) and what he’s better at than most other players. A player did his job when he had a typical night for him, not an average one: single games are lopsided, so most players fall short of their own average more often than not.
Swing puts each player’s night into one number: his scoresheet, his 5-on-5 play, his special teams, and the company he kept. It leans on 5-on-5 play over points, and leaves out hits and blocks, which mostly follow the score.
Run it back replays every regulation shot from the game at its expected-goal rating, exactly rather than by random draws, so the answer never changes. A flurry of rebounds counts as one chance. Taken literally it’s overconfident, because a team that’s ahead sits back while the other chases: teams it gives 80% or more won about two games in three.
No odds before games. We’ll tell you what to look out for when watching the game, never who to put money on.
Blind spots
We don’t pretend to know this, because we use free data and free data won’t help us here.
- Passes before a shot aren’t in public data, so expected goals can’t see a cross-ice pass. Goalies behind teams that allow those will look worse than they are.
- Rush chances can’t be picked out from the league’s public data, which records too little between the blue lines. We tried approximating a “rush” shot based on timing, but those shots were inordinately few and somehow scored less than ordinary shots, which would make our information less accurate. Good rush counts come from real-person trackers and cameras we don’t pretend to have access to.
- Defender positions aren’t tracked publicly, so breakdowns are inferred from dangerous chances within five seconds of a team losing the puck.
- Why a player is out isn’t in the data. When a regular stops dressing, the site says he hasn’t played, never why.