Automation rules
React to data changes with if-this-then-that rules. Email, Slack, Telegram, webhooks.
Automation rules are declarative: a trigger fires an action. Rules run after every sync completes, so alerts are as fresh as your data.
Triggers
- KPI drop — a KPI (NGR, FTD, clicks) drops by > X% vs a baseline (last 7d, last 30d, or same-day last week). Supports per-integration or org-wide.
- Integration health — integration fails N runs in a row, or goes M hours without a successful sync.
- High-value event — FTD > $X, deposit > $X, new sub-affiliate joined.
- Goal reached — daily / weekly / monthly revenue hits a threshold.
Actions
Every trigger can fire any combination of:
- Email — to the rule owner, a specified address, or an SMTP-backed distribution list.
- Slack — via Incoming Webhook or a bot user; attach a pre-rendered chart.
- Microsoft Teams — Incoming Webhook connector.
- Telegram — bot DM or channel.
- Discord — webhook to any server.
- Custom webhook — signed JSON POST to any URL.
- In-app alert — shows up under Alerts and in the topbar bell.
Example: Slack me when Stake NGR drops 30%
{
"name": "Stake NGR drop alert",
"trigger": {
"type": "kpi_drop",
"integrationKey": "stake-affiliates",
"metric": "ngr",
"thresholdPct": -30,
"baseline": "last_7d_avg"
},
"action": {
"type": "slack",
"channel": "#affiliate-alerts",
"attachChart": true
}
}Rule evaluation
Rules are evaluated in a dedicated Trigger.dev job after each sync run. Evaluation is cheap (all math happens on already-written rows) so there's no limit on how many rules you can define. Rules that don't apply to the completed sync short-circuit immediately.
Rate limiting
To avoid alert fatigue, each rule tracks a "last fired" timestamp. You can configure a cooldown window (default 1 hour) so the same alert doesn't fire on every sync.
Muting temporarily
Click the toggle next to a rule to disable it without deleting. Disabled rules don't evaluate.