Rules troubleshooting
Diagnose: rule not firing, circuit-breaker auto-pause (status paused), skipped actions, missing notifications, stale postback metrics, budget clamped. Common causes + fixes.
Written By Salvatore Sinigaglia
Last updated About 1 hour ago
Diagnose: rule not firing, circuit-breaker auto-pause (status paused), skipped actions, missing notifications, stale postback metrics, budget clamped. Common causes + fixes.
Rules troubleshooting
The most common rule problems, what causes them, and how to fix. For each: a 1-line diagnosis + actionable next step. Always check execution history first (rul-111) β it usually surfaces the cause.
Who is this for
Anyone whose rule didn't behave as expected. First stop before contacting support.
Issue 1: Rule not firing
Symptoms
Activated rule, but no executions appear in /rules/:id after 15+ minutes.
Causes + fixes
- Status check β
/rules/:idtop: status should beactive. Ifpaused: toggle to active. If it has anauto_pause_reason(the circuit breaker paused it): see Issue 2. - last_evaluated_at β should refresh every cron tick (within 15 min for
interval: 15). If stale: the rule may have been auto-paused (checkauto_pause_reason) or there's a cron service issue (rare; check/statuspage or contact support). - Scope returns nothing β preview the rule (rul-109). If
entities_evaluated = 0: scope is wrong. Common: typo inname_contains, wrong ad account,status_in: [active]but entities are paused. - Schedule mismatch β
daily_at_timerule won't fire until next configured slot. Check timezone matches workspace.
Issue 2: Rule auto-paused by the circuit breaker
Symptoms
Rule status is back to paused with an auto_pause_reason set. Notifications stopped. Last execution failed.
Causes + fixes
The circuit breaker auto-pauses a rule (setting status back to paused) when the error rate is above 50% with 20+ errors. Review last_error:
After fixing root cause: manually toggle the rule from paused back to active. If the circuit breaker re-trips within 1 hour: not fully fixed; pause + re-investigate.
Issue 3: Actions skipped (matched but didn't act)
Symptoms
Execution history shows entities_matched > 0 but entities_acted = 0 or much smaller. Per-entity reasons in entities_skipped.
Skip reason β diagnosis
Note: max_executions_per_day is not a per-entity skip reason β once the daily cap is hit the rule stops evaluating for the rest of the UTC day. Most skips are protections working correctly. If most matches skip every cycle, the rule may be over-tuned.
Issue 4: Notification missing
Symptoms
Rule fired (execution history shows entities_acted > 0) but no notification arrived.
Causes + fixes
Issue 5: Postback metrics stale
Symptoms
Rule using purchases / roas / cpa fires on values that look wrong vs current dashboard.
Cause
Postback-fed metrics (purchases, purchase_value, conversions, roas, cpa, profit, profit_margin, conv_rate, aov) lag 24-72 hours vs current dashboard. Rule sees the snapshot at evaluation time.
Fix
Use longer time_range (last_7d minimum) for rules on postback metrics. Don't use today or yesterday for these β data is incomplete.
If the rule needs faster feedback: switch to a Meta-native metric (faster but ATT-impacted), or accept the lag.
Issue 6: Budget decrease clamped to the minimum
Symptoms
A decrease_budget_pct didn't lower the budget as far as expected β the new budget stopped at the platform minimum.
Cause
The new budget is computed as Math.max(minimum, current Γ multiplier). If a decrease would go below the platform minimum, the value is clamped to the minimum β the action still succeeds (it is not rejected or errored).
Fix
- Accept the floor (the budget can't go below the platform minimum), or
- Pause the entity instead if you want it to stop spending entirely
Issue 7: Rule fires too often
Symptoms
Many executions per day, notification flood, entities thrashing between paused and active.
Causes + fixes
- Thresholds too loose β tighten conditions
- Schedule too aggressive β raise
interval_minutes - Cooldown too short β raise
cooldown_minutesto default 360+ - No
max_executions_per_dayβ set to 3-5 - Multiple rules acting on same entities β see Issue 8
Issue 8: Conflicting rules
Symptoms
Same entity pauses + activates rapidly, or two rules adjust budget in opposite directions.
Cause
Two rules with overlapping scope + conflicting actions.
Fix
- Audit
/rulesβ identify rules with overlappingad_account_ids+entity_filter - Either narrow scopes (different
name_contains) so they're disjoint - Or coordinate (only one active at a time, paused otherwise)
- Or merge into single rule with combined conditions
Issue 9: Rule scope doesn't match anything
Symptoms
Preview returns entities_evaluated = 0.
Causes + fixes
- Wrong ad account selected β verify in builder
name_containstypo β search the entity in Ads Manager to see exact namestatus_in: [active]but entities are paused β adjust filter- Entity level mismatch β entities exist as adsets, rule scope = campaign (or vice versa)
- Platform mismatch (cross-platform rules) β entities are on different platforms than
platforms[]
Issue 10: Preview shows matches but real fire doesn't act
Symptoms
Preview reports entities_matched > 0, but next execution reports entities_acted = 0.
Causes
- All matches got skipped at execute time (cooldown, failure_backoff, pending, no_tokens, redundant_action) β check execution history
entities_skipped - Metric values changed between preview and fire (likely if running near threshold)
- Rule got paused (manually or by the circuit breaker) between preview and fire
Escalation
If none of these match your issue:
- Capture: rule ID + execution ID + timestamp + observed behavior
- Check
last_error+detailsJSON in execution history - Contact support with the above + rule export (if available)
FAQ
Why isn't my rule firing?
First check the rule status at /rules/:id β a paused rule won't run, and if it carries an auto_pause_reason the circuit breaker paused it. If status is active, preview the rule: entities_evaluated = 0 signals a wrong scope, such as a typo in name_contains, the wrong ad account, or a status_in mismatch. Wevion's Rules Engine also respects schedule slots, so daily_at_time rules wait for the next configured time.
What does it mean when a rule is auto-paused?
Wevion's circuit breaker auto-pauses a rule β setting its status back to paused (there is no separate error status) β when its error rate is above 50% with 20+ errors. Open the rule and review last_error and auto_pause_reason β common causes include an expired platform token or an upstream API error. Fix the root cause, then manually toggle the rule from paused back to active.
Why did my rule match entities but not act on them?
In Wevion's execution history, entities_matched > 0 with entities_acted = 0 means protections skipped the actions. Check the per-entity skip reason: cooldown, failure_backoff, pending, no_tokens, or redundant_action. (Hitting max_executions_per_day instead stops the whole rule for the day, rather than showing a per-entity reason.) Most skips are protections working correctly. If every match skips each cycle, the rule may be over-tuned β shorten the cooldown, for example.
Why do my rule's conversion metrics look different from the dashboard?
Postback-fed metrics in Wevion β purchases, purchase_value, conversions, roas, cpa, profit, and conv_rate β lag 24-72 hours behind the live dashboard, and the rule sees the snapshot at evaluation time. Use a longer time_range of last_7d minimum for these rules, and avoid today or yesterday because the data is still incomplete.
Why didn't my rule's budget decrease go as low as expected?
A decrease_budget_pct is clamped to the platform minimum β the new budget is Math.max(minimum, current Γ multiplier), for example $50 for a TikTok campaign or $2 for Meta. The action still succeeds; it just stops at the floor. If you want the entity to stop spending entirely, pause it instead.
FAQ
Why isn't my rule firing?
First check the rule status at /rules/:id β a paused rule won't run, and if it carries an autopausereason the circuit breaker paused it. If status is active, preview the rule: entitiesevaluated = 0 signals a wrong scope, such as a typo in namecontains, the wrong ad account, or a statusin mismatch. Wevion's Rules Engine also respects schedule slots, so dailyat_time rules wait for the next configured time.
What does it mean when a rule is auto-paused?
Wevion's circuit breaker auto-pauses a rule β setting its status back to paused (there is no separate error status) β when its error rate is above 50% with 20+ errors. Open the rule and review lasterror and autopause_reason β common causes include an expired platform token or an upstream API error. Fix the root cause, then manually toggle the rule from paused back to active.
Why did my rule match entities but not act on them?
In Wevion's execution history, entitiesmatched > 0 with entitiesacted = 0 means protections skipped the actions. Check the per-entity skip reason: cooldown, failurebackoff, pending, notokens, or redundantaction. (Hitting maxexecutionsperday instead stops the whole rule for the day, rather than showing a per-entity reason.) Most skips are protections working correctly. If every match skips each cycle, the rule may be over-tuned β shorten the cooldown, for example.
Why do my rule's conversion metrics look different from the dashboard?
Postback-fed metrics in Wevion β purchases, purchasevalue, conversions, roas, cpa, profit, and convrate β lag 24-72 hours behind the live dashboard, and the rule sees the snapshot at evaluation time. Use a longer timerange of last7d minimum for these rules, and avoid today or yesterday because the data is still incomplete.
Why didn't my rule's budget decrease go as low as expected?
A decreasebudgetpct is clamped to the platform minimum β the new budget is Math.max(minimum, current Γ multiplier), for example $50 for a TikTok campaign or $2 for Meta. The action still succeeds; it just stops at the floor. If you want the entity to stop spending entirely, pause it instead.
Steps
- Status check β /rules/:id top: status should be active. If paused: toggle to active. If it has an autopausereason (the circuit breaker paused it): see Issue 2.
- lastevaluatedat β should refresh every cron tick (within 15 min for interval: 15). If stale: the rule may have been auto-paused (check autopausereason) or there's a cron service issue (rare; check /status page or contact support).
- Scope returns nothing β preview the rule (rul-109). If entitiesevaluated = 0: scope is wrong. Common: typo in namecontains, wrong ad account, status_in: [active] but entities are paused.
- Schedule mismatch β dailyattime rule won't fire until next configured slot. Check timezone matches workspace.
Last updated: 2026-05-17