Use case

Budget protection rules for Meta Ads campaigns

AdOps bounds how much a Meta campaign can spend before a person looks at it again. Spend and Daily Budget are checked as often as every 15 minutes; a campaign past its ceiling is paused and tagged in its name, and a Daily Budget set too high is written back down to the agreed figure.

Spend ceilings, budget ceilings and step-down rules that bound how much a Meta campaign can spend before a person looks at it again.

Updated

Situation

What changes when AdOps runs the checks?

The problem this playbook was written against, and what the account looks like once the rules are live.

Before

A budget typed with one extra zero, a rule from another tool, or a campaign that suddenly starts delivering can spend several days of budget between one login and the next.

After

Spend and Daily Budget are checked as often as every 15 minutes, a campaign past its ceiling is paused and tagged, and an over-large budget is written back down to the agreed figure.

Playbook

Which rules does this playbook actually use?

Each card is one rule, printed the way the AdOps rule builder prints it: conditions on top, actions below the hairline.

Every threshold below is an example. Change the numbers to fit your account before you set a rule live.

  1. Hard daily spend ceiling

    Live
    Applies to
    Campaigns

    When

    • Spend Today > Rp 5,000,000

    Then

    • Pause campaign
    • Add to name Append mode · [DAILY-CAP {date}]

    Why this rule

    On a 15-minute check interval the campaign is evaluated up to 96 times a day, so the overshoot past the ceiling is bounded by one interval rather than by one night.

  2. Pull an edited budget back to its ceiling

    Live
    Applies to
    Campaigns

    When

    • Daily Budget > Rp 1,500,000

    Then

    • Set budget to Rp 1,500,000 Fixed amount

    Why this rule

    This catches the extra zero and any change made outside AdOps, because the engine re-reads the live Daily Budget from Meta immediately before it writes.

  3. Step down before stopping

    Live
    Applies to
    Campaigns

    When

    • Spend Today > Rp 3,000,000
    • AND Purchase ROAS Today < 1.0

    Then

    • Decrease budget by 30 percent Once every 2 hours

    Why this rule

    A 2-hour cooldown allows at most 12 reductions in 24 hours, which slows a losing campaign down in stages instead of ending the day in one move.

  4. Stop before a lifetime budget is exhausted

    Live
    Applies to
    Campaigns

    When

    • Remaining budget < Rp 500,000

    Then

    • Pause campaign
    • Add to name Append mode · [BUDGET-LOW]

    Why this rule

    Remaining budget is read directly from Meta for the campaign, so a lifetime-budget campaign stops on a number you set rather than on Meta running out.

  5. Month-to-date ceiling

    Live
    Applies to
    Campaigns

    When

    • Spend This month > Rp 100,000,000

    Then

    • Pause campaign
    • Add to name Append mode · [MTD-CAP {date}]

    Why this rule

    The This month reporting period is one of 11 available on a condition, so a monthly commitment can be enforced by the same engine that enforces the daily one.

The AdOps dashboard in an alert state: Purchase ROAS at 0.412x badged Low in red, Aggregated ROAS at 0.784x badged Moderate, and a budget utilisation bar at 103.5 per cent rendered in red. Sample data
The same dashboard when the month goes wrong: ROAS badged Low, utilisation past 100 per cent, and the bar in red. Read the details
Spend crosses the cap, a rule cuts the budget, and the bar comes back under the line — without anyone opening Ads Manager. No sound. 7 sec No sound

Key facts

What are the numbers behind this playbook?

Shortest check interval
15 minutes Up to 96 evaluations per rule per day
Dispatcher sweep
Every 10 seconds Overlap prevention means a slow sweep is never re-entered by the next tick
Budget metrics available
3, Daily Budget, Lifetime budget and Remaining budget All three are point-in-time and take no reporting period
Budget actions
3, Increase budget, Decrease budget and Set budget All three re-read the live Daily Budget from Meta before writing
Action cooldowns
11 values, 15 minutes to once in a lifetime
Shipped template for this pattern
Budget Cap Protection

AdOps bounds Meta ad spend with two kinds of rule: one that watches Spend and pauses a campaign past a ceiling, and one that watches Daily Budget and writes an over-large budget back down. Both are evaluated as often as every 15 minutes, and every change is written to a per-campaign log with the value before and after.

What actually causes a runaway campaign?

Rarely a mystery. It is a budget typed with an extra zero, a lifetime budget that was meant to be a daily one, a campaign that finally exits a slow start and begins delivering at full pace, or a second tool with its own opinion about budgets. In every case the account is fine at 22:00 and wrong by 07:00.

The cost is not only the money. It is that the next morning is spent reconstructing what happened instead of working, which is the part a log fixes.

How does a spend ceiling work in AdOps?

Spend is one of 45 metrics available in a condition, and it accepts all 11 reporting periods. Spend today greater than Rp 5,000,000 paired with Pause campaign is the whole rule. Adding Add to name in Append mode with [DAILY-CAP {date}] leaves the reason on the campaign so the morning review does not start from zero.

Be honest with yourself about precision. AdOps checks the condition on the rule’s interval, not continuously, and the shortest interval is 15 minutes. Spend that happens between two evaluations is not prevented, so set the ceiling below the figure you genuinely cannot exceed rather than exactly at it.

Why cap the budget as well as the spend?

Because they fail differently. A spend rule reacts after the money is gone; a budget rule stops the money being available in the first place.

Daily Budget, Lifetime budget and Remaining budget are all metrics in the rule builder, and all three are point-in-time values that take no reporting period. A rule that reads Daily Budget greater than Rp 1,500,000 and responds with Set budget to Rp 1,500,000 as a fixed amount will pull back a manual edit, a change made by another tool, or an over-eager scaling rule of your own.

Set budget takes a fixed amount or a value resolved from a custom metric. It does not take a percentage, which suits a ceiling: the number should not drift with whatever the budget reached yesterday.

What order should these rules run in?

RuleMetricCheck intervalAction
Pull an edited budget backDaily Budget15 minutesSet budget to the ceiling
Step down before stoppingSpend today, Purchase ROAS today30 minutesDecrease budget by 30 percent
Hard daily spend ceilingSpend today15 minutesPause campaign and tag
Month-to-date ceilingSpend this month1 hourPause campaign and tag
Stop before a lifetime budget runs outRemaining budget30 minutesPause campaign and tag

Put the budget ceiling on the shortest interval, because it prevents rather than reacts. Give the step-down rule a cooldown so it reduces in stages: an action frequency of once every 2 hours allows at most 12 reductions in 24 hours.

What proof is there that a rule fired?

Every pass writes a batch record plus one result per campaign per task. The Rule Log Detail screen shows, for each campaign and each task, an Executed, Not Executed or Skipped badge, every condition marked Pass or Fail beside the value it read, the parameters the action used, the execution time in seconds, and the next scheduled execution. Budget and name changes also record the value before and after.

Skipped is the badge worth understanding. It appears when an action’s cooldown blocked execution, which is how you confirm that a step-down rule is pacing itself rather than failing.

What a budget rule cannot promise

AdOps cannot guarantee a spend figure is never exceeded. It evaluates on an interval, it depends on the numbers Meta’s Insights API reports at that moment, and Meta continues delivering between evaluations. Treat a rule as a bound on how long a mistake can run, not as a hard limit on the platform.

A rule also only covers ad accounts you have activated in AdOps, since every account discovered from Meta starts inactive. Actions are campaign-shaped, so budget protection is enforced at campaign level. AdOps connects to Meta Ads today, with TikTok Ads, Google Ads and Snapchat Ads listed as coming soon.

Questions

Common questions about this use case

Can AdOps stop a Meta campaign that has spent too much today?

Yes. A rule with the condition Spend today greater than your ceiling and the action Pause campaign does exactly that, and on a 15-minute check interval the campaign is evaluated up to 96 times a day so the overshoot is bounded by one interval.

What happens if someone edits a budget by hand in Ads Manager?

A rule with the condition Daily Budget greater than your ceiling and the action Set budget to that ceiling writes the budget back down. The AdOps engine re-reads the live Daily Budget from Meta immediately before executing any budget action, so it acts on the current figure.

How precisely does AdOps enforce a spend cap?

AdOps enforces the cap at evaluation time, not continuously. The shortest check interval is 15 minutes and the dispatcher sweeps for due rules every 10 seconds, so spend between two evaluations is not prevented. Set the ceiling below the number you actually cannot exceed.

Can a budget rule reduce spend gradually instead of pausing?

Yes. Decrease budget accepts a percentage, and an action frequency sets how often it may fire, from 15 minutes to once in a lifetime. A 30 percent reduction on a 2-hour cooldown allows at most 12 reductions in 24 hours.

Does AdOps record what a budget rule changed?

Yes. Every run writes a batch record and one result per campaign per task, and the Rule Log Detail screen shows an Executed, Not Executed or Skipped badge, the parameters the action used, the execution time in seconds, the next scheduled execution, and for budget changes the value before and after.

Does AdOps need control of the ad account to enforce a cap?

AdOps acts through the Meta Graph API using the access token stored for your account, and it only touches ad accounts you have explicitly activated. Every account discovered from Meta starts inactive until someone turns it on.

Rebuild this playbook in your own account.

Every rule on this page is built from conditions and actions that ship in AdOps. Point them at one ad account and watch the log before you widen the scope.

Contact us See pricing

14 days free · no card required · billed in Rupiah

Inside the product

What the screens actually look like

Nine screens from the working dashboard — the rule builder, the metric picker, the dayparting grid and the log that records what happened. Scroll the strip.

  • The AdOps Performance Dashboard showing a Purchase ROAS card at 2.380x and an Aggregated ROAS card at 2.088x, both badged Profitable, a Monthly Budget card at Rp 155jt, and a Spend Breakdown ranking the top five ad accounts against a budget utilisation bar at 45.5 per cent.
    Performance Dashboard. Two ROAS figures to three decimals, a budget meter, and spend ranked by ad account — over Today, Last 7 days, Last 30 days or This month.
  • The AdOps rule list showing twelve automation rules, each with an on/off toggle, the ad accounts it manages, and when it last triggered — some minutes ago, others on a dated timestamp.
    Rule List. Every rule, what it manages and when it last fired. The toggle is the only thing between draft and live.
  • The AdOps condition builder showing a task with time-of-day conditions across seven day tags, a nested AND group holding a lifetime spend condition under 400,000, and a second task with four stacked metric conditions.
    Conditions. Metric, period, operator, value — joined with AND or OR, and nestable, so a rule can say something a dropdown cannot.
  • The AdOps metric picker open over a condition row: a panel with Meta Ads and Custom metrics tabs, a search box, and a scrolling list of metrics with Spend selected.
    Metric picker. Forty-five Meta metrics and your own sheet columns in the same list, each carrying a reporting period and any of six operators.
  • The AdOps dayparting timetable: a grid of hours against the seven days of the week, with the daytime hours filled navy for every day and the night hours and weekend evenings left empty.
    Dayparting grid. Or draw the hours instead. Anything outside the shape you fill in simply does not run.
  • An AdOps execution log detail: one campaign, two action panels badged Not Executed, each listing the action parameters and every condition evaluated with its actual value, its expected value and a Pass or Fail badge.
    Rule Log detail. Why a rule did nothing is recorded as carefully as why it did something — actual against expected, condition by condition.
  • The AdOps activity log listing budget increases and campaign renames, each row naming the affected campaign by id, the rule that caused it and how long ago it happened.
    Activity Log. One row per change AdOps made in your account, naming the campaign and the rule responsible.
  • The AdOps ad account list: eighteen Meta ad accounts with on/off toggles, account ids, Active or Inactive badges and this month’s spend in rupiah.
    Ad Accounts. Accounts discovered from Meta arrive switched off. Nothing is read, and nothing is changed, until you turn one on.
  • The AdOps custom metric editor mapping a Google Spreadsheet: a spreadsheet id, a sheet name, a column to match campaigns on and a column holding the values.
    Custom metric. Point AdOps at a sheet, name the matching column and the value column, and your own number joins the metric list.

Every figure is rebuilt from the product’s own interface and filled with invented data — no customer name, ad account or spend figure appears anywhere on this site. See how a run works