HTML Creative Technical Specifications

For production agencies delivering HTML5 creative content to Bauer Media Outdoor digital out-of-home platforms.

1. Overview

When creating HTML creative content for Bauer Media Outdoor panels, the guidelines in this document must be followed to ensure compatibility and correct playback across all supported screen environments.

HTML5 creatives are delivered to Bauer Media Outdoor digital panels running the BroadSign Player. Two delivery types are supported:

Delivery Type Description
HTML Package A .zip archive containing all assets. index.html must be at the root of the archive.
Web Redirect (URL) A hosted URL served over HTTPS. Requires Service Worker caching (see §8 Service Workers).

Both types run in an embedded Chromium browser within the BroadSign Player. The player pre-loads content before playback begins. All animations and video must remain paused until BroadSignPlay() is called by the player.


2. Package Structure

For HTML Package deliveries, the ZIP archive must conform to the following requirements:

  • index.html must be located at the root of the ZIP — not inside a subdirectory.
  • All asset references within the creative must use relative paths.
  • The archive should not contain hidden system files (.DS_Store, __MACOSX/).

Valid structure:

creative.zip
├── index.html
├── css/
│   └── style.css
├── js/
│   └── main.js
└── assets/
    ├── background.mp4
    └── logo.png

Invalid structure (index.html not at root):

creative.zip
└── creative_folder/
    ├── index.html
    └── ...

3. Required Methods

3.1 Paused at Start

To prevent missing elements at playback, content is pre-loaded before being displayed. This means all necessary files are downloaded in the background a few seconds ahead of time.

All video elements and animations must be paused by default, even after the content is completely loaded. The player will trigger playback at the correct moment via BroadSignPlay().

Do not include the autoplay attribute on <video> elements:

<video width="1080" height="1920" muted>
  <source src="myProduct.mp4" type="video/mp4">
  <source src="myProduct.ogv" type="video/ogg">
</video>

3.2 BroadSignPlay()

The player calls BroadSignPlay() as soon as the content is displayed on screen. This function must be:

  • Defined at the global (root) level
  • Named exactly BroadSignPlay — it is case-sensitive
  • The single entry point for starting animations, video playback, and timer-based logic

Data retrieval and preparation can happen before BroadSignPlay() fires, but playback must not start until it is called.

function startAnimations() {
  // Initialise animations, start video playback, begin timers
}

function BroadSignPlay() {
  startAnimations();
}

Note: The creative will appear non-functional when opened in a regular browser, because BroadSignPlay() is never called automatically. This is expected behaviour. You can trigger it manually in the browser developer console by running BroadSignPlay();

Warning: The creative must not call BroadSignPlay() itself. The player is responsible for calling it at the correct moment. Self-invocation during pre-load will cause premature playback.

See also: BroadSign: HTML5 Ad Copies — BroadSignPlay()

3.3 Testing Parameters

To allow thorough testing across all content variations, query parameters should be used to simulate dynamic conditions without requiring live data feeds.

const params = new URLSearchParams(window.location.search);
const temperature = params.get('temp');

if (parseInt(temperature) <= 20) {
  // Force result for temperatures ≤ 20°C
} else {
  // Force result for temperatures > 20°C
}

Cover all variable combinations when defining test parameters. A test parameter guide must be submitted alongside all DCO campaigns (see §12.2 Dynamic Content Submissions).


4. BroadSign Context Variables

The BroadSign player injects a BroadSignObject into the page before it loads. These variables allow the creative to contextualise content based on the specific screen it is playing on.

4.1 Object Variables

Available from the moment the content is loaded:

for (var propertyName in BroadSignObject) {
  console.log(propertyName + " = " + BroadSignObject[propertyName]);
}
Variable Description Availability
frame_id Unique ID of the frame displaying the content Always
ad_copy_id ID of the ad copy Always
campaign_id ID of the campaign Always
player_id ID of the BroadSign player (PC) Always
display_unit_id ID of the display unit Always
display_unit_resolution Resolution of the display unit Always
frame_resolution Resolution of the specific frame Always
expected_slot_duration_ms Duration of the ad slot in milliseconds Always
display_unit_lat_long Latitude/longitude of the screen Location-dependent (*)
display_unit_address Physical address of the screen Location-dependent (*)

(*) Not available at all locations.

Example values:

frame_id = 878538496
ad_copy_id = 793583571
campaign_id = 965419085
player_id = 793618615
display_unit_id = 619875851
display_unit_resolution = 1080x1920
frame_resolution = 1024x1280
expected_slot_duration_ms = 300000
display_unit_lat_long = 51.5074,-0.1278
display_unit_address = Oxford%20Street%2C%20London

4.2 Query Variables

For Web Redirect deliveries, the player automatically appends location IDs as query parameters to the URL before requesting it. These are available before BroadSignObject is populated and are limited to location identifiers only.

Parameter Description
resource_id Related to the player (PC). Used as a unique location identifier for Monitor Sync file storage.
frame_id Related to the specific screen. One player can serve more than one screen.

5. Asset and File Specifications

5.1 Scripts

Supported technologies:

  • HTML
  • CSS
  • JavaScript

Warning: Do not use WebAssembly for any component within the creative. It is not supported on the platform.

5.2 Video

Requirement Specification
Formats MP4, OGV, WEBM
Frame rate 25 fps
Recommended bitrate ~2 MB/s
Audio No audio — encode without an audio track
Codec H.264 (for MP4) is recommended for broadest compatibility

5.3 Images

Requirement Specification
Formats JPEG, PNG, SVG, GIF
Resolution 72 ppi
Maximum size ~2 MB per 1 megapixel (1,000 × 1,000 px)
Colour depth 16-bit

5.4 Prohibited and Restricted Technologies

Technology / Feature Reason
<iframe> Causes transparency and opacity rendering issues on DOOH hardware. Do not use.
WebAssembly Not supported on the platform.
autoplay on <video> Video must remain paused until BroadSignPlay() is called.
CSS @layer (Cascade Layers) Silently discarded by the BroadSign Player's Chromium engine — all rules within the layer are dropped entirely. Do not use. See §6.2.
CSS @container (Container Queries) Not supported by the BroadSign Player's Chromium engine — container-based responsive logic is silently ignored. Do not use. See §6.2.
Broken or unresolvable asset references All assets referenced in the creative must be reachable and return HTTP 200. Any reference returning a 4xx or 5xx response will result in the creative not displaying as intended.

5.5 JavaScript DOM Access

For creatives that build content dynamically from a data feed — for example, populating copy or images from the result of a fetch() call — the method used to query DOM elements matters.

querySelectorAll() returns a static NodeList: a snapshot of elements matching the selector at the moment of calling. If elements are added to the DOM after that point, they will not be included. In a DCO creative, calling querySelectorAll() before dynamic content is built will return an empty or incomplete list, causing copy or assets to be silently missing on-panel. The BroadSign Player will log a warning when this occurs.

getElementsByClassName() and getElementsByTagName() return a live HTMLCollection that automatically reflects changes to the DOM. They are the safer choice when querying elements that may not yet exist at call time.

// Avoid in dynamic contexts — NodeList is a static snapshot
const items = document.querySelectorAll('.dynamic-item');

// Preferred for dynamic content — live collection updates as elements are added
const items = document.getElementsByClassName('dynamic-item');

For single-element access, getElementById() and querySelector() are safe provided they are called after the target element exists in the DOM.


6. Browser Compatibility

6.1 Chromium Version

BroadSign players run on an older, fixed-version embedded Chromium browser — not an evergreen, auto-updating browser like a desktop install. The exact build is not published in this document; contact your Bauer Media Outdoor account or technical contact for the specific version if you need it for build tooling (e.g. Browserslist/autoprefixer targets).

Note: Some players run on older hardware with an even earlier Chromium build. Treat the feature-support tables in §6.2 and §6.3 as binding regardless of which generation of hardware a campaign targets — if in doubt, confirm with your Bauer Media Outdoor contact.

Use the Chromium release history and Can I Use to cross-check individual feature support once you have a confirmed target version.

6.2 CSS: Breaking Incompatibilities

The following CSS features are silently discarded by the BroadSign Player's Chromium engine. They will cause content to render incorrectly or break entirely without any error being thrown. Do not use these features.

Feature Introduced in Chromium Impact
@layer (CSS Cascade Layers) Chromium 99 All rules within a @layer block are silently discarded. Any framework that outputs @layer internally will be completely non-functional.
@container (Container Queries) Chromium 105 Container-based responsive logic is silently ignored.

Tailwind CSS v4 warning: Tailwind v4 uses @layer internally for all utility classes. If you build with Tailwind v4, none of your styles will render on the player. Use Tailwind v3 or lower. Alternatively, configure your build to output flat, layer-free CSS.

6.3 CSS: Warnings

The following features are not supported by the BroadSign Player's Chromium engine. They will be silently ignored. Content will not break if suitable fallbacks are present, but the feature itself will not apply.

Feature Introduced in Chromium Fallback
oklch() / oklab() colour functions Chromium 111 Use rgb(), rgba(), or hex values.
Range media query syntax (width >= 1080px) Chromium 104 Use legacy format: (min-width: 1080px).
color-mix() Chromium 111 Pre-compute the colour at build time.

6.4 Third-Party Libraries and Platform SDKs

The creative review tool detects third-party libraries and platform SDKs when present in a submitted creative. None have been formally tested on Bauer Media Outdoor panels. Any creative containing a third-party library or SDK requires additional user acceptance testing (UAT) before it can be approved for campaign use. Confirm UAT requirements with Bauer Media Outdoor before build, and avoid using any of these unless strictly necessary.

Creative and Animation Libraries

The following libraries are used for animation, rendering, and UI logic directly within HTML5 creatives. They have clear DOOH use cases and are compatible with the BroadSign Player's Chromium engine at an API level.

Library Usage
GSAP (GreenSock) Animation
CreateJS / EaselJS Canvas-based animation
Three.js 3D / WebGL rendering
Lottie / Bodymovin JSON-driven animation
PixiJS 2D WebGL rendering
jQuery DOM manipulation

Performance note: Avoid loading these libraries unless strictly necessary. Each additional library increases load time and data consumption. On DOOH panels, any time spent loading is time not spent displaying. jQuery in particular should be avoided for simple DOM operations — use native ES6 instead.

Creative Management Platform (CMP) SDKs

The following SDKs are from ad-serving and creative management platforms primarily designed for web programmatic advertising. Their presence in a creative typically indicates the package was exported from or built with a web-focused CMP.

SDK Primary Context DOOH Consideration
BannerFlow HTML5 CMP Has a DOOH export path, but web tracking calls may still be present in the output
Google Studio (Enabler) Web programmatic display Optimised for web — click tracking, impression beacons and exit events are non-functional in DOOH
Sizmek Web programmatic display Optimised for web — tracking features non-functional in DOOH
Flashtalking Web/programmatic creative Optimised for web — tracking features non-functional in DOOH
Celtra Mobile/display CMP Optimised for mobile and display — not designed for DOOH

Warning: CMP SDK features including click tracking, impression beacons, exit events, and viewability measurement are non-functional in a BroadSign DOOH context. These SDKs may fire outbound HTTP requests on load that serve no purpose on-panel and count against the campaign's 0.5 MB/slot data budget. If a creative has been adapted from a web campaign, strip unused SDK code before delivery.


7. Data Consumption and Network

7.1 Data Budget

A dynamic (DCO) campaign should consume an average of 0.5 MB per displayed slot over a 24-hour period. Exceeding this budget may result in the campaign being paused pending review.

7.2 Reducing Data Usage

  • Do not use cache-busters on static assets. Cache-busters force re-downloads on every play.
  • Compress all video and image files before delivery.
  • Minimise the number of individual network requests.
  • Do not load external fonts, stylesheets, or scripts from third-party CDNs at runtime.
  • Do not embed ad network tracking pixels or analytics scripts.

7.3 HTTP Caching Headers

For assets hosted externally, configure the server to return the following headers:

Cache-Control: public, max-age=31536000
Accept-Ranges: none

Disabling byte-range requests (Accept-Ranges: none) prevents partial-content re-requests that can increase traffic unexpectedly.


8. Service Workers

Applies to Web Redirect (URL) deliveries only.

Web Redirect creatives must implement a Service Worker to cache static assets locally on the player. This prevents the player from re-downloading all assets on every ad play, which would violate the data budget and cause visible load delays.

Service Workers require an HTTPS connection. They will not function over plain http:// in local development without additional browser flags.

See also: BroadSign: Web Redirect Ad Copies

8.1 Service Worker Script

Create a file named sw.js at the root of your hosted creative path. The following example caches all assets in the campaigns/creative/ directory:

const cacheName = "static-v1";
const filesToCache = [
  "/campaigns/creative/",
  "/campaigns/creative/index.html",
  "/campaigns/creative/css/style.css",
  "/campaigns/creative/js/main.js",
  "/campaigns/creative/vid/fallback.mp4",
];

self.addEventListener("install", (event) => {
  event.waitUntil(
    caches.open(cacheName).then((cache) => {
      return cache.addAll(filesToCache);
    })
  );
});

self.addEventListener("fetch", (event) => {
  event.respondWith(
    caches.match(event.request).then((cachedResponse) => {
      if (cachedResponse) {
        return cachedResponse;
      }
      return fetch(event.request).then((networkResponse) => {
        if (networkResponse.ok) {
          const responseClone = networkResponse.clone();
          caches.open(cacheName).then((cache) => {
            cache.put(event.request, responseClone);
          });
        }
        return networkResponse;
      });
    })
  );
});

8.2 Registering the Service Worker

Registration should be triggered after the page content has fully loaded to avoid blocking the initial render:

if ("serviceWorker" in navigator) {
  navigator.serviceWorker
    .register("/campaigns/creative/sw.js")
    .then(() => console.log("Service worker registered!"))
    .catch((err) => console.error("Service worker registration failed:", err));
}

8.3 Clearing the Cache

If a critical update requires forcing a full cache clear on-panel, the following pattern can be used. Use this sparingly — a forced cache clear triggers a full asset re-download across all live panels, significantly increasing data traffic.

navigator.serviceWorker.getRegistration("/campaigns/creative/sw.js").then((registration) => {
  registration?.unregister().then(function () {
    caches.keys().then(function (cacheNames) {
      return Promise.all(
        cacheNames.map(function (cacheName) {
          return caches.delete(cacheName);
        })
      );
    });
  }).catch(function (error) {
    console.error("Error unregistering service worker:", error);
  });
});

Warning: Do not use the Workbox library for caching video assets. Compatibility on DOOH players cannot be guaranteed.


9. Dynamic Content Synchronization (Monitor Sync)

Applies to HTML Package deliveries only.

The Monitor Sync feature allows assets to be updated after a campaign has gone live without re-delivering the entire creative package. BroadSign runs scheduled sync jobs independently of content playback. Changed files are fetched from a remote source and stored locally on the player.

See also: BroadSign: Monitor Sync

9.1 Referencing Synced Assets

Synced assets are stored in a local directory on the player. To reference them in your creative, prefix the file path as follows:

  • Linux players: ../../bsp/sync/{destination_path}/
  • Windows players: ../../sync/{destination_path}/

For example, if the destination path is campaign/creative, a reference to img/photo.jpg becomes:

<!-- Linux player path -->
<img src="../../bsp/sync/campaign/creative/img/photo.jpg">

<!-- Windows player path -->
<img src="../../sync/campaign/creative/img/photo.jpg">

9.2 FTP Synchronization

To use FTP sync, provide the following details to Bauer Media Outdoor:

Field Description
Source root path The remote FTP directory containing the changing assets
FTP host The FTP server hostname
Username Required if authentication is enabled
Target folder The local destination path on the player

9.3 HTTP Synchronization

To use HTTP sync, provide a JSON manifest hosted at a stable URL. The manifest must list all changing assets with their last-modified timestamps and MD5 checksums, which BroadSign uses to detect changes:

{
  "metadata": {
    "version": 1,
    "utc_generation_time_ms": 1709720220000
  },
  "files": [
    {
      "url": "https://www.server.example/campaigns/creative/vid/video.mp4",
      "utc_last_modified_time_ms": 1709720220000,
      "md5": "938c2cc0dcc05f2b68c4287040cfcf71",
      "local_path": "video.mp4"
    },
    {
      "url": "https://www.server.example/campaigns/creative/img/photo.png",
      "utc_last_modified_time_ms": 1709810450000,
      "md5": "298a8ca0gee13d8a92g9276419bdbd83",
      "local_path": "photo.png"
    }
  ]
}

By default, sync runs every hour. A reduced frequency can be requested from Bauer Media Outdoor.


10. Custom Proof of Play

Custom Proof of Play (Custom PoP) logs each playback event with additional context data specific to the creative variation that was displayed. PoP is enabled on a per-campaign basis — confirm with Bauer Media Outdoor whether Custom PoP is required before implementing it in your creative.

As of BroadSign Player (BSP) 15.13.8, there are two supported ways to attach Custom PoP data: the WebSocket method described in §10.1–§10.4 below, and the newer BroadSignObject.setCustomPopData() method described in §10.5. Both remain supported by BroadSign — see §10.7 if a creative needs to call both.

The PoP is recorded by the BroadSign player via a WebSocket connection on ws://localhost:2326.

See also: BroadSign: Custom PoP Action

10.1 Implementation

The PoP message must be sent from inside BroadSignPlay() so that it fires at the moment the creative is shown on screen — not during pre-load.

function BroadSignPlay() {
  // Start playback
  document.getElementById("video").play();

  // Send Custom PoP
  if (typeof BroadSignObject !== "undefined") {
    const frameId = BroadSignObject["frame_id"];
    const contentId = BroadSignObject["ad_copy_id"];

    const payload = {
      rc: {
        version: "1",
        id: "1",
        action: "custom_pop",
        frame_id: frameId,
        content_id: contentId,
        external_value_1: currentWeather,       // String, max 255 chars
        external_value_2: displayedContent,     // String, max 255 chars
        custom_field: JSON.stringify({          // Must be a valid JSON string
          description: "CustomPoP"
        }),
        name: "CPoP"                            // String, max 255 chars
      }
    };

    const ws = new WebSocket("ws://localhost:2326");
    ws.onopen = function () {
      ws.send(JSON.stringify(payload));
    };
    ws.onmessage = function (event) {
      const response = JSON.parse(event.data);
      if (response.rc.status === 1) {
        // PoP successfully registered
      }
    };
  }
}

UK Dynamo: UK Adshel Live / Billboard Live campaigns must use the standardized thirdpartycreativeref / creativetriggerevent keys inside custom_field rather than free-form key names — see the UK Dynamo Creative Technical Specifications doc for more info.

10.2 Payload Specification

Field Required Type Constraint
version Yes String Must be "1"
id Yes String Must be "1"
action Yes String Must be "custom_pop"
frame_id Yes String Must be read from BroadSignObject["frame_id"] at runtime — never hardcoded
content_id Yes String Must be read from BroadSignObject["ad_copy_id"] at runtime — never hardcoded
external_value_1 Optional String Max 255 chars
external_value_2 Optional String Max 255 chars
custom_field Optional JSON string Must be a valid serialised JSON string. Max 255 chars.
name Optional String Max 255 chars

Warning: frame_id and content_id must always be populated from BroadSignObject at runtime. Hardcoding these values will cause incorrect PoP attribution in the reporting dataset.

Warning: custom_field must be a JSON string — i.e. the result of JSON.stringify({...}). Passing a raw object will cause a malformed payload.

10.3 Timing Requirements

PoP timing is a hard requirement. Records that fall outside these thresholds will be misattributed or dropped entirely.

Requirement Threshold Consequence of failure
PoP must fire within 3 seconds of BroadSignPlay() being called Records may not be captured or may be attributed to the wrong slot
PoP must not fire after 80% of the slot duration has elapsed High risk of the record being attributed to the next slot

The PoP must be sent from within BroadSignPlay(), not from a window.onload, DOMContentLoaded, or any other handler that fires independently of when the creative is displayed.

10.4 Validation Checklist

Before submitting a creative that implements Custom PoP, verify all of the following:

10.5 setCustomPopData() Method — New in BSP 15.13.8

Rollout status: Bauer Media Outdoor's inventory has not yet been updated to BSP 15.13.8. Each business unit will roll out this version independently and will notify partners when it becomes available on their estate. Do not assume setCustomPopData() is usable on a given panel until BMO has confirmed the rollout for that business unit — continue relying on the WebSocket method (§10.1) until then.

BroadSign Player (BSP) 15.13.8 added setCustomPopData() to BroadSignObject as an alternative to the WebSocket method above. It is bound to the specific playback item instance rather than a content ID, which removes the prebuffering timing bug that could associate WebSocket-based extra data with the wrong ad copy.

setTimeout(() => {
  if (typeof BroadSignObject !== "undefined") {
    // Note: you cannot use the key `extra_data_source` — Broadsign overwrites it
    // with an internal value used to identify the source of the PoP data.
    var result = BroadSignObject.setCustomPopData(JSON.stringify({
      creative: "foo",
      trigger: "bar",
    }));
    if (result) {
      console.log("UberAd: Sending Pop Success");
    } else {
      console.log("UberAd: Sending PopFailed");
    }
  }
}, 2000); // add 2s delay to make sure BroadSignObject should be ready when called.

Warning: setCustomPopData() can return false if called before its underlying connection is ready — this typically only happens if it's the first thing called in the creative's script. Implement retry logic rather than treating a single false as a permanent failure.

Data shape differs from the WebSocket method

The WebSocket method nests your data inside a custom_field string (see §10.2). setCustomPopData() instead merges the JSON document you pass directly into the PoP's extra data — there is no custom_field wrapper:

Method Resulting extra data
WebSocket (custom_field) { "custom_field": "{\"creative\":\"img1_sunny\",\"trigger\":\"london_sunny\"}" }
setCustomPopData() { "creative": "img1_sunny", "trigger": "london_sunny", "extra_data_source": "broadsign_object" }

Broadsign automatically adds an extra_data_source field with the value "broadsign_object" to any record populated this way, so the two methods can be told apart in reporting. This key is reserved — see §10.6 — and cannot be set or overridden by the creative.

The top-level keys you pass are restricted (§10.6), but the values can be any valid JSON, including nested objects and arrays:

// Valid — "meta" is a top-level key; its value can be any JSON shape
BroadSignObject.setCustomPopData(JSON.stringify({
  creative: "img1_sunny",
  meta: { weather: "sunny", tempC: 24, tags: ["promo", "summer"] }
}));

UK Dynamo: the same standardized thirdpartycreativeref / creativetriggerevent keys required for the WebSocket method also apply here once setCustomPopData() is rolled out — see the UK Dynamo Creative Technical Specifications doc for more info.

10.6 Reserved Extra Data Keys

The following keys are reserved by Broadsign for internal PoP fields and cannot be written to via either Custom PoP method. Any of these keys present in submitted data will be stripped or overwritten internally:

publish_message_id
publish_message_name
publish_message_url
service_name
service_stat_id
stat_id
ad_unit_uuid
reach_file_name
reach_is_triggered
reach_ad_id
reach_ad_pop_url
reach_creative_url
reach_publisher_category
contract_id
main_html_file_path
publish_message_checksum
Publish_message_mime
extra_data_source

Custom PoP data is only injected into a record if it is under 1KB after all reserved keys have been removed — the same size limit that has always applied to extra data in POP records.

10.7 Using Both Methods Together (Precedence Rules)

If a creative (or a set of creatives across a campaign) calls both the WebSocket method and setCustomPopData(), the following precedence applies in the resulting PoP record:

  • Keys set via setCustomPopData() always take precedence and are never overwritten by the WebSocket method, regardless of which method ran first or last.
  • Keys that don't overlap between the two methods can both appear in the same record — unless a key is on the reserved list (§10.6), in which case it's stripped/overwritten by Broadsign internally either way.

Recommendation: Prefer a single method per creative/campaign to avoid ambiguity in reporting. If both must run temporarily during a migration, do not rely on the WebSocket method to set or update any key already owned by setCustomPopData() — those writes will have no effect on the final record.


11. Responsive Content

When a creative is designed to adapt automatically to multiple screen formats, the following must be provided alongside the delivery:

  • A written description of all supported resolutions.
  • Screenshots or renders showing the expected output at each resolution.
  • Confirmation of the adaptation mechanism (CSS viewport units, JavaScript resize logic, etc.).

This applies to all formats — including conventional portrait (9:16) and landscape (16:9) — if the creative is intended to adapt between them automatically.


12. Delivery Requirements

12.1 Material Deadline

Agency type Deadline
Standard Minimum 10 working days before campaign start
Certified DCO/creative vendor Minimum 5 working days before campaign start

Note: Certified vendor status is granted to DCO platforms and creative tools that have been pre-tested for compatibility on Bauer Media Outdoor infrastructure. Confirm with Bauer Media Outdoor whether your platform or toolchain holds certified status before assuming the reduced deadline applies.

12.2 Dynamic Content Submissions

All DCO campaigns must be submitted with the following documentation:

  1. A content matrix mapping every creative variation to its trigger conditions (see example below).
  2. A scenario description explaining how the creative behaves under each condition.
  3. A test parameter guide listing all query parameters that can be used to force each variation during review.

Example content matrix:

Tag Asset Trigger Condition
img1 day_hot.jpg Time: day, Temperature: ≥ 25°C
img2 day_cold.jpg Time: day, Temperature: < 25°C
img3 night_hot.jpg Time: night, Temperature: ≥ 25°C
img4 night_cold.jpg Time: night, Temperature: < 25°C

This documentation is required for Bauer Media Outdoor to verify that PoP logs correctly reflect what is displayed on screen.

12.3 Responsive Content Submissions

Include reference screenshots at each supported resolution. Explicitly state which formats the creative is confirmed to support.


Further Reading

‍

No items found.