Instream Monetization
You can now manage instream video monetization directly from the platform. This guide explains how to create and configure your instream adunits, and map your bidders.
✅ What is Instream Monetization?
Instream monetization lets you serve video ads through a programmatic workflow based on Prebid and GAM. The entire setup of adunit is integrated into the platform — no manual coding required.
You only need to call a dedicated function to trigger an auction before your initialize your video player.
It works with any video player and supports both server-side and client-side bidders.
🔓 Activation
To access instream, your account must have the Instream feature enabled.
If you don’t see the options described below, please contact your CS or Country manager.
🧱 1. Create an Instream Adunit

Go to Ad units > add Adunit
Set Identification and devices section.
Choose the type: Instream
By default, the adunit includes:
Size: 640×480
Duration: min 1 sec, max 30 sec

You can then configure the video-specific settings:
You can expand the Advanced settings section to configure your video playback behavior:

Start playing when
Choose when the ad should start (e.g. page load with sound off)
Position on screen
Define where the player appears (optional)
Allow skippable ads
Enable or disable skip functionality
Placement (plcmnt)
Choose between Instream or Accompanying content
Video bitrate settings
Set a min and max bitrate (e.g. 750–6000 kbps)
Protocols allowed
Select which video standards are accepted (VAST 2/3/4, VPAID, SIMID)
🔁 2. Add Bidders
Once the adunit is created, go to the Mapping section to add bidders.
You can use client-side or server-side bidders.
For each bidder, enter the required
bids.paramsvalues (like placement ID, zone ID…).
⚙️ 3. Deploy in a Stack
To activate your adunit:
Make sure it is included in a live stack
Ensure the stack is deployed
⚠ If the adunit is not linked to a deployed stack, it won’t be initialized on page load.
💻 4. Trigger the Auction with kleanads.monetize()
kleanads.monetize()On the page, you must call the kleanads.monetize() function to launch the auction and get the targeting values used to call GAM.
monetize()returns the targeting objectYou must pass this info to your player or GAM via macros (
cust_params)The ad is then played using the wrapped VAST
More details - Pubstack generic Instream integration
📊 5. Analytics
Basic metrics are available in your platform dashboards:
Impressions
Revenue
CPM
These are tracked via events injected into the VAST.
More video-specific KPIs (quartiles, errors, playback events) will be added in a future update.
🧪 6. Troubleshooting
If your instream ad is not displaying or not monetizing correctly, here are the most common issues to check:
❌ Ad is not showing
Ensure the monetize() function is called before the player is initialized.
❌ No bid is returned
Make sure the adunit is correctly mapped to at least one bidder.
❌ GAM call is missing
Verify that the targeting object returned by monetize() is passed to GAM (via cust_params or macro).
❌ Adunit not monetized
Confirm the adunit is part of a live and deployed stack.
❌ Instream option not visible in UI
Check that the Instream feature flag is enabled for your account.
ℹ️ If everything looks correct and the issue persists, contact your TAM or open a support request through the platform.
Last updated
