How to set budget caps for AI campaigns
Guide · Market Growth · 6 min read · last verified 2026-07-27
A budget cap is a spending limit enforced by the system that executes the spend, not by the agent that decides to spend. If a limit exists only in an instruction - a prompt line, a policy document, a verbal agreement with a vendor - it is not a cap. It is a request. This article is about the engineering of real caps for AI-assisted campaigns: the layers a cap structure needs, where each check has to run in order to bind, who is allowed to set and change each limit, and how caps get reviewed without quietly drifting upward. It deliberately does not revisit when an agent should be granted spend authority at all - that judgment is the trust ladder covered in When should AI be allowed to spend your ad budget. Assume here that some autonomy has been earned. The question is how the money is fenced.
A cap is enforcement, not instruction
The most common failure in AI spend control is mistaking an instruction for a control. Telling an agent to stay under a daily limit feels like a cap. It is not, for the same reason a speed limit sign is not a governor bolted to the engine. The agent may misread the limit, lose it when its context is truncated, apply it to the wrong campaign or the wrong currency, or reason its way around it in a situation nobody anticipated. None of that requires a badly behaved model. It only requires the ordinary unreliability of any system that interprets language.
Here is the test for any limit you intend to rely on: if the agent produced the worst output it possibly could, would the limit still hold? If yes, you have a cap. If no, you have a hope. The rest of this article assumes caps that pass the test - checks that run outside the agent, in the layer that holds the ad platform credentials, before any action reaches the account.
The four layers a cap structure needs
A single number is not a cap structure. Failures have different shapes, and each layer below exists because the others miss something.
| Layer | What it limits | The failure it catches |
|---|---|---|
| Per-action | The largest change any single action may make to a budget or bid | One wrong edit at the wrong scale |
| Per-day | Total spend the agent may cause in a day, across all actions | Many small, individually reasonable actions compounding faster than anyone reviews them |
| Per-campaign | Lifetime spend of a single campaign | A plausible-looking campaign quietly consuming more than its thesis was ever worth |
| Per-platform and total | The ceiling across all campaigns on one connector, and across every connector combined | Overruns that are individually acceptable and collectively not |
The layers relate to each other by ratio, not by any universal figure. A per-action cap should be a small fraction of the per-day cap, so that no single action can consume the day. The per-day cap should be small relative to the per-campaign cap, so that exhausting a campaign takes enough days for a human review cycle to notice trouble while most of the budget is still unspent. If one action can hit the daily limit, or one bad day can hit the campaign limit, the layers are not doing independent work, and you have fewer caps than you think.
Where the check runs decides whether it binds
A spending limit can live in three places. It can live in the prompt, which is the weakest position, for the reasons above. It can live in the agent's own code, which is better - but the agent's process is precisely the thing you are guarding against, and a bug or a bad update takes the limit down with it. Or it can live in the execution gateway: the component that holds the platform credentials, receives proposed actions, and checks each one before anything is forwarded. Only the third position counts, because it is the only one the agent cannot occupy.
Behavior at the limit matters as much as the limit itself. A cap should fail closed: at the threshold, the proposed action is rejected and logged - not queued for later, not partially applied, not silently downscaled. Silent downscaling sounds friendly and is a trap; it converts a hard stop into an invisible negotiation, and nobody reviews what they cannot see. This is how Magrios structures gated execution: the agent proposes, the connector layer checks the proposal against caps the agent can neither reinterpret nor modify, and only conforming actions reach the platform.
Two supporting checks. First, set the ad platform's own native budget limits as a backstop; they measure slightly different things than your gateway does, and redundancy between imperfect mechanisms is the point. Second, audit the permission scopes your integration actually holds. If the agent has been granted the platform permission to edit campaign budgets, it is holding a pen that can rewrite one of your cap layers. That may be a deliberate choice at high autonomy; it should never be an accident of a default scope grant.
Who sets caps, and who may raise them
Caps are set by the budget owner - the person whose budget disappears when things go wrong - not by whoever operates the agent, and never by the agent itself. The separation matters because operators are rewarded for throughput and feel the friction of every cap daily. If the same person feels the friction and holds the pen, the caps will erode with no single decision anyone can point to.
Raising a cap should be a logged, two-person event for the upper layers: the owner proposes, and someone accountable but less close to the campaign concurs. The change record - previous value, new value, reason, names - belongs in the same place the agent's own actions are recorded, which is the subject of What belongs in an AI action audit trail. Caps live in configuration, not in conversation; if you cannot state the current per-day limit without asking someone, you do not have one.
Sizing caps without magic numbers
Nobody can hand you correct values, because correct values depend on what the spend is for and what losing it would mean to your business. But the forms are stable:
- Per-day: an amount you could lose in one bad day without regret and without an escalation meeting. If losing a full day at the cap would be a crisis, the cap is too high, whatever the growth math says.
- Per-campaign: the price of the answer. A campaign is an experiment; cap it at what the learning would be worth if the result came back a clean negative.
- Per-action: sized so that reaching the daily limit requires several distinct mistakes rather than one.
- Total: the share of discretionary budget the owner could defend in one sentence, without preparing slides.
Sizing is also downstream of readiness. The pre-connection checks in Campaign readiness: what to check before connecting ad accounts decide whether spend should flow at all; caps decide how fast it can.
Review cadence, and the drift that unmakes caps
Caps go wrong in both directions over time. Too tight, and the agent's record becomes a wall of rejections that tells you nothing. Too loose, and the cap is decoration. Review on a calendar - monthly while the system is new, with a quarterly floor once it is stable - and change caps only at reviews, on evidence: sustained operation near the limit with a clean record argues for a raise; an incident, a seasonal shift, or a strategy change argues for a cut.
The quiet killer is drift: a series of small raises, each reasonable on its own, that in aggregate abolish the cap without anyone ever deciding to. The defense is procedural, not mathematical. Every raise must state the previous value and the reason, and each review must read the sequence of raises, not just the latest one. Finally, remember what caps do not do: they bound how much a mistake can cost, and say nothing about when a running campaign should stop. That second control - stop conditions written before launch - is covered in When to pause an AI campaign. You need both, because a campaign can stay politely under every cap and still deserve to die.