Paste a VAST response, drop an XML file or enter a tag URL. The inspector checks it against the IAB VAST 2.0, 3.0 and 4.0 to 4.3 specifications, follows wrappers, lists every media file and tracker, and never fires a single pixel.
The request goes from your own browser straight to the ad server, the way a player would ask for an ad, with [CACHEBUSTING] and [TIMESTAMP] filled in. It may count as an ad request on that server. The response is read on this page only; the impression, tracking and error URLs inside it are never called.
Drop a VAST .xml file
Or click to choose one. It is read in this browser and never uploaded.
Wrapper chain
Issues
Media files
Tracking and clicks
Listed for review only. None of these URLs is requested by this page.
XML tree
What the inspector checks
VAST is the XML a video player asks an ad server for. One wrong attribute and the player skips the ad, reports an error code nobody reads, and the campaign underdelivers. The inspector reads the version on the <VAST> element and applies the rules of that version, each one linked to the IAB text it comes from:
Structure. Well formed XML, one <InLine> or <Wrapper> per ad, element names in the right case, and pods with unique sequence numbers.
Required elements.AdSystem, AdTitle, Impression and Creatives in every InLine, VASTAdTagURI in every Wrapper, UniversalAdId from VAST 4.0 and AdServingId from VAST 4.1.
Linear ads.Duration and skipoffset in HH:MM:SS(.mmm) or n%, progress offsets, and the delivery, type, width and height every MediaFile must carry. A bitrate written in bits per second instead of kbps is flagged too.
Tracking. Every event name is checked against the list of the declared version, so a VAST 4 tag that still sends fullscreen instead of playerExpand is caught. Macros are compared with the IAB macro list.
Modern delivery. VPAID media files after VAST 4.1, missing Mezzanine files for server side insertion, AdVerifications for Open Measurement, URLs without CDATA, and every http URL that an https page would block.
Wrappers and the five level limit
A Wrapper points the player to another ad server, which can answer with another Wrapper. The VAST 4 specification asks players to stop after five wrappers before an InLine ad and report error 302, so a resold impression that hops through six exchanges never plays. With Follow wrapper tags on, the inspector requests each VASTAdTagURI in turn, shows every level with its own result, and flags loops and chains that are too long.
Fetching a tag URL
The inspector has no server. When you enter a tag URL, your browser requests it directly, exactly as a web player would. Most ad servers allow that with a CORS header, because web players depend on it. When a server does not, the browser hides the response and the inspector says so: open the tag in a new tab, copy the XML and paste it. Impression, tracking, click and error URLs in the response are listed but never requested, and a media file is only downloaded when you press Preview.
After the tag passes
A valid tag can still carry a file a platform rejects. Download the MediaFile and run it through the Ad Spec Checker for resolution, bitrate, frame rate and codec against each placement, and through the Safe Zone Checker if it runs vertically on social. HTML5 display creatives from the same campaign belong in the HTML5 Banner Validator.
No. Impressions, quartiles, clicks and errors are counted when a player calls their URLs, and the inspector never calls them. Fetching a tag URL is an ad request, so the ad server may log a request or a no fill, the same as when you open the tag in a browser tab. Pasted XML and files contact nobody.
Browsers only let a page read a response from another site when that site sends an Access-Control-Allow-Origin header. Some ad servers send it only for their own players or only on https. Native and CTV players are not browsers and ignore CORS. Paste the XML instead, and if your web player fails the same way, ask the ad server to enable CORS for your domain.
VAST 4.1 deprecated VPAID. Measurement moved to Open Measurement through AdVerifications, and interactivity to SIMID through InteractiveCreativeFile. Connected TV apps, most mobile SDKs and server side ad insertion cannot run VPAID at all, so a tag whose only MediaFile is VPAID plays nowhere there. Keep at least one plain MP4 next to it.
The highest version the player says it supports, usually in the request. A VAST 4.1 or later response must carry AdServingId and UniversalAdId, and the inspector holds each response to the rules of the version it declares, so declaring 4.2 while leaving those out is an error even if the rest is perfect.
No. Parsing and checking happen in this browser tab, and nothing you paste, drop or fetch is sent to AdCheckLab. The TXT and JSON reports are created on your machine.