Playoff Push: How NHL Teams Use YouTube to Engage Fans

An analysis of Stanley Cup Playoff Round 2 contenders

Author

Clayton Karnavas

Published

May 19, 2025

Keywords

nhl playoffs, youtube engagement, data analytics, sports marketing

Introduction

As the NHL postseason heats up, teams battle not only on the ice but also across digital platforms. This analysis explores how the eight remaining 2025 Stanley Cup contenders use YouTube to engage their fan bases. By comparing video frequency, engagement levels, and content strategy, this report uncovers how different franchises approach playoff-era content.

Data Collection Method

The dataset was scraped using Python and the YouTube Data API v3. A complete version of the scraper and dataset is available on GitHub.

Dataset Overview

The dataset contains 183 videos published between May 5 and May 12, 2025 (the first week of Round 2 of the playoffs) by the official YouTube channels of the remaining eight playoff teams. Each row represents one video and includes metrics such as views, likes, comments, duration, and upload time.

Importing Data, Running Packages

Code
library(tidyverse)
library(lubridate)
library(plotly)
library(reactable)
library(scales)
library(hms)

df <- read_csv("nhldata.csv")

df_clean <- df %>%
  mutate(
    # Convert to datetime
    published = ymd_hms(published, tz = "UTC"),
    
    # Extract date and time components
    published_date = as.Date(published),
    published_time = as_hms(published),
    published_hour = hour(published_time),
    
    # Optional: views per minute of content
    views_per_minute = views / duration_minutes,
    
    # Optional: engagement per 1k subscribers
    likes_per_1k_subs = likes / (subscribers / 1000),
    comments_per_1k_subs = comments / (subscribers / 1000)
  )

# Create team-level summary
team_summary <- df_clean %>%
  group_by(team) %>%
  summarise(
    avg_views = mean(views, na.rm = TRUE),
    avg_likes = mean(likes, na.rm = TRUE),
    avg_comments = mean(comments, na.rm = TRUE),
    avg_duration = mean(duration_minutes, na.rm = TRUE),
    avg_views_per_minute = mean(views_per_minute, na.rm = TRUE),
    median_upload_hour = median(published_hour, na.rm = TRUE),
    avg_likes_per_1k_subs = mean(likes_per_1k_subs, na.rm = TRUE),
    avg_comments_per_1k_subs = mean(comments_per_1k_subs, na.rm = TRUE),
    total_videos = n(),
    avg_subscribers = mean(subscribers, na.rm = TRUE)
  )

Team Performance Overview

Average Views per Video

Code
summary_table <- team_summary %>%
  select(
    Team = team,
    Subscribers = avg_subscribers,
    Uploads = total_videos,
    `Views per Video` = avg_views,
    `Likes per Video` = avg_likes,
    `Comments per Video` = avg_comments
  )

reactable(summary_table,
  columns = list(
    Subscribers = colDef(format = colFormat(separators = TRUE, digits = 0)),
    Uploads = colDef(format = colFormat(separators = TRUE, digits = 0)),
    `Views per Video` = colDef(format = colFormat(separators = TRUE, digits = 0)),
    `Likes per Video` = colDef(format = colFormat(separators = TRUE, digits = 0)),
    `Comments per Video` = colDef(format = colFormat(separators = TRUE, digits = 0))
  ),
  bordered = TRUE,
  striped = TRUE,
  highlight = TRUE,
  defaultSorted = "Subscribers",
  defaultSortOrder = "desc"
)


The summary table reveals significant variation in YouTube strategy and audience size across the eight NHL teams analyzed. The Florida Panthers lead in total subscribers (270,000), but the Toronto Maple Leafs outperform all other teams in views (31,050), likes (757.6), and comments (175.4) per video, suggesting strong audience engagement relative to output.

Top Performing Videos

Code
top10 <- df_clean %>%
  arrange(desc(views)) %>%
  slice_head(n = 10) %>%
  mutate(
    published = as_date(published),
    duration_mmss = sprintf("%02d:%02d",
      floor(duration_minutes),
      round((duration_minutes %% 1) * 60)
    ),
    title = sprintf(
      "<a href='https://www.youtube.com/watch?v=%s' target='_blank'>%s</a>",
      video_id, title
    )
  ) %>%
  select(team, published, title, views, likes, comments, duration_mmss)

reactable(top10,
  columns = list(
    team = colDef(name = "Team"),
    published = colDef(name = "Published"),
    title = colDef(name = "Title", html = TRUE),
    views = colDef(name = "Views", format = colFormat(separators = TRUE, digits = 0)),
    likes = colDef(name = "Likes", format = colFormat(separators = TRUE, digits = 0)),
    comments = colDef(name = "Comments", format = colFormat(separators = TRUE, digits = 0)),
    duration_mmss = colDef(name = "Duration")
  ),
  bordered = TRUE,
  striped = TRUE,
  highlight = TRUE,
  defaultSorted = "views",
  defaultSortOrder = "desc"
)


The top 10 performing videos featured a mix of in-game highlights and post-game interviews. All but two videos were less than two minutes long.

Unsurprisingly, large-market teams like the Toronto Maple Leafs and Florida Panthers had multiple entries in the top 10. However, the Winnipeg Jets stood out with four videos in the top ten, while having the third-fewest subscribers on the list. The teamโ€™s channel featured a mix of highlights, in-game commentary, and fan reactions.

Upload Strategy

Video Duration by Team

Code
team_summary %>%
  ggplot(aes(x = reorder(team, avg_duration), y = avg_duration)) +
  geom_col(fill = "#1f77b4") +
  labs(title = "Average Video Duration by Team", x = "Team", y = "Minutes") +
  coord_flip() +
  theme_minimal()

The Toronto Maple Leafs produced the longest videos on average, approaching 13 minutes per upload, well above the rest of the league. The Winnipeg Jets and Vegas Golden Knights followed with moderately long content. In contrast, teams like the Dallas Stars, Washington Capitals, and Florida Panthers maintained much shorter average durations, indicating a strategy focused on quick-hit content.

This suggests teams are making distinct choices between long-form and bite-sized formats depending on their audience preferences or production resources.

Upload Frequency by Team

Code
df_clean %>%
  group_by(team) %>%
  arrange(published) %>%
  mutate(upload_gap = as.numeric(difftime(published, lag(published), units = "days"))) %>%
  summarise(avg_gap_days = mean(upload_gap, na.rm = TRUE)) %>%
  ggplot(aes(x = reorder(team, avg_gap_days), y = avg_gap_days)) +
  geom_col(fill = "#1f77b4") +
  labs(title = "Average Gap Between Uploads (Days)", x = "Team", y = "Avg Days") +
  coord_flip() +
  theme_minimal()

The Carolina Hurricanes and Dallas Stars posted the least frequently, with average gaps of roughly a day between uploads. Meanwhile, the Edmonton Oilers posted much more often, with intervals well under half a day, indicating a high-volume content push. Teams like the Panthers, Golden Knights, and Jets also showed relatively consistent upload pacing.

Engagement by Channel Size

Likes per 1,000 Subscribers

Code
team_summary %>%
  ggplot(aes(x = reorder(team, avg_likes_per_1k_subs), y = avg_likes_per_1k_subs)) +
  geom_col(fill = "#1f77b4") +
  coord_flip() +
  labs(
    title = "Likes per 1,000 Subscribers",
    x = "Team",
    y = "Avg Likes per 1K Subs"
  ) +
  theme_minimal()

The Winnipeg Jets lead all teams in likes per 1,000 subscribers, significantly outperforming others with over 15 likes per 1K subs โ€” a strong indicator of high viewer enthusiasm relative to their audience size. The Dallas Stars also stand out, followed by the Toronto Maple Leafs. Lower-performing teams like the Vegas Golden Knights and Washington Capitals have relatively large followings but receive fewer likes proportionally.

Comments per 1,000 Subscribers

Code
team_summary %>%
  ggplot(aes(x = reorder(team, avg_comments_per_1k_subs), y = avg_comments_per_1k_subs)) +
  geom_col(fill = "#1f77b4") +
  coord_flip() +
  labs(
    title = "Comments per 1,000 Subscribers",
    x = "Team",
    y = "Avg Comments per 1K Subs"
  ) +
  theme_minimal()

The Toronto Maple Leafs and Carolina Hurricanes top the list in comments per 1K subs, each exceeding one comment per thousand, which may reflect more discussion-oriented or emotionally resonant content. Winnipeg and Dallas also perform well, mirroring their success in the likes chart. In contrast, the Florida Panthers and Washington Capitals show weaker performance in comment engagement, despite higher subscriber counts, pointing to a possible gap in content that sparks interaction.

Conclusion

This analysis highlights how NHL teams vary widely in their YouTube strategies during the 2025 Stanley Cup Playoffs. Teams like the Toronto Maple Leafs and Winnipeg Jets stood out for their high engagement rates, especially when normalized by subscriber count. Meanwhile, the Florida Panthers and Edmonton Oilers focused on volume, pushing out significantly more content than others in the same period.

Additionally, the comparison of likes and comments per 1,000 subscribers helped reveal which teams foster the most responsive and invested fan bases, regardless of raw follower size.

Taken together, the data illustrate the balance NHL teams must strike between content volume, duration, and audience engagement, offering insight into the varying content strategies brands use during moments of peak fan interest.