OpenAdLibraryOpenAdLibrary
Native Ad Networks

Why Did Your RPM Drop? Seasonality, Demand and Widget Decay

A falling RPM usually has one of four causes: seasonal demand, a network-side shift, a site-side technical issue, or creative decay. Here's how to tell them apart before you panic.

Editorial illustration: Why Did Your RPM Drop? Seasonality, Demand and Widget Decay

An RPM drop almost always traces back to one of four things: seasonal softness in advertiser demand, a demand-side shift specific to your network (advertiser churn or a vertical pulling back budget), something that changed on your own site (a broken placement, a layout update, a consent tool blocking scripts), or genuine widget decay where the creative rotation serving your zone has gone stale. Diagnosing which one requires isolating variables, not guessing from the revenue chart alone.

Start by isolating what actually changed#

Before chasing a cause, separate the three numbers that get conflated into "RPM dropped": traffic volume, fill rate, and actual yield per impression. A falling RPM with flat or rising traffic is a genuine yield problem. A falling RPM alongside falling traffic might just be a traffic mix change, more direct visitors instead of high-value referral traffic, for instance, dragging the blended number down without anything actually being broken.

If your reporting lets you segment by geo, device or vertical, do that next. A drop that's isolated to one geo or one device type points toward a demand-side or technical cause specific to that segment, not a network-wide problem.

Cause 1: seasonality in advertiser demand#

Native marketplaces, like display and search, see advertiser budgets move with predictable calendar patterns: a post-holiday pullback in January, softness around major shopping events shifting spend elsewhere temporarily, and vertical-specific cycles (open enrollment periods for insurance, tax season for finance). If your RPM dip lines up with a period you've seen soften in prior years, seasonality is the most likely explanation, and it usually recovers on its own timeline rather than something you can fix through your own site changes.

Cause 2: demand-side changes on the network#

Advertiser demand isn't evenly spread. A small number of top native ad verticals carry a large share of native ad volume: health, finance and insurance consistently rank among the highest-volume categories across networks like Taboola, based on OpenAdLibrary's index of live creatives. If your traffic skews toward one of those verticals and a major advertiser or cluster of advertisers in that category pulls back, network-wide bidding pressure in your category can soften noticeably, and your RPM moves with it even though nothing on your site changed.

This is different from seasonality in that it's not calendar-driven, it's advertiser-behavior-driven, and it can be harder to predict. The way to tell the two apart is watching whether the softness is broad (many verticals, matches a known calendar pattern) or narrow (concentrated in your dominant vertical, doesn't match a seasonal pattern you've seen before).

Cause 3: something changed on your own site#

This is the cause worth ruling out first, because it's the one entirely within your control and the easiest to fix once found:

  • A layout or theme update moved the widget. A redesign that pushed your native placement further down the page, past where most readers scroll, quietly tanks fill and viewability without any error or warning.
  • A consent management platform misconfiguration blocking the script. If your CMP update inadvertently blocks the ad script for a subset of users (often by region, matching consent rules), those impressions simply never render.
  • Reduced ad density from an unrelated change. Adding other scripts, chat widgets, additional analytics tags, can push total page weight past a threshold where your CMS or CDN starts deferring third-party scripts, including your ad widget.

If you check nothing else, verify the widget is still rendering in the same position, at the same rate, across your top traffic segments.

Cause 4: widget and creative decay#

Even with nothing "broken," a zone's yield can decline if the creative rotation serving your content recommendation widget has gone stale, either because the network hasn't refreshed the ads shown to your specific inventory, or because engagement signals on your zone have deprioritized it in the network's internal ranking. This is a publisher-side version of the same creative fatigue concept media buyers watch on the advertiser side: ads that keep serving without renewal lose effectiveness, and a network that isn't rotating fresh, competitive creative into your zone yields less even at stable traffic and fill.

A diagnostic checklist#

Symptom Likely cause What to check
Drop matches a known seasonal calendar pattern Seasonality Compare to the same period in prior years
Drop concentrated in your dominant vertical, no seasonal match Demand-side shift Check whether network-wide volume in that vertical has visibly thinned
Drop isolated to one geo or device Site-side or technical issue Verify widget renders correctly for that segment specifically
Drop across all segments, no seasonal or demand explanation Site-wide technical issue Check recent layout, CMP, or script changes
Fill rate stable but yield per impression falling Widget or creative decay Review whether creative variety serving your zone has narrowed

How OpenAdLibrary helps you tell "network-wide" from "just me"#

The fastest way to separate a network-wide demand issue from a site-specific problem is checking whether the vertical you rely on actually has less live creative volume right now, a genuine demand signal, versus assuming that from your revenue chart alone. OpenAdLibrary's ad intelligence tools let you check current creative counts and share of voice by vertical and network, which tells you whether advertiser volume in your category has actually thinned or whether the problem sits somewhere on your own site.

Why blended RPM hides more than it reveals#

A single RPM number sitting on a dashboard is already an average across every geo, device and referral source hitting your site, which means it can stay flat while masking real movement underneath. A site with 60% of traffic from one geo could see that geo's RPM drop by a meaningful margin while overall blended RPM only dips slightly, because the other 40% held steady. That's exactly why segment-level analysis matters more than the top-line number: the aggregate can understate a real problem in your largest segment or make a genuinely serious issue look like normal noise.

The same logic applies to device mix. Native fill rates and yield commonly differ between desktop and mobile, and if your traffic's device mix shifted, say, a viral social share sent a wave of mobile traffic that doesn't monetize as well as your usual referral mix, blended RPM falls even though nothing about your monetization setup changed at all. Before concluding something is broken, check whether the traffic hitting your site today looks like the traffic that generated your baseline RPM.

Building a habit of catching this earlier#

Publishers who get blindsided by RPM drops are usually the ones checking revenue only in aggregate, weekly or monthly, without a habit of segment-level review. A lighter-weight version of the checklist above, run monthly rather than only when something looks wrong, catches demand-side softness and site-side issues while they're small, before a full month of depressed revenue has already happened. Pair that with keeping an eye on vertical-level ad longevity trends: if the ads running in your dominant vertical across the wider market are noticeably shorter-lived than they were a quarter ago, that's an early demand-side signal worth watching before your own RPM shows the effect.

A short worked example#

Say your blended RPM fell around 15% over three weeks. First check: is traffic volume also down, or just RPM? If traffic is flat and only RPM fell, it's a yield problem, not a demand problem. Next, segment by geo: if the drop is concentrated in your top two geos and matches a pattern you saw last year around the same date, seasonality is the leading explanation and you'd expect it to partially recover on its own schedule. If instead the drop is spread evenly across all geos and doesn't match any prior-year pattern, it's more likely either a site-wide technical issue (check whether a recent deploy touched the widget's placement or a consent tool's configuration) or a genuine demand-side shift in your dominant vertical.

Working through that sequence usually takes less time than it sounds, and it replaces a guess with an actual answer, which matters because the fix for each cause is completely different: seasonality mostly means waiting it out and reallocating attention to other placements in the meantime, a site-side issue means a specific technical fix, and a demand-side shift might mean diversifying which verticals your inventory serves rather than waiting for a recovery that may not come on the same vertical.

The bottom line#

RPM drops feel mysterious because the chart only shows the symptom, not the cause. Working through seasonality, network demand, your own site changes and creative decay in that order, cheapest and most controllable checks first, gets you to the actual cause faster than staring at a declining line and assuming the worst. Most of the time it's one of the four, rarely all at once, and rarely permanent.

Frequently asked questions

Why did my Taboola or native ad RPM suddenly drop?
Most drops trace to one of four causes: seasonal softness in advertiser demand, a demand shift specific to your dominant vertical, a technical issue on your own site like a moved widget or blocked script, or creative decay where your zone's ad rotation has gone stale. Isolating traffic, fill rate and yield separately narrows down which one it is.
How do I know if an RPM drop is seasonal or a real problem?
Compare the timing to the same period in prior years. If the dip lines up with a pattern you've seen before, post-holiday softness or a known vertical cycle, seasonality is the likely cause and it typically recovers on its own timeline.
Can a website redesign cause an RPM drop?
Yes, commonly. A layout or theme update that pushes your native widget further down the page reduces viewability and fill without triggering any error. Checking whether the widget still renders in the same position after any site change is one of the fastest diagnostic steps.
Does advertiser demand really vary that much by vertical?
Yes. A small number of verticals, health, finance and insurance among them, consistently carry the largest share of native ad volume. If your traffic skews toward one of those categories, a pullback in advertiser demand there can move your blended RPM noticeably even with nothing changed on your site.
What is widget or creative decay in native advertising?
It's when the ad rotation serving your specific zone goes stale, either because fresh creative isn't being rotated in or because engagement signals have deprioritized your inventory internally. Yield can fall even with stable traffic and fill rate, since the ads themselves have effectively fatigued.
The OpenAdLibrary Team
Written byThe OpenAdLibrary Team
Ad intelligence & native advertising research

We build OpenAdLibrary, the open ad-transparency platform. Every day our systems capture live native ads across Taboola, Outbrain, MGID, Revcontent, Teads, Yahoo and MSN, identify the real advertiser behind each one, and follow the click to its landing page. These guides distill what we see in that data so you can research the market faster.