Bumper ads in VAST XML
A bumper ad is a short, non-skippable linear ad of 6 seconds or less. Bumpers are used as standalone brand awareness placements and as bookend ads in ad pods (a bumper before the main ad, and another after). They typically achieve near-100% completion rates due to their brevity.
In VAST XML, a bumper is simply a <Linear> creative with a <Duration> of 6 seconds or less and no skipoffset attribute. There is no dedicated bumper element in the VAST spec — the bumper format is a convention enforced by the platform or exchange, not by VAST itself.
Quick reference
| Max duration | 6 seconds (enforced by platform/exchange, not VAST spec) |
| Skippable | No — omit skipoffset |
| Used in ad pods | Yes — sequence attribute on <Ad> |
| Completion rate | Near 100% (no skip option, short duration) |
Minimal bumper example
<VAST version="4.2">
<Ad id="1">
<InLine>
<AdSystem>My Ad Server</AdSystem>
<AdTitle>My 6s Bumper</AdTitle>
<Impression id="imp1"><![CDATA[https://track.example.com/impression]]></Impression>
<UniversalAdId idRegistry="Ad-ID">BUMP1234</UniversalAdId>
<Creatives>
<Creative id="creative1" sequence="1">
<Linear>
<!-- No skipoffset — bumpers are never skippable -->
<Duration>00:00:06</Duration>
<TrackingEvents>
<Tracking event="start"><![CDATA[https://track.example.com/start]]></Tracking>
<Tracking event="complete"><![CDATA[https://track.example.com/complete]]></Tracking>
</TrackingEvents>
<VideoClicks>
<ClickThrough><![CDATA[https://example.com/landing]]></ClickThrough>
</VideoClicks>
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4"
width="1920" height="1080" bitrate="2000">
<![CDATA[https://cdn.example.com/bumper-1080p.mp4]]>
</MediaFile>
<MediaFile delivery="progressive" type="video/mp4"
width="1280" height="720" bitrate="1000">
<![CDATA[https://cdn.example.com/bumper-720p.mp4]]>
</MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>Bumpers as bookends in an ad pod
A common pattern is to wrap a longer ad with bumpers: a 6s bumper plays first, then the main ad, then another 6s bumper. In VAST, this is represented using multiple <Ad> elements with sequence attributes inside a single VAST response, or via separate VAST tags served as an ad pod.
<VAST version="4.2">
<!-- Sequence 1: opening bumper (6s) -->
<Ad id="bumper-open" sequence="1">
<InLine>
<AdSystem>My Ad Server</AdSystem>
<AdTitle>Opening Bumper</AdTitle>
<Impression><![CDATA[https://track.example.com/bumper-open-imp]]></Impression>
<Creatives>
<Creative sequence="1">
<Linear>
<Duration>00:00:06</Duration>
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4"
width="1920" height="1080" bitrate="2000">
<![CDATA[https://cdn.example.com/bumper-open.mp4]]>
</MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
<!-- Sequence 2: main 30s ad -->
<Ad id="main-ad" sequence="2">
<InLine>
<AdSystem>My Ad Server</AdSystem>
<AdTitle>Main Ad</AdTitle>
<Impression><![CDATA[https://track.example.com/main-imp]]></Impression>
<Creatives>
<Creative sequence="1">
<Linear>
<Duration>00:00:30</Duration>
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4"
width="1920" height="1080" bitrate="2500">
<![CDATA[https://cdn.example.com/main-ad.mp4]]>
</MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
<!-- Sequence 3: closing bumper (6s) -->
<Ad id="bumper-close" sequence="3">
<InLine>
<AdSystem>My Ad Server</AdSystem>
<AdTitle>Closing Bumper</AdTitle>
<Impression><![CDATA[https://track.example.com/bumper-close-imp]]></Impression>
<Creatives>
<Creative sequence="1">
<Linear>
<Duration>00:00:06</Duration>
<MediaFiles>
<MediaFile delivery="progressive" type="video/mp4"
width="1920" height="1080" bitrate="2000">
<![CDATA[https://cdn.example.com/bumper-close.mp4]]>
</MediaFile>
</MediaFiles>
</Linear>
</Creative>
</Creatives>
</InLine>
</Ad>
</VAST>See the ad pods & sequencing guide for full details on how players handle multiple <Ad> elements with sequence attributes.
Platform enforcement of the 6-second limit
The 6-second duration convention is enforced at the platform or exchange level, not by the VAST spec itself. How each platform handles a bumper that exceeds 6 seconds varies:
| Platform | Behaviour if duration exceeds 6s |
|---|---|
| Google Ad Manager (GAM) | Trafficker-defined. GAM line items for bumpers should set max duration to 6s. |
| YouTube (via GAM) | Bumper line item type enforces 6s. Longer creatives are rejected at trafficking time. |
| Google IMA SDK | Plays whatever duration is declared — does not truncate. Enforcement is upstream. |
| Roku RAF | No native bumper concept. Duration enforced by publisher configuration. |
Common mistakes checklist
- Duration exceeds 6 seconds — exchanges will reject the creative or reclassify it as a non-skippable linear. Keep to ≤6s.
- skipoffset accidentally included — a bumper with
skipoffsetwould show a skip button immediately (or after the offset), defeating the purpose. Omit it entirely. - Missing sequence attribute in ad pods — when bumpers are served as part of a pod, the
sequenceattribute on each<Ad>element determines play order. Missing or duplicate sequence values cause undefined player behaviour. - Reusing a 30s creative trimmed to 6s in the MediaFile — the
<Duration>element must reflect the actual video file length. If the video is 30s but Duration is 6s, the player will cut off the ad at 6s and fire complete at the wrong point.