Yesterday's Revenue Dropped and Nobody Can Agree Why: Ranked Causes to Check First
When yesterday's publisher revenue drops and nobody can agree why, check five cause classes in order: inventory and traffic (request volume), auction and yield (floors and demand), creative or policy, partner delivery, then reporting definitions and clocks. Most "mystery" drops resolve before you rewrite floors or escalate a partner. The expensive mistakes happen when the team debates the auction while pageviews fell, a creative was blocked, or two systems were never measuring the same day.
The morning usually starts the same way. A number moved. Slack wants a villain by 9:15. Someone opens the wrong tool first - a chat assistant when you needed a cause tree, a partner ticket when the clocks never matched, a floor rewrite when a key ad unit went dark. Guessing in chat is not triage.
This is the sell-side check from the Ad Ops Headaches map: what to run when the network number moved and the team cannot agree why. Google Ad Manager shows up as a common example where useful - not as the whole topic. The same order applies across ad servers, SSPs, and yield stacks.
Table of Contents
- Why ranked causes beat Slack vibes
- The five cause classes (check in order)
- 1. Inventory, traffic, and request volume
- 2. Auction, yield, floors, and demand
- 3. Creative or policy
- 4. Partner delivery
- 5. Reporting definitions and clocks
- Stop conditions and handoffs
- Where Ads Tracker fits
- Related reading
- FAQ
Why ranked causes beat Slack vibes
Revenue is a product of several layers. If you start at the top of the auction every time, you will "fix" demand on days when pageviews fell, a creative never cleared, or two reports were never on the same clock.
A ranked-causes check does three jobs:
Forces the team onto one shared order
Produces a labeled cause class before anyone rewrites pricing
Makes narrower tools useful later - including Ask Ad Manager inside Google Ad Manager, which helps when you already know which line item to interrogate, not when you still need a morning cause tree
You do not need a parallel spreadsheet language for day-two triage. Use your ad server's official reporting dimensions and metric definitions. For Google Ad Manager operators, start from Ad Manager reporting Help rather than a tribal "we always use X column" habit.
The five cause classes (check in order)
Run these in order. Stop when you have a labeled cause that explains most of the move. Do not invent a percentage impact. If a vendor has not published a number for an outage, say what you observed in your network and stop there.
1. Inventory, traffic, and request volume
Pull yesterday vs the prior day and vs the same weekday last week.
Total ad requests and unmatched / unfilled requests
Site, app, and channel contribution
Whether impressions and revenue moved together, or revenue moved alone
Ad units, placements, and sizes that usually carry the day
Key-values or custom targeting that quietly stopped matching
A channel mix shift (AMP, app, CTV, newsletter wrappers) that changed the auction set
If requests fell in line with revenue, you are in a traffic story. Yield theater will not help. Annotate the day and move on unless a template outage is hiding inside the traffic drop - one dark unit or one broken size path can explain a disproportionate share of the miss without announcing itself in Slack.
When requests look stable but revenue fell, finish the inventory slice before you jump to floors. You are looking for concentration, not a network-wide story. Google's troubleshooting patterns for ads not showing are a useful checklist for inventory and delivery eligibility when you run Google Ad Manager: Troubleshoot why ads are not showing.
2. Auction, yield, floors, and demand
Only when inventory and traffic do not explain the move do you dig into yield:
eCPM and fill rate by demand channel (open auction, exchange bidding, SDK bidding, mediation, direct)
Programmatic guaranteed / preferred deal pacing surprises
Floor or unified pricing changes that shipped yesterday
Bid density drops that look like "the market" but may be a path you control
This is also where delivery rules that silently cut fill belong in the same morning pass: frequency caps that finally met volume on a heavy direct package, roadblocks and exclusive placements that reserved more inventory than sales remembered, competitive exclusion sets, day-part / geo / device restrictions, and protections edited mid-flight.
Do not rewrite every floor on hour one. Floor and pricing changes belong here - with evidence that pricing, not volume or eligibility, moved the day. If your team is also stretched across direct and programmatic as one job, that dual-load failure mode often shows up as "we changed floors because nobody had time to finish the inventory check." The two-jobs post names that pattern; this checklist keeps the morning from becoming another floor rewrite by default.
3. Creative or policy
Clearance problems wear a revenue costume. Before you treat a drop as demand weakness, check:
Creative disapprovals or expired assets on high-value packages
Brand safety, category, and advertiser blocks that narrowed eligible demand overnight
Policy or protection edits that look like underdelivery in the dashboard
Direct packages that "went live" while creative never cleared
If status is blocked, pacing theater will not help. Label creative or policy, fix the clearance path, and only then reopen yield. The same pattern shows up on the buy-side as "spend is live but nothing is delivering" - on the sell-side it often looks like a quiet fill cliff on the packages that depended on those creatives.
4. Partner delivery
Partner blame is cheap. Partner evidence is not.
After you know the drop is not a traffic, dark-unit, floor, or creative story, check:
SSP, bidder, or mediation path contribution vs the prior comparable day
Known partner incidents (only cite what the partner or your network actually showed)
Deal paths that stopped responding while open auction looked fine
Discrepancy that belongs in a reconciliation pass - after definitions and clocks, not before
Write what you observed in your stack. Do not invent an impact percentage. Escalate with a labeled cause class and a comparable-day slice, not a screenshot and a mood. If the fight is really "two systems disagree," jump to cause class 5 before you send the accusation email.
5. Reporting definitions and clocks
Sometimes yesterday did not drop. Two teams measured different things and called it a crisis.
Align before you escalate:
Timezone and report day boundaries
Currency and revenue type (gross vs net, estimated vs finalized)
Filtered vs unfiltered, bots, and invalid traffic treatment
Late-arriving data vs a true day-over-day move
Whether "revenue" in chat means the same column in every system
Most discrepancy fights are definition fights that started weeks earlier. Finish this pass before finance owns the argument. Official metric definitions in your ad server Help Center beat tribal column names every time - for Google Ad Manager, see About Ad Manager reports and the reporting dimensions guide linked above.
Stop conditions and handoffs
Stop the tree when:
One cause class explains most of the day-over-day move, or
You have two competing hypotheses that need eng, analytics, or sales - not more slicing
Hand off cleanly:
Traffic / dark inventory → analytics and site or app eng
Yield / floors → yield lead, with the evidence from classes 1 and 3 already ruled in or out
Creative / policy → trafficking owner and creative ops
Partner delivery → yield lead and partner account team, with observed network slices
Definitions / clocks → whoever owns the report contract between systems
What you should not do on hour one: rewrite every floor, pause every deal, or paste the whole network into a chat assistant and hope it ranks your day. Ask Ad Manager (and similar helpers) get sharper after you already know which class you are in - which is why the Ask Ad Manager is reactive post and this checklist are different jobs.
Where Ads Tracker fits
The ranked-causes check is faster when yesterday's exceptions are already sorted before you open a blank report.
ProOps Ads Tracker is a read-only Chrome sidepanel daily coordinator for Google Ad Manager. It surfaces campaign, revenue, and inventory exceptions for the morning brief - $249/month per GAM network, 3 seats included, extra seats $49. 30-day trial, no credit card. Start at Ads Tracker HQ.
It does not replace the cause tree. It shortens the time to "which class am I in."
If the headache is bigger than one report - hybrid stacks, process design, or a team stretched across two jobs - book a consulting call. Most of the value after 19+ years in this layer is naming the complaint correctly before anyone buys another tool.
Frequently Asked Questions
Yesterday's revenue dropped and nobody can agree why - what should I check first?
Run five cause classes in order: inventory and traffic (request volume), auction and yield (floors and demand), creative or policy, partner delivery, then reporting definitions and clocks. Most mystery drops resolve before floors or partner blame. Label the class before anyone rewrites pricing.
Should I change floors when yesterday's revenue drops?
Not as a first move. Confirm inventory, traffic, and eligibility first. Floor and pricing changes belong in the auction / yield step, and only with evidence that pricing - not volume, creative status, or report definitions - moved the day.
What if ad requests are flat but revenue fell?
Finish the inventory slice (units, sizes, key-values, channels), then yield mix, then creative or policy, then partners. Flat requests with lower revenue is usually eligibility, eCPM mix, clearance, or a partner path - not "the internet broke."
Is this the same as asking Ask Ad Manager why revenue dropped?
No. Ask Ad Manager is useful when you already have a narrow line-item or query. This ranked-causes check is the operator tree you run first so you know which class of problem you are in. Helpers get sharper after the label exists.
Where does Prebid or SSP discrepancy fit?
After you know the drop is not a traffic, dark-unit, creative, or definition story. Align clocks and revenue types first, then reconcile partner delivery with observed network slices - not with an accusation email.
How does ProOps Ads Tracker help with this check?
It is a read-only Chrome sidepanel daily coordinator for Google Ad Manager that surfaces exceptions before you build the blank report. $249/month per network, 3 seats included, extra seats $49, with a 30-day trial and no credit card at hq.proopsadstracker.com. It does not replace the ranked-causes order.