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

  1. Status check β€” /rules/:id top: status should be active. If paused: toggle to active. If it has an auto_pause_reason (the circuit breaker paused it): see Issue 2.
  2. last_evaluated_at β€” should refresh every cron tick (within 15 min for interval: 15). If stale: the rule may have been auto-paused (check auto_pause_reason) or there's a cron service issue (rare; check /status page or contact support).
  3. Scope returns nothing β€” preview the rule (rul-109). If entities_evaluated = 0: scope is wrong. Common: typo in name_contains, wrong ad account, status_in: [active] but entities are paused.
  4. Schedule mismatch β€” daily_at_time rule 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:

Error messageLikely causeFix
platform_token_expiredAd account token revokedRe-authorize ad account at /connect/{platform}
platform_api_error: ...Upstream API issueCheck platform's API status; may be transient
validation_error: budget below minimumAction would produce invalid budgetAdjust rule's pct value or scope
network_errorTransientWait then retry
entity_not_foundEntity deleted between eval and executeUsually self-resolves; harmless

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

skip reasonDiagnosisFix
cooldownEntity acted on recently by this ruleWait until cooldown expires, or shorten cooldown_minutes if too conservative
failure_backoff5+ consecutive failures for the entity in 24hFix the underlying failure (check last_error); the backoff clears once the entity stops failing
pendingIn-flight action in last 30 min for the same entitySelf-resolves; if persistent, check for a stuck worker
no_tokensNo valid platform token for the entity's accountRe-authorize the ad account at /connect/{platform}
redundant_actionEntity is already in the action's target stateExpected β€” the rule won't re-apply the same state

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

CauseCheckFix
notify_on_execution: falseRule edit modalEnable + save
notify_channels emptySameTick at least one channel
Telegram bot disconnectedWorkspace integrationsReconnect at /settings/notifications
Email in spamInbox + spam folderAllowlist noreply@wevion.ai
In-app notification clearedNotification centerCheck before clearing if you need to reference

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).

PlatformEntity levelMinimum
Googlecampaign$1
TikTokcampaign$50
TikTokadset$20
Meta / Snapchat / Taboola / LinkedInany$2

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_minutes to 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 overlapping ad_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_contains typo β€” search the entity in Ads Manager to see exact name
  • status_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:

  1. Capture: rule ID + execution ID + timestamp + observed behavior
  2. Check last_error + details JSON in execution history
  3. 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

  1. 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.
  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).
  3. 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.
  4. Schedule mismatch β€” dailyattime rule won't fire until next configured slot. Check timezone matches workspace.

Last updated: 2026-05-17