VMAP Validator & Ad Break Timeline
Validate VMAP ad-break XML and see the pre-, mid-, and post-roll breaks on a timeline, entirely in your browser.
The VMAP Validator parses your playlist entirely in your browser. The XML you paste stays on your device, the AdTagURI and VAST behind each break are never requested, and nothing is uploaded to ArrayKit.
Open the VAST Validator
About VMAP Validator
The VMAP Validator parses a Video Multiple Ad Playlist and tells you whether every ad break is scheduled correctly before you ship it to a player. Paste your VMAP XML and it reads each vmap:AdBreak, checks the timeOffset format (start, end, HH:MM:SS.mmm, a percentage, or an #n position), confirms the breakType is linear, nonlinear, or display, and verifies the AdSource carries inline VASTAdData or an AdTagURI. Valid breaks are laid out on a pre-, mid-, and post-roll timeline so you can read the ad pod schedule at a glance, while broken breaks are flagged inline. Built for ad-ops engineers and video developers who debug server-side ad insertion and CTV playlists, it runs entirely in your browser — the playlist stays on your device and no ad tag is ever called.
Features
- Validates every vmap:AdBreak for a well-formed timeOffset, breakType, and AdSource
- Recognizes start, end, HH:MM:SS.mmm, percentage, and #n position offsets
- Lays out pre-roll, mid-roll, and post-roll breaks on a visual timeline
- Flags a missing AdSource, empty ad data, and unknown timeOffset formats inline
- Tells inline VASTAdData apart from an AdTagURI redirect for each break
- Reports malformed XML with the exact line and column
- Counts breaks by slot so you can confirm the ad pod schedule at a glance
- Runs entirely in your browser — the playlist and any AdTagURI are never fetched
How to use the VMAP Validator
- Paste your VMAP XML into the input box, or load the sample playlist
- Read the summary chips for the break count and pre/mid/post totals
- Scan the timeline to confirm each AdBreak lands in the right slot
- Open any break flagged in red to see which attribute or AdSource is wrong
Example
Input
<vmap:VMAP xmlns:vmap="http://www.iab.net/videosuite/vmap" version="1.0">
<vmap:AdBreak timeOffset="start" breakType="linear" breakId="pre">
<vmap:AdSource>
<vmap:AdTagURI><![CDATA[https://ads.example/vast]]></vmap:AdTagURI>
</vmap:AdSource>
</vmap:AdBreak>
</vmap:VMAP>
Output
Valid VMAP · 1 break · 1 pre-roll
AdBreak "pre" — start · linear · Ad tag URI
A single pre-roll AdBreak pointing at an AdTagURI validates cleanly.
Common errors & troubleshooting
- A break is flagged with 'unrecognized timeOffset'. — VMAP accepts start, end, an absolute HH:MM:SS.mmm time, a percentage like 25%, or an #n position marker. A bare number of seconds or a stray space will not match — use one of those exact forms.
- A break shows 'missing <vmap:AdSource>'. — Every AdBreak needs an AdSource that carries inline VASTAdData, an AdTagURI, or CustomAdData. Add one, or remove the empty break from the playlist.
- The whole document fails with 'Missing <vmap:VMAP> root'. — You likely pasted a bare VAST tag instead of its VMAP wrapper. VMAP schedules the ad breaks; the VAST for each break lives inside VASTAdData or at the AdTagURI.
- The root element is flagged for a missing version. — The <vmap:VMAP> element requires a version attribute — add version="1.0" to the opening tag.
Frequently asked questions
- What is VMAP and how is it different from VAST?
- VMAP (Video Multiple Ad Playlist) is a scheduling wrapper that tells a player when to show ad breaks — pre-roll, mid-roll, or post-roll. VAST describes the ads themselves. A VMAP AdBreak either embeds a VAST document in VASTAdData or points to one with an AdTagURI.
- Which timeOffset formats does the VMAP validator accept?
- It recognizes the four VMAP offset styles: the keywords start and end, an absolute time as HH:MM:SS.mmm, a percentage of the content duration such as 25%, and an #n position marker like #2. Anything else is flagged as an unrecognized timeOffset.
- Does the tool fetch the VAST behind an AdTagURI?
- No. The validator only inspects the VMAP structure — it detects whether each AdBreak uses inline VASTAdData or an AdTagURI, but it never calls the ad server or downloads the tag. Nothing you paste leaves your browser.
- How does it decide whether a break is a pre-, mid-, or post-roll?
- A timeOffset of start is a pre-roll, end is a post-roll, and any concrete time, percentage, or #n position is treated as a mid-roll. The timeline groups the breaks by that resolved slot so the pod order is obvious.
- Can it validate a VMAP with only one AdBreak?
- Yes. Whether your playlist has a single break or a full pre/mid/post pod, each vmap:AdBreak is checked the same way and placed on the timeline in schedule order, including a lone break that is not wrapped in a list.
- Why is my breakType being rejected?
- VMAP allows only linear, nonlinear, or display for breakType. A typo, a VAST creative type, or an empty attribute will be flagged. Set a valid value on the vmap:AdBreak element to clear the error.
Related tools
- VAST Validator — Validate VAST 2.0-4.3 ad XML against IAB rules and see errors and warnings, in your browser.
- VAST Tag Inspector — Inspect a VAST tag as a readable tree of creatives, media files and tracking events.
- VAST Macro Expander — Browse VAST 4.x macros and expand a tracking URL with sample or custom values.
- VAST Error Code Lookup — Look up any VAST or VPAID error code (100-901) with its meaning, cause and fix.
- OpenRTB Bid Request Validator — Validate an OpenRTB 2.5 or 2.6 bid request for missing fields, wrong types and bad enums.
- ads.txt Validator — Validate ads.txt and app-ads.txt records against the IAB spec, line by line.
All ArrayKit tools