Won on the merits
The Flames controlled 76% of expected goals (4.25–1.38) and won 3-1 — result matched process.

Split squads and prospects, not the club that will take the ice in October. The shots and grades below describe this game only: nothing here counts toward season records, form, rankings or player numbers.
Calgary's 3-1 win over Vancouver held up to scrutiny. The Flames controlled 76% of expected goals (4.25–1.38), ran 78% of shot attempts (31–9), and beat the Canucks in high-danger chances three to two. The scoreboard and the underlying play aligned perfectly — this was a dominant performance.
Vancouver's K. Lankinen was the reason it wasn't worse. His 0.900 save percentage on 30 shots was 1.25 goals better than expected, keeping what could have been a blowout at 3-1. The Flames had the play; their goaltender just ran into a hot one.
Calgary's dominance started early and never wavered. The Flames opened the second period by scoring three times in under four minutes. J. Farabee banked in the first on the power play at 15:00. M. Coronato followed at 17:30, and S. Honzek made it 3–0 at 18:58. That was the game. Vancouver's A. Bains scored in the third, but by then Calgary controlled everything.
The Flames' transition game was the engine. They took 30 rush shots (2.50 xG) and converted two of them — a conversion rate that speaks to both volume and quality. Z. Parekh (2 assists) and M. Gridin (2 assists) were the architects. J. Farabee finished with a goal and an assist, doing the most damage. The Flames created five rebound opportunities and crashed the net hard enough to cash one, the way a team plays when it's in control.
Vancouver couldn't establish any sustained pressure. The Canucks managed 14 rush shots (1.34 xG) and generated only two high-danger chances. On special teams, Calgary went 1-for-4 on the power play (25%; league ≈21%), while Vancouver went 0-for-3 (0%; league ≈21%). The power-play gap was real.
The underlying story is the one everyone watching saw: Calgary ran Vancouver off the ice. The Flames' 76% expected-goals share, their rush dominance, their power-play execution — it all pointed to the same verdict. Lankinen played well enough to make it 3-1 instead of potentially 4-0, but he couldn't change the outcome.
Flames run the Canucks off the ice on the underlying numbers
The Flames earned this one.
The board read VAN 1, CGY 3. The chances read VAN 1.4, CGY 4.3.
Both sides finished close to what their chances were worth. This one was earned on the ice.
High-danger looks: VAN 1 of 2, CGY 1 of 3.
Flames run the Canucks off the ice on the underlying numbers
A model, not a newsroom. Every number on these frames comes from the NHL's play-by-play and our own models. Nothing was watched, guessed or heard from anyone.
Read the full breakdownscore reads VAN–CGY
CGY went 0-for-56 from low danger on 0.85 expected goals — 0.8 left on the table.
VAN finished -0.4 against expected, CGY -1.3.
Wrist shots carried the volume: VAN went 0-for-9, CGY 3-for-34. CGY scored 2 of theirs off the rush.
Two things happened in this game: who created the better chances, and who put the puck in the net. They are not the same thing, and this page separates them on purpose.
The one to watch is expected goals— the best single read on who deserved to win. When it disagrees with the scoreboard, that disagreement is usually the story. Nothing here is a projection; every figure is computed from this game's play-by-play. Full glossary →
A+ ≥ +2.5 saved above expected · A ≥ +1.5 · B+ ≥ +0.75 · B ≥ +0.25 · C ≥ −0.25 · D ≥ −0.75 · F below −1.5
A+ ≥ +2.5 saved above expected · A ≥ +1.5 · B+ ≥ +0.75 · B ≥ +0.25 · C ≥ −0.25 · D ≥ −0.75 · F below −1.5
VAN Created 1.38 xG against a ~2.70 league-average game; 2 high-danger shots (0.42 xG) and 14 rush shots (1.34 xG).
CGY Created 4.25 xG against a ~2.70 league-average game; 3 high-danger shots (0.65 xG) and 30 rush shots (2.50 xG).
VAN Allowed 4.25 xG against a ~2.70 league-average game; conceded 3 high-danger shots (0.65 xG) and 30 rush shots (2.50 xG).
CGY Allowed 1.38 xG against a ~2.70 league-average game; conceded 2 high-danger shots (0.42 xG) and 14 rush shots (1.34 xG).
VAN Rush shots 14–30, rush xG 1.34–2.50 (rush-based; public data has no zone entries).
CGY Rush shots 30–14, rush xG 2.50–1.34 (rush-based; public data has no zone entries).
VAN 0-for-3 on the power play (0%; league ≈21%) with 0.12 PP xG.
CGY 1-for-4 on the power play (25%; league ≈21%) with 0.80 PP xG.
VAN +1.25 goals saved above expected on 30 shots against.
CGY +0.38 goals saved above expected on 9 shots against.
VAN Took 4 penalties for 8 PIM vs 3 for 6 on the other side.
CGY Took 3 penalties for 6 PIM vs 4 for 8 on the other side.
Grades bounces, not skill — C is neutral
VAN Finishing -0.38 goals vs xG plus +1.25 GSAx of save luck = +0.87 total. This grades luck, not skill — C is neutral, A is very lucky.
CGY Finishing -1.25 goals vs xG plus +0.38 GSAx of save luck = -0.87 total. This grades luck, not skill — C is neutral, A is very lucky.
The Flames controlled 76% of expected goals (4.25–1.38) and won 3-1 — result matched process.
Gave up 30 rush shots worth 2.50 xG (2 goals) — transition gaps were there every period.
Tighten neutral-zone structure and keep D gaps closed on entries.
2 goals on 30 rush shots worth 2.50 xG.
Gave up 14 rush shots worth 1.34 xG (1 goals) — transition gaps were there every period.
Tighten neutral-zone structure and keep D gaps closed on entries.
1 goals on 14 rush shots worth 1.34 xG.
K. Lankinen stopped 27 of 30 (0.900), +1.25 goals above expected.
Each club shoots toward its own end — VAN left, CGY right — the way you would watch it. A dot's size is how dangerous the look was, from distance and angle; it is a proxy for shot quality, not the xG model the article is written from. Hover a dot for the shooter and the clock.
Split squads and prospects, not the club that will take the ice in October. The rates below are last season's; this exhibition will not count toward season records, form, rankings or player numbers.
The model projects a 3.0–3.4 goal game. Calgary owns 55% win probability—close enough to even odds that variance decides this one.
Vancouver's goaltending is the first vulnerability. Kevin Lankinen has allowed 16.8 more goals than expected over 47 games (−16.8 GSAx). Calgary will target that gap.
The matchup splits along shutdown lines. Calgary's defense faces its toughest test against Filip Chytil: 1.03 xG per 60, 3 goals, and 1 high-danger marker. Vancouver's defense must contain Blake Coleman, the Flames' 16-goal scorer who generates 0.89 xG/60 with 2 high-danger goals. Drew O'Connor (0.85 xG/60, 13 goals) and Matt Coronato (0.80 xG/60, 10 goals) widen the attack.
Underneath, Calgary runs hotter. The Flames hold 46.5% xG and 49.2% Corsi% versus Vancouver's 44.0% xG and 46.9% Corsi%—not huge, but consistent. Both teams are running cold on luck (PDO: Vancouver 0.974, Calgary 0.984), which means both are due for regression toward average. The team that controls play will likely be the one where that luck shifts first.
D. Cooley works back-to-back—watch for a backup or a tired starter in the third.
Even odds tilted Flames. The goaltending says lean Calgary.
Season rates in this preview are from 2025-26 — this season's sample isn't live yet.
CGY by 10 points of win probability — a modest lean. Projected score VAN 3.0–3.4 CGY; 16% chance it's tied after 60.
CGY holds 5 of 6 process categories — and the luck row (0.974 vs 0.984) says CGY has been getting the bounces, which tends not to last.
Kevin Lankinen: -16.8 GSAx over 47 games.
Shoot from everywhere — volume beats a cold crease.
D. Cooley projects to start on 1 day of rest — watch for a backup start or tired legs.
Test the goalie early with traffic and second-chance pressure.
Key matchup: Neutralize Filip Chytil (3G, 1.03 xG/60, 1 HD goals)
Key matchup: Neutralize Filip Chytil (3G, 1.03 xG/60, 1 HD goals)
Key matchup: Neutralize Blake Coleman (16G, 0.89 xG/60, 2 HD goals)
Key matchup: Neutralize Blake Coleman (16G, 0.89 xG/60, 2 HD goals)
No completed game on file for this club yet.
No completed game on file for this club yet.
Lineups are the players who dressed in each club's last game, with their minutes; clubs confirm tonight's at warm-up. Every player this preview names was in that lineup.