Product/Real-time triggers

A rule that fires the moment it happens.

Real-time triggers watch live attributes continuously. The instant a condition is met, Signals delivers to your app or to the tools you already use to act.

The real engine · no card · no sales call
Your app → Signalssubscribe
// your app, when the page loads
const stream = signals.interventions.subscribe({
  key: { user_id: "u_48213" },
  service: "storefront"
});
stream.on("intervention", apply);
Illustrative. Your app holds one live connection. Or skip the app and deliver to Braze, Kafka, a webhook or Pub/Sub.
Signals → your app● the moment it fires
{
  "trigger": "high_value_basket_idle",
  "key": { "user_id": "u_48213" },
  "attributes": {
    "basket_value": 184.20,
    "basket_idle_seconds": 612
  },
  "fired_at": "2026-09-14T09:51:19.004Z"
}
Delivered over server-sent eventsthe page changes while the customer is still on it
The problem

The moment passes before anything downstream knows.

A batch job finds the high-value basket that went idle ten minutes ago tomorrow morning. The third failed search shows up in a dashboard next week. Nothing in the stack pushes the moment it happens, so nothing acts on it.

In Snowplow Console

A trigger is a rule and a delivery.

Set the conditions over live attributes, choose who receives it and what data travels with it, and Signals watches from the moment you publish.

The Snowplow Console showing an active trigger that fires when a basket over $150 is idle for ten minutes.
Snowplow Console, shown with example data.
How it works

Write the condition once. Signals watches. Something happens the instant it is true.

A rule that fires when basket_value is over 150 and basket_idle_seconds reaches 600, editable in the Console or in code.01 · Condition

A rule over live attributes, in the console or in code.

A basket over a threshold idle for ten minutes. A third failed search in a session. Something that did not happen inside a window.

A new add_to_cart event updates the attributes the rule reads, and each condition is checked as it changes.02 · Evaluated

Every incoming event updates the attributes the rule depends on.

The rule is checked as they change, in the same engine that computes the attributes. No second system to keep in sync.

The fired high_value_basket_idle trigger is delivered to your app over server-sent events and to Braze, Kafka, a webhook and Pub/Sub.03 · Delivered

Into your app over a live connection, or to a tool you already run.

Braze, Kafka, a webhook or Pub/Sub. Signals supplies the moment. You decide what happens next.

Works with
  • Braze
  • Kafka
  • Pub/Sub
Capabilities

Rules that fire the moment they are true, delivered where you act.

A trigger rule fires when the cart passes $75, and the store shows the shopper free shipping.
01

Reuse the attributes you already defined. A rule is a threshold, a window and a key, nothing more to keep in sync.

A trigger rule fires when the cart passes $75, and the store shows the shopper free shipping.
02

Each incoming event updates the attributes the rule depends on, and the rule is checked as they change.

Three events from user u_48213 each update basket_value and basket_idle_seconds, and the high_value_basket_idle rule is checked after each one: not yet at a basket of 153.00, not yet at 184.20, and fired once basket_idle_seconds reaches 612.
03

A trigger can fire when something does not happen inside a window, not only when it does.

A timeline where a shopper adds three items to the cart, reaching $184.20, then sends no events for 10 minutes, so basket_idle_seconds reaches 600 and the high_value_basket_idle trigger fires.
04

Over server-sent events, so the page can change while the customer is still on it.

Browser code adds the Signals plugin to the tracker, registers an intervention handler and subscribes, the high_value_basket_idle intervention arrives over an open server-sent events connection, and the shopper's open store page shows a free express shipping offer for their $184.20 cart.
05

Braze, Kafka, webhooks and Pub/Sub. Signals supplies the moment. Your existing tools do the acting.

The high_value_basket_idle trigger fires for user u_48213 with a basket value of 184.20 and is delivered to your app over server-sent events and to Braze, Kafka, a webhook and Pub/Sub.
06

Preview how many keys match a rule against your warehouse data, and send a test to one key, before you publish it. Old versions keep firing until you retire them.

A draft rule in the Signals Console previewed against warehouse data, showing an illustrative 38 keys that match right now with a sample of matching users, a field to send a test intervention to one key, and a Publish button.

Full reference: Defining interventions, the in-app delivery →

Collect. Define. Serve.

Add the SDK, define one attribute, and watch it change while you click around your own product. The free tier runs on the real engine: no card, no sales call.