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
| Role | Walled-garden video platform (YouTube reservation, served via Google's systems) |
| Third-party VAST | Accepted only through the YouTube 3PAS framework, via a certified vendor |
| VAST version | 2.0 or 3.0 on the reservation path; VAST 3.0 required for skippable |
| VPAID | Not accepted |
| Wrappers | Not supported; resolve to inline before trafficking |
| Media | At least two MediaFile nodes: MP4 and WebM; max 1 GB; no YouTube video links |
| HTTPS | Required for every URL |
| UniversalAdId | Required |
| Tracking | Only 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.
| Requirement | What breaks if you miss it |
|---|---|
| No VPAID | Interactive VPAID units are rejected; use linear MP4 + OMID instead |
| No wrappers | A VASTAdTagURI redirect is not supported; resolve to inline first |
| MP4 + WebM | At least two MediaFile nodes; a single format or a YouTube video link is rejected |
| HTTPS everywhere | Any HTTP URL (media, impression, click, tracking) can drop the ad |
| UniversalAdId | Required for creative identity; missing it fails certified-vendor ingestion |
| Separate click tracking | ClickTracking must be its own node, distinct from ClickThrough |
| Media ≤ 1 GB | Oversized media is rejected at ingestion |
| Google-only pixels | Non-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>inHH:MM:SS; VAST 3.0 withskipoffsetfor skippable- Only Campaign Manager 360 / Display & Video 360 pixels; no third-party pixels, no geo-blockers
- Delivery planned through a YouTube-certified vendor
References
- Google for Developers: YouTube Certified External Vendors (3PAS)
- Display & Video 360 Help: Vendor support troubleshooting guide for YouTube and VAST tags
- Google Ad Manager Help: Overview of VPAID creatives
- Authorized Buyers Help: Implement skippable video ads
- IAB Tech Lab: VAST specification and version history