VASTlint

VAST tracking events / Linear

complete VAST tracking event

Short answer: Fires when linear playback reaches the end of Duration.

When it fires

The creative played through. This is not the same as Impression, start, or creativeView. Completion rate is complete divided by start, not complete divided by impression.

The denominator is start

complete fires when the playhead reaches the end of Duration. Completion rate is that count divided by start. Dividing by impressions treats every fetched or displayed ad as a play that could have finished, and the rate falls for reasons that have nothing to do with the last frame.

skip is a different ending. The skip control ends the ad before Duration, and complete does not also fire for that view. closeLinear is the linear creative being closed. A report that adds complete and skip and closeLinear will pass 100 percent of starts if each view takes exactly one of those exits, and it will not if some views stall with none of them.

When the file ends and the beacon does not

If Duration is longer than the media, the playhead reaches the end of the file first. Players that schedule complete from the element wait for a timestamp the file never hits, and the beacon stays silent on a creative the viewer watched to the end of the asset. Match Duration to the file.

complete under NonLinear does not run. Overlay completion is overlayViewDuration plus the creative Duration, from VAST 4.0, or creativeView alone on older documents.

When the column stays empty

complete is in the VAST 2.0 set, and the current version still includes it. An empty column on a current player is not a version mismatch.

Each wrapper hop may include its own complete URL. The player requests every one of them when the event happens, so a chain of four hops produces four calls for one playback. An http URL on an https page is dropped by the browser before the ad server sees a miss. The event name can be right and the scheme can still zero the column.

Where it is valid

2.03.04.04.1+
YesYesYesYes

Legal containers: Linear. An event in the wrong container is not a player error. It is a URL nobody calls.

Using it in a tag

Put it in a Linear TrackingEvents block. It is not valid on the other creative types, and a player does not fire a tracker in the wrong container.

<Linear>
  <TrackingEvents>
    <Tracking event="complete">
      <![CDATA[https://track.example.com/complete]]>
    </Tracking>
  </TrackingEvents>
</Linear>

VAST XML fragment only. This excerpt belongs inside a complete VAST document, so standalone validation will fail until it is wrapped in a full <VAST>response.

Related vastlint rules

Related events

Check the XML, then confirm the beacons fire

Validate the event names and containers on the document. Test a live URL when the XML is clean and reporting is still empty.

Further reading