Skip to main content

Floor Prices

Set minimum bids to filter low-quality ads and capture more value from your inventory.


What is a floor price?

A floor price is the minimum bid you'll accept for an ad impression. Bids below the floor are rejected.

Example — with a floor of $1.00:

BidResult
Bid A — $1.50Accepted
Bid B — $0.80Rejected (below floor)
Bid C — $1.10Accepted

Why floors matter

1. Filter low-quality ads

Very low bids often come from low-quality advertisers. Floors create a quality baseline.

2. Capture hidden value

In first-price auctions, buyers use bid shading. Floors force them to bid closer to their true value.

Without floor:
Buyer values at $3.00, bids $1.50 (shaded)
You earn: $1.50

With $2.00 floor:
Buyer values at $3.00, bids $2.20 (can't shade below floor)
You earn: $2.20 (+47%)

3. Signal inventory value

High floors signal premium inventory to buyers. This can attract premium demand.


The floor trade-off

Higher floors → Higher CPM, but lower fill rate
Lower floors → Higher fill rate, but lower CPM

Revenue = Impressions × Fill Rate × CPM

You need to find the sweet spot.
Floor strategyCPM impactFill rate impactBest for
High floors↑ Higher↓ LowerPremium inventory, high-demand
Low floors↓ Lower↑ HigherScale, backfill inventory
No floorsLowestHighestMaximum fill (not recommended)

Setting your first floors

Start conservative

Begin with floors you're confident you can fill:

Inventory typeStarting floorAdjust based on
Premium above-fold$1.50 - $2.50If fill rate > 90%, raise
Standard display$0.50 - $1.00If fill rate > 85%, raise
Below-fold / lazy$0.25 - $0.50If fill rate > 80%, raise
Mobile$0.30 - $0.75If fill rate > 85%, raise

The 80% rule

A good starting target: set floors so fill rate stays above 80%.

Below 80% fill rate: You're leaving impressions unsold (lost revenue). Above 95% fill rate: You might be setting floors too low.


Floor strategies

Strategy 1: Global floors

One floor for all inventory. Simple but not optimal.

All ad slots: $0.75 floor

Pros: Easy to manage Cons: Doesn't account for inventory differences

Strategy 2: Position-based floors

Different floors by ad position.

Above-fold: $2.00
Sidebar: $1.00
In-content: $0.75
Below-fold: $0.50

Pros: Matches inventory value Cons: Requires more management

Strategy 3: Device-based floors

Different floors by device type.

Desktop: $1.00
Mobile: $0.60
Tablet: $0.80

Pros: Accounts for device CPM differences Cons: May miss geo/content variations

Strategy 4: Dynamic floors (floor provider)

Instead of static numbers, point the wrapper at an external floor provider — a Prebid-compatible endpoint that returns floor rules at auction time. Configure it in Wrapper → Configs (the Floor Provider field):

  • Endpoint URL — where the wrapper fetches the floor rules
  • Auction Delay — how long the auction waits for that fetch (a bounded timeout)
  • Skip Rate — the share of auctions that bypass the provider, for holdout measurement

Anima doesn't itself compute time-of-day / day-of-week / historical floors — that logic lives in the endpoint you (or a vendor) supply. When a floor provider is active it takes over floor control; keep a global Price Floor set as the fallback if the fetch fails or times out.

Pros: Real-time, data-driven pricing Cons: Requires a floor-provider endpoint

Start simple, get sophisticated

Begin with position-based floors. Add a floor provider only once you have an endpoint worth delegating to.


Optimizing floors over time

Week 1-2: Observe

Set conservative floors and monitor:

  • Fill rate by slot
  • CPM by slot
  • Revenue trends

Week 3-4: Adjust

For each slot, evaluate:

Fill rateCPM trendAction
> 95%StableRaise floor 10-20%
80-95%StableFloor is optimal
< 80%AnyLower floor 10-20%
AnyDroppingInvestigate demand

Monthly: Review

  • Compare revenue to baseline
  • Check for seasonal patterns
  • Adjust for market conditions

Common floor mistakes

Setting floors too high

Symptom: Low fill rate (< 70%) Problem: Rejecting too many bids Solution: Lower floors until fill rate improves

Setting floors too low

Symptom: High fill rate (> 95%) with low CPM Problem: Not capturing full value Solution: Gradually raise floors

One floor for everything

Symptom: Some slots unfilled, others too cheap Problem: Inventory has different values Solution: Use position or device-based floors

Never adjusting

Symptom: Flat or declining revenue despite traffic growth Problem: Market changes, your floors don't Solution: Review floors monthly


Floors in Anima

Floors exist at three levels. When more than one could apply, Prebid enforces the most specific floor — the precedence, highest to lowest, is:

  1. Demand-seat floor — a per-bidder minimum set on a demand seat
  2. Ad-slot floor — the per-placement default set on the slot
  3. Global (config) floor — the wrapper-wide default, used by any slot without its own

Floors are enforced at the gross level: a $2.00 floor needs a $2.50 gross bid at an 80% revenue share.

Per-slot floors

The everyday place to set floors is the ad slot itself:

  1. Go to Inventory → Ad Slots
  2. Open the slot
  3. On the Auction tab, set the Floor value
  4. Save

Slot floors are the most flexible — tune them per placement based on fill-rate and CPM data.

Global floors

Set a wrapper-wide default (and optional per-device overrides) in Wrapper → Configs: Price Floor, plus Mobile Price Floor / Desktop Price Floor. Any slot without its own floor inherits this — so there is a single global floor, contrary to earlier docs.

Per-demand-seat floors

To hold one partner to a higher minimum than the rest, set a Floor on its demand seat (Demand → Prebid). It overrides the slot and global floors for that bidder only — a useful lever when a specific SSP consistently underbids while you don't want to raise the floor on everyone.

Dynamic floors via a floor provider

For auction-time pricing from an external endpoint, configure a Floor Provider in Wrapper → Configs — see Strategy 4 above. When active, it takes over floor control; a global Price Floor is its fetch-failure fallback.

Bulk floor updates

To change floors across many slots without opening each one individually:

  • Use the AI Assistant: "Set floor price to $1.00 for all sidebar slots"
  • Or edit slot-by-slot, then ship a single release once the set is done

Viewing floor performance

Go to Dashboard → Monetization and break down by ad slot to see fill rate, CPM, and revenue. Comparing before/after a floor change on the same slots is the cleanest read.


Common questions

What's a good starting floor?

For most publishers: $0.50 – $1.00 on standard placements, set on each ad slot's Auction tab. Premium above-fold slots can start higher ($1.50–$2.50); below-fold / lazy-loaded slots can start lower ($0.25–$0.50).

Set a wrapper-wide Price Floor in Wrapper → Configs as a baseline, then override per slot where inventory value differs. This filters obvious low-quality demand while maintaining good fill rate. Adjust after 2 weeks of data.

Should I have a $0 floor?

Generally no. Even a $0.10 floor filters the lowest-quality demand. Zero floors invite bad ads.

Exception: If you're prioritizing fill rate for specific testing.

Do floors apply to all demand partners?

The slot and global floors apply to all prebid partners. You can also set a per-demand-seat floor to hold one partner to a higher minimum than the rest (Demand → Prebid). GAM may have separate floor configurations for AdX.

How do floors interact with experiments?

You can test floor changes using experiments:

  • Control: Current floor
  • Variation: New floor
  • Measure: Revenue impact

This is the safest way to change floors.