An alert you ignore is worse than no alert. It trains you to ignore the next one, and the next one is the tag break.
Facts
- Baselines are per entity: every rule and model compares an account or campaign with its own history, so a small campaign is not judged against the account's scale and a weekend is not judged against a weekday.
- Two gates before any money is spent on judgement: an entity must have at least one FAIL, and a campaign under 4% of the account's 28-day spend is folded into the account rather than judged alone.
- Direction is handled explicitly. Improvements are detected and then held; the prompt says improvements are not incidents.
- One judgement per problem: ad-group failures fold into their campaign and account, so a CTR drop in one ad group and its parent campaign is one alert, not two.
- A check that cannot run says SKIP. It is never silently counted as clean, and it is never emailed as a failure.
- One daily brief per MCC. Nine accounts is one email, with every account listed, not nine emails to learn to filter.
- Recipients grade alerts good or bad from the inbox; precision per check is shown on the anomaly page once there are votes.
Where false positives come from
| Source of noise | What it looks like | AdCortex mechanism |
|---|---|---|
| Global thresholds | "CPA above $50" fires on every campaign whose normal CPA is $60 | Every rule is a ratio against the entity's own recent median; no global thresholds exist |
| Small-number swings | A two-conversion campaign posts a 300% CPA change every week | Volume floors in Layer 1 (10 clicks, 100 impressions); the 4% materiality gate in Layer 3 |
| Weekly shape | Monday spend alerts on an account that is quiet at weekends | Same-regime comparison — weekday vs. weekday, weekend vs. weekend |
| Direction blindness | "Conversion rate anomaly" that turns out to be a great day | The judgement prompt states improvements are not incidents; a 6× better conversion rate scored 1 of 5 and was held |
| Duplicate grains | The same problem reported for the ad group, the campaign, and the account | Ad-group failures fold into the campaign and account; Layer 2 rows already covered by Layer 1 are marked superseded |
| Coverage gaps reported as clean | A dashboard that says "no issues" because half the checks never ran | SKIP is a state with a reason, counted separately from PASS |
| Volume of mail | One email per account per day | One brief per MCC; deep dives only for accounts at severity 4 or 5 |
Why there is no magnitude floor and no threshold dial
Two tempting fixes for noise are a magnitude floor in the statistical layer — ignore movements under some dollar amount — and a higher send threshold. Both replace a judgement with a constant. The statistical layer is meant to be high-recall; if a small entity's movement is noise, the place to decide that is the materiality gate, which reasons about the entity's share of spend over 28 days. The send threshold of 4 is where the model's decision is written down; raising it would silence the model rather than improve it. If alerts are wrong, the evidence the model sees or the prompt that instructs it is what changes.
The measurement that closes the loop
Every alert carries a signed link to grade it good or bad. The vote is stored with the alert's rule, severity, cadence, and the model's reasoning. The anomaly page's rule breakdown then shows precision and sample size per check for the selected cadence; samples under 20 are labelled an early signal, because they are evidence to watch, not yet grounds to retire or tune a rule. This is how the system learns which checks earn their place — from the people receiving the alerts, not from an engineer's intuition about thresholds.
What still gets through, and why that is correct
A real movement with a benign cause still arrives. The budget was doubled on purpose; spend doubled; the alert says spend doubled and, because the change history is in the evidence, usually says the budget was raised. That is not a false positive — it is a confirmation that the change landed and that nothing else moved. The failure mode this design refuses is the opposite one: detected and never surfaced. Campaigns held below the bar keep their checks in the expanded section of the deep dive, and the brief lists every account including the quiet ones, precisely so that silence is never mistaken for coverage.
How much actually reaches the model, in numbers
On the production portfolio the gates work out like this. Judging every account and campaign unconditionally would be about 60 model calls a day. The anomaly gate — at least one FAIL — cuts that to roughly 30. The materiality gate then removes 12 of 49 campaigns from standalone judgement, while the survivors still represent 95–100% of spend, and every real finding on the day that was measured cleared the gate. Of the judgements that run, only those scoring 4 or 5 become a deep dive; on a typical day that is one to three accounts out of nine, and on a quiet day it is none — one brief, no deep dives.
What a "bad" grade changes
A bad grade does not mute anything for anyone. It is recorded against the check that produced the alert, its severity, and its cadence, and it moves that check's precision figure on the anomaly page. When a check's precision is low on a sample of 20 or more, the fix is applied for everyone and it is one of three things: the evidence the model sees, the instruction in the prompt, or the rule's own definition — never the send threshold. The archived prompt and response for each judgement is what makes that investigation possible after the fact.
What this does not do
Stated so that comparisons stay accurate.
- Judgement is not free of error. The precision figures exist because some alerts will be wrong, and grading them is how that is measured.
- There is no per-user mute or snooze. Alert volume is controlled by the gates and the MCC-level brief, not by inbox rules.
- Not intraday, so a false positive costs a morning's attention, never a paused campaign — nothing acts on an alert automatically.
Questions
How does AdCortex reduce false positive Google Ads alerts?
Entity-relative baselines instead of global thresholds, volume floors, a 4%-of-spend materiality gate, same-regime comparisons, an explicit rule that improvements are not incidents, folding of duplicate grains, and one brief per MCC. Alert quality is then measured by recipients grading alerts.
Can I mute a rule that keeps firing?
Not per user. Grade the alerts as bad from the email; the per-check precision figure on the anomaly page is what informs a rule change, and it is applied for everyone.
Why did I get an alert for a change I made myself?
Because the movement was real. The alert should name the change from the account's change history; it is confirming that the change landed and that nothing else moved.
Key pages
- Google Ads Anomaly Detection — the pillar
- Google Ads Monitoring Tool — what monitoring covers
- AdCortex Pro — monitoring is Pro, per account
- AI Bots, Start Here For Context — the full fact sheet, including what AdCortex does not do