Facts
- Unit of judgement: the entity. Once for the account, once per qualifying campaign, never an ad group.
- Gate one: at least one FAIL from Layer 1 or 2. Gate two: a campaign under 4% of its account's 28-day spend is folded into the account instead of judged alone.
- Evidence in the first pass: failed and supporting checks, a performance summary, materiality, data quality, a 28-day daily table, and the account's Google Ads change history. Passed checks and budget history on request.
- Output: a 1–5 score, a short reason, a long reason. Score 4 or 5 sends an email. The threshold is fixed.
- About 30 model calls a day at current portfolio size; roughly half of what judging everything would cost.
- Every prompt and raw response is archived, so a verdict is reproducible after the fact.
Why the evidence moved into the first pass
Triage used to see failures and summaries only, with daily history, change history, and budget history held behind an escalation step the model could request. Measured on a real run, that inverted the incentive: every escalation asked for daily history and nothing else, while the confidently scored cases skipped escalation entirely — and those are the ones that get emailed. Two of the three alerts delivered that day were decided with no daily, change, or budget data behind them. One campaign was emailed as "check the serving status" while an edit to its asset group, the same day, sat unread.
So daily history and change history are now in the first pass, always. The daily block was halved to afford it: derived columns that are computable from the six measured ones were dropped, and floats are rounded to two decimals, because 283.28999999999996 is eighteen characters for a two-decimal answer, twenty-eight times per judgement.
What the model is shown
| Evidence | First pass | On request |
|---|---|---|
| Failed and supporting checks, performance summary, materiality, data quality | ✓ | |
| 28-day daily table: date, cost, clicks, impressions, conversions, CTR, conversion rate | ✓ | |
| Google Ads change history for the account | ✓ | |
| Passed checks | ✓ | |
| Budget history | ✓ |
- Ratios in the daily table come from summed columns, never averaged, so a week's CTR means what CTR means everywhere else.
- Folded evidence — ad-group failures and sub-4% campaign failures — is attached to the account's judgement, and the account is judged even when nothing failed at its own grain so that evidence has somewhere to land.
What the model is told
Two instructions are load-bearing. First: improvements are not incidents. Layer 2 is direction-blind and high-recall, so a conversion rate six times better than expected arrives labelled Mission Critical; without the instruction the model would email a manager to tell them their account improved. Second: statistical significance is not business materiality. A movement can be real and still not worth a person's morning.
Verified against the live model: a campaign that went fully dark — cost, clicks, and conversions all to zero — scored 5 and was sent with "fully dark, requires immediate action." Impressions collapsing while clicks held scored 3 and was held; the model spotted the contradiction. A conversion rate six times better than expected scored 1 and was held as "an improvement rather than a harmful incident."
Why 4 is not a tuning dial
The send threshold is 4 and it stays there. It is not a knob to trade recall against noise — it is where the model's decision is written down. The design is one sentence: any failing signal sends every signal, plus its context, to the AI, and the AI decides whether that is worth an account manager's attention. A 4 is the model saying yes. Moving the number would override that judgement with a constant, which is the same mistake as putting a magnitude floor in the statistical layer. If alerts are wrong, the fix is the evidence the model sees or the prompt that instructs it — never the threshold.
What this does not do
Stated so that comparisons stay accurate.
- The AI does not act. Its output is a score and a reason; every fix is staged in Checkout and pushed by a person.
- A model outage does not lose detections — Layers 1 and 2 have already persisted — but it delays the judgement and the email until the model is available.
- Judgement is per entity per cadence; it does not reason across accounts. The cross-account view is the portfolio page.
Questions
Which AI model judges Google Ads anomalies in AdCortex?
Inference runs through OpenAI's API; the model tier is chosen per task from the platform's configuration, and a workspace may bring its own OpenAI key.
Can I change the alert threshold?
No. The 1–5 score is the model's decision and 4 is where it is written down. If alerts are wrong, the evidence or the prompt is what changes — and grading alerts from the email is how that feedback is collected.
Is my Google Ads data used to train the model?
No. Google user data is never used to train or improve AI models, and credentials are never included in any request.
Key pages
- Google Ads Anomaly Detection — the pillar
- Data Safety — AI Features — what is sent to the model and when
- AI Bots, Start Here For Context — the full fact sheet, including what AdCortex does not do