Solutions/Use case

Respond while the customer is still there.

Write the condition once, such as a trial that hits its plan limit, a third failed search or a basket gone quiet. Signals checks it continuously and tells your app, Braze, Kafka or a webhook the moment it is true.

The real engine · no card · no sales call
A phone showing the Ridgeway game after a third failed attempt at the level, with a bottom sheet asking Try an easier route? and a Take the valley path button, and a Signals callout reading third_failure fired attached to the side.
Fires on what happens, or on what does not. your handler decides what happens next
Try it on yourself

Below is your own visit to this page, computed by Signals as you read.

Signals, about you

connecting
What Signals knows about your visit, right now

Signals is computing your first attributes from the events this page just sent.

Every highlighted part is an attribute Signals computed from the behavioral data your browser sent during this visit. Open the Product menu above and watch the sentence change.

Keyed on an anonymous session id. Signals drops these values a day after your last event.
Why it usually fails

Most stacks notice the moment after it has passed.

Emails, dashboards and syncs run after the fact. They are right about what happened, and too late to change it.

Polling misses itThe moment falls between checks, and every check costs a read.
Silence sends nothingA user who goes quiet emits no event. Something has to watch the clock.
Rules in a second systemThey drift from the data they check.
What you build with it

Moments worth acting on before they pass.

Each of these is a rule over what a customer is doing, delivered while there is still time to change the outcome.

Software · Upgrade

Higher trial to paid conversion

The upgrade prompt arrives on the trial's schedule, not the user's. A rule fires when a workspace hits its plan limit, so the prompt appears then and names the limit.

Retail · Checkout

Fewer abandoned baskets

The reminder lands in tomorrow's email. A rule fires when a high-value basket goes quiet, so the page offers help while the shopper is still there.

Media · Subscriptions

Higher subscription conversion

The paywall offer is the same for every reader. A rule fires on a reader's fourth article this week, so the offer goes to the reader most likely to pay.

Gaming · Retention

Higher D1 retention

A new player failing the same level a third time is about to quit. A rule fires on the third failure, so your game server can ease the level in time.

What you build

Write the condition once. Signals watches it continuously.

01 · Collect

Add a Snowplow SDK

Web, mobile or server. Events start flowing, validated against your schemas. No event stream to build first.

02 · Define

Describe the moment as a rule

A threshold, a window and a key, over attributes you define. In the console without a ticket, or in code.

03 · Deliver

Pick where it goes

Into your page over a live connection, or to Braze, Kafka, a webhook or Pub/Sub. Signals supplies the moment; your handler decides what happens next.

The plan_limit_hit rule fires with plan_limit_name set to projects, the Signals plugin delivers it to the page, and a trial app shows an upgrade prompt reading You've used 3 of 3 projects on the trial.
Works with
  • Braze
  • Kafka
  • Pub/Sub
The code

One handler on the page, called the moment a rule fires.

Signals ships a plugin for the Snowplow browser tracker. It holds one live connection for the visitor and calls your handler with the rule's name and the attributes that made it fire.

First, give your agent the Signals skills
npx plugins add snowplow/skills
Write it yourself
import { newTracker } from "@snowplow/browser-tracker";
import {
  SignalsInterventionsPlugin,
  addInterventionHandlers,
  subscribeToInterventions,
} from "@snowplow/signals-browser-plugin";

newTracker("sp1", collectorUrl, {
  appId: "web-app",
  plugins: [SignalsInterventionsPlugin()],
});

addInterventionHandlers({
  upgrade(intervention) {
    if (intervention.name === "plan_limit_hit") {
      showUpgradePrompt(intervention.attributes.plan_limit_name);
    }
  },
});

subscribeToInterventions({ endpoint: signalsEndpoint });
Or hand your agent this prompt
Add Snowplow Signals to this app so it reacts when a trial user hits their plan limit. Add the Snowplow browser tracker with the Signals interventions plugin, define a rule named plan_limit_hit over the user's usage against their plan, and register a handler that shows our upgrade prompt when it fires. Leave the billing logic as it is, so the only thing that changes is when the app hears about the limit.

A rule fires the first time its condition is true for a key, and rules keyed on the session re-arm with the next session. The plugin tracks each delivery as an event, so you can measure what the nudge did.

What changes

The page hears about it while the shopper is still there.

<1s

Event in to attribute updated

0 polling loops

Your page holds one live connection instead of asking

any key

user · session · basket · listing · store

Questions

Before you write your first rule

Does Signals decide what happens when a rule fires?

No. Signals tells your code the moment the condition is true and sends the attributes behind it. Your handler, or the tool you deliver to, decides what the customer sees.

Can a rule fire when something does not happen?

Yes. A rule can fire when an expected event does not arrive inside a window, such as a trial user who stops halfway through setup or a basket that goes quiet.

Where can a rule deliver?

Into your page over server-sent events, or to Braze, Kafka, a webhook or Pub/Sub.

Will the same customer get it over and over?

Not by default. A rule fires the first time its condition is true for a key, and rules keyed on the session re-arm when a new session starts. A rule built on a change in value fires on every change, if that is what you want.

Can I test a rule before it goes live?

Yes. Replay it over warehouse history to see how often it would have fired, then publish. Old versions keep firing until you retire them.

Do I need an event stream already?

No. Collection is part of Signals. Add a Snowplow SDK and events start flowing. If you already run Snowplow, Signals reads the pipeline you have.

Fire your first rule on your own traffic.

Add the SDK, write one rule, then set it off yourself by clicking around your own site. The free tier runs on the real engine: no card, no sales call.