Product/Live attributes

Know what a customer did, not only how many times.

A live attribute is a computed property of whatever you key on, computed live on your events and served to your application in single-digit milliseconds.

14 days · no card · no sales call
Your app → Signalsrequest
// mid-render, before the ranker runs
const ctx = await signals.get({
  key: { user_id: "u_48213" },
  service: "user_attributes"
});
One call returns every attribute in the service. Key on user, session, account, basket, listing or store.
Signals → your app● 6ms later
{
  "showing_price_hesitation": true,
  "basket_value": 184.20,
  "basket_idle_seconds": 412,
  "failed_searches_session": 3,
  "categories_viewed": ["casual", "trail"],
  "last_event_at": "2026-09-14T09:41:07.212Z"
}
Served from the streaming enginesame definition as warehouse history
10ms

p95. Load-test benchmark

1 definition

Streaming for now, batch for history

any key

user · session · basket · listing · store

The problem

You know how many times. Not what.

Most customer data is counts computed overnight: propensity to purchase, next best action, product recommendations. By the time it reaches your product the moment has passed, and it says nothing about what this customer is doing right now.

How it works

Define once. Computed on the stream. Served to your app.

01 · Event in

A product_view event on a pair of trail shoes arrives from your app via our SDK.

Schema-validated on the way in. Bad data never reaches the attribute. So you can always trust your attributes.

02 · Recomputed

An attribute named categories_viewed gains trail, inside the 10-minute window.

Windowing, late events and hot keys are handled in the engine, not in your code.

03 · Read back

Your ranker reads the attribute and reorders the shoe recommendations, in the same session.

Or a trigger fires the moment the condition is met and delivers it to you.

Capabilities

Attributes that describe the moment, kept current for you.

01

Counts, recency, order and custom logic

How often, how recently, in what sequence. Or your own function, versioned like the rest.

02

Windows and TTLs that end when the moment does

Ten minutes, this session, since last purchase. Late events, TTLs and hot keys handled in the engine.

03

Key on any entity

user · session · account · basket · listing · store. A profile is whatever you say it is.

04

One definition, two engines

Streaming for now; backfill from Snowflake, BigQuery or Databricks on publish, so a new attribute has history on day one. The same definition builds the ML training set, so serving matches training.

05

Served in single-digit milliseconds

6ms p50, 10ms p95 in-region. One call returns every attribute in a service, mid-render.

06

Governance included

Every attribute is versioned, and manageable in code and CI/CD. Old versions keep serving until you retire them.

Collect. Define. Serve.

Add the SDK, define one attribute, and watch it change while you click around your own product. 14 days, no card, no sales call.