Skip to main content
Stealth detects six kinds of drop. Four are evaluated every hour and look for something that broke. Two are evaluated once a day and look for revenue that is slowly going away. This page gives the exact rule of each one. “Ratio” always means real divided by normal, and “beyond the market” means after dividing by the same ratio of the median client.

How it works

The code in the first column is the kind field of webhooks.

Ad unit stopped

An ad unit stopped receiving requests while the rest of its client kept working, the typical sign of a tag removed or broken in a layout change.
  • Requests at 2% of normal or less, for 2 hours in a row.
  • The rest of the client (the client without this ad unit) is at 70% of normal or more, beyond the market. If the rest of the client is too small to judge, the market itself must be at 70% or more.
  • The ad unit has at least 100 requests in its hourly normal.
  • Loss: the ad unit’s normal revenue, adjusted by the market, minus what it earned. When the ad unit is at least 20% of its client’s requests, Stealth subtracts the traffic that moved to the client’s other ad units, so a replaced ad unit does not count as a full loss.

No ads served

An ad unit still receives requests but almost none of them is filled.
  • Requests at 70% of normal or more, beyond the market.
  • Fill rate at 5% of normal or less, beyond the market, for 2 hours in a row.
  • Hours when the fill rate of the whole market collapsed are skipped.

Client lost traffic

A client’s requests fell to less than 50% of normal, beyond the market, for 3 hours in a row. The client needs at least 1,000 requests in its hourly normal. It does not open when an Ad unit stopped of the same client already explains the drop.

Client fill rate dropped

A client’s traffic held (requests at 70% of normal or more) but its fill rate fell below 60% of normal, beyond the market, for 3 hours in a row. The client needs at least 1,000 requests in its hourly normal. It does not open when a No ads served of the same client already explains the drop.

Revenue per request dropped

Revenue per request of the last 2 days, against the median of the same weekdays in the 3 previous weeks, is below 60% beyond the market. It needs at least 4 of those 6 previous days with data and a normal of at least R$ 50 per day. Loss per day: the requests of the last 2 days times the previous revenue per request (adjusted by the market), minus the real revenue, divided by 2. The median daily revenue of the last 7 days is below 75% of the median of the 14 days before, beyond the market, while requests held (90% or more, beyond the market). In other words, the client earns less without losing traffic. It needs 5 of the 7 recent days and 10 of the 14 previous days with data. It does not open when Revenue per request dropped already fired for the client. Loss per day: the previous median, adjusted by the market, minus the recent median.
Hourly rules estimate the loss of each hour of the drop, average it and multiply by 24 to give a loss per day. That projected loss per day decides whether the drop becomes an incident (at least R$ 10 per day) and its severity.

What you see

Each incident shows its kind on the Incidents page, on the client page, in the email and in the webhook. Daily kinds can also carry a demand source reading in the email.

FAQ

A network without partners is its own client, so client kinds cover it. For networks with many clients, a drop of all of them at once is the market moving, which Stealth deliberately does not alert on.
No. They follow the same rules, but they only open incidents inside a monitored app client. App clients are off by default in the Control Center.
Last modified on October 13, 2026