Prompt
How do I set up a publisher ad stack for routing demand sources and optimizing floor prices?
Latest observation
A good publisher ad stack for routing demand sources and optimizing floor prices usually has four layers:
- Inventory setup
- Demand routing / decisioning
- Floor price optimization
- Measurement and feedback loops
Here’s a practical blueprint.
1) Define your inventory and demand strategy
Start by segmenting inventory so you’re not treating all impressions the same.
Segment by:
- Device: desktop, mobile web, app
- Geo: US, Tier 1, LATAM, etc.
- Placement: above the fold, sticky, in-content, rewarded, etc.
- Format: display, video, native, interstitial, audio
- Audience: logged-in users, new users, returning users
- Traffic quality: direct, organic, paid, suspicious
Demand sources to include:
- Google Ad Manager / AdX
- Open RTB exchanges
- Header bidding partners
- Direct-sold campaigns
- PMPs / preferred deals
- Native / video-specific buyers
- Curation / SPO partners
The goal is to know which demand source is best for each inventory segment.
2) Build the routing logic
Routing means deciding which demand source gets the opportunity to bid or buy.
Common routing models
A. Waterfall
Older model where demand is ordered by priority and called one by one.
- Pros: easy to understand
- Cons: inefficient, often leaves money on the table
B. Header bidding / unified auction
Multiple demand sources bid simultaneously.
- Pros: more competition, better yield
- Cons: more complex, can add latency if poorly implemented
C. Dynamic routing
Rules or ML-based logic determines which sources are called based on:
- predicted bid density
- timeout budgets
- user/page context
- historical win rates
- latency and fill rates
- deal eligibility
This is usually the best approach for mature stacks.
Routing best practices
- Route high-value inventory to the most competitive sources first.
- Use timeouts by demand partner performance.
- Exclude partners with poor viewability, latency, or bid rate.
- Apply geo/device-specific routing.
- Use deal priority for direct/PMP inventory.
- Keep a fallback path to prevent unfilled impressions.
3) Set floor prices intelligently
Floor pricing is where many publishers win or lose revenue.
Floor types
- Static floors: fixed price for a segment
- Segmented floors: different floors by geo/device/placement
- Dynamic floors: adjusted in real time or near-real time based on performance
- Adaptive floors: machine-learning-driven floors that maximize revenue over time
Good floor-pricing principles
- Don’t set one global floor for all inventory.
- Floors should reflect:
- historical clearing price
- bid landscape
- user value
- seasonality
- competition level
- Set floor bands rather than exact floors when experimenting.
- Avoid floors so high that they kill fill rate.
Practical floor optimization approach
For each inventory segment, track:
- bid request volume
- bid rate
- win rate
- average CPM
- revenue per thousand impressions
- viewability
- latency
- unfilled rate
Then test floor levels across ranges such as:
- no floor
- low floor
- medium floor
- high floor
Choose the floor that maximizes:
- RPM / revenue
- while keeping acceptable fill and user experience
A common mistake is optimizing for highest CPM instead of highest total revenue.
4) Use an auction framework that supports price discovery
If your stack allows it, use:
- first-price auction logic with bidder adaptation
- price granularity control
- multiple price buckets
- server-side bidding if latency is a concern
Important:
- If you use first-price auctions, bidders often bid more strategically.
- Floors should be calibrated to avoid suppressing bid participation.
- Avoid stacking too many floors at different layers unless you understand how they interact.
5) Add decisioning and analytics
You need a decision engine that can answer:
- Which partner should get traffic?
- What floor should this segment use?
- Should this impression go to open auction, PMP, or direct?
- Is the partner underperforming?
Metrics to monitor
- Fill rate
- eCPM / RPM
- Bid rate
- Win rate
- Timeout rate
- Latency
- Viewability
- Ad quality / IVT
- Revenue by source
- Revenue by segment
- Opportunity loss from floors
Useful tests
- A/B test floors by segment
- Hold out traffic to compare routing rules
- Test partner timeout changes
- Compare unified auction vs waterfall
- Run geo/device-specific floor experiments
6) Recommended architecture
A modern publisher stack often looks like this:
Client side
- Ad slot detection
- Consent handling
- Header bidding wrapper
- User syncs / identity tools
- Viewability tracking
Decision layer
- Traffic segmentation
- Floor price service
- Routing rules engine
- Partner eligibility logic
- Deal prioritization
Monetization layer
- Google Ad Manager or equivalent ad server
- SSPs / exchanges
- Direct campaigns
- PMP/private marketplace deals
- Analytics pipeline
Data layer
- Impression and bid logs
- Auction outcome logs
- Floor performance database
- ML models for prediction and optimization
7) A simple operating model
If you’re starting from scratch:
Phase 1: Baseline
- Set up GAM/ad server
- Add a few major demand sources
- Implement header bidding or unified auction
- Use conservative static floors by major segment
Phase 2: Segment and test
- Break inventory into 10–20 meaningful segments
- Run floor tests
- Remove weak bidders
- Tune timeouts and partner priority
Phase 3: Optimize
- Introduce dynamic floors
- Use predictive routing
- Add automated alerts
- Create rule-based fallbacks for low demand periods
Phase 4: Mature stack
- ML-driven floor optimization
- Real-time demand routing
- Supply path optimization
- Deal curation
- Continuous experimentation framework
8) Common mistakes to avoid
- Using one floor for all inventory
- Prioritizing CPM over total revenue
- Letting too many bidders increase latency
- Not separating high-value and low-value traffic
- Failing to monitor fill rate
- Ignoring viewability and user experience
- Not A/B testing floor changes
- Setting floors based only on last month’s average CPM
9) What “good” looks like
A strong publisher ad stack typically has:
- clean inventory segmentation
- unified auction or smart routing
- dynamic floor optimization
- strong analytics
- low latency
- healthy competition among demand sources
- continual experimentation
10) If you want a concrete starting setup
A simple version could be:
- Ad server: Google Ad Manager
- Demand: AdX + 3–6 header bidding partners + direct deals
- Routing:
- premium placements → highest competition + PMPs
- mid-tier → header bidding + AdX
- remnant → open auction fallback
- Floors:
- start with 5–10 inventory segments
- set conservative segment-specific floors
- test up/down in 10–20% increments
- Optimization:
- weekly analysis
- daily monitoring of revenue, fill, timeout, and latency
- automated changes only after enough volume
If you want, I can also give you:
- a reference architecture diagram,
- a step-by-step implementation plan, or
- a floor optimization framework with example formulas and decision rules.
Brands