vastlint

VPAID → SIMID migration

VPAID (Video Player Ad-Serving Interface Definition) was the industry standard for interactive video ads from 2012 to approximately 2020. It has been deprecated by the IAB Tech Lab and is blocked on virtually every CTV and mobile environment. If your VAST tags still use VPAID, they are silently failing on a large portion of your inventory.

This guide covers why VPAID must be replaced, what to replace it with, and a step-by-step migration path.

VPAID blocking status by platform

PlatformVPAID status
Google IMA SDK (web desktop)Deprecated — still works but not recommended
Google IMA SDK (mobile web)Blocked
Google IMA SDK (Android / iOS)Blocked
Google IMA SDK (tvOS, CTV)Blocked
Roku RAFBlocked
Amazon Fire TVBlocked
Samsung Tizen / LG webOSBlocked
JW Player (web desktop)Supported but not recommended

Why VPAID was deprecated

VPAID had significant security and reliability problems that led to its deprecation:

  • Full page access — VPAID runs JavaScript with full DOM access to the publisher page. This created significant malvertising and data exfiltration risks.
  • Player takeover — VPAID could pause video, modify the player UI, and intercept user input. Publishers had no way to sandbox VPAID behaviour.
  • No CTV runtime — VPAID requires a JavaScript engine with DOM access. CTV devices (Roku, Fire TV, SmartTVs) do not support this execution model.
  • Flash dependency — VPAID 1.0 was Flash-based. Browser Flash removal broke a large proportion of VPAID inventory.
  • Performance overhead — VPAID JavaScript initialization added 200–500ms to ad load time.

What to migrate to

The migration target depends on what your VPAID was doing:

VPAID use caseModern replacement
Viewability measurementOMID (Open Measurement) via <Verification> in VAST 4.1+
Interactive overlay (poll, hotspot, carousel)SIMID via <InteractiveCreativeFile apiFramework="SIMID">
Custom click-through handlingNative VAST <VideoClicks> with <ClickThrough> and <ClickTracking>
Custom tracking pixelsNative VAST <TrackingEvents> with standard event URLs
Survey or end-cardSIMID for interactive; companion ads for static end cards
No interactivity — VPAID used only for measurementNative MP4 video with OMID <Verification>

Step 1: Audit your VPAID usage

Before migrating, identify what your VPAID creative is actually doing. Pull a sample VPAID JavaScript file and search for:

  • Calls to viewability measurement vendors (MOAT, IAS, DoubleVerify, OMID) — replace with <Verification>
  • Custom click redirect logic — replace with <ClickThrough>
  • Custom tracking pixel calls — replace with <TrackingEvents>
  • DOM manipulation, overlays, interactive elements — replace with SIMID

Step 2: Replace viewability measurement with OMID

If your VPAID was injecting a viewability measurement script, replace it with the VAST 4.1 <Verification> element. All major measurement vendors (MOAT, IAS, DoubleVerify, Nielsen, Comscore) now support OMID.

<!-- VPAID (old) — don't do this -->
<MediaFile apiFramework="VPAID" type="application/javascript"
  width="0" height="0">
  <![CDATA[https://measure.vendor.com/vpaid.js?params=...]]>
</MediaFile>

<!-- OMID via Verification (new) — VAST 4.1+ -->
<InLine>
  ...
  <AdVerifications>
    <Verification vendor="vendor.com-omid">
      <JavaScriptResource apiFramework="omid" browserOptional="true">
        <![CDATA[https://measure.vendor.com/omid-session.js]]>
      </JavaScriptResource>
      <VerificationParameters>
        <![CDATA[{"sessionId":"abc123","params":"..."}]]>
      </VerificationParameters>
    </Verification>
  </AdVerifications>
  ...
</InLine>

Step 3: Replace interactive overlays with SIMID

If your VPAID rendered an interactive overlay (poll, hotspot, gamification), rebuild it as a SIMID creative. Your HTML file now communicates with the player viapostMessage instead of the VPAID JavaScript API.

<!-- VPAID interactive (old) -->
<MediaFiles>
  <MediaFile apiFramework="VPAID" type="application/javascript"
    width="640" height="480">
    <![CDATA[https://cdn.example.com/vpaid-interactive.js]]>
  </MediaFile>
</MediaFiles>

<!-- SIMID interactive (new) — VAST 4.1+ -->
<MediaFiles>
  <!-- Video asset is now required separately -->
  <MediaFile delivery="progressive" type="video/mp4"
    width="1920" height="1080" bitrate="2500">
    <![CDATA[https://cdn.example.com/ad-1080p.mp4]]>
  </MediaFile>
  <!-- SIMID interactive HTML replaces the VPAID JS -->
  <InteractiveCreativeFile apiFramework="SIMID" type="text/html">
    <![CDATA[https://cdn.example.com/simid-interactive.html]]>
  </InteractiveCreativeFile>
</MediaFiles>

See the SIMID interactive guide for full details on building the SIMID HTML file and implementing the postMessage protocol.

Step 4: Move tracking to VAST TrackingEvents

Any tracking pixel calls made from VPAID JavaScript should be moved to native VAST <TrackingEvents> URLs. Players fire these automatically at the correct playback milestones — no custom JavaScript needed.

<TrackingEvents>
  <Tracking event="start"><![CDATA[https://track.example.com/start]]></Tracking>
  <Tracking event="firstQuartile"><![CDATA[https://track.example.com/q1]]></Tracking>
  <Tracking event="midpoint"><![CDATA[https://track.example.com/mid]]></Tracking>
  <Tracking event="thirdQuartile"><![CDATA[https://track.example.com/q3]]></Tracking>
  <Tracking event="complete"><![CDATA[https://track.example.com/complete]]></Tracking>
</TrackingEvents>

Step 5: Provide a native video MediaFile

Many VPAID creatives only contained JavaScript and had no video file at all. After migration, your VAST tag must include at least one valid MP4 MediaFile. This is what every CTV player will use — SIMID is optional and supplemental.

Step 6: Declare the correct VAST version

Migration to SIMID and OMID requires VAST 4.1 or higher. Update the version attribute on your root <VAST> element:

<!-- Old -->
<VAST version="2.0">

<!-- New -->
<VAST version="4.2">

Migration checklist

  • Audit what your VPAID was doing (measurement, interactivity, tracking, clicks)
  • Replace viewability measurement with OMID <Verification>
  • Replace interactive overlays with SIMID <InteractiveCreativeFile>
  • Move tracking pixels to VAST <TrackingEvents>
  • Add native MP4 video <MediaFile> at multiple bitrates
  • Update version to 4.1 or 4.2
  • Remove all apiFramework="VPAID" MediaFile entries
  • Validate the migrated tag with the VAST validator
  • Test on CTV (Roku, Fire TV) where VPAID was previously blocked