Vertical video and Clips
Table of Contents
What is vertical video?
With the rise in popularity of video content on mobile devices via platforms, such as Tiktok, Youtube (shorts) and Instagram has come an increase in mobile-first videos, videos made for mobile screen dimensions that are portrait rather than landscape.
Traditionally video content in news apps and Bolt apps has been in a landscape format, but as demand grows we've been looking at ways to support portrait formats in our apps.
Clips
Clips is Pugpig Bolt's TikTok-style vertical video experience. It gives users a dedicated, full-screen vertical feed of short-form videos they can swipe through, separate from the main article timeline.
Videos autoplay as users swipe up and down. The player supports pause/play, mute/unmute, descriptions, titles, auto-advance, and looping.
Video carousels

We also support vertical video carousels. These allow you to present your vertical videos in a horizontally scrollable format for users to browse. You can have as many carousels as you want in a timeline and as many videos as you want in a carousel.
When a user taps on a video in a carousel it will open full screen, as expected for this format, apart from MP4 videos due to OS limitations.
Who can use our vertical video features?
Support depends on your chosen video provider.
Our supported providers for Clips are currently:
- Youtube
- JWplayer
- MP4
Our supported providers for vertical video carousels are all of the above plus:
- Brightcove
- Vimeo
- M3U8
Note that for carousels some providers may behave differently than others. MP4s will always play inline rather than opening straight to full screen.
Clips and Carousels together
Note that Clips and Carousels are currently separate features. It is absolutely our intention to combine the two so that when a user taps into a carousel they are taken to Clips and can swipe to the next video, so stay tuned!
Advertising in Clips
Clips supports advertising within the vertical video feed. Ads are inserted as full-screen interstitial slides between editorial videos, so readers swipe into and past them in the same way as any other item in the feed.
How it works
Clips loads an iframe-based ad creative at a configured interval, for example one ad every five videos. The ad is not a banner over the video and it is not a video pre-roll.
The ad creative must be hosted at a URL that the app or webview can reach. It should be designed to work responsively in a full-screen, mobile-first iframe.
Using Google Ad Manager (GAM)
Clips does not currently make a direct GAM ad-unit request. To serve GAM advertising, create a self-contained HTML page, for example an HTML ZIP containing the GAM tag, host it at a URL, and configure that URL as the Clips ad creative.
GAM delivery and any targeting configured within that hosted creative are managed by your ad setup. Clips does not currently provide a dedicated GAM targeting or sponsorship configuration.
Configuration options
| Option | Description |
|---|---|
| Ad URL | The URL loaded in the iframe, containing the advert creative. |
| Frequency | How often Clips inserts an ad into the feed, for example one ad every x videos. |
| Title | The label displayed on the ad slide. |
| Skip delay | How long the reader must wait before the skip control appears. |
These settings are applied in the Clips configuration in Pugpig Distribution. Contact Support or your Customer Success Manager to arrange the setup.
Reporting
Clips automatically tracks ad impressions and skips through BoltClipsAdView and BoltClipsAdSkip. See the Analytics section below for the event definitions.
Important limitations
Clips advertising is an iframe interstitial integration, not a native GAM placement. There is currently no documented Clips-specific support for direct GAM units, fixed creative dimensions, ad refresh, fallback creatives, paywall or subscriber-based ad suppression, consent handling, or a sponsorship workflow. Video pre-roll is a separate capability provided by the underlying video player or provider.
What is needed to get it live?
Clips
Clips ships as part of Bolt Timeline 5.15.0. For Clips to work correctly, the following native app versions are required:
- iOS 4.22.8 or later
- Android 5.1.6 or later
Both versions include the new universal analytics bridge with native support for feed and story dimensions (to allow correct Clips analytics) AND the ability to hide the audio miniplayer on Clips type tab.
Please reach out to us if you're interested, Clips is its own tab so will need configuration from our Support team.
Orientation
- Go to a video card by going to Content > Video Cards.
- Click “Add video card” or edit one of your choice and change the “orientation” field.
- Publish.
If your video cards are added via a feed, you can add a new field to each item to set the orientation. The field can be called anything you like as long as it contains either of:
- landscape
- portrait
Then let our team know and we can map the new field for you.
Carousels
This will depend on your CMS setup and will need a bit of setup so reach out to your Customer Success manager if you're interested. If you'd like carousels to be automatically populated and update regularly we'll need to enable our Timeline Layouts feature for the timeline containing the carousel.
If you want manual control, or just want to test the appearance, then you need to add a carousel card to a timeline, select the ‘video’ style, and put in whichever videos you like. Note that manual carousels can contain both portrait and landscape video cards, but putting a mix of the two into one carousel will look very poor.
Analytics
Clips tracks video events automatically via the analytics bridge. The following events are fired:
| Event | Description | Triggered when |
|---|---|---|
| BoltClipsVideoPlay | Video playback started | User plays a video (manual, swipe, loop, or auto-advance) |
| BoltClipsVideoPause | Video playback paused | User manually pauses a video |
| BoltClipsVideoEnded | Video playback ended | Video reaches the end |
| BoltClipsAdView | Ad viewed | Ad becomes visible to the user |
| BoltClipsAdSkip | Ad skipped | User clicks the skip button on an ad |
Each event includes the following dimensions:
| Dimension | Description |
|---|---|
| pugpigVideoElapsedSeconds | Current playback time in seconds |
| pugpigVideoTotalSeconds | Total video duration in seconds |
| pugpigEventOrigin | Always "Clips" |
| pugpigVideoTransition | How play was triggered: Initial Load, Manual Swipe, Loop, or Auto-Advance |
| pugpigVideoPlaybackSpeed | Playback speed: 1 (normal) or 2 (2x) |


