Skip to content

A trigger isn't firing

Work through the items below in order. Each covers a distinct reason a trigger can fail to fire even when the matching event is visible in the Dashboard’s Live feed.

Check: Open the trigger. If the Enabled toggle is off, it’s skipped entirely — no conditions are evaluated for it.

Fix: Turn Enabled on and save. It takes effect within a few seconds — no need to restart anything.


Open the trigger’s Conditions panel and compare each condition against the actual event field values shown in the Dashboard’s Live feed.

Operator Case sensitive?
equals ($eq) Yes — Adminadmin
not equals ($ne) Yes
contains ($contains) No — comparison is lowercased on both sides
not contains ($ncontains) No
regex ($regex) No — compiled with the iu flags (case-insensitive, unicode)

If you are using equals to match a player name or chat channel, make sure the value matches the exact casing that Squad writes to the log.

Event fields come directly from the parsed log line. The field names are fixed per event type. A condition on a field that does not exist for that event type evaluates as an empty string, which causes $eq, $contains, and $regex conditions to fail.

Fix: Check the field names for the event type in Trigger conditions.

Conditions at the top level are combined with AND — every condition must match. If you need “A or B”, put both as leaves inside a single OR group. A mix of top-level conditions and an OR group means all top-level conditions AND at least one leaf in the OR group must match.

Patterns longer than 256 characters or containing nested unbounded quantifiers (e.g. (a+)+) are rejected as unsafe and treated as non-matching — they do not throw an error.

Fix: Simplify the pattern. See Trigger conditions.


Check the trigger’s Rate limit section. It combines two settings, both of which can hold a trigger back even when its conditions match:

  • Cooldown — “at most once every N seconds”: the trigger won’t fire again until N seconds have passed since the last time it fired.
  • Threshold — “only after N times in M seconds”: the trigger fires only once the matching event has happened N times inside a rolling M-second window. Matches older than the window are dropped from the count.
  • Scope — set to either Whole trigger (one shared counter for everyone) or Per player (a separate counter per player identity — EOS ID when the player has one, Steam ID otherwise).

A cooldown of 0 seconds with a threshold of 1 means no rate limit at all — if you set that and the trigger still isn’t firing, the rate limit isn’t your problem.

Fix: Increase the cooldown, reduce the threshold, or wait out the current window. See Rate limit reference.


4. Wrong surface — trigger not scoped to this server

Section titled “4. Wrong surface — trigger not scoped to this server”

Triggers can be scoped to specific servers. An event on server A will not fire a trigger that is scoped only to server B.

Check: Open the trigger and verify the Servers selection includes the server where the event occurred.

Fix: Add the server to the trigger’s scope, or set scope to all servers.


5. Manual trigger: member is missing the run permission

Section titled “5. Manual trigger: member is missing the run permission”

Every manual trigger (the kind with a Run button) gets its own permission key, trigger:exec:<id>, shown in Organization → Roles once the trigger exists. Owners and admins can run any manual trigger implicitly; a member on a custom role needs that specific key added to their role.

Symptom: The Run button is absent for that member, or clicking it returns an error.

Fix: In Organization → Roles, add the trigger’s trigger:exec:<id> key to the member’s role. See Roles and permission keys.


Running a trigger that isn’t a Manual trigger returns Trigger is not runnable. The same error appears if a manual trigger’s own Enabled toggle is off.

Fix: Confirm the trigger’s kind is Manual and that it’s enabled.


7. An action inside the trigger is failing quietly

Section titled “7. An action inside the trigger is failing quietly”

For event and scheduled triggers, if one action in the list fails partway through — an RCON command with no live RCON connection, a webhook that times out — heliana doesn’t stop the rest of the trigger’s actions and doesn’t show an error in the app for it. The trigger still counts as having fired.

Fix: Check each action’s prerequisites yourself. For RCON actions, check the server’s RCON status on the Servers page. For webhook actions, confirm the URL is correct and that the endpoint returns a success response.