VASTlint

VAST tracking events / Linear

start VAST tracking event

Short answer: Fires when linear playback actually begins, first frame rendered.

When it fires

Linear playback has begun. Compare this count against impressions (fetched but not played) and against firstQuartile (played but stalled). It is the number to reconcile quartiles against, not the billable event in most contracts.

What start counts

start is the first frame of linear playback. The media file has left the buffer and the playhead has moved. Completion rate is complete divided by start. Dividing complete by impressions mixes ads that were only fetched or displayed with ads that played.

Impression is a separate element on the InLine, and it can fire when the ad is displayed, including when a stitcher has inserted the spot and the device never painted that frame. loaded, from VAST 4.1, fires when the file is ready and playback has not begun. creativeView fires when the creative is shown and on linear ads often sits next to the impression. The quartile beacons, firstQuartile through complete, line up with start.

Why impressions are present and start is not

A large gap between impression and start is playback or exit. The player displayed the ad, or a server-side stitcher counted the stitch, and the first frame did not render. The Tracking element can be perfect. The column is empty because the playhead never moved.

If the media file times out, the player fires an Error URL with 402 and never reaches start. If the file arrives and will not decode, the code is 405. In both cases the start URL is unused. Check the MediaFile before treating the empty column as a tracking-template bug.

event="Start" is a different name from start. The lookup is case-sensitive, and the player does not call the URL. The same URL under NonLinear or Companion has no linear playhead to reach, so it also stays uncalled. VAST 2.0 already includes start, and no later version removed it. A 4.x player that skips a correctly placed start is not applying a spec removal.

What a wrapper does to the count

Each hop may carry its own start tracker. The player requests the wrapper URL and the InLine URL. Four hops that each include start produce four requests for one playback. That is accumulation, and it is not a second impression. A start count that is an integer multiple of the impression count is often this chain, visible hop by hop in the inspector.

A tracker that is only on a wrapper the player never fetched never fires, even though the InLine played. Follow the chain before deleting the event from the InLine.

Markup that cannot fire

start under a NonLinear creative is legal XML and has no playhead. The player renders the overlay, may fire creativeView, and leaves this URL alone.

start is a linear event. This placement is never requested.

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

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.

When the column stays empty

start 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 start 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="start">
      <![CDATA[https://track.example.com/start]]>
    </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