Account Shield
Eight conditions. Watched every five minutes.
You know before your client does.
Most account incidents (runaway spend, ROAS collapse, ads stuck in restricted_review, campaigns delivering zero impressions) fit a small number of patterns. Shield is the named, documented version of those patterns running continuously against every account you've connected.
Above: the Shield alerts page agencies open every morning. Real product UI; sample data anonymized.
The rules
Eight rules. Severities are fixed, not negotiated. Dedup is severity-aware.
These are the exact rules baked into our stability engine. We tightened the thresholds in two passes of dogfooding. The first pass was too noisy, the second pass missed a real spend spike. The current settings are the ones we'd defend on a customer call.
Anatomy of an alert
What you see when something goes wrong.
An alert has five things, in this order. We don't pad the payload. Every field is something you'll actually use when you decide whether to act.
- 1
The account name and which signal tripped.
"Reply Pilot · SPEND_SPIKE." Not "campaign 12345 anomaly detected." The first three words tell you whether you're going to interrupt your dinner to look at this.
- 2
The numbers behind the trigger.
"Yesterday: $8,420. 7-day average: $3,950. Ratio: 2.13×." We don't show you the chart; you'd open the dashboard for that. We give you the four numbers that made the decision.
- 3
A one-line AI-generated context summary.
Plain-English version of what's happening, generated by Claude Haiku at send time from the signals. Always under one tweet long. Not generated to fill space. It's generated because the difference between "your spend doubled" and "your spend doubled because three new audiences activated overnight" matters when you're deciding whether to wake up the client.
- 4
A deep-link to the relevant view in Advino.
One click. Goes to /shield/alerts/[id] with all the context expanded. From there you can mark resolved, snooze, or click into the Meta account.
- 5
(For writes only) An approval URL.
If the alert suggests an action (pause this ad set, raise a budget cap), the action is a separate URL that has to be confirmed in the web app. Email + Slack alerts never execute the action themselves.
Spend spike on Atlas Apparel
Two new audiences activated overnight on the "Q2 Cold Acquisition" campaign — both hitting CPMs roughly 40% above the 30-day baseline. Spend velocity tracks the new audiences, not creative performance.
Pause ad set "Q2 Cold · Lookalike 3%" until reviewed
Drafted as a pending action. Will not execute until you click Approve. Auto-expires in 5h 48m if untouched.
- Alert created12 min agostability_engine v0.4.2
- Email sent to owner12 min ago[email protected] · delivered
- Slack alert dispatched11 min ago#alerts-meta · delivered
- Approval pendingawaiting
Above: clicking any alert opens this view. Approval URL is the only path to executing a write action.
How it lands in Slack
ok i'm logging off for the night, ping me if Atlas spend spikes again
Atlas Apparel · spend more than doubled overnight
Two new audiences activated overnight on "Q2 Cold Acquisition." Spend velocity tracks the new audiences, not creative performance. Suggested action drafted: pause ad set "Q2 Cold · Lookalike 3%" until reviewed.
on it — looks like that lookalike Sarah added kicked over
The same alert delivered to a Slack channel of your choice. Buttons go to the same approval URL.
Auto-pause
Default off. Approval-gated when on. Never a silent execution.
On Studio and above, Shield can route certain Critical alerts through an auto-pause flow. The flow is not what most products mean by "auto-pause." Here's what actually happens:
- An alert fires, say a Critical SPEND_SPIKE.
- Shield creates a pending action, a draft pause that will execute if approved.
- You get the alert with a one-click confirm URL. The URL opens /shield/alerts/[id] with the proposed action pre-filled.
- You click Confirm. Meta gets called. The ad set pauses.
- If you don't click within the dedup window, the pending action expires. Nothing happens.
Why this design? Because the bug semantics we want are "Advino didn't pause when it should have," not "Advino paused without permission." The first kind of bug costs you part of a day. The second costs you a client.
Want to see Shield run on your accounts?
Two minutes to connect Meta. Shield starts evaluating on the next 5-minute tick. Trial is one month, no card.