VASTlint

VAST tracking events / Linear

loaded VAST tracking event

Short answer: Fires when the player has the media file and is ready. VAST 4.1+. Introduced in VAST 4.1.

When it fires

The asset is ready; playback has not begun. This is delivery, not exposure. A gap from loaded to start is the user leaving or autoplay being blocked. Do not treat loaded as an impression.

The file is ready, and playback has not begun

loaded fires when the player has the linear media file and can start. VAST 4.1 added it. It is delivery of the asset. It is not an impression, and it is not start. A loaded count near the impression count, with start much lower, is the viewer leaving or autoplay being blocked after the file arrived.

VAST 2.0, 3.0, and 4.0 players do not emit loaded. Adding the element to a version="4.0" document does not create the call on a player that implements 4.0 and not 4.1. creativeView remains the display signal those versions do have.

Do not bill it

A contract that bills on impression and a dashboard that charts loaded will diverge by everyone who fetched the file and did not play it, plus everyone who played on a player that never emits loaded. Keep loaded in the delivery column. Keep impression in the billing column. Keep start in the playback column.

loaded, then an error

loaded means the player believes it can start. A 405 after loaded means it was wrong: the file looked ready and then failed to display. A 402 usually happens before loaded, because the file never finished. If your log shows loaded and 402 on the same impression, check the order. The labels are coming from two systems that disagree about which URL completed.

Do not gate billing on loaded. Impressions remain the Impression element. A player that never implemented 4.1 will serve and bill with an empty loaded column forever. The column gets populated only as players catch up, and a trend line that starts at zero is the rollout, not a drop in delivery.

When the column stays empty

loaded is absent from VAST 2.0 and from 3.0. A player that only implements those versions will not request it. The version table on this page is the set that includes it.

Each wrapper hop may include its own loaded 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+
NoNoNoYes

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