ai

Marketing Anomaly Detection: Catch Campaign Problems With an AI Agent on Rails

Marketing anomaly detection flags metrics that leave their expected range, such as a bounce spike or a conversion drop. An Anomaly Watcher agent explains each alert at read level (L1), while statistics do the detecting. One bounded action, pausing a send on a pre-approved threshold, runs at L4. A person decides what happens next on any customer data platform (CDP).

Rail level: L1, L4 pause · Risk: medium · Function: marketing operations

By Art Kukharenko · Published · Updated

All AI agent rails

Who this is for: marketing-operations leads, email owners and data engineers. Choose a threshold or a statistical method per metric, write one pause rule with limits, and measure alert precision. The method is part of AI agent rails: one job, one data scope, one approver, one audit trail.

Before: the manual workflow

Manual campaign monitoring means dashboards that nobody watches at 2 a.m. An email bounce rate spike that starts overnight can run for hours before anyone opens a report. When an alert does exist, it says a number moved and rarely says what launched, what changed or whether the data is even fresh. So the first hour goes on working out whether the problem is real, and campaign anomaly detection exists to shorten that hour.

What rules do and what the model does

Statistics and fixed thresholds detect anomalies, and the model only explains them. A model's judgement never fires an alert or a pause. Hard limits set by someone else suit thresholds, while metrics with a rhythm suit statistical baselines.

Metric typeMethodExample and source
Limits set by a mailbox or sending providerFixed thresholdGmail spam rate; Amazon SES bounce and complaint rates (table below)
Budget and pacing capsFixed thresholdImprovado's guide notes that mature teams run thresholds and anomaly detection together 6
Metrics with weekly or seasonal rhythmStatistical baselineAmplitude uses a method based on Prophet 8; Adobe Analytics flags values outside a 95% band at day granularity 9; GA4 fits a Bayesian state-space model and flags points outside a credible interval 10
Tracking healthData checksTrackingplan watches for broken triggers and missing properties 7

Provider limits are published, so use them as ceilings for your own rule, and set a spam rate alert well before the first limit. The table was checked on 1 November 2026.

Provider metricKeep belowReview or warningSending at risk
Amazon SES bounce rate 22%5% or more: account under review10% or more: sending may be paused
Amazon SES complaint rate 20.1%0.1% or more: account under review0.5% or more: sending may be paused
Gmail spam rate, from our inbox placement article 50.10%Never reach 0.30%Above 0.30%, bulk senders lose eligibility for mitigation

Three details change how you build on the SES figures. SES counts only hard bounces to non-verified domains, and only complaints from providers that send feedback. It measures over a "representative volume", not a fixed window, so you cannot recompute the rate from send statistics 2. Read the Reputation.BounceRate and Reputation.ComplaintRate metrics instead, and treat a single send's rate as an early signal, not the SES rate. One AWS page, on pausing a configuration set, still gives 10% and 0.5% as the review levels 4. The FAQ and the account-level page agree on 5% and 0.1% 23, so we use those.

The model adds context: what launched, what changed and which related metrics moved. It writes causes as hypotheses with evidence links.

After: the job on rails, step by step

The job runs on two separate paths, because explaining an alert and acting on one carry different risks.

Explanation path

  1. Metrics flow to the detector, which checks data freshness first.
  2. An alert fires from a statistical method or a threshold rule.
  3. The agent gathers the campaign calendar, recent changes and related metrics.
  4. It posts an explanation with hypotheses and evidence links to the owner's queue.
  5. A person triages and decides what to do.

Pause path

  1. A threshold rule reads numeric values only, and no model runs on this path.
  2. If every condition holds, the execution service pauses that one send.
  3. The owner is told at once, and the ledger writer records the event.
  4. Only a person resumes, with a reason.

The pause rule: the one L4 action

To automatically pause an email campaign safely, the rule must meet all of these conditions, and each sits outside the model.

  • A pre-approved threshold is written on the rail card, with a version number.
  • Numeric inputs only. No free text enters this path, so the path never reads untrusted input and the Rule of Two holds 1.
  • A pause, never a cancel. The action must be reversible.
  • No resume by the agent. Only a person resumes, and the tool list has no resume call.
  • A minimum send volume before the rule can fire, so a few early bounces cannot stop a send.
  • An exempt list for time-critical sends.
  • Transactional mail excluded, by keeping it on a separate stream.
  • A cap on pauses per day. Beyond the cap, the rule alerts and stops acting.
  • The owner is told immediately.

An illustrative rule looks like this. The values are invented, so set your own from provider limits and your baseline.

rule_id: pause-promo-bounce
version: 3
applies_to: marketing stream, bulk promotional sends
fire_when: hard_bounce_rate >= 1.5% and attempted_sends >= 5000
require: metrics fresher than 10 minutes
action: pause_send (one send)
exempt: list time-critical
cap: 3 pauses per day, then alert only
never: cancel, resume, transactional mail
notify: email owner on call

AWS documents the precedent. You can pause SES sending automatically per configuration set or per account, using a CloudWatch alarm, an SNS topic and a Lambda function 34. A configuration-set pause applies in one Region and leaves other account sending alone 4. So keep marketing mail in its own configuration set. The same API call also re-enables sending, so hard-code the function to disable only, limit its role as AWS suggests, and alert on any re-enable 4. SES can also pause your whole account itself. It emits no EventBridge event for that, so poll the EnforcementStatus field rather than SendingEnabled 2.

Other platforms differ. The Klaviyo and Braze pages we opened describe no pause on bounce or complaint rates that a customer can set 111213. If your platform has no pause API, the rule cannot act there, so alert a person instead.

Is a false pause worse than a missed spike?

A false pause is usually cheaper than a missed spike, because a pause is reversible and reputation damage is slow to repair. The answer changes with the send type, so decide per type.

Send typeCost of a false pauseCost of a missed spikeSensible default
Bulk promotionalA delay of minutes or hoursReputation damage that affects later sendsPause on the rule
Time-critical, such as an offer ending todayThe moment may passThe same damage, in a narrow windowExempt; alert a person at once
Lifecycle, such as welcome or renewalTriggered entries wait in a queueDamage builds slowly at low volumeHigher minimum volume; pause, then review the queue

Transactional mail is outside the rule altogether. For mailbox-provider signals across a whole stream, a sister rail, the Deliverability Watcher, holds a similar pause. Give each stream one owner, so two rules do not fight.

The rail card

The rail card fixes what the Anomaly Watcher may do at each rail level, and the rail card guide explains the fields.

FieldValue
JobExplain anomaly alerts in context, and pause a send when a pre-approved threshold is crossed.
TriggerAn alert from a statistical detector or threshold rule.
Data scopeCampaign metrics, campaign calendar and change log. No customer profiles. No free text on the pause path.
Tool scopeRead: metrics, calendar, change log, data freshness. Propose: alert explanation with hypotheses. Execute: pause one send under a written rule.
Output contractExplanation with hypotheses and evidence links; a pause record when the rule fires.
GateThe pause rule is approved in advance, by someone other than the requester. Only a person resumes a send.
LimitsWritten threshold, minimum send volume, exempt list for time-critical sends, cap on pauses per day. Transactional mail excluded.
LedgerMetric values, threshold version, send paused, time, who resumed and why.
EvaluationReplay of past incidents and quiet periods.
Owner and kill switchHead of marketing operations, with the email owner told of each pause. Disable the pause rule, and alerts continue to a person.

What the ledger shows for one pause

One pause leaves one record, written by the execution service and ledger writer, never by the agent. The record below is illustrative, with example value values.

{
  "record_id": "aud_001204",
  "event": "send.paused",
  "rail": "anomaly-watcher@v2",
  "rule": {"id": "pause-promo-bounce", "version": 3, "approved_by": "marketing_ops_lead"},
  "metrics": {"hard_bounce_rate": 0.021, "attempted_sends": 8400, "fresh_at": "<timestamp>"},
  "send": {"ref": "snd_5521", "stream": "marketing"},
  "paused_at": "<timestamp>",
  "owner_notified": true,
  "resume": {"by": "email_owner_02", "at": "<timestamp>", "reason": "bad import removed"},
  "ledger": {"prev_hash": "9ac0...", "hash": "1fd7..."}
}

Three ways it fails, and the control for each

Anomaly detection fails more often through noise and bad data than through a missed spike, and the controls below sit outside the model.

FailureHow it shows upControl
Alert fatigueLow precision teaches people to ignore the channel.Measure precision per detector, retune or remove noisy ones, and route by severity.
A tracking outage read as a performance dropA broken pixel looks like a conversion collapse.Check data freshness and pipeline health before anything else 6.
Injection through campaign namesA name or change note tells the model to dismiss the alert.The explanation path holds no write tools, and the alert goes to a person whatever the text says.

Ratio traps cause a quieter kind of error. A rate can move because its denominator did, so show counts beside every rate. Baselines must also include promotions and holidays, or every sale looks like an anomaly.

Metrics that are honest

Honest anomaly metrics count false alarms and misses as well as catches. Baseline them against the definitions in the AI marketing operations roadmap.

  • Alert precision: real issues as a share of alerts.
  • Time to detect, from the first bad value to the alert.
  • Time to contain, from the alert or pause to a stopped problem.
  • False pauses: pauses a person judged unnecessary.
  • Incidents missed, as found in post-mortems. A detector cannot report what it missed.

Baseline length is a starting point, not a rule. Improvado's guide suggests 4 to 8 weeks 6, while Amplitude's agile mode trains on 120 days of daily data 8 and GA4 on 90 days 10.

How vendor tools compare

Most tools detect and alert, and the pause is usually built separately. The table reflects pages we opened on 1 November 2026, and features may exist that these pages do not describe.

ToolDetects withResponse describedAutomatic pause on the pages opened?
AmplitudeProphet, confidence band 8Emailed digest of anomalies; custom monitors need the Insights package 8None described
Adobe AnalyticsExponential smoothing methods, 95% bounds, day granularity 9Flags values in reports 9None described
GA4Bayesian state-space model; custom insights with "Has anomaly" 10Dashboard and optional email alerts 10None described
ImprovadoBaselines on campaign KPIs 6Routing by severity; people act 6None described
TrackingplanTracking anomalies and consent breaches 7Email or webhook; a passive observer 7None described
Amazon SESYour CloudWatch alarm on reputation metrics 34Lambda pauses sending 34Yes, as a documented pattern you build
BrazeNot applicable on the page openedPer-minute rate limits and frequency caps 13None found
KlaviyoPerformance monitoring 11Notifies senders; may disable an account; repair excludes unengaged recipients 1112None found

A model is optional here. If you run one sending platform and a few metrics, a CloudWatch alarm and a small function need no model at all, and that is a good answer. Add the agent when the time goes on working out why an alert fired. PrivyCDP's product page describes AI-assisted review of unusual events, with limits on data access and an immutable audit ledger. For authentication failures behind a spike, see email authentication in 2026.

Checklist

  • Each metric has a named method: threshold or statistical baseline.
  • Data freshness is checked before any alert or pause.
  • The pause rule is written, versioned and approved in advance.
  • The pause path takes numeric inputs only.
  • The agent has no resume or cancel tool.
  • Minimum volume, exempt list and daily cap are set.
  • Transactional mail runs on a separate stream and cannot be paused by this rule.
  • Thresholds sit below provider review levels.
  • Past incidents and quiet periods have been replayed against the rule.
  • A person has drilled the resume and the kill switch.

To see where this job sits among the others, read AI agents for marketing operations, or return to the AI agent rails hub. To write your own pause rule and card, download the rail card template.

Browse use casesFunction playbooksAgent roster

FAQ

What is anomaly detection in marketing?

Anomaly detection in marketing flags metrics that leave their expected range, such as bounces, conversions or spend. Fixed thresholds handle hard limits, and statistical baselines handle metrics with a weekly or seasonal rhythm. An AI model can then explain likely causes, but it should write them as hypotheses and leave the decision to a person.

Should AI pause a campaign automatically?

A rule can, under tight limits, and a model should not decide. Use a pre-approved threshold, numeric inputs only, a minimum volume, an exempt list and a daily cap. The action must be a pause, never a cancel, and only a person resumes. The model's role stays on the separate path that explains the alert.

What bounce rate should trigger a pause?

No universal number exists. Start from provider rules: Amazon SES asks for under 2%, reviews at 5% and may pause at 10%, on its own measure. Then set your rule below those levels, using your baseline and a minimum volume. Replay past incidents and quiet periods before you trust the value.

Threshold alerts or machine learning?

Use both, per metric. Thresholds suit limits someone else sets, such as spam rate or a budget cap, and they are easy to defend. Statistical baselines suit metrics with rhythm, such as conversions by day. Machine learning that cannot show its expected range and history should not trigger an action.

How do you reduce false alerts?

Check data freshness first, since broken tracking causes many false drops. Show counts beside rates, include promotions and holidays in baselines, and set minimum volumes. Measure precision per detector, then retune or remove the noisy ones. Tag each closed alert with its root cause, so tuning rests on evidence rather than on annoyance.

Sources

  1. Meta, Agents Rule of Two (31 October 2025)
  2. AWS, Amazon SES sending review process FAQs
  3. AWS, Automatically pausing email sending for your entire account
  4. AWS, Automatically pausing email sending for a configuration set
  5. Google, Email sender guidelines FAQ, as cited in our inbox placement article
  6. Improvado, Marketing anomaly detection and automated alerts (updated 18 October 2026)
  7. Trackingplan, How it works
  8. Amplitude Docs, Anomaly + Forecast
  9. Adobe, Anomaly detection in Report Builder
  10. Google, GA4 Analytics Insights and Anomaly detection: and (1) · Google, GA4 Analytics Insights and Anomaly detection: and (2)
  11. Klaviyo, Anti-abuse and campaign performance monitoring
  12. Klaviyo, Reputation repair AI
  13. Braze Docs, Rate limiting and frequency capping

Further reading

Published: · Updated:

Editorial dates describe content changes. Confirm current sources before making legal, security or purchasing decisions.