Developer GuideMigration GuidesFrom Google AdX / Ad Manager

Migrating from Google AdX / Ad Manager

Google Ad Manager (GAM) and AdX can coexist with Praevis Exchange. The typical approach is not a full migration — it is adding Praevis as an additional demand source (DSP) within GAM, competing with AdX demand in your waterfall or header bidding stack.

Estimated time: 2–5 days to configure and validate.


Concept mapping

GAM / AdX conceptPraevis equivalent
Network codePartner ID
Ad unitSupply Source
Inventory type (video, display)Supply source type (ctv, mobile, web)
Floor price (ad unit level)Floor Price CPM (per supply source)
Deal ID / Programmatic GuaranteedDeal ID (PMP)
Line itemDemand source Delegate strategy rule
Content category targetingcontent_genre / IAB category
GAM reportingDashboard → Supply
Ad unit codeSupply Source ID (UUID)

How Praevis fits into your GAM stack

There are two integration patterns:

PatternDescriptionWhen to use
VAST tag in GAM line itemAdd Praevis as a third-party demand line item in GAMMost common; no SDK change
Direct RTB (bypass GAM)Send bid requests directly to Praevis; manage yield outside GAMCTV/OTT players, non-GAM traffic

Most supply sources start with the VAST tag pattern — it requires no player change and lets you A/B test against AdX demand.


Migration steps (VAST tag in GAM)

Create supply sources in Praevis

For each GAM ad unit you want to monetise with Praevis, create a Praevis supply source:

  1. Log in → Supply → Add Supply Source
  2. Set name, domain/bundle, format, floor CPM
  3. Note the Supply Source ID (UUID) — used in the VAST URL

Match your GAM ad unit floor prices to Praevis floor CPMs as a starting point.

Build your Praevis VAST tag

https://rtb.praevis.com/vast?site_id={PUBLISHER_ID}&w=%%WIDTH%%&h=%%HEIGHT%%&ip=%%PATTERN:url_encoded_imp_type%%&ua=%%PATTERN:url_encoded_user_agent%%&did=%%ADVERTISING_IDENTIFIER_PLAIN%%&content_genre={YOUR_GENRE}

Replace {PUBLISHER_ID} with your Praevis Supply Source UUID. GAM macros stay in %%DOUBLE_PERCENT%% format.

GAM macro reference:

Praevis parameterGAM macroNotes
w%%WIDTH%%Player width
h%%HEIGHT%%Player height
ip%%PATTERN:ip_address%%Viewer IP — required
ua%%PATTERN:url_encoded_user_agent%%URL-encoded user agent
did%%ADVERTISING_IDENTIFIER_PLAIN%%Device advertising ID (CTV/mobile)
content_genreHardcode or use key-valueSet per ad unit or via GAM KV
floor%%FLOOR_PRICE%% (if configured)Dynamic floor override (optional)

Create a GAM line item for Praevis

In GAM:

  1. Inventory → Line items → New line item
  2. Type: Third-party (or Price Priority)
  3. Rate: Set CPM slightly below your AdX floor to catch unfilled inventory, or use Optimised CPM and let GAM manage priority
  4. Creative: Third-party VAST tag → paste your Praevis VAST URL
  5. Targeting: Match the same ad units, sizes, and geo as your AdX demand

Recommended starting priority: Set Praevis line item at or slightly below AdX Open Auction priority. This lets AdX win first; Praevis fills what AdX misses.

Enable sandbox mode and test

Before activating the live line item:

  1. Append &sandbox=true to the VAST URL in your test line item
  2. In GAM Delivery → Ad Preview, fire the VAST tag
  3. Confirm you receive a filled VAST response
  4. Check the Praevis sandbox dashboard — the impression should appear within 60 seconds

Go live and monitor

Activate the line item. Monitor for 48–72 hours:

  • GAM reporting: Check fill rate and average CPM for the Praevis line item
  • Praevis dashboard: Verify bid request volume, fill rate, and revenue match expected levels
  • Adjust Praevis floor price up or down based on AdX eCPM benchmarks

Migration steps (Direct RTB, bypassing GAM)

For CTV/OTT apps where you control the player directly and want to run Praevis outside of GAM:

Create supply sources in Praevis

Same as the VAST tag pattern — one Praevis supply source per content stream or app.

Integrate the VAST URL in your player

https://rtb.praevis.com/vast?site_id={PUBLISHER_ID}&w={PLAYER_WIDTH}&h={PLAYER_HEIGHT}&ip={VIEWER_IP}&ua={ENCODED_UA}&did={ADVERTISING_ID}

Pass dynamic values from your app at request time.

Run Praevis in parallel with GAM

Use your server-side ad decisioning (SSAI) or player logic to waterfall:

  1. Request from GAM/AdX first
  2. If GAM returns no fill, request from Praevis as passback
  3. Compare eCPMs weekly and adjust priority

Update app-ads.txt

praevis.com, {YOUR_PUBLISHER_ID}, DIRECT
# Keep Google:
google.com, pub-{PUBLISHER_CODE}, DIRECT, f08c47fec0942fa0

What’s different on Praevis vs AdX

FeatureGoogle AdXPraevis
Auction typeSecond-price (unified pricing)First-price only
Demand poolGlobal AdX buyersCurated demand sources (RTB + Delegate)
Prebid supportNative Prebid adapterNo adapter yet (roadmap)
Floor rulesUnified pricing rulesStatic floor per supply source
VAST version2.0–4.24.0 default, ?vast_version=2 for 2.0
Bid timeout170ms (default)Fixed 150ms
Deal typesProgrammatic Guaranteed, Preferred, PMPPMP (Deal ID)
IdentityGoogle User ID, 1PDdid (device ad ID), IP-based
⚠️

Auction model difference: AdX uses unified pricing (second-price variant). Praevis is first-price. Demand sources who bid on both platforms will have different strategies for each. If a demand source is buying on Praevis with the same bids they use for AdX, they may overpay. Notify your demand source partners.


AdX demand vs Praevis demand

Running Praevis alongside AdX means you have two demand pools. They are independent:

  • AdX buyers compete in the AdX auction
  • Praevis demand sources (RTB and Delegate) compete in the Praevis auction
  • Your ad server (GAM or SSAI) picks the winner based on CPM

Over time, compare:

MetricHow to measure
Praevis eCPM vs AdX eCPMGAM line item reporting vs Praevis dashboard
Praevis fill ratePraevis dashboard → Supply → supply source fill rate
Incremental revenueRevenue when Praevis wins vs AdX-only revenue

If Praevis eCPM is consistently higher than AdX for a supply source, consider moving that supply source’s primary demand to Praevis.


Common issues after adding Praevis

GAM line item not serving Check: line item status Active, creative approved, VAST URL returns 200 in a browser. GAM requires the VAST tag to respond within 2 seconds — Praevis responds in <150ms.

Low Praevis fill rate vs AdX Expected at the start — Praevis demand sources need impression history to optimise bids. Give it 5–7 days. Also check: floor price set too high relative to AdX clearing prices, or content_genre not passing (Praevis targeting requires genre).

Double-counting impressions GAM counts its own impression pixel. Praevis counts the <Impression> pixel inside the VAST. These are the same event, so they should match within 2–3%. Larger discrepancies indicate the VAST player isn’t firing the Praevis tracking pixel.

content_genre not passing GAM does not have a native genre macro. Either hardcode the genre in the VAST URL per line item, or use a GAM key-value pair (e.g., genre=drama) and pass it as a macro if your player supports it.

Praevis does not require exclusive access to your inventory. Running Praevis alongside AdX is fully supported and encouraged — the goal is incremental yield, not replacement.