May 8, 2026 · 7 min read · Ad Tech, KPI, Monitoring Plan
KPI monitoring guide for ad tech companies
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–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
| Metric | Frequency | Compare Period | Alert Threshold | Why It Matters |
|---|---|---|---|---|
| Impression fill rate | Every 15 min | Same 15-min slot, same day last week | Drop >8 percentage points | The primary revenue signal — fill rate drops compound immediately |
| Revenue per 1,000 sessions (RPM) | Hourly | Same hour, same day last week | Drop >15% | The combined signal of fill rate and CPM — catches both independently and together |
| CPM by placement | Hourly | Same hour, same day last week | Drop >20% | Demand-side signal — a drop here means buyers are pulling back or a partner dropped out |
| Bid win rate | Hourly | Same 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) | Hourly | Same hour, 7-day rolling average | Spike >500ms | Viewability and user experience impact — slow ads get lower CPMs and affect engagement |
| Active demand partners | Daily | Prior day | Any drop to zero for a single partner | Partner connectivity monitor — a partner going silent is often not caught until revenue drops |
| Click-through rate (CTR) | Daily | Same day last week | Drop >20% | Creative fatigue signal; also detects IVT (fraudulent clicks inflate CTR artificially) |
| Invalid traffic (IVT) rate | Hourly | Rolling 24h average | Spike >2 percentage points | Fraud signal — IVT campaigns ramp quickly and damage advertiser trust |
| Direct-sold delivery rate | Daily | Same day last week | Miss >5% vs booked | Campaign delivery health — missing delivery on guaranteed campaigns has contractual consequences |
| Revenue by ad unit | Daily | Same day last week | Drop >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:
- ·Fill rate — 15-minute monitoring, same slot last week. Nothing else matters if fill is broken.
- ·RPM (revenue per 1,000 sessions) — hourly, same hour last week. This is the combined signal.
- ·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 →