AdOps is a Meta Ads rule-automation platform, and a rule in AdOps is four things: the ad accounts it watches, the filters that narrow which campaigns it touches, one or more tasks pairing an action with conditions, and a schedule. This guide builds one rule end to end on a single ad account, then reads what the execution log says about it.
What goes into an AdOps automation rule?
The AdOps rule builder puts the whole rule on one page, in four cards.
Basic Information takes the rule name and the ad accounts. The builder allows up to 5 ad accounts on one rule. For a first rule, attach one — an incident on a rule that touches five accounts is five times the cleanup.
Filter Configuration sets the level (Campaigns or Ad sets) and narrows what the rule sees. Tasks and Conditions holds the actual logic. Schedule Configuration decides how often the rule wakes up. The two buttons at the top are Save as Draft and Set Live, and only a live rule is ever dispatched: the AdOps dispatcher selects rules whose status is ACTIVE and ignores everything else.
How do you narrow a rule to the campaigns you mean?
AdOps scopes a rule with pre-filters, before any metric is fetched. Three fields are available, and each one is a chip you edit inline:
| Filter field | Operators | Typical use |
|---|---|---|
| Campaign ID | equal, not equal | Pin a rule to one campaign while you test it |
| Campaign Name | contains, does not contain | Scope by naming convention, or exclude TEST and DNT |
| Campaign Status | is, is not — ACTIVE or PAUSED | Only act on what is running, or only on what is already paused |
Name filters are the workhorse. If campaign names already carry a prefix per brand or per funnel stage, a contains filter turns that convention into a scope with no extra work.
As filters change, the builder calls the API and prints Estimated match: N Campaigns, refreshed 500 milliseconds after the last keystroke, with a per-account breakdown in the tooltip. Read that number before you save. It answers the only question that matters at this point: how many campaigns is this rule allowed to touch?
Which metric, which period and which threshold?
A condition is a metric, a reporting period, an operator and a value. AdOps offers 45 metrics across 6 categories — conversion, cost efficiency, engagement, time-based, core performance and custom — with 6 operators and 11 reporting periods that run from Today through Yesterday, the last 3, 7, 14 and 30 days, this month, last month and Lifetime.
Two rules of thumb save most of the pain:
Never let a threshold stand alone. Purchase ROAS last 7 days is less than 1.2 will match a campaign that spent Rp 40,000 and made nothing, which is not a signal. Add a volume gate in the same task: Spend last 7 days is greater than 2,000,000. With the task operator set to AND, both must hold.
Set the period explicitly on every condition. When a condition carries no period, the engine falls back to today, and a rule that runs at 09:00 then judges a campaign on three hours of data.
Keep each task to one condition group with a single AND or OR across its conditions. If the logic genuinely needs “either of these two situations”, write two tasks with the same action instead of one clever task.
How do you stop a rule firing twice on the same campaign?
Each task carries its own action frequency — a cooldown that is independent of how often the rule runs. There are 11 values: 15 minutes, 30 minutes, 1, 2, 3, 6 and 12 hours, once a day, once in 2 days, once in 3 days, and once in a lifetime.
Five actions accept a frequency: notify, duplicate, increase budget, decrease budget and set budget. The cooldown is what stops a rule that checks every 15 minutes from raising the same budget four times an hour while the metric sits over the line. After an action fires, the engine writes a next-execute timestamp on that campaign and task; if the rule re-evaluates before it, the run is recorded as Skipped with the reason next_execute_not_reached, not silently dropped.
Once in a lifetime is more useful than it looks. A tagging task set to lifetime writes its label exactly once per campaign, so the name never accumulates the same suffix over and over.
How often should the rule itself run?
Two scheduling modes. Run every N is a fixed check interval, from 15 minutes up to 72 hours. Run on specific days and time opens a 7-day by 24-hour grid — a Week column plus Sunday through Saturday, 24 hour rows — and the rule only wakes in the slots you click.
Pick the interval mode for anything reactive, and the timetable for anything that belongs to a time of day, such as a nightly budget reset. Frequent checks are not free of consequence: they multiply the number of chances an action has to fire, which is why the per-task cooldown matters more than the interval does.
There is also an optional “Run within a date range” checkbox for a rule that should exist only for a campaign burst, and on a saved rule the builder prints the exact Next Scheduled Execution timestamp.
What does the log say after the first run?
Open the rule’s Logs. Each row is one batch — execution time, ad account, applied items, affected tasks — and clicking through gives per-campaign evidence.
For every campaign and every task, the detail screen shows an Executed / Not Executed / Skipped badge, an Action Details panel with the parameters that were used, and a Condition Evaluations panel that prints each condition as Actual <value> <operator> Expected <value> with a green Pass or a red Fail. Where the action changed something, a Value Changes block shows Before in red and After in green. Each task also carries its execution time in seconds and the next scheduled execution.
That screen is the point of the whole exercise. A rule you cannot audit is a rule you will eventually turn off out of nervousness.
Which mistakes cost people their first week?
Four, in order of how often they happen.
Setting a rule live across every account at once. Attach one account. Read one log. Then widen.
Starting with a budget action. Budget writes go to Meta immediately, and increase, decrease and set budget each carry a cap field — Maximum budget cap on an increase, Minimum on a decrease — that nothing fills in for you. Type a number into it before the rule goes live.
Judging on today. Today is a partial window and it is the default. Most decisions belong on Last 3 days or Last 7 days.
Writing pause rules with no trace. Pausing writes a status change to Meta and nothing readable to the campaign name. Pair every pause with an add-to-name task carrying a tag and the {date} token, so the account itself records what happened and why.
The smallest rule that is true beats the ambitious one. Set it live, let it run a day, read the log, then add the second task.