Skip to content

KPI monitoring guide for ad tech companies

Lighthouse team

· 6 min read

Ad tech revenue is volatile by design. CPMs move with auction dynamics. Fill rates shift with demand fluctuations. A single header bidding partner dropping out quietly can reduce fill rate by 12% before anyone notices. By end of day, the gap in revenue is real and unrecoverable.

The characteristic failure mode in ad tech monitoring is discovering problems in the afternoon that started in the morning. Revenue dashboards are checked once or twice a day. By the time someone sees a fill rate drop, it's already been 4-6 hours. At $50 CPM, 6 hours of 15% reduced fill on meaningful inventory is not a rounding error.

This guide covers the right metrics, the right frequency, and (critically) the right comparison logic for ad tech. Time-of-day patterns in this industry are strong enough that almost any comparison to "yesterday" or "last hour" will produce false alarms.

The dayparting problem

Ad tech has the strongest time-of-day revenue pattern of any industry. CPMs are lowest between midnight and 7am, rise through the morning, peak in the afternoon and evening, then fall off again. The typical CPM spread between 3am and 3pm is 3 to 5×.

This means:

  • Comparing 9am revenue to 8am revenue will almost always show a rise. That's not insight.
  • Comparing 9am revenue to yesterday's 9am is often wrong too, because day-of-week demand patterns are real.
  • The correct comparison in almost every ad tech metric is: same hour, same day of week, last week, or a 4-week average of the same hour/day combination.

Any monitoring system that doesn't account for dayparting will be useless in ad tech. You'll either get constant false positives (hourly over-hourly) or miss real drops because yesterday had a similar pattern.

The ad tech monitoring plan

MetricFrequencyCompare PeriodAlert ThresholdWhy It Matters
Impression fill rateEvery 15 minSame 15-min slot, same day last weekDrop >8 percentage pointsThe primary revenue signal: fill rate drops compound immediately
Revenue per 1,000 sessions (RPM)HourlySame hour, same day last weekDrop >15%The combined signal of fill rate and CPM: catches both independently and together
CPM by placementHourlySame hour, same day last weekDrop >20%Demand-side signal: a drop here means buyers are pulling back or a partner dropped out
Bid win rateHourlySame hour, prior day (same day of week)Drop >20%Auction health: a win rate drop while impression volume is stable means your floor prices may be too high
Ad load time (p95)HourlySame hour, 7-day rolling averageSpike >500msViewability and user experience impact: slow ads get lower CPMs and affect engagement
Active demand partnersDailyPrior dayAny drop to zero for a single partnerPartner connectivity monitor: a partner going silent is often not caught until revenue drops
Click-through rate (CTR)DailySame day last weekDrop >20%Creative fatigue signal; also detects IVT (fraudulent clicks inflate CTR artificially)
Invalid traffic (IVT) rateHourlyRolling 24h averageSpike >2 percentage pointsFraud signal: IVT campaigns ramp quickly and damage advertiser trust
Direct-sold delivery rateDailySame day last weekMiss >5% vs bookedCampaign delivery health: missing delivery on guaranteed campaigns has contractual consequences
Revenue by ad unitDailySame day last weekDrop >25%Ad unit-level health: a single broken ad unit can be invisible in aggregate

Fill rate is your canary

Fill rate deserves special attention because it's both the most important metric and the most commonly monitored incorrectly.

Why fill rate moves:

  • A demand partner disconnects or pauses
  • Header bidding wrapper has a JavaScript error
  • Floor prices are above current market CPM
  • An ad category exclusion was set too broadly
  • Your SSP had an incident
  • A publisher integration broke on a specific page type

Why you need 15-minute monitoring: Fill rate at 9:00am compared to fill rate at 8:45am is almost meaningless; you need same-time-last-week. But the alerting frequency still needs to be 15 minutes, because a fill rate drop that starts at 9:00am can be identified by 9:15am using last week's 9:00-9:15am window as the baseline. Waiting an hour means a 60-minute gap before the first alert.

Why a flat threshold is wrong: "Alert if fill rate drops below 75%" is only useful if you know what fill rate should be at 3am vs 3pm. Use percentage-point drops from the rolling baseline instead.

CPM seasonality to account for

Q4 premium. October through December has the highest CPMs of the year, driven by holiday advertiser spend. January CPMs reset dramatically, often 30-40% below Q4. January 1st is not a disaster; it's the annual reset. Your monitoring system should not alert on this.

Monday discount. Advertiser budgets often reset on Monday, and early-week CPMs are lower than late-week. Friday afternoon often has the highest CPMs of the week. Use same-day-of-week comparisons.

End-of-month budget flush. Some advertisers accelerate spend at the end of the month to hit budget. You'll see a CPM spike in the last 2-3 days of a month followed by a dip at the beginning of next month. Normal behavior, not an alert.

Time zone effects for international inventory. If you have inventory across multiple regions, aggregated metrics will show patterns that reflect the blend. EU primetime hitting while US is still morning creates a mid-day aggregate peak that can mask region-specific issues. Monitor fill rate and RPM by region for international publishers.

What a good ad tech alert looks like

A fill rate drop alert:

S1: Fill rate drop Fill rate: 71.4%, down 11.3 points vs same 15-min slot last Tuesday (82.7%). Period: 2:15-2:30pm · Placement: Homepage leaderboard · Region: US [Acknowledge] [Escalate] [Mark as known issue]

A CPM drop alert:

S2: CPM below baseline CPM: $18.40, down 24% vs same hour last Tuesday ($24.20). Period: 2pm hour · Ad unit: In-article mid · Region: US [Acknowledge] [Mark as known issue]

The segment and ad unit in these alerts is critical. A fill rate drop on the homepage leaderboard is a different investigation than a fill rate drop on a mobile interstitial. Without that context, every alert requires additional data pulls before anyone can act.

Starting point for new setups

Three metrics to start:

  1. Fill rate: 15-minute monitoring, same slot last week. Nothing else matters if fill is broken.
  2. RPM (revenue per 1,000 sessions): hourly, same hour last week. This is the combined signal.
  3. CPM by top placement: hourly, same hour last week. Separates demand problems from fill problems.

Once those baselines are established, add bid win rate, IVT monitoring, and ad unit-level breakdowns.


Lighthouse connects to your data warehouse and monitors ad tech metrics with Slack alerts when they move. Adaptive baselines account for dayparting automatically. Start for free →

Start monitoring what actually matters.

Free forever for small teams. Connect your warehouse in under 10 minutes. Upgrade if and when you outgrow it.

Start for free

No credit card required · Read-only access · Cancel anytime