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, Spend over 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.

PeriodWhat it answersGood for
TodayWhat has happened so far todayDaily spend caps, not performance judgements
YesterdayHow one complete day closedMorning reviews, day-over-day checks
Last 3 daysIs this bad, or was that one bad dayThe default window for a pause decision
Last 7 daysIs this structurally unprofitablePausing evergreen campaigns, weekly ROAS targets
Last 14 / 30 daysWhat the account looks like across cyclesBudget reallocation, not kill decisions
This month / Last monthWhere the month stands against planPacing rules
LifetimeEverything the campaign ever didRarely 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:

  1. Task 1 — Pause. Conditions: Purchase ROAS, Last 7 days, less than your target, AND Spend, Last 7 days, greater than your floor.
  2. 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 contains PAUSED-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.

One run, three tasks, one budget change from 150,000 to 250,000. The log records all three, not only the one that fired. No sound. 8 sec No sound
  • rules
  • pausing
  • budget