VASTlint

YouTube VAST validator and third-party tag guide

Short answer: YouTube is not open third-party VAST. A tag can be perfectly valid against the IAB spec and still be rejected, because YouTube enforces a stricter platform profile on top of the spec and only accepts creatives delivered through a certified vendor. Before you traffic a tag, resolve it to its final inline XML and check it against YouTube's rules: no VPAID, no wrapper redirects, MP4 and WebM media, HTTPS everywhere, a UniversalAdId, and only Google-owned tracking pixels.

The YouTube-specific details here are drawn from public Google Ad Manager, Display & Video 360, and YouTube 3PAS certification documentation. Some creative-workflow specifics are account-gated and change over time, so treat this as a pre-flight checklist and confirm the current spec with Google and your certified vendor before launch.

Pre-flight a YouTube VAST tag

Start with the tester when you only have a live tag URL or wrapper chain: fetch the resolved response and inspect the redirects. Then run the validator on the final inline XML for a rule-by-rule report you can fix before trafficking to a certified vendor.

Quick reference

RoleWalled-garden video platform (YouTube reservation, served via Google's systems)
Third-party VASTAccepted only through the YouTube 3PAS framework, via a certified vendor
VAST version2.0 or 3.0 on the reservation path; VAST 3.0 required for skippable
VPAIDNot accepted
WrappersNot supported; resolve to inline before trafficking
MediaAt least two MediaFile nodes: MP4 and WebM; max 1 GB; no YouTube video links
HTTPSRequired for every URL
UniversalAdIdRequired
TrackingOnly Campaign Manager 360 / Display & Video 360 pixels; no third-party pixels; no geo-blockers

Why YouTube is not open third-party VAST

On a normal publisher or DSP, you hand over a VAST tag URL and the player resolves it. YouTube does not work that way. Since May 2019, third-party ad serving on YouTube reservation runs through an API-based 3PAS framework: the certified vendor sends the creative and its metadata into Google's systems, and Google serves it. That design is why a tag's structural validity is necessary but not sufficient. The creative also has to satisfy YouTube's platform rules and be ingested by a vendor Google has certified.

Practically, that means two failure modes. The first is a structural or profile problem in the VAST itself (VPAID present, a wrapper redirect, HTTP URLs, no WebM, missing UniversalAdId). Those you can catch and fix yourself, before anything reaches Google. The second is the certification and trafficking gate, which lives inside Google's pipeline and only surfaces after you submit. This guide focuses on the first, because that is the part you control and the part a validator can check in seconds.

The certified-vendor requirement

If your VAST is not served by a YouTube-certified vendor, it will not run on reservation, no matter how clean the XML is. As of Google's current certification list, the vendors integrated with the YouTube 3PAS framework include Adform, C3 Metrics, Exactag, Extreme Reach, Flashtalking, Innovid, Sizmek, and Weborama. Confirm the live list in Google's documentation, since it changes.

This is the single most common misunderstanding behind a "youtube vast validator" search: people expect to paste a self-built tag and have it work on YouTube. Validate the tag so it is clean, but plan on delivering it through one of these vendors.

The YouTube VAST checklist

These are the rules YouTube layers on top of the IAB spec. Each one is a common rejection cause, and each maps to something you can check before trafficking.

RequirementWhat breaks if you miss it
No VPAIDInteractive VPAID units are rejected; use linear MP4 + OMID instead
No wrappersA VASTAdTagURI redirect is not supported; resolve to inline first
MP4 + WebMAt least two MediaFile nodes; a single format or a YouTube video link is rejected
HTTPS everywhereAny HTTP URL (media, impression, click, tracking) can drop the ad
UniversalAdIdRequired for creative identity; missing it fails certified-vendor ingestion
Separate click trackingClickTracking must be its own node, distinct from ClickThrough
Media ≤ 1 GBOversized media is rejected at ingestion
Google-only pixelsNon-approved third-party pixels or geo-blockers cause an Unacceptable video error

VPAID is not accepted

VPAID does not run on YouTube. If your VAST includes an interactive VPAID unit or anapiFramework="VPAID" MediaFile, remove it and serve a plain linear MediaFile. If you need viewability or verification, use an OMID<Verification> block rather than a VPAID wrapper. If you are moving off VPAID more broadly, see the VPAID to SIMID migration guide.

→ vastlint rules: VPAID-mediafile-detected, VPAID-ctv-blocked, VAST-4.1-vpaid-in-interactive-context

No wrapper redirects

YouTube expects a resolved inline linear tag. A wrapper that points to another server with a <VASTAdTagURI> is not supported. If your tag is a wrapper, resolve the chain first: fetch every hop, confirm it terminates in an <InLine> ad, and validate that final XML. The tester and inspector walk the redirect chain for you, and the wrapper chains guide covers the failure modes.

→ vastlint rules: VAST-2.0-ad-has-inline-or-wrapper, VAST-2.0-wrapper-depth

MP4 and WebM media

YouTube expects at least two separate <MediaFile> nodes per creative, one MP4 and one WebM, so the player can pick a compatible format. A single format, a Flash asset, or a direct YouTube video link will not pass, and the media file should not exceed 1 GB.

<MediaFiles>
  <MediaFile type="video/mp4" width="1920" height="1080"
             bitrate="5000" delivery="progressive">
    <![CDATA[https://cdn.example.com/ad-1080p.mp4]]>
  </MediaFile>
  <MediaFile type="video/webm" width="1920" height="1080"
             bitrate="5000" delivery="progressive">
    <![CDATA[https://cdn.example.com/ad-1080p.webm]]>
  </MediaFile>
</MediaFiles>

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.

→ vastlint rules: VAST-2.0-linear-mediafiles, VAST-2.0-mediafile-type, VAST-2.0-flash-mediafile

HTTPS and UniversalAdId

Every URL in the tag must be HTTPS: the media files, the impression pixels, the click-through, and every tracking event. A single HTTP URL is enough to lose the ad. YouTube also requires a <UniversalAdId> so the creative has a stable identity across systems, and it expects click tracking in its own <ClickTracking> node, separate from the <ClickThrough> destination.

<Creative>
  <UniversalAdId idRegistry="ad-id.org">CNPA0484000H</UniversalAdId>
  <Linear>
    <Duration>00:00:15</Duration>
    <VideoClicks>
      <ClickThrough><![CDATA[https://example.com/landing]]></ClickThrough>
      <ClickTracking><![CDATA[https://track.example.com/click]]></ClickTracking>
    </VideoClicks>
    <MediaFiles><!-- MP4 + WebM --></MediaFiles>
  </Linear>
</Creative>

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.

→ vastlint rules: VAST-2.0-mediafile-https, VAST-2.0-tracking-https, VAST-4.0-universaladid-present

Skippable formats

Skippable creatives require VAST 3.0. Set skipoffset on the <Linear> element (Google's skippable spec uses skipoffset="00:00:05") and include a skip tracking event. Non-skippable and bumper formats have their own duration rules. See the skippable linear guide and the bumper ad guide for the format-specific details.

<Linear skipoffset="00:00:05">
  <Duration>00:00:15</Duration>
  <TrackingEvents>
    <Tracking event="skip"><![CDATA[https://track.example.com/skip]]></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.

Tracking pixels and geo-blockers

YouTube no longer accepts non-approved third-party or partner pixels inside the VAST tag. Only Campaign Manager 360 and Display & Video 360 tracking is allowed. Two of the most common "Unacceptable video" rejections come from leftover third-party measurement pixels and from geo-blockers embedded in the tag. Strip both before you submit, and route measurement through Google's approved path.

Common YouTube VAST errors

When a tag does reach a player and fails, the VAST error code narrows it down. The three you will see most on video are:

  • 403 (unsupported MIME type): the response only offers formats the player cannot use. On YouTube this is usually a missing MP4 or WebM node. See the 403 error reference.
  • 405 (faulty creative): a MIME type that does not match the actual file, a CORS misconfiguration on the CDN, or a transcoding problem. See the 405 error reference.
  • 400 / 401 (general linear error): the player could not use the linear creative at all, often a missing or unusable MediaFile. See the 400 error reference. Google trafficking may also surface its own "rejected ad" signal, which is a policy or profile violation rather than a standard IAB code.

Full list: VAST error codes.

TrueView vs skippable vs Authorized Buyers

The naming trips people up. TrueView is a Google Ads product sold on a cost-per-view basis; Authorized Buyers "skippable video" is a different thing sold on CPM and cannot be marketed as TrueView. For VAST purposes the mechanics of a skippable creative are the same (VAST 3.0, skipoffset, a skip event), but the buying path and where your certified vendor plugs in differ. Confirm which product you are actually trafficking before you assume a spec applies.

Where vastlint fits

Google provides its own YouTube VAST validator inside its trafficking tooling, which checks a tag in the context of an actual campaign and certified-vendor delivery. vastlint is the step before that: a fast, client-side, no-login pre-flight you run while you are still writing or debugging the tag. It runs the full IAB rule set in your browser and flags the profile issues that map to YouTube's rules (VPAID present, wrapper redirects, non-HTTPS URLs, a missing WebM node, no UniversalAdId, bad duration) with a rule-by-rule explanation and fix guidance.

It does not, and cannot, verify the certified-vendor or trafficking gate: that lives inside Google's pipeline. Use vastlint to get the XML clean and spec-correct first, so the only thing left to resolve is the delivery path. Paste the resolved XML into the validator, or start from a live URL in the tester.

Pre-flight checklist for YouTube

  • No VPAID unit or apiFramework="VPAID" MediaFile
  • Resolved inline tag, not a wrapper redirect
  • At least two MediaFiles: one MP4 and one WebM, each ≤ 1 GB
  • No Flash MediaFile and no direct YouTube video link
  • Every URL is HTTPS (media, impression, click, tracking)
  • <UniversalAdId> present with a real registry and value
  • <ClickTracking> in its own node, separate from <ClickThrough>
  • <Duration> in HH:MM:SS; VAST 3.0 with skipoffset for skippable
  • Only Campaign Manager 360 / Display & Video 360 pixels; no third-party pixels, no geo-blockers
  • Delivery planned through a YouTube-certified vendor

References

Validate your YouTube VAST tag →