Troubleshooting

Rule not firing — a checklist

Twelve checks that explain a rule which never runs, runs but does nothing, or stops running. This page of the AdOps documentation sits in the Troubleshooting section, last updated 20 August 2026. AdOps runs rules — conditions plus actions — against your Meta Ads campaigns on the schedule you set.

Updated

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.

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. Sample data
Why a rule did nothing is recorded as carefully as why it did something — actual against expected, condition by condition. Read the details

Questions about this page

My rule has no logs at all. What does that mean?

Either it has never been dispatched — check that the status is ACTIVE, the date range is open and the next execution time has passed — or its results have aged out, since the nightly cleanup removes execution results older than 3 days.

The rule ran but nothing happened. Where do I look?

Open the batch and read the Condition Evaluations column. Every condition shows Pass or Fail with the exact value the engine saw, written as "Actual <value> <operator> Expected <value>", so you can see which threshold was missed.

Why is my rule stuck on the same next execution time?

A run that is abandoned before it starts does not advance the schedule. The usual cause is a missing Meta connection or a rule whose status is not ACTIVE. Reconnect Meta on the Integrations page, then set the rule live again.

Could a suspended account be the reason?

Yes. A suspended account renders Rules, Custom Metrics, Ad Accounts, Activity and Integrations behind the Feature Lock overlay. Settle the invoice from the Invoices page to restore access.

Read it once, then write the rule.

Everything in this manual describes a screen you can open today. Start a trial and follow along in the product rather than on the page.

Start free trial Documentation

14 days free · no card required

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