vastlint

VAST XML for Google Ad Manager

Google Ad Manager (GAM) is the dominant ad server for premium publishers globally. It serves VAST tags to players via the Google IMA SDK and handles VAST trafficking, wrapper resolution, and creative approval. This guide covers what your VAST tag must look like to traffic and deliver successfully in GAM — including the complete reference for VAST tag URL parameters.

Quick reference

VAST versions served2.0, 3.0, 4.0, 4.1, 4.2, 4.3
VPAIDDeprecated since 2022. Avoid for new campaigns.
Wrapper chain limit4 hops total; your tag gets 3 (GAM uses 1)
Creative asset URLsHTTPS required
UniversalAdIdRequired for frequency capping across screens

GAM adds a wrapper layer

When you traffic a third-party VAST tag in GAM, GAM wraps it in its own VAST wrapper. This means that by the time a player (running IMA SDK) receives the tag, there is already one wrapper hop consumed. The IMA SDK limit is 4 hops total, so your third-party tag must resolve within 3 additional hops.

If you are trafficking a redirect that itself points to a programmatic SSP which adds more wrappers, you may be at or over the limit before the inline ad is reached.

VPAID deprecation

Google officially deprecated VPAID in GAM in 2022. While VPAID creatives can still be trafficked in some GAM configurations, Google's ad serving infrastructure and IMA SDK actively block VPAID on mobile, CTV, and a growing share of web inventory. New campaigns should use native video creatives with OMID <Verification> blocks for third-party measurement.

<!-- Modern approach: native video + OMID verification -->
<InLine>
  <AdVerifications>
    <Verification vendor="doubleverify.com-omid">
      <JavaScriptResource apiFramework="omid" browserOptional="true">
        <![CDATA[https://cdn.doubleverify.com/dvtp_src.js]]>
      </JavaScriptResource>
    </Verification>
  </AdVerifications>
  <Creatives>
    <Creative>
      <Linear>
        <MediaFiles>
          <MediaFile type="video/mp4" width="1920" height="1080"
                     bitrate="4500" delivery="progressive">
            <![CDATA[https://cdn.example.com/ad.mp4]]>
          </MediaFile>
        </MediaFiles>
      </Linear>
    </Creative>
  </Creatives>
</InLine>

VAST tag URL parameters

GAM VAST tags are URLs with query parameters sent to pubads.g.doubleclick.net/gampad/ads. Getting these parameters right is critical for ad serving, programmatic fill, brand safety signals, and privacy compliance.

When using the IMA SDK, it populates most required parameters automatically. In environments without the SDK (direct VAST calls, PAL, PAI), all required parameters must be set manually.

Note: For boolean parameters use 0/1 not false/true (e.g. vpmute=1).

Required parameters

ParameterDescriptionExample
correlatorRandom positive integer shared by all ad requests in the same page view. Enables competitive exclusions. IMA SDK sets this automatically.correlator=4345645667
description_urlURL-encoded page URL describing the video content (not the homepage). Required for web and mobile apps.description_url=https%3A%2F%2Fwww.example.com%2Fvideo.html
envRequest type. instream for video and audio; vp for video only.env=instream
gdfp_reqSchema indicator. Always set to 1.gdfp_req=1
iuAd unit path in the format /network_code/.../ad_unit.iu=/6062/videodemo
outputOutput format. xml_vast4 forces VAST 4; vast uses the network default; xml_vmap1 for VMAP / ad rules responses.output=xml_vast4
szSize of the master video ad slot. Multiple sizes separated by |.sz=640x480
unviewed_position_startSet to 1 to enable delayed impressions.unviewed_position_start=1

Programmatic parameters

Required or recommended when monetising with programmatic demand. These parameters significantly affect bid prices and fill rates.

ParameterDescriptionExample
plcmtPlacement type per IAB spec. 1 = in-stream, 2 = accompanying content.plcmt=1
vpaVideo play automatic. auto = autoplay, click = user initiated.vpa=auto
vpmute1 = playback starts muted, 0 = unmuted.vpmute=0
urlURL from which the request is sent (URL-encoded). IMA SDK sets this automatically; a manually provided value takes precedence.url=https%3A%2F%2Fwww.example.com%2Fvideo.html
ott_placementOTT placement type. 1 pause · 2 homescreen · 3 PiP · 4 L-banner · 5 overlay · 99 custom.ott_placement=1
givnVideo nonce from the Programmatic Access Library (PAL). URL-safe, no encoding needed. Replaces the deprecated paln parameter.givn=<nonce>
hlLanguage for ad selection (ISO 639-1 or 639-2).hl=en

CTV / OTT parameters

Incorrect or missing CTV parameters lead to device misclassification, lower CPMs, and reduced programmatic fill.

ParameterDescriptionValues / Example
dthDevice type hint. Prevents device misclassification. Recommended for all CTV/OTT.1 feature phone · 2 smartphone · 3 desktop · 4 tablet · 5 connected TV · 6 game console · 7 set-top box
devtDevice type for set-top box inventory. Use stb with dth=7.devt=stb
msidApp ID. Required for programmatic on mobile and CTV. IMA SDK auto-populates except on iOS/tvOS.msid=com.example.publisher
anHuman-readable app name paired with msid. Required for brand safety and buyer transparency.an=My%20App
rdidResettable device ID (IDFA on iOS, GAID on Android, RIDA on Roku). Required for frequency capping and user-level targeting.rdid=<device-id>
idtypeType of rdid.adid Android · idfa iOS/tvOS · rida Roku · afai Fire TV
is_latLimit Ad Tracking. 1 = user opted out.is_lat=0

Content targeting parameters

Pass video programming signals to buyers on CTV for improved contextual targeting.

ParameterDescriptionExample
ct_chContent channel — the entity that curates the content library.ct_ch=ESPN2
ct_neContent network — the broadcasting organization.ct_ne=WarnerMedia
ct_seContent series.ct_se=game_of_thrones
ct_tiContent title (episode / match level).ct_ti=game_of_thrones_s1e2
vid_dVideo content duration in seconds.vid_d=1800
cmsid + vidContent source ID and video ID for dynamic ad insertion and content-aware targeting.cmsid=496&vid=short_onecue

Privacy parameters

ParameterDescriptionExample
gdpr1 = GDPR applies, 0 = does not apply.gdpr=1
gdpr_consentTC string from IAB TCF v2.gdpr_consent=<tc-string>
npaNon-personalised ads. 1 = serve non-personalised (COPPA, no consent).npa=1
rdpRestricted data processing (CCPA). 1 = enabled.rdp=1
tfcdTag for child-directed content. 1 for COPPA-compliant requests.tfcd=1

Complete CTV tag example

A well-formed GAM VAST tag for a connected TV app:

https://pubads.g.doubleclick.net/gampad/ads
  ?iu=/6062/my-network/my-ctv-app
  &env=instream
  &gdfp_req=1
  &output=xml_vast4
  &sz=640x480
  &correlator=[CORRELATOR]
  &description_url=https%3A%2F%2Fwww.example.com%2Fshow%2Fepisode1
  &url=https%3A%2F%2Fwww.example.com%2Fshow%2Fepisode1
  &plcmt=1
  &vpa=auto
  &vpmute=0
  &dth=5
  &msid=com.example.myapp
  &an=My%20CTV%20App
  &rdid=[RDID]
  &idtype=rida
  &is_lat=0
  &ct_ch=My%20Channel
  &ct_ne=My%20Network
  &unviewed_position_start=1

Replace bracketed values with dynamic macros from your ad server or device SDK.

UniversalAdId for frequency capping

GAM uses <UniversalAdId> (VAST 4.0+) for cross-environment frequency capping and deduplication. Include a <UniversalAdId> with a consistent registry and ID value to enable cross-screen frequency management.

<UniversalAdId idRegistry="ad-id.org">8465903</UniversalAdId>

Creative approval and HTTPS

GAM requires HTTPS for all creative asset URLs. HTTP URLs may be rejected at upload time or fail silently at delivery on HTTPS pages. This applies to media file URLs, click-through URLs, and companion assets.

vastlint rules: VAST-2.0-duration-format, VAST-2.0-mediafile-url

Pre-flight checklist for Google Ad Manager

  • No VPAID for new campaigns — use native video + OMID
  • All creative asset URLs use HTTPS
  • Wrapper chain depth ≤ 3 hops (GAM adds the 4th)
  • MP4 H.264 <MediaFile> present
  • <Duration> in HH:MM:SS format
  • <Impression> with HTTPS URL present
  • version attribute on root <VAST> element
  • <UniversalAdId> for cross-screen campaigns (VAST 4.0+)
  • Tag URL includes env, gdfp_req, iu, output, sz, correlator
  • CTV tags include dth=5, msid, an, plcmt, vpa, vpmute

References

Validate your tag against all 118 IAB rules →