---
updatedAt: 2026-10-08T14:54:34.000Z
agentTools:
  siteIndex: https://docs.jwplayer.com/llms.txt
  projectIndex: https://docs.jwplayer.com/platform/llms.txt
---

# Advertising

Learn how to define a Dynamic Strategy Rules advertising configuration

Within Dynamic Strategy Rules, you can define ad settings, set up ad breaks, and enable Player Bidding.

<br />

***

## Define ad settings from an existing ad schedule

<Image src="https://files.readme.io/60595d45428b8b2c1bc2092e0ed0c5446e51e7adc14b4146f508cdc6dd526e35-dsr-advertising-import.png" alt="Create Advertising screen" align="center" width="70% " caption="Create Advertising screen" border={true} />

<br />

Follow these steps to import ad schedule settings:

1. From the <a href="https://dashboard.jwplayer.com/p/strategies" target="_blank" rel="nofollow">**Dynamic strategy rules**</a> page, click the **Library** tab.
2. Click **Create library > Advertising**. The **Create advertising** page appears.
3. From the **Import** dropdown menu, select an existing ad schedule.
4. Click **Import**. The imported ad schedule settings populate the right side of the page.
5. (Optional) Under **Advertising**, enter a new **Name**. By default, JWX gives the settings the name of the imported ad schedule.
6. Click **Save**. The advertising settings will appear on the **Library** tab.

<Callout icon="📘" theme="info">
  Any changes made to the advertising settings apply only to the specific Dynamic Strategy Rules advertising settings. The original ad schedule will be unaffected.
</Callout>

<br />

***

## Define new advertising settings

If you do not have an existing ad schedule to import or prefer to manually enter your advertising settings, you can define new advertising settings.

When defining advertising settings, you choose how ads are delivered:

* **VAST** or **IMA** (third-party ad servers): Ads are requested from an external ad server such as Google Ad Manager, FreeWheel, or other VAST-compatible servers.
* **JWX Ad Server**:  Ads are requested from the JWX Ad Server which runs and auction and returns an ad to play.

<br />

Follow these steps to define ad settings:

1. From the <a href="https://dashboard.jwplayer.com/p/strategies" target="_blank" rel="nofollow">**Dynamic strategy rules**</a> page, click the **Library** tab.

2. Click **Create library > Advertising**. The **Create advertising** page appears.

3. Under **Create new**, click **Create new**. The advertising setting fields appear.

4. Under **Advertising**, enter a **Name**. This will identify the advertising configuration on the **Library** list tab.

5. Click a radio button to **Select your Ad Client**.

6. (JWX Ad Server) Select a **Placement Type**.

   <Callout icon="📘" theme="info">
     JWX supports these <a href="https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list--plcmt-subtypes---video-" target="_blank">IAB placement types</a>.
   </Callout>

7. Configure ad delivery settings:
   * (VAST, Google IMA) [Add breaks manually](#add-breaks-manually)
   * (VAST, Google IMA) [VMAP](#vmap)
   * [Dynamic Ads](#configure-dynamic-ads)

8. <a id="step8"></a>(Optional) Enable [Keep watching player](#keep-watching-player).

9. <a id="step9"></a>(Optional) Enable [Google Publisher provided signals](#google-publisher-provided-signals).

10. <a id="step10"></a>(VAST, Google IMA - Optional) Enable [Player bidding](#player-bidding).

11. <a id="step11"></a>(Optional) Refine the configuration with the [JSON Editor](#json-editor).

12. <a id="step12"></a>Click **Save**. The ad settings will appear on the **Library** tab.

<br /><br />

### Ad delivery settings

You can define ad delivery settings through one of the following approaches.

<details><summary><strong>Add breaks manually</strong></summary>
<br />
<a id="add-breaks-manually"></a>

A manual ad schedule defines how ad breaks are explicitly placed within your video content.

By manually inserting ad breaks and configuring ad rules, timing, and bidding settings, you control when ads are eligible to play during playback.

<Image src="https://files.readme.io/65c535f2e57a5301f0e9b0a79ddb1cdcd09cefa317d8021f48632d371a54c865-dsr-advertising-ad-breaks-manually.png" alt="Configure ad breaks for VAST" align="center" width="50% " caption="Configure ad breaks for VAST" border={true} />

<br />

Follow these steps to configure ad breaks:

<ol>
<li>(Google IMA) Select a <strong>VPAID Mode</strong> for the ad.
<br />
<span class="manual-tbl-font">
<table>
<thead>
<tr>
   <th> VPAID Mode </th>
   <th> Description </th>
</tr>
</thead>
<tbody>
<tr>
   <td width="30%"> <strong>Insecure</strong></td>
   <td width="70%"> Loads in a friendly iFrame
         <br /><br />
         This allows the ad access to the site via JavaScript.
   </td>
</tr>
<tr>
   <td> <strong>Secure</strong></td>
   <td> Enabled using a cross domain iFrame
         <br /><br />
         VPAID ads cannot access the site. A VPAID ad that depends on friendly iFrame access may not play.
   </td>
</tr>
<tr>
   <td> <strong>Disabled</strong></td>
   <td> No ad
         <br /><br />
         VPAID ads will not play. An error will be returned if a VPAID ad is requested.
   </td>
</tr>
</tbody>
</table>
</span>
<br />
</li>
<li>Under <strong>Configure ad breaks</strong>, choose <strong>Add breaks manually</strong>.</li>
<li>Under <strong>Ad events</strong>, click <strong>+ Add</strong> next to <strong>Preroll</strong>, <strong>Midroll</strong>, or <strong>Postroll</strong>. The configuration panel appears.</li>
<li><a name="key-for-ad-tag-manual"></a>Enter an <strong>Ad tag URL</strong>.
<span class="manual-tbl-font">

<Callout icon="💡" theme="default">
  <a href="/platform/docs/ad-tag-targeting-macro-reference" target="_blank">Macros</a> can be added to each ad tag to target the ads returned. These macros are replaced in real time. It is common to add 10+ macros to a single ad tag
</Callout>

</span>
<li>(Optional) Click <strong>Use key for ad tag if available</strong>. From the dropdown, select the key for the <a href="#dynamic-tag">custom data</a>.

<Callout icon="💡" theme="default">
  If the key you need does not exist, [add the key](https://docs.jwplayer.com/platform/docs/create-and-manage-key-value-pairs-kvps).
</Callout>

</span>
<li>(VAST - Optional) Click  <strong>+ Add waterfall tag</strong> to enter additional ad tag URLs.
<span class="manual-tbl-font">

<Callout icon="💡" theme="default">
  Creating an ad tag waterfall helps you to maximize ad revenue by attempting to show a valid ad to your viewers during an ad break.
</Callout>

</span>
</li>
<li>(VAST - Optional) To increase viewer engagement, click  <strong>Skippable after ___ seconds</strong> and enter the length of time in seconds a viewer must watch an ad before having the ability to skip the ad.</li>
<li>(Google IMA - Optional) Click  <strong>Non-linear overlay ad</strong> to allow an ad banner to display over video content without disrupting the video.</li>
<br />
<li>(Midroll) Define the <strong>Break timing</strong>:
<ol>
<li>Select an option from the <strong>Break timing</strong> dropdown menu.</li>
<li>Next to the <strong>Break timing</strong> dropdown menu selection, enter the location in the video where a midroll ad break occurs.
<span class="manual-tbl-font">
<table>
<thead>
<tr>
   <th> Option </th>
   <th> Guidance </th>
</tr>
</thead>
<tbody>
<tr>
   <td width="30%"> <strong>Seconds into video</strong></td>
   <td width="70%"> Enter the video location in seconds.</td>
</tr>
<tr>
   <td> <strong>Timecode</strong></td>
   <td> Enter the video location as a timecode in <em>hh:mm:ss.mmm</em> format.
         <br /><br />
         <strong>Example</strong>: <em>00:15:25.001</em>
   </td>
</tr>
<tr>
   <td> <strong>% of video</strong></td>
   <td> Enter the video location as a percentage of the video.
         <br /><br />
         <strong>Example</strong>: Enter <em>15</em> for 15%.
   </td>
</tr>
</tbody>
</table>
</span>
</li>
</ol>
</li>
<br />
<li>Click <strong>Done</strong>.</li>
<li>(Optional) Repeat steps <strong>3-10</strong> to configure an additional ad break.
</li>
</ol>

<br />

⤴️ <a href="#step8">Return to step <strong>8</strong> of the main process.</a>

<hr />
</details>
<details><summary><strong>VMAP</strong></summary>
<br />
<a id="vmap"></a>

A VMAP ad schedule defines how ad breaks are scheduled using a VMAP ad tag.

By configuring ad rules, timing, and bidding settings, you control when ads are eligible to play throughout video playback.

<Image src="https://files.readme.io/d3b7774aeda2367bf090ba4f318d1cb1a30bf9f69d9a9be92bc5951053c975c9-dsr-advertising-vmap-new.png" alt="Configure ad breaks for Google IMA VMAP" align="center" width="50% " caption="Configure ad breaks for Google IMA VMAP" border={true} />

<br />

Follow these steps to configure ad breaks:

<ol>
<li>(Google IMA) Select a <strong>VPAID Mode</strong> for the ad.
<br />
<span class="manual-tbl-font">
<table>
<thead>
<tr>
   <th> VPAID Mode </th>
   <th> Description </th>
</tr>
</thead>
<tbody>
<tr>
   <td width="30%"> <strong>Insecure</strong></td>
   <td width="70%"> Loads in a friendly iFrame
      <br />
      This allows the ad access to the site via JavaScript.
   </td>
</tr>
<tr>
   <td> <strong>Secure</strong></td>
   <td> Enabled using a cross domain iFrame
      <br />
      VPAID ads cannot access the site. A VPAID ad that depends on friendly iFrame access may not play.
   </td>
</tr>
<tr>
   <td> <strong>Disabled</strong></td>
   <td> No ad
      <br />
      VPAID ads will not play. An error will be returned if a VPAID ad is requested.
   </td>
</tr>
</tbody>
</table>
</span>
<br />
<li>Under <strong>Configure ad breaks</strong>, choose <strong>VMAP</strong>.</li>
</li>
<li><a name="key-for-ad-tag-vmap"></a>Enter an <strong>Ad tag URL</strong>.
<span class="manual-tbl-font">

<Callout icon="💡" theme="default">
  <a href="/platform/docs/ad-tag-targeting-macro-reference" target="_blank">Macros</a> can be added to each ad tag to target the ads returned. These macros are replaced in real time. It is common to add 10+ macros to a single ad tag.
</Callout>

</span>
</li>
<li>(Optional) Click <strong>Use key for ad tag if available</strong>. From the dropdown, select the key for the <a href="#dynamic-tag">custom data</a>.

<Callout icon="💡" theme="default">
  If the key you need does not exist, [add the key](https://docs.jwplayer.com/platform/docs/create-and-manage-key-value-pairs-kvps).
</Callout>

</span>
</li>
<li>(Optional) Click <strong>Use Key for Ad Tag if available</strong>. From the dropdown, select the key for the <a href="https://docs.jwplayer.com/platform/docs/provide-custom-data-to-a-placement" target="_blank">custom data</a>.</li>
</ol>

<br />

⤴️ <a href="#step8">Return to step <strong>8</strong> of the main process.</a>

<hr />
</details>
<details><summary><strong>Dynamic Ads</strong></summary>
<br />
<a id="configure-dynamic-ads"></a>

A Dynamic Ads schedule defines how ad breaks are scheduled using playback rules that control ad frequency, timing, and eligibility during playback.

With the JWX Ad Server, Dynamic Ads also lets you configure whether an ad break contains a single ad or an ad pod, when the ad schedule can begin, and how player visibility affects ad scheduling.

This approach allows you to balance monetization and viewer experience without manually placing ad breaks.

<Image src="https://files.readme.io/6638eefecc2019516c71c17eb77d20d6d001cab074a448a45e019980986f4bba-dsr-advertising-dynamic-ads-new.png" alt="Configure ad breaks for Google IMA Dynamic Ads" align="center" width="50% " caption="Configure ad breaks for VAST Dynamic Ads" border={true} />

<br />

**Key Benefits**:

* Tailor the viewing experience with intuitive, non-technical ad rules
* Set ad rules based on customer goals
* Boost monetization through increased opportunities for ad fill and impressions
* Use preset rules to easily align your ad strategy with industry specifications

<span class="manual-tbl-font">

<Callout icon="🚧" theme="warn">
  If you plan to use Dynamic Ads with the Keep Watching Player, read this [FAQ](#dynamic-ads-keep-watching-player).
</Callout>

</span>

<br />

Follow these steps to configure Dynamic Ads:

<ol>
  <li>Under <strong>Configure ad breaks</strong>, choose <strong>Dynamic Ads</strong>.

<Callout icon="📘" theme="info">
  When **JWX Ad Server** has been chosen, **Dynamic Ads** is automatically selected and greyed out.
</Callout>

</li>
<li>(Google IMA) Select a <strong>VPAID Mode</strong> for the ad.
<br />
<span class="manual-tbl-font">

<table>
<thead>
<tr>
   <th> VPAID Mode </th>
   <th> Description </th>
</tr>
</thead>
<tbody>
<tr>
   <td width="30%"> <strong>Insecure</strong></td>
   <td width="70%"> Loads in a friendly iFrame
         <br />
         This allows the ad to access the site via JavaScript.
   </td>
</tr>
<tr>
   <td> <strong>Secure</strong></td>
   <td> Enabled using a cross-domain iFrame
         <br />
         VPAID ads cannot access the site. A VPAID ad that depends on friendly iFrame access may not play.
   </td>
</tr>
<tr>
   <td> <strong>Disabled</strong></td>
   <td> No ad
         <br />
         VPAID ads will not play. An error will be returned if a VPAID ad is requested.
   </td>
</tr>
</tbody>
</table>

<span class="manual-tbl-font">
<br />
</li>
  <li>Add <strong>Ad events</strong> to your content:
<ol>
<li>Click <strong>+</strong> (plus icon) next to <strong>Preroll</strong> or <strong>Midroll</strong>. The configuration panel appears.</li>
  <li><a name="key-for-ad-tag-manual"></a>(VAST, Google IMA) Enter the <strong>Ad tag URL</strong>.
<span class="manual-tbl-font">

<Callout icon="💡" theme="default">
  <a href="/platform/docs/ad-tag-targeting-macro-reference" target="_blank">Macros</a> can be added to each ad tag to target the ads returned. These macros are replaced in real time. It is common to add 10+ macros to a single ad tag.
</Callout>

</span>
</li>
<li>(Optional) Click <strong>Use key for ad tag if available</strong>. From the dropdown, select the key for the <a href="#dynamic-tag">custom data</a>.

<Callout icon="💡" theme="default">
  If the key you need does not exist, [add the key](https://docs.jwplayer.com/platform/docs/create-and-manage-key-value-pairs-kvps).
</Callout>

</li><li> (Optional - JWX Ad Server) Click <strong>Enable GAM Mediation</strong>.

<Callout icon="🚧" theme="warn">
  This setting requires the **GAM mediation entitlement**. Contact your JWX representative for more information.
</Callout>

</li><li> (JWX Ad Server) Select the ad event <strong>Type</strong>.
<br />
<span class="manual-tbl-font">
<table>
<thead>
<tr>
   <th> Option </th>
   <th> Description </th>
</tr>
</thead>
<tbody>
<tr>
   <td width="30%"> <strong>Single ad</strong></td>
   <td width="70%"> Serves a single ad when the ad break is reached <br /><br /> Follow this step:
     <ol><li> Click <strong>Single ad</strong>. </li><li> Enter the <strong>Single ads max duration</strong> in seconds. The maximum is <em>600</em>.</li></ol>
   </td>
</tr>
<tr>
   <td> <strong>Ad pods</strong></td>
   <td> Serves a sequence of multiple ads within a single ad break
<br /><br />

Follow these steps:

<ol><li> Click <strong>Ad pods</strong>. The pod settings appear. </li><li> Enter the number of <strong>Ads in a pod</strong>. The maximum is <em>30</em>.</li><li> Enter the <strong>Ad pod max duration</strong> in seconds. The maximum is <em>600</em>.</li><li>Enter the <strong>Max duration per slot</strong> in seconds. The maximum is <em>300</em> and <strong>cannot</strong> exceed the Ad pod max duration.</li></ol>

   </td>
</tr>
</tbody>
</table>
<span class="manual-tbl-font">

</li>
<li>Click <strong>Done</strong> (VAST, Google IMA) or <strong>Save</strong> (JWX Ad Server).</li>
<li>(Optional) Repeat steps <strong>a-f</strong> to add another ad event.</li>
</ol>
</li>
<br/ >
<li>(JWX Ad Server) Select the <strong>Ad playback mode</strong> to control when the ad schedule begins in a viewing session:
<ul>
<li><strong>Scroll to play</strong>: Begins when the player has entered into view at least once.</li>
<li><strong>Autoplay</strong>: Begins when the player renders. The player <strong>does not</strong> need to enter into view.</li>
</ul>

<Callout icon="📘" theme="info">
  If a preroll ad break is defined, **Scroll to play** is automatically selected and **Ad playback mode** is greyed out. If media playback requires viewer interaction, ads do not begin before the viewer starts playback.
</Callout>

</li><br />
<li>(JWX Ad Server) Select a <strong>Viewability policy</strong> to control how content playback and player visibility affect ad scheduling after the ad schedule has started:
<ul>
<li><strong>Default</strong>: Pauses ad playback whenever media playback pauses.</li>
<li><strong>Optimized</strong>: Continues ad playback if media playback pauses due to the player moves out of view. This option <strong>does not</strong> override a viewer-initiated pause.</li>
</ul>
</li><br />
<li>Define the <strong>Ad rules</strong>

<span class="manual-tbl-font">   
   <table>
      <thead>
         <tr>
            <th> Rule </th>
            <th> Description </th>
         </tr>
      </thead>
      <tbody>
         <tr>
            <td width="30%"> <strong>Presets</strong></td>
            <td width="70%"> Defines how ads are scheduled relative to content
               <br /><br />
               <strong>Possible options</strong>:
               <details><summary><strong>1:1 Balanced</strong></summary>Sets ads to appear in real time with content watched, maintaining a continuous one-to-one ratio of ad time to content time
                     <br /><br />
                     <strong>Example</strong>: Watching 30 seconds of ads requires at least 30 seconds of content playback before another ad is eligible.<br /><br /></details>
                  <details><summary><strong>1:1 Maximized</strong></summary>Sets ads based on the full duration of the media item, allowing up to a one-to-one ratio of ad time to content time across the entire playback
                     <br /><br />
                     <strong>Example</strong>: A 5-minute item can include up to 5 minutes of ads.
                     <br /><br />
                     <strong>NOTE</strong>: Ad concentration may vary or be front-loaded.<br /><br /></details>
                  <details><summary><strong>Custom</strong></summary>Enables setting a specific content-to-ads ratio<br /><br /></details>
            </td>
         </tr>
         <tr>
            <td> <strong>Ratio Type</strong></td>
            <td> (Custom) Defines how the content-to-ads ratio is calculated
                  <br /><br />
                  This option is automatically set for <strong>1:1 Balanced</strong> and <strong>1:1 Maximized</strong>, and only selectable when using <strong>Custom</strong>.
                  <br /><br />
                  <strong>Possible options</strong>:
                  <ul>
                     <li><strong>Balanced</strong>: Calculates ad eligibility based on content already watched, ensuring the ratio is maintained throughout playback</li>
                     <li><strong>Maximized</strong>: Calculates ad eligibility across the full duration of the media item, which can result in <strong>more ad time than content time</strong> if playback is abandoned before completion</li>
                  </ul>
            </td>
         </tr>
         <tr>
            <td> <strong>Content to ads ratio</strong></td>
            <td> (Custom) Sets the desired balance of content time to ad time
                  <br /><br />
                  <strong>Example</strong>: A 5-to-1 ratio will play about 5 minutes of content for every 1 minute of ads.
            </td>
         </tr>
         <tr>
            <td> <strong>Minimum time between ads</strong></td>
            <td> (Custom) Sets the minimum playback duration required between consecutive ads, in seconds
                  <br /><br />
                  <strong>Example</strong>: If the threshold is <em>15</em>, ads will not appear more frequently than once every 15 seconds.
            </td>
         </tr>
         <tr>
            <td> <strong>Minimum time before first ad</strong></td>
            <td> Sets the minimum playback duration required before the first ad can be inserted, in seconds
                  <br /><br />
                  <strong>Example</strong>: If the threshold is <em>45</em>, the first ad will not appear until at least 45 seconds of content has played.
            </td>
         </tr>
         <tr>
            <td> <strong>Minimum content duration for midrolls</strong></td>
            <td> Sets the minimum media item duration required before midroll ads can be inserted, in minutes
                  <br /><br />
                  <strong>Example</strong>: If the threshold is 3 minutes, a 2-minute item will not include midroll ads.
            </td>
         </tr>
      </tbody>
   </table>
</span>

</li><br />
<li> (JWX Ad Server) Configure <strong>Ad skippability</strong>.
<br />
<span class="manual-tbl-font">

<table>
<thead>
<tr>
   <th> Option </th>
   <th> Description </th>
</tr>
</thead>
<tbody>
<tr>
   <td width="30%"> <strong>Define what happens for longer ad lengths</strong></td>
   <td width="70%"> Defines when ads must be skippable based on their duration
     <br />
     Ads longer than 41 seconds <strong>are always skippable</strong>.
     <br />
     For ads 41 seconds or shorter, choose one of the following:
     <ul><li><strong>Require ads to be skippable</strong>: All ads must be skippable.</li><li> <strong>Allow non-skip ads if they are shorter than</strong>: Ads shorter than the specified duration may be non-skippable. Ads at or above the specified duration must be skippable.</li></ul>
   </td>
</tr>
<tr>
   <td> <strong>Skip behaviour</strong></td>
   <td> Defines what happens when a viewer skips an ad:
      <ul><li><strong>Current ad only</strong>: Skips the current ad. If the break is an ad pod, the remaining ads in the pod can continue.</li><li> <strong>Entire pod</strong>: Ends the ad pod when an ad is skipped.</li></ul>
   </td>
</tr>
</tbody>
</table>

</span>
</li>
</ol>
<br />

⤴️ <a href="#step8">Return to step <strong>8</strong> of the main process.</a>

<hr />
</details>

<br /><br />

### Keep watching player

The Keep watching player feature controls when the player displays a configurable countdown timer and a **Keep Watching** button that allows a viewer to continue watching the current video.  When the countdown completes without the viewer clicking the button, the player advances to the next video.

<Image src="https://files.readme.io/11bf97f4cb18658d81f891b8dcaed70d5867b28663c954c7368942368edaaa34-keep-watching-player-visual.png" align="center" width="90% " />

<br />

There are two ways to trigger Keep watching player:

* Based on **viewer engagement by a specified timestamp**
* When an **ad limit threshold** has been reached during media item playback

<br />

<span class="manual-tbl-font">

<Table align={["left","left","left","left"]}>
  <thead>
    <tr>
      <th>
        Trigger
      </th>

      <th>
        Availability
      </th>

      <th>
        Reason Keep Watching button appears
      </th>

      <th>
        Result of not clicking Keep Watching button
      </th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        Non-engagement + timestamp
      </td>

      <td>
        Any **Configure ad breaks** option.
      </td>

      <td>
        No viewer engagement is detected before the configured playback timestamp
      </td>

      <td>
        Player advances to the next media item, starting a new session and resetting engagement tracking
      </td>
    </tr>

    <tr>
      <td>
        Ad limit trigger
      </td>

      <td>
        The following advertising settings must be selected:

        <ul><li><strong>Configure ad breaks: Dynamic Ads</strong></li><li><strong>Presets: 1:1 Maximized</strong> OR  <strong>Presets: Custom</strong> and <strong>Ratio Type: Maximized</strong></li></ul>
      </td>

      <td>
        Reached the specified **Remaining ad time threshold**
      </td>

      <td>
        Player advances to the next media item, starting a new session and resetting the ad time
      </td>
    </tr>
  </tbody>
</Table>

</span>

<br /><br />

<Image src="https://files.readme.io/97e601683ded0436e9fdbe0bad8912920bf78bc342602d7e797a8ff54763ff92-dsr-advertising-keep-watching-player.png" alt="Keep watching player section" align="center" width="70% " caption="Keep watching player section" border={true} />

Configure one or both Keep watching player settings.

<Callout icon="📘" theme="info">
  When both triggers are enabled, the **Ad limit trigger** is prioritized to support monetization strategies.
</Callout>

<br />

<span class="manual-tbl-font">
<table>
<thead>
<tr>
<th> Setting</th>
<th> Description </th>
</tr>
</thead>
<tbody>
<tr>
<td width="25%"> <strong>Ad limit trigger</strong> </td>

<td width="75%">Shows the Keep watching prompt when the ad limit for the current video is reached, optimizing monetization
<br /><br />

Follow these steps:

<ol>
<li>Click the toggle to <strong>ON</strong>. The settings appear.</li>
<li>Set the <strong>Remaining ad time threshold</strong> in <em>MM:SS</em> format to specify how long before the end of the ad duration the prompt appears.

<Callout icon="📘" theme="info">
  The value must be between _00:05_ and _01:00_.
</Callout>

</li>
<li>Enter the <strong>Prompt display duration</strong> to specify how long the prompt is visible to the viewer.

<Callout icon="📘" theme="info">
  The value must be between _5_ and _31_ seconds.
</Callout>

</li>
</ol>

</td>
</tr>
<tr>
<td> <strong>Timestamp trigger</strong> </td>

<td>Shows the Keep watching prompt when playback reaches a specific timestamp
<br /><br />

Follow these steps:

<ol>
<li>Click the toggle to <strong>ON</strong>. The settings appear.</li>
<li>Set the <strong>Trigger timestamp</strong> in <em>MM:SS</em> format.

<Callout icon="📘" theme="info">
  The minimum timestamp is _00:23_.
</Callout>

</li>
<li>Enter the <strong>Prompt display duration</strong> to specify how long the prompt is visible to the viewer.

<Callout icon="📘" theme="info">
  The value must be between _5_ and _31_ seconds.
</Callout>

</li>
</ol>

</td>
</tr>
</tbody>
</table>
</span>

<br />

⤴️ <a href="#step9">Return to step <strong>9</strong> of the main process.</a>

<br /><br />

### Google Publisher Provided Signals

<a href="https://support.google.com/admanager/answer/12451124?hl=en" target="_blank">Google Publisher Provided Signals</a> allows automatically passing IAB contextual segments through the ad tag to improve programmatic monetization.

<span class="manual-tbl-font">

<Callout icon="🚧" theme="warn">
  When using this feature, note the following:

  - JWX will attempt to contextualize videos, but not all videos will have the IAB contextual segments passed through Google PPS.
  - If the `&ppsj` query parameter is defined in the ad tag, JWX will not override the value.
</Callout>

</span>

<br />

Follow these steps to enable this feature:

1. Contact your JWX account representative to opt in.
2. Click the toggle to **ON**.

<br />

⤴️ <a href="#step10">Return to step <strong>10</strong> of the main process.</a>

<br /><br />

### Player Bidding

Player bidding connects your digital video inventory directly to advertising demand sources.

<Image src="https://files.readme.io/65ce8d3de3db136522574c828723b03765aae9084d8d42eb952629a4347c14cc-dsr-advertising-player-bidding.png" alt="Player bidding section" align="center" width="60% " caption="Player bidding section" border={true} />

<br />

Follow these steps to enable this feature:

1. Ensure that you have satisfied all the <a href="/platform/docs/advertising-playing-bidding-overview#requirements" target="_blank">Player Bidding requirements</a>.

2. Click the toggle to **ON**. The **Player bidding** section expands.

3. Configure the [mediation settings](#mediation-settings).

4. <a id="step-pb4"></a>From the **Placement type** dropdown menu, select the <a href="https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list--plcmt-subtypes---video-" target="_blank">IAB plcmt attribute</a>.

5. Enter the **GPID**. The publisher-defined global placement ID (<a href="https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf" target="_blank">`imp.ext.gpid`</a>) represents a specific ad placement across different SSPs or platforms.

6. From the **POS type** dropdown menu, select the <a href="https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf" target="_blank">IAB 5.4 Ad Position value</a>.

7. Choose whether or not **CCPA Applies**. If you select **Yes**, you can click **Advanced settings** to set the **Timeout (ms)**.

   <Callout icon="🚧" theme="warn">
     When enabling CCPA, you must have a recognized consent management platform (CMP). Otherwise, Prebid will reject the bid request and a bid error will occur.
   </Callout>

8. Choose whether or not **GDPR Applies**. If you select **Yes**, you can click **Advanced settings** to reveal additional options.

   <details><summary><strong>Advanced settings</strong></summary>
       <br />
       <a id="advanced-settings"></a>
       You can set the advanced settings on either the <a href="#manually-configure-tab"><strong>Manually Configure</strong></a> or <a href="#use-existing-content-block-tab"><strong>Use Existing Content Block</strong></a> tab.<br /><br />
       <a id="manually-configure-tab"></a><h4>Manually Configure tab</h4>

   ab</h4>

      <table>
          <thead>
              <tr>
                  <th> Settings </th>
                  <th> Description </th>
              </tr>
          </thead>
          <tbody>
              <tr>
                  <td width="30%"> <strong>Timeout (ms)</strong> </td>
                  <td width="70%"> Time in milliseconds to wait to obtain consent</td>
              </tr>
              <tr>
                  <td> <strong>Treat as GDPR as Default</strong> </td>
                  <td> Defines if GDPR is the default </td>
              </tr>
              <tr>
                  <td> <strong>CMP TCF Version</strong> </td>
                  <td> Specifies the version of the Transparency and Consent Framework to be used
                      <br /><br />
                      If you select version <strong>1.1</strong>, you can specify if JWX should <strong>Conduct Auction Regardless of Consent?</strong> if your CMP is unavailable, hasn't responded in time, or the user has declined to give con

   <br /><br /> <a id="use-existing-content-block-tab"></a><h4>Use Existing Content Block tab</h4>
   In the field, paste the GDPR object that you are using in your Prebid.js implementation. <br /><br />

   </details><br />

9. Click **Save**.

<br />

⤴️ <a href="#step11">Return to step <strong>11</strong> of the main process.</a>

<br /><br />

#### Mediation Settings

Expand a section to reveal each type of mediation settings.

<details><summary><strong>JW Player</strong></summary>
    <br />

Follow these steps to configure the mediation settings:

1. From the **Mediation option** dropdown menu, select a **JW Player**.

2. Enter a **Floor price**.

   <Callout icon="💡" theme="default">
     Determining the best floor price depends upon various factors. If you need assistance determining the best floor price, please consult with your JWX representative or SSP partner.
   </Callout>

3. From the **Ad Partners** dropdown menu, select an ad partner.

4. Click **Add**. The ad partner information fields appear.

5. Enter the required ad partner information.

   <Callout icon="📘" theme="info">
     Since ad partner information varies, work with your ad partners to obtain the values displayed in the fields.
   </Callout>

6. To add multiple ad partners, repeat steps **3-5**.

<br />

⤴️ <a href="#step-pb4">Return to step <strong>4</strong> of the Player Bidding setup process.</a>

<hr />

</details>
<details><summary><strong>Google Ad Manager & JWP + GAM</strong></summary>
    <br />

Follow these steps to configure the mediation settings:

1. From the **Mediation option** dropdown menu, select a **Google Ad Manager** or **JWP + GAM**..

2. Enter a **Floor price**.

   <Callout icon="💡" theme="default">
     Determining the best floor price depends upon various factors. If you need assistance determining the best floor price, please consult with your JWX representative or SSP partner.
   </Callout>

3. **Choose whether or not to send all bids**.

   <Callout icon="📘" theme="info">
     Choose **Send highest bid Only** if you have line item limits in your ad server.
   </Callout>

4. Under **Price range**, click **+ Add price range**. The price range fields appear.

5. Add the **Start Price**, **End Price**, and **Increment** for a price range.

6. To add multiple price ranges with different increment values, repeat steps **4-5**.

7. From the **Ad Partners** dropdown menu, select an ad partner.

8. Click **Add**. The ad partner information fields appear.

9. Enter the required ad partner information.

   <Callout icon="📘" theme="info">
     Since ad partner information varies, work with your ad partners to obtain the values displayed in the fields.
   </Callout>

10. To add multiple ad partners, repeat steps **7-9**.

<br />

⤴️ <a href="#step-pb4">Return to step <strong>4</strong> of the Player Bidding setup process.</a>

<hr />

</details>
<details><summary><strong>SpotX</strong></summary>
    <br />

Follow these steps to configure the mediation settings:

1. From the **Mediation option** dropdown menu, select a **SpotX**.
2. Enter the SpotX **Channel ID**.

<br />

⤴️ <a href="#step-pb4">Return to step <strong>4</strong> of the Player Bidding setup process.</a>

</details>

<br /><br />

### JSON Editor

The **JSON Editor** lets you view and customize configurations beyond the standard dashboard settings:

* View the full configuration structure
* Modify supported fields not exposed in the dashboard
* Apply precise adjustments for advanced scenarios

<br />

<Callout icon="🚧" theme="warn">
  Use the JSON Editor only if you understand structured configuration data and how changes affect strategy behavior. In most cases, configure settings using the standard dashboard fields.
</Callout>

<br />

Follow these steps to use the editor:

1. Click **JSON Editor**. The **Edit Advertising Configuration** panel opens.

2. Edit the JSON.

   <Callout icon="💡" theme="default">
     Use the following references for updating the JSON code for an advertising configuration.

     **Advertising**:

     - <a href="/players/reference/advertising-config-ref" target="_blank">advertising</a>
     - <a href="/players/reference/internationalization#intllangadvertising-object" target="_blank">intl.{lang}.advertising</a>
   </Callout>

3. Click **Done**. The configuration updates, and the panel closes.

<br />

⤴️ <a href="#step12">Return to step <strong>12</strong> of the main process.</a>

***

## FAQ

<details><summary><strong>In Dynamic Strategy Rules, can an ad tag be dynamically set with key-value pairs?</strong></summary>

<a id="dynamic-tag"></a>

Yes. Read [Set an ad tag via a key-value pair](https://docs.jwplayer.com/platform/docs/set-an-ad-via-a-key-value-pair) for more information.

</details>
<details><summary><strong>Can Dynamic Ads be used with the Keep Watching Player?</strong></summary>

<a id="dynamic-ads-keep-watching-player"></a>

Yes, these features can be used together. To ensure a smooth experience when using these two features, follow these recommendations:

* In the player UX configuration, schedule the <a href="/platform/docs/player-ux#keep-watching-player" target="_blank">Keep Watching Player</a> to appear before typical mid-roll ad break times. Mid-roll ad breaks often occur at times that end with :15, :30, :45, or :00.
* In the advertising configuration, when defining <a href="#configure-dynamic-ads">Dynamic Ads</a>, you can increase the **Content to ads ratio** value to reduce interruptions from ads during Keep Watching prompts.
* Test the combination of the player UX and advertising configurations to ensure no timing conflicts occur.
* Do not reuse these configurations across multiple experiences. Each set of player and ad settings should be unique to a single video experience to avoid timing or behavior conflicts.

<br />

</details>

<br />

<style>
.rm-Pagination {
  display: none;
}
</style>

# Sub pages

* [Set an ad tag via a key-value pair](https://docs.jwplayer.com/platform/docs/set-an-ad-via-a-key-value-pair.md)

# Sibling pages

* [Media Curation](https://docs.jwplayer.com/platform/docs/media-curation.md)
* [Player UX](https://docs.jwplayer.com/platform/docs/player-ux.md)
* [Partnership](https://docs.jwplayer.com/platform/docs/partnership.md)
* [Max RPM configuration](https://docs.jwplayer.com/platform/docs/max-rpm-configuration.md)
* [Manage a configuration](https://docs.jwplayer.com/platform/docs/manage-a-configuration.md)