Skip to content

Guide 156 · Events · GA4 + Tag Manager

Track video watches with video_start and video_complete: the two recommended events that make a watch rate

Checked 11 November 2026 · Verification: container fragment validated structurally (format 2, unique IDs, trigger resolves, variable references exist); worked example recomputed · Steps traced to Analytics Help and Tag Manager Help, opened 11 November 2026 · 6-minute read

A video play count without a completion count cannot tell you whether anyone watched. The video_start and video_complete events are a recommended pair, sharing six prescribed parameters — video_current_time, video_duration, video_percent, video_provider, video_title, and video_url — and this guide builds both as GA4 Event tags so the watch rate is a number, not a guess.

Expected signal

After the tags are published, a test play shows two events in DebugView: a video_start event when playback begins and a video_complete event when it ends, both carrying the video parameters including video_percent.

Download the container fragment: the video events container fragment (JSON) (6698 bytes, MD5 855e9737af98627d76bcd92a8d2fc8c1). It holds one GA4 Event tag named GA4 - video_start, the Custom Event trigger that fires when the data layer event equals video_start, and the six data layer variables for the video parameters. The Measurement ID is left as G-XXXXXXXXXX for you to replace. Import it from Admin, then Import Container, choosing Merge if the container already has tags.

What you need

  • The Google tag already installed through Tag Manager. This guide adds two event tags beside it.
  • A video player your site can signal at both ends. The pushes run on the play event and on the ended event of the player.
  • Six values per video event. The prescribed parameters are video_current_time (seconds played so far), video_duration (total seconds), video_percent (the share watched), video_provider (such as youtube), video_title, and video_url.

The worked example

The test below is one video, 240 seconds long, watched twenty times and finished twelve times. The percent watched is the figure the player computes, and the watch rate is the figure the report computes.

MeasureValue
Video duration240 seconds
Watched at the checkpoint180 seconds
Percent watched at the checkpoint180 / 240 = 75.00%
video_start events (plays)20
video_complete events (finishes)12
Watch rate12 / 20 = 60.00%

Those figures were recomputed here before publication: 180 divided by 240 is 0.75, so the checkpoint is at 75.00% of the video; 12 divided by 20 is 0.6, so the watch rate is 60.00%. The data layer push that carries the start is the standard form:

dataLayer.push({
  event: "video_start",
  video_current_time: 0,
  video_duration: 240,
  video_percent: 0,
  video_provider: "youtube",
  video_title: "How the checkout works",
  video_url: "https://www.youtube.com/watch?v=example"
});

The trace

  1. Push video_start when playback begins. On the player's play event, run the push above with the real values: current time 0 at the start, the full duration, percent 0, the provider, the title, and the URL. The event name is video_start, exactly as Google spells it.
  2. Push video_complete when playback ends. On the player's ended event, run the same push with the event name video_complete, current time equal to the duration, and percent 100. The two pushes differ only in the event name and the three numbers.
  3. Create the six data layer variables. In Tag Manager, go to Variables, then in User-Defined Variables create one Data Layer Variable per parameter: DLV - video_current_time, DLV - video_duration, DLV - video_percent, DLV - video_provider, DLV - video_title, and DLV - video_url.
  4. Add the two GA4 Event tags. Go to Tags, then click New. Name the first GA4 - video_start. In Tag Configuration, choose tag type Google Analytics: GA4 Event. Enter your Measurement ID. In Event Name, enter video_start. Under Event Parameters, add six rows, one per parameter, each with its matching data layer variable. Save, then repeat for GA4 - video_complete with Event Name video_complete and the same six parameters.
  5. Set the two triggers. For the start tag, choose a Custom Event trigger with Event Name video_start and All Custom Events. For the complete tag, choose a Custom Event trigger with Event Name video_complete and All Custom Events.
  6. Check them in Preview and DebugView. Click Preview, enter the site URL, and click Connect. Play the video to the end. In Tag Assistant, the video_start event appears at the start with its tag under Tags Fired, and the video_complete event appears at the end with its tag under Tags Fired. Then open DebugView (Admin, then Data display, then DebugView) and confirm both events show with video_percent 0 at the start and 100 at the end.
  7. Publish them as a version. Click Submit at the top right, select Publish and Create Version, name the version, and click Publish.

Dead ends

DEAD END — AUTOPLAY COUNTS AS A PLAY. A video that starts by itself on page load fires video_start for visitors who never chose to watch. If autoplay is on, the start event measures exposure, not intent — say so in the report, or fire the event on the first unmute or click instead.

DEAD END — VIDEO_PERCENT COMPUTED FROM THE WRONG DURATION. A duration that changes mid-play — an ad inserted, a live stream — makes the percent wrong in both directions. The percent is current time divided by the duration of the same video at the same moment, and both numbers come from the player, not from a fixed value in the tag.

DEAD END — ONLY THE START TAG EXISTS. A play count with no complete count is the same trap as the tutorial pair: it measures starts and calls them watches. The complete tag is half the setup.

End state

Two tags, two triggers, six parameters. A play shows both events in DebugView within a minute, in Realtime within minutes of publishing, and in the Events report within 24 hours, where the watch rate is the complete count divided by the start count. The video_progress event sits between the two and records the 10%, 25%, 50%, 75%, and 90% checkpoints — it is built the same way, with the event name video_progress and the same six parameters.

Sources

Checked 11 November 2026. The click paths above are the ones in Google's help and developer pages, opened 11 November 2026. No step in this guide was run inside a live Analytics property or a live Tag Manager container, because both need a Google sign-in and this site does not sign in as anyone. What was run: the container fragment was validated structurally in Python 3.12.3 — export format version 2, unique IDs, the tag's firing trigger resolves to the Custom Event trigger in the file, and all six data layer variable references exist as variables — and the worked example was recomputed: 180 / 240 = 75.00% watched at the checkpoint; 12 / 20 = 60.00% watch rate. The second tag, GA4 - video_complete, is built the same way as the fragment's tag and is described step by step in the trace; the fragment carries the start tag so the import stays a single-tag template. Google moves menu items without warning; if a path on this page no longer matches, the linked help page is the current map.