BeeFresh
Smart Ad Refresh (Engagement-Gated)
One visit. Multiple honest impressions.
A reader who spends six minutes on your article sees one ad. BeeFresh serves a new one when — and only when — the reader is actually still there, still looking at the slot, and the last impression has had its full time on screen. Seven gates have to pass. If any one fails, nothing refreshes.
Slot: in-content-2 · 336×280
longread.example · session 04:12
Refresh gates · all seven must pass
- Visibility 68% in viewport
- Engagement scroll 1.2s ago · tab focused
- Dwell 31s in view · min 30s
- Yield depth 3 CPM ₹58 · floor ₹45
- Cap 2 of 5 this session
- Demand refresh-tagged auction
- Policy declared · placement allowed
Refresh #3 fired new auction cleared at ₹58 CPM
CPM by refresh depth
yield floor ₹45
Depth 4 fell below the yield floor, so refresh stopped on this slot for this session. The decay is the point — the gate exists to find where it stops paying.
The problem
What this is costing you right now
A five-minute read earning one impression is wasted session value
You worked hard for that session.
Dumb timer refresh tanks viewability and CPMs
Refreshing every 30 seconds regardless of what the reader is doing fires ads into empty viewports and abandoned tabs.
Unlimited refresh is a policy risk
Refresh is allowed when it is declared and compliant.
How it works
What BeeFresh actually does
No black box. Here is the whole mechanism, step by step.
BeeFresh — how it works
-
1
The slot has to be genuinely on screen
IntersectionObserver checks that at least 50% of the ad is in the viewport. Not above the fold in theory — visible right now, on this reader's screen.
-
2
The reader has to still be there
Scroll, touch or pointer activity within the last N seconds, and the tab has to be focused (Page Visibility API). A background tab is not an audience.
-
3
The current ad has to have had its time
Every impression gets a minimum in-view duration before it can be replaced — 30 seconds by default, never below 15. The buyer paid for an impression; they get a real one.
-
4
The next impression has to still be worth serving
CPM is tracked per refresh depth. When the yield at depth N decays past your threshold, refresh stops on that slot for that session. Serving impressions nobody wants to buy just drags your averages down.
-
5
A fresh auction runs, honestly labelled
The refresh triggers a new BeeBid auction with the request tagged as refresh inventory, so buyers know exactly what they are bidding on. Transparent signalling is what keeps refresh inventory sellable in the long run.
- 50% in viewport IntersectionObserver
- 30s minimum hard floor of 15s
- Yield-gated depth stops when CPM decays
- Declared refresh GAM-compliant
In context
Where BeeFresh sits on your page
This slot re-enters the auction only when all seven gates pass — and the request is tagged as refresh inventory.
A reader who leaves, or a tab that loses focus, generates zero refresh impressions.
Specifications
Full technical specification
Publishers compare specifications, not adjectives. Everything is here, including what depends on partners we do not control.
The seven gates
| Gate 1 — Visibility |
Slot must be at least 50% in the viewport, measured with IntersectionObserver. Threshold is configurable per unit.
|
|---|---|
| Gate 2 — Engagement | User activity — scroll, touch or pointer — within the last N seconds, AND the tab must be focused (Page Visibility API). An idle tab left open overnight refreshes nothing. |
| Gate 3 — Dwell |
Minimum in-view time per impression before it may be replaced. Default 30s, hard floor 15s. The floor is not configurable below 15 seconds — that is the line between refresh and churn.
|
| Gate 4 — Yield | Per-slot CPM is tracked by refresh depth (#1, #2, #3…). Refresh auto-stops at the depth where CPM decays below your configured threshold. Depth economics differ by slot, by page type and by time of day, so this is measured rather than assumed. |
| Gate 5 — Cap |
Maximum refreshes per slot per session. Default 5, hard cap 10. A session cap exists so a single very long reading session cannot turn one slot into an ad carousel.
|
| Gate 6 — Demand | The refresh fires a fresh BeeBid auction with refresh-tagged bid requests. Buyers who value refresh inventory bid accordingly; buyers who do not can decline. We do not sell refresh impressions as first impressions. |
| Gate 7 — Policy | GAM-compliant declared refresh, with configurable exclusion of sensitive placements and page categories. Compliance is a gate, not a setting you can switch off. |
Configuration & reporting
| Configuration scope | Every gate is configurable per site and per ad unit. Your sticky footer and your in-content rectangle do not need the same rules. |
|---|---|
| Testing | Fully A/B testable through BeeLab — refresh settings are just another layout variant, measured on RPM, viewability, bounce and session depth together. |
| Reporting | Per-depth reporting: CPM, viewability and fill for refresh #1, #2, #3 and beyond, per slot. This is how you find the depth where your inventory stops being worth selling. |
Some capabilities depend on third-party approvals and platform policies that are not ours to promise. Where that is the case, the spec above says so explicitly.
Expected impact
What the industry reports
Every number below is an industry benchmark published by a third party. BeeOS has not shipped, so none of these are results we have produced.
Expected session revenue uplift on long-dwell content benchmark 1
Long reads, live blogs and tools benefit most. A 40-second median session benefits almost not at all.
Without BeeOS
- Impressions per 5-min read
- 1
- Refreshes on an idle tab
- Timer keeps firing
- Declared to the ad server
- No
- Depth economics
- Unknown
With BeeOS
- Impressions per 5-min read
- 3
- Refreshes on an idle tab
- Zero
- Declared to the ad server
- Yes, every request
- Depth economics
- Measured per depth
Expected difference
+15–30% session revenue benchmark 1
Driven by session length. High-bounce sites will barely see the gates open — that is the system working.
+15–30%
Typical session revenue uplift from compliant refresh benchmark 1
Concentrated on long-read and utility content where sessions run long.
up to 65%
Share of total revenue from refresh in a published partner case benchmark 2
An external case study on an outlier property. Not our result, not a target.
30s
Default minimum in-view time per impression
Hard floor of 15s. Buyers get a real impression, not a flicker.
Being straight with you: Refresh economics depend almost entirely on session depth. A long-read publication, a live blog, a results page or a tool people sit inside will benefit substantially. A high-bounce listicle site where the median session is 40 seconds will barely see the gates open, and that is the system working correctly rather than failing.
Works with
Fits into the stack you already run
Platforms BeeOS integrates with — not customers, partners or endorsements.
- Google AdSense
- Google Ad Manager
- AdX (via partner)
- Prebid.js
- Amazon APS
- PubMatic
- Magnite
- Index Exchange
- Sharethrough
- Sovrn
Glyphs are generic shapes, not brand logos — these are platforms we integrate with, not endorsers.
Questions
BeeFresh — frequently asked
Module 1 · Yield Engine
The rest of the module
Squeeze every rupee out of the ad requests you already serve — competition, pricing, repetition, placement and speed.
BeeBid
Hybrid Header Bidding Wrapper
Make every impression fight for its price.
BeeFloor
Dynamic Price Floor Engine
Never sell a ₹100 impression for ₹21 again.
BeeLab
Ad Layout A/B Testing Engine
Stop guessing where ads earn. Measure it.
BeeVitals
Viewability, Speed & Core Web Vitals Optimizer
Fast pages. Visible ads. Premium bids.
Be first in line for BeeFresh
BeeFresh is under active development. Early-access publishers get priority onboarding, founder-level support on WhatsApp, and locked-in launch pricing.
No spam — we write only when something real ships.