AdOps pauses a Meta campaign when the conditions on a task all pass and the action fires, which means the quality of a pause rule is entirely the quality of its conditions. The rule that works is boring: a performance condition on a window long enough to mean something, ANDed with a spend floor, plus a tag so the pause leaves a trace.
Why do most automated pause rules fire too early?
Because they run on today. A rule that evaluates at 10:00 sees a fraction of a day. Purchases arrive later than clicks, spend accrues before revenue is attributed, and a campaign that will finish the day at 2.4x can easily read 0.6x at breakfast. Pause it and you have not cut a loser, you have cut a morning.
The second failure is smaller windows with no floor under them. Purchase ROAS is less than 1.5 is true of a campaign that spent Rp 30,000 and returned nothing. It is also true of a campaign that spent Rp 30,000,000 and returned Rp 20,000,000. Only one of those is a decision.
So a pause condition needs two halves in the same task, joined with AND:
- the performance test, on Last 3 days or Last 7 days
- the volume test,
Spendover the same window, greater than a number that is meaningful for your account
There is no universal number for the second one. The honest version is: pick the spend at which you would be willing to defend the decision in a meeting, and use that.
Which window should the performance condition use?
AdOps offers 11 reporting periods per condition. They are not interchangeable, and each answers a different question.
| Period | What it answers | Good for |
|---|---|---|
| Today | What has happened so far today | Daily spend caps, not performance judgements |
| Yesterday | How one complete day closed | Morning reviews, day-over-day checks |
| Last 3 days | Is this bad, or was that one bad day | The default window for a pause decision |
| Last 7 days | Is this structurally unprofitable | Pausing evergreen campaigns, weekly ROAS targets |
| Last 14 / 30 days | What the account looks like across cycles | Budget reallocation, not kill decisions |
| This month / Last month | Where the month stands against plan | Pacing rules |
| Lifetime | Everything the campaign ever did | Rarely useful for pausing; old data drags the average |
Last 3 days is the workhorse for a kill decision, because it survives one bad day without waiting a week to react. Last 7 days is right when the campaign is evergreen and the question is structural rather than situational.
Two periods also exist in an inclusive form — Last 3 days including today, and Last 7 days including today. Use them when the current day genuinely matters; otherwise the plain versions are steadier, because they are complete days.
What should a pause rule actually do?
Pause is not one action. The pause task writes campaign status PAUSED to Meta, and that is the whole of it. AdOps records before-and-after values for budget and naming actions; the three lifecycle actions — start, pause, delete — write a status change without a value pair. So a pause on its own leaves you the execution log and nothing readable inside the ad account.
The fix is a second task on the same rule:
- Task 1 — Pause. Conditions:
Purchase ROAS, Last 7 days, less than your target, ANDSpend, Last 7 days, greater than your floor. - Task 2 — Add to name. The same conditions, mode APPEND, text
[PAUSED-LOW-ROAS {date}], action frequency once in a lifetime so the tag is written exactly once.
Now the campaign carries its own explanation in Ads Manager, dated, and a later rule can find it. The shipped template Pause + Tag Failed is this pattern; Pause Unprofitable Campaigns is the pause half alone.
Use the campaign-name filter to protect what should never be touched. A does not contain filter on DNT or TEST costs nothing and prevents the one incident everybody remembers.
How do you get a paused campaign back?
Deliberately, with its own rule. The start action writes status ACTIVE, and the natural way to scope it is the tag the pause rule wrote:
- Filter: Campaign Status is
PAUSED, and Campaign Name containsPAUSED-LOW-ROAS - Condition: the metric that caused the pause, measured over a window that has had time to recover
- Action: start, plus a remove-from-name task that strips the tag
This is the shipped Re-enable Paused Winners template. It is worth writing even if you never rely on it, because it turns “we paused a lot of things last month” from an archaeology project into a filter.
Two cautions. First, a restarted campaign is a change to delivery, so restarting in bulk on a whim is its own risk — keep the rule narrow. Second, check the Estimated match count in the builder before setting a start rule live; it is the only preview of how many campaigns are about to come back on.
When should the rule wait instead of pause?
Three cases where waiting is the correct automated behaviour.
The campaign is new. The Hours since creation metric exists precisely for this: add a condition that the campaign is older than a number of hours you are comfortable with, and a rule cannot execute on a campaign that has barely started delivering.
The window is partial. If the only condition that passes is on today, wait. Add the same test on Last 3 days and require both.
The spend is trivial. Covered by the floor, but worth stating separately: a rule with no floor is a rule that will pause your test budget the moment it underperforms, which is what a test budget is for.
Pause rules are the ones most people write first and trust least. They earn trust the same way a person does — by being predictable, by leaving a note, and by being reversible.