How we run a deep campaign review
A repeatable method for finding the real story behind a campaign's numbers, built around two derived metrics that do most of the diagnostic work: pool and ceiling.
By Melvin Salas, Director & Co-founder, Riibon · Last verified: 2026-07-24
Start with one chart per metric, year over year, monthly
The base layer is a chart per core metric (spend, CPC, CPM, conversion rate, cost-per-conversion against its bidding target, ROAS, impression share lost to budget, impression share lost to rank, each key conversion action) with the prior year in grey and the current year overlaid, months across the x-axis. Two chart-construction rules matter more than they sound: volume metrics should exclude the current in-progress month, since a partial month always reads as a fake drop, while rate metrics should include it as a distinct marker, since it's still real information. And every annotation on a chart has to be exactly backed by a plotted data point, so the chart stays defensible as a standalone artifact even without someone there to narrate it.
Check for a regime change before trusting any cross-year comparison
Before comparing this year to last, check whether the underlying tracking or counting methodology changed anywhere in the window. A tracking regime change (a new counting rule, a conversion-action swap, a deduplication fix) makes absolute levels across the boundary incomplete, you can compare shape, or you can restate everything on a consistent basis, but you cannot compute a single blended figure across a regime boundary and trust the number. When a conversion action changes definition mid-year, prefer tracking one conversion action with a stable definition over summing several that changed underneath you.
Run a correlation pass, and build two derived metrics: pool and ceiling
Across every month in the window, compute the correlation between spend and conversions, spend and CPC (does more spend leak into higher prices), impression share and CPC (the cost of buying more share), and pool size and conversion rate. Two derived series usually carry the real diagnostic weight.
Pool is impressions divided by impression share, the total number of auctions the campaign was actually eligible to enter that month. Watch for impression-share inflation here: a tightening bid target can make automated bidding exit auctions it judges too expensive, which shrinks the pool denominator and mechanically raises the impression-share percentage even while the campaign is reaching fewer people. Rising impression share alongside flat or falling raw impressions is shrinking eligibility, not progress.
Ceiling is an optimistic upper bound: clicks divided by impression share, times conversion rate, divided by any counting multiplier, an estimate of what conversions would look like if the campaign won every auction in its current pool at its current conversion rate. It's deliberately optimistic (marginal auctions convert below the average), but it's genuinely useful: if the ceiling sits below the client's actual goal, no bid or budget change can close that gap on its own, the constraint is the pool itself, the footprint the campaign is even eligible to compete in.
Attribute a pool change to a real cause before acting on it
When the pool shrinks, decompose why before proposing a fix. Structural pruning (entities paused or removed) is checkable directly against entity-level serving history. Throttle exit (automated bidding voluntarily leaving auctions) shows up as a pool drop coinciding with cost-per-conversion crossing above target, budget-lost sitting at zero, and impression share jumping without any structural change underneath it. Genuine market seasonality is checkable against the prior year's pool shape over the same months. On one real account we reviewed this way, structural pruning explained less than a tenth of an early-year impression drop; the sharper seasonal decline was throttle, and a slower year-scale narrowing was a deliberate, earlier trade of reach for conversion rate through structure and negative keywords, not an accident.
Re-audit everything that's paused, on a consistent basis
Paused campaigns, ad groups, and keywords are worth re-scoring, but only on era-consistent, real-basis numbers matched against the current live blend, never against lifetime numbers that span a counting regime change. Rank the paused inventory into re-enable, worth testing, or genuinely leave paused, with a reason for each, and check whether current negative keywords would immediately re-suppress anything before recommending it come back. It's also worth recalling why something was paused in the first place before overturning that decision; a note from the original pause often turns out to still be true.
The output is a shareable deck, not a data dump
The useful end state is a per-metric chart deck built to stand alone (every chart shareable with its caveats included in the chart itself, not in a caption someone will lose), the two synthesis charts (pool and ceiling), and a ranked list of specific levers with sizing and sequencing, not a raw export. If a live experiment is running on the account, respect its freeze rules; a change made at the separate-campaign level, outside the experiment's own scope, affects both arms equally and keeps the experiment valid.