# Rule not firing — a checklist

> Twelve checks that explain a rule which never runs, runs but does nothing, or stops running.

Source: https://adops.id/docs/rule-not-firing/
Last updated: 2026-08-20
Publisher: AdOps (https://adops.id) — an independent product, not affiliated with Meta Platforms, Inc.

---

## Key facts

- **First thing to check:** the rule's status (only ACTIVE rules are selected by the dispatcher)
- **Second thing to check:** the Meta connection (a rule whose owner has no connected Meta token is abandoned before it runs)
- **Where the answer usually is:** Rule Logs (the Skipped badge and Condition Evaluations explain most quiet rules)
- **Cooldown skip reason:** next_execute_not_reached
- **Log horizon:** 3 days (results older than that are removed by the nightly cleanup)

When an AdOps rule does not fire, the cause is almost always one of twelve things: the rule is not ACTIVE, its schedule window is closed, Meta is disconnected, no ad account is active, the filters match nothing, an action-frequency cooldown is still running, or a condition simply failed. Work down this list in order — the first four checks take under a minute.

## Checks before the rule ever runs

**1. Is the rule ACTIVE?** Only ACTIVE rules are selected by the dispatcher. A rule saved with **Save as Draft** is stored as DRAFT and is never picked up. The Rule List toggle and the **Set live** bulk action both flip this.

**2. Has the next execution time passed?** Open the rule; a saved rule shows a **Next Scheduled Execution** info alert with the exact timestamp. If it is in the future, the rule is waiting, not broken.

**3. Is the date range open?** If **Run within a date range** is ticked, a rule outside its start and end dates is skipped. Untick it or move the end date.

**4. Is the timetable empty?** In **Run on spesific days and time** mode, a grid with no active cells gives the dispatcher no slot to schedule. Activate at least one hour, or switch back to a fixed interval.

**5. Is Meta still connected?** Open **Integrations**. If the Meta Ads card reads **Not Connected**, every rule stops: a run whose owner has no Meta access token is abandoned before it starts, and that path does not advance the rule's next execution time — which is exactly why a stuck timestamp so often means a disconnected account. Reconnect, then set the rule live again.

**6. Are the ad accounts active?** Ad accounts arrive from a sync as Inactive and stay that way until you switch them on. On **Ad Accounts**, use the **Active** filter pill and confirm the accounts on the rule are in that list.

**7. Is the account suspended?** A suspended account renders Rules, Custom Metrics, Ad Accounts, Activity and Integrations behind the **Feature Locked** overlay, with the restricted features listed and a **Pay Now to Unlock** button.

## Checks on scope

**8. Do the filters match anything?** Open the rule and read the **Estimated match: N Campaigns** readout in Filter Configuration. If it says 0, nothing is in scope and no amount of waiting will change that. The usual culprits are a Campaign Name `contains` filter with a typo, and a Campaign Status filter set to `is ACTIVE` on campaigns you paused yesterday.

**9. Is the level right?** The level controls the level of the Insights read. If you switched a rule to Ad sets, the numbers being evaluated changed even though the filters did not.

## Checks after a run

Open the rule's **Logs**. If there are batches, the rule is running and the question becomes what it did.

**10. Is the badge Skipped?** Skipped means an action frequency cooldown blocked the task. The result records the reason `next_execute_not_reached` and the time it becomes eligible again. A task set to **Once in a lifetime** will never fire again on that campaign — its next execution is set to the year 2100.

**11. Is the badge Not Executed?** Read **Condition Evaluations**. Each condition shows **Actual `<value>` `<operator>` Expected `<value>`** with a Pass or Fail badge, so the failing threshold is named for you. Three recurring causes:

- A ratio with no volume floor. Purchase ROAS is 0 on a campaign with no purchases, so `ROAS < 2` passes on campaigns you never meant to touch — and conversely, a spend condition you set too high excludes everything.
- The wrong period. `Today` on a campaign that started this morning has almost no data in it.
- A time condition. Time greater than and Time less than also carry a weekday list; if today is not in that list the condition fails no matter what the clock says. Remember the boundary hour itself passes, because the comparison is inclusive.

**12. Is a custom metric returning nothing?** A custom metric matches the sheet row whose lookup column equals the campaign id. A campaign missing from the sheet has no row to match. Re-open the metric and re-save it to re-run validation, which reports a sheet AdOps cannot open or a column name that does not match the header.

## Still nothing?

Check the **Benchmark** page. **Queue Progress** shows batches in flight with a "Progress: executed/total" bar, which tells you whether work is queued but slow rather than absent. **Slow Rule** lists executions above a Minimum Time in seconds, with the per-step timing breakdown for each.

And check the horizon: execution results older than 3 days are removed by the nightly cleanup, so a rule that ran last week with nothing since will look like a rule that never ran.
