Skip to content
Under Development

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.

+15–30% Expected session revenue uplift on long-dwell content benchmark 1

Slot: in-content-2 · 336×280

longread.example · session 04:12

evaluating

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

Impression #1 ₹72
Refresh #2 ₹65
Refresh #3 ₹58
Refresh #4 ₹44 STOP

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.

Concept preview · illustrative data

The problem

What this is costing you right now

01

A five-minute read earning one impression is wasted session value

You worked hard for that session.

02

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.

03

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. 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. 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. 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. 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. 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.

Every step happens on your pages, with your existing ad server. Nothing here requires you to move your accounts or hand over your data.
  • 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

hindinews.example
leaderboard 728×90
below-nav
in-content 336×280
below-article native grid

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.

Concept preview · illustrative data

Specifications

Full technical specification

Publishers compare specifications, not adjectives. Everything is here, including what depends on partners we do not control.

The seven gates

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 & 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.

+30% range +15–30%

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

Yes, when it is declared and implemented compliantly. Google Ad Manager supports declared refresh, and BeeFresh declares every refreshed request. What is not allowed is undeclared or user-hostile refresh — which is exactly what gates 3, 5 and 7 exist to prevent.

Generally yes, and that is fine as long as you are honest about it. A second impression is usually worth less than the first. The yield gate exists precisely to find the point where the next impression stops being worth serving — you keep the profitable depths and stop before you are diluting your own averages.

It should improve it. Because gate 1 requires the slot to be at least half visible and gate 2 requires an active reader, refreshed impressions are served into confirmed attention. Timer-based refresh damages viewability; visibility-gated refresh does the opposite.

Nothing happens. The Page Visibility API check in gate 2 stops every refresh on an unfocused tab, and the engagement window closes shortly after activity stops. An abandoned tab generates zero refresh impressions.

Yes. Every gate is configurable per site and per ad unit, and gate 7 lets you exclude entire placements or content categories. Sensitive coverage, sponsored posts and anything you would not want a second ad load on can be excluded outright.

Under active development as part of BeeOS Module 1. BeeFresh needs BeeBid running so refresh requests can enter a real auction with proper tagging. Join early access for priority onboarding.
Under Development

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.