Type something to search...
How to Track Video Engagement with Google Analytics

How to Track Video Engagement with Google Analytics

Embedding a video is easy. Knowing whether anyone actually watches past the first ten seconds is the harder — and far more useful — question. GA4 handles this automatically for standard YouTube embeds, but the moment you use a custom or non-YouTube player, that automatic tracking disappears entirely, and you need to rebuild the same milestones yourself.

Automatic Tracking for YouTube Embeds

If Enhanced Measurement is enabled (the default) and your video uses a standard YouTube iframe embed with JS API support enabled, GA4 automatically tracks:

  • video_start — fires when playback begins.
  • video_progress — fires at 10%, 25%, 50%, and 75% watched.
  • video_complete — fires when the video finishes.

These come with parameters like video_title, video_url, video_provider (youtube), video_duration, video_current_time, and video_percent. This works with no custom code required, as long as the embed is a standard <iframe> pointing at YouTube — GA4 detects it and instruments it automatically.

Verifying Automatic YouTube Tracking

  1. Open Admin → DebugView.
  2. Play an embedded YouTube video on your site, watching to at least the halfway point.
  3. Confirm video_start, at least one video_progress event, and (if you watch to the end) video_complete all appear with the expected parameters.

If nothing appears, check that your embed uses the standard YouTube iframe embed code (not a heavily customized wrapper that changes how the iframe is structured) and that Enhanced Measurement's video tracking toggle is enabled under Admin → Data Streams → [stream] → Enhanced measurement.

Tracking Custom Video Players (HTML5 <video>, Vimeo, Wistia)

Enhanced Measurement's automatic video tracking only works with the standard YouTube embed — anything else (a native HTML5 <video> element, Vimeo, Wistia, a custom player library) requires manual implementation using that player's own event API.

HTML5 <video> element example:

const video = document.querySelector("#product-demo-video");
const milestones = { 25: false, 50: false, 75: false, 100: false };

video.addEventListener("play", () => {
  gtag("event", "video_start", {
    video_title: "Product Demo",
    video_provider: "html5",
  });
});

video.addEventListener("timeupdate", () => {
  const percent = Math.floor((video.currentTime / video.duration) * 100);

  [25, 50, 75].forEach((milestone) => {
    if (percent >= milestone && !milestones[milestone]) {
      milestones[milestone] = true;
      gtag("event", "video_progress", {
        video_title: "Product Demo",
        video_percent: milestone,
        video_provider: "html5",
      });
    }
  });
});

video.addEventListener("ended", () => {
  gtag("event", "video_complete", {
    video_title: "Product Demo",
    video_provider: "html5",
  });
});

Vimeo example, using Vimeo's Player API:

const iframe = document.querySelector("#vimeo-player");
const player = new Vimeo.Player(iframe);

player.on("play", () => {
  gtag("event", "video_start", { video_title: "Product Demo", video_provider: "vimeo" });
});

player.on("ended", () => {
  gtag("event", "video_complete", { video_title: "Product Demo", video_provider: "vimeo" });
});

Using the same event names (video_start, video_progress, video_complete) across different providers keeps your reporting consistent, letting you compare engagement across a YouTube-embedded explainer video and a Wistia-hosted product demo in the same report, using video_provider to distinguish them.

Implementing via Google Tag Manager

GTM includes a built-in YouTube Video trigger type that works similarly to Enhanced Measurement's automatic tracking, but with more configuration control:

  1. Enable the YouTube Video Ready trigger type — under Variables → Configure, enable the built-in video variables.
  2. Create a trigger: YouTube Video, choosing which events to capture (Start, Complete, Pause, and specific progress thresholds).
  3. Create GA4 Event tags for each video interaction you want tracked, referencing the built-in Video variables ({{Video Title}}, {{Video Percent}}, etc.) for parameters.

For non-YouTube players, GTM doesn't have an equivalent built-in trigger — you'd still push custom events to the dataLayer from your player's own event API, similar to the manual JavaScript approach above, then build GTM triggers listening for those custom dataLayer events.

Deciding Which Video Milestones Matter as Conversions

Not every video interaction deserves conversion status. A reasonable framework:

  • video_start — useful for engagement analysis, rarely worth marking as a conversion on its own, since starting a video is a low bar.
  • video_complete on a short, high-intent video (a product demo, an explainer directly tied to a purchase decision) — often worth marking as a conversion, since finishing it suggests real interest.
  • A specific progress milestone (e.g., 75% watched) can be a reasonable middle-ground conversion for longer videos where full completion is a less realistic bar.

Analyzing Video Performance

Once tracked, build a quick Exploration:

  1. Add Video title as a dimension.
  2. Add Event count, filtered separately to video_start and video_complete, to calculate a completion rate per video.
  3. Compare completion rates across videos to identify which ones actually hold attention versus which get abandoned early — a strong signal for deciding what kind of video content to invest in producing more of.

Handling Auto-Play and Muted Videos Correctly

A video that auto-plays muted (a common pattern for background or hero-section videos) presents a measurement question worth thinking through deliberately: should a video_start event fired automatically on page load really count the same as one a visitor deliberately clicked to start? For engagement analysis, it's often more useful to track auto-played background videos with a distinct video_provider or a separate parameter (like auto_play: true) so they don't get blended into the same reporting bucket as videos a visitor actively chose to watch, which generally represent a stronger engagement signal.

Combining Video Data with On-Page Conversion Events

For a product demo or explainer video specifically intended to drive a conversion, it's worth checking whether video completion actually correlates with the conversion you care about, not just assuming it does. Build a segment of users who triggered video_complete for a specific video, and compare their conversion rate against the overall site average using a segment comparison in an Exploration — a video that completes often but shows no meaningful lift in conversion rate for viewers may be entertaining without actually being persuasive.

FAQ about Tracking Video Engagement with Google Analytics

faq

Does GA4 automatically track videos hosted on Vimeo or Wistia?

No — automatic Enhanced Measurement video tracking only works with standard YouTube iframe embeds. Other providers require manual implementation using that platform's own player API.

What parameters does GA4's automatic YouTube tracking include?

Typically video_title, video_url, video_provider, video_duration, video_current_time, and video_percent, depending on the specific event.

Can I track video engagement without any custom code, using only Google Tag Manager?

For YouTube embeds, yes — GTM's built-in YouTube Video trigger handles this without custom JavaScript. For other providers, you'll still need some custom code to bridge the player's events into the dataLayer.

Should video completion always be marked as a conversion?

Only when it represents genuine business value — a short, high-intent video tied closely to a purchase or signup decision is a better conversion candidate than a long-form video where full completion is a less realistic or meaningful bar.

How do I avoid firing duplicate progress events for the same video milestone?

Track which milestones have already fired in a simple state object (as shown in the HTML5 example above) and check against it before firing again, since a timeupdate event fires many times per second and would otherwise re-trigger the same milestone repeatedly.

Can I compare video engagement across multiple video platforms in one report?

Yes, as long as you use consistent event names and parameters (like video_provider to distinguish the source) across all your video implementations, regardless of which platform actually hosts each video.

Conclusion

Video tracking in Google Analytics works automatically for standard YouTube embeds, but anything beyond that needs a small, deliberate implementation using the player's own event API. Keep your event names and parameters consistent across providers, decide thoughtfully which milestones deserve conversion status, and you'll finally know whether your video content on your website is actually holding attention.

Tags :
Share :

Related Posts

A Beginner's Guide to the GA4 Interface

A Beginner's Guide to the GA4 Interface

If you opened Google Analytics 4 for the first time and felt a little lost, you're not alone. GA4 looks nothing like the old Universal Analytics inte

Continue Reading
A Deep Dive into the Next Generation of Google Analytics

A Deep Dive into the Next Generation of Google Analytics

Google Analytics has long been a staple tool for countless businesses, enabling them to track, measure, and analyze data to gain insightful feedback

Continue Reading
A Practical Guide to Custom Events in Google Analytics 4

A Practical Guide to Custom Events in Google Analytics 4

GA4's automatic and Enhanced Measurement events cover a lot of ground, but sooner or later almost every site needs to track something specific to its

Continue Reading