Blog

How to Build an NHL Betting Model From Scratch

October 28, 2026MB
A single hockey puck resting on the ice of an empty rink at night, lit from the side

An NHL betting model is a spreadsheet that projects how many goals each team will score in a game, turns those two numbers into a win probability, and compares that probability with the sportsbook's moneyline. You bet only when your number beats the price by enough to matter, and only after you know which goalie is starting.

The model has six parts: goals for and against, an opponent adjustment, home ice, the starting goalie, a probability, and a rule for when to bet. All of it runs in Google Sheets on free stats. You do not need to code.

Below is each part in order, with a worked example you can copy.

Why do you bet the NHL moneyline and not a spread?

Because hockey is a low-scoring game, and that changes how the market is built.

An NBA game has about 100 possessions per team and a final margin that can be anywhere from 1 to 30 points. In How to Build an NBA Betting Model the model projects a margin and compares it with a spread. An NHL game has about six goals in total, and a lot of games are decided by one goal. So the main market is the moneyline: who wins, including overtime and the shootout.

There is a spread too, called the puck line, and it is almost always 1.5 goals. You can price it from the same model, and I show how below. But the moneyline is where you start.

What data do you need, and where do you get it for free?

Four numbers per team, plus the league average:

  • Goals for per game
  • Goals against per game
  • Expected goals for and against (once the season is a few weeks old)
  • Each goalie's save percentage, for the starter and the backup

Hockey Reference and NHL.com publish goals for and against for free. Natural Stat Trick and MoneyPuck publish expected goals for free. Paste the team table into a tab called Data and let every other tab read from there.

My own models are built the same way: mostly averages, then a weight for home and away, an approximate probability, and a highlight when the gap to the sportsbook is large.

How do you project the score of an NHL game?

In two steps.

  1. Each team's expected goals = its goals for per game x the opponent's goals against per game / league average goals per team
  2. Home ice: add 0.10 goals to the home team and take 0.10 from the away team

The league average in recent seasons is about 6 goals per game, so about 3.00 per team. Home ice of 0.10 each way is a starting value. Test it once you have a season of your own tracked results.

Here is an example with two made-up teams:

TeamGoals for per gameGoals against per game
Home team3.302.90
Away team3.003.10
League average3.003.00

The working:

  • Home: 3.30 x 3.10 / 3.00 = 3.41, plus 0.10 = 3.51 goals
  • Away: 3.00 x 2.90 / 3.00 = 2.90, minus 0.10 = 2.80 goals

In Google Sheets, with the table above in columns A to C and the league average in row 4, the home formula is =B2*C3/B4+0.1 and the away formula is =B3*C2/B4-0.1. For a full night, give each game its own row and pull each team's numbers in from the Data tab with a lookup.

How do you turn projected goals into a win probability?

With the Poisson distribution. It is built into Google Sheets, and it gives you the chance of a team scoring exactly 0, 1, 2, 3 or more goals when you know its average.

Build a small grid: home goals 0 to 10 down the side, away goals 0 to 10 across the top. In each cell multiply the two chances, for example =POISSON.DIST($A2,3.51,FALSE)*POISSON.DIST(B$1,2.80,FALSE). Then add up three areas of the grid:

  • Cells where the home team scored more: home win in regulation, 53.1%
  • Cells where the away team scored more: away win in regulation, 31.3%
  • The diagonal, where the scores are equal: overtime, 15.6%

Overtime and the shootout are close to a coin flip, so split the tie half and half. That gives the home team 60.9% to win the game. As a fair price, that is about -156 (1.64 in decimal odds) for the home team and +156 (2.56) for the away team.

One thing to know: real NHL games go to overtime more often than the formula says. About one game in five went to overtime in 2024-25, against 15.6% here. Because you split overtime half and half, it changes your moneyline number only a little. Just do not use this grid to bet on whether a game goes to overtime.

How do you compare your price with the sportsbook's price?

Remove the margin from the sportsbook's line first, then compare probabilities.

Say the sportsbook has the home team at -135 (1.74) and the away team at +115 (2.15).

  • Home implied probability: 1 / 1.74 = 57.5%
  • Away implied probability: 1 / 2.15 = 46.5%
  • Together they add up to 104.0%. The extra 4.0% is the bookmaker's margin
  • Without the margin, the market has the home team at 55.3%

Your model says 60.9%. That is a gap of 5.7 percentage points, and at 1.74 the bet has an expected value of about +6% for every dollar you stake. Devigging Explained shows how to remove the margin step by step, and the bookmaker margin lesson lets you play with the numbers.

On paper, that is value. It is not a bet yet, and the next section is why.

Why does the starting goalie change everything?

Because a goalie is the one player in hockey who can move a price on his own, and team season stats do not know who is in net tonight.

Team goals against are an average of every game, most of them with the starter in net. When the backup plays, the sheet still prices the team as if the starter does.

Here is what that does to the example. Say the home team rests its starter, and the backup saves 1 percentage point fewer shots. On about 30 shots a game, that is 0.30 more goals for the away team: 2.80 becomes 3.10.

  • Home win probability drops from 60.9% to 56.2%
  • The fair price moves from -156 (1.64) to about -128 (1.78)
  • At -135 (1.74) the expected value goes from +6% to about -2%

The bet is gone. Same teams, same sheet, one name changed.

The rule is simple. Before you bet any game your sheet flags, check the confirmed starting goalies. If the starter for either team is not confirmed, wait. If the price only looked good because the backup is playing for the other side, the market already knows, and the game is a pass.

How big does the gap need to be before you bet?

Bigger than most people expect. A simple model runs on season averages, knows nothing about tonight's lineup, and in October works on 8 or 10 games of data. A small gap sits inside that error.

I would start by flagging only the games where your probability is 5 percentage points or more above the market's no-margin probability. Move that number only after a season of tracked results tells you to.

A busy NHL night can have 10 or more games. Most of them will be a pass. That is the model doing its job.

How do you price the puck line?

From the same grid. The home team covers -1.5 only when it wins by 2 or more goals in regulation, because an overtime or shootout win is always by 1.

In the example, the cells where the home team wins by 2 or more add up to 37.0%. That is a fair price of about +170 (2.70) for home -1.5.

Treat this number as rough. In real games, teams that trail late pull their goalie for an extra skater, and the empty-net goals that follow turn many one-goal games into two-goal games. The simple grid does not see that.

When should you switch from goals to expected goals?

After about 20 games. Goals carry a lot of luck in hockey, because one hot goalie or a few lucky bounces can make a team look much better or worse than it played.

Expected goals measure the quality of the shots each team creates and allows, so they settle down faster than real goals do. The expected goals lesson shows the difference with real-looking numbers.

In the first weeks of the season, start on last season's numbers and blend in this season's as games are played, until about a quarter of the way through the season you run on this year's data alone. For teams that changed their starting goalie over the summer, give last season's goals against less weight, because they describe a different goalie.

How do you know if your NHL model is any good?

Track every bet it flags: the price you took, the result, and the closing price.

An NHL regular season has 1,312 games, so a model that flags a small share of them still gives you a useful number of bets in one season. Even so, win rate over a few dozen bets tells you very little. The sample size lesson shows how much results can swing by luck alone.

What tells you more, sooner, is whether you beat the closing line. If the price keeps moving toward your number after you bet, the model is finding real value.

For a sense of what a simple sheet can do when it is used with discipline: my NFL model, built on the same idea of averages, a projected number and a big-gap rule, has gone 146-112 (56.59%) over the last five seasons.

FAQ

Do I need to know how to code to build an NHL betting model?

No. Everything here is basic Google Sheets: a multiplication and a division for expected goals, a lookup to pull in each team's numbers, and the built-in POISSON.DIST function for the probabilities. If you can copy a table from a website and write a formula with a plus sign, you can build it. Most people get a working version done in one evening. The hard part is not the formulas. It is checking the goalies every night and passing on the games where the gap disappears once you do.

Where can I find NHL expected goals for free?

Natural Stat Trick and MoneyPuck both publish expected goals for every team for free, for the current season and for past seasons. Look for expected goals for and against, ideally at five on five, and per 60 minutes so teams that have played a different number of games compare fairly. Copy the table and paste it into your Data tab. For basic goals for and against, Hockey Reference and NHL.com are enough. You do not need a paid data feed or an API for a model like this.

What is a good home ice advantage number for an NHL model?

Start with 0.10 goals each way: add 0.10 to the home team and take 0.10 from the away team. With two equal teams, that gives the home team about 53% to win the game in this model. Do not spend much time tuning it. A few hundredths of a goal matter far less than knowing which goalie starts tonight. Once you have a full season of tracked results, you can check whether your home teams win more or less often than the model expected and adjust.

How do back-to-back games affect an NHL model?

They matter mostly through the goalie. Teams often start their backup goalie on the second night of a back-to-back, and that is the biggest change to the price. Tired legs matter too, but much less than who is in net. So the habit is the same as every other night: check the confirmed starter before you bet. If the starter plays both nights, you can take a small amount off that team's expected goals, but keep it small and test it against your own results.

Should I bet the moneyline, the puck line or totals?

Start with the moneyline. It is the main NHL market, and the simple model prices it best. The puck line comes from the same grid, but the simple grid does not see empty-net goals, so treat that price as rough. Totals come from the same projected goals too: add the two numbers, and use the grid to find the chance the game goes over or under the line. Record each market separately. After a season you will see which one your model handles best.

How often do I need to update an NHL model?

Update the team stats at least twice a week, and every day if you bet every day. NHL teams play three or four games a week, so numbers move faster than in football, where you update once a week. The update itself is short: paste the new table into the Data tab, type in tonight's prices, and the sheet recalculates every game at once. The part you cannot skip is daily: check the starting goalies on every game the sheet flags.

If you would rather start from a finished sheet than build your own, my NHL model and the others are on the models page. If you want the same price-first logic applied to a single game for you, that is what the AI Betting Assistant does.

Where do you start if you have never built a model?

The six parts above are the NHL version of something you can build for any sport. If you want to be walked through your first one, from a blank spreadsheet to a number of your own, that is what The Ultimate Modern Bettor's Toolkit is for.

$27, one payment. It includes the +EV betting model spreadsheet, a 45-minute video training that builds your first model with you, and the four-bucket staking system. 30-day money-back guarantee.

MB built Underdog Chance around one idea: make your own number first, then bet only when the price beats it. Over the last 20+ years his simple, probability-based Google Sheets models have helped thousands of bettors stop following picks and start pricing bets for themselves.

Last updated: 28 October 2026