Skip to main content
Events are the core of product analytics. When a user signs up, views a page, or makes a purchase, Tell records it as an event with a name and properties. The analytics engine lets you count events, rank them, break them down by property values, and run aggregations like sum and average.

Quick start

Via the API:

Event counts

Count all events or filter to a specific event name:
API:

Top events

See which events happen most often:
Returns event names ranked by count, so you can quickly see what’s driving volume.

Property breakdowns

Break down a specific event by its properties to understand the distribution:
This returns time series data grouped by each property value (e.g., “free”, “pro”, “enterprise”). For top-level fields, use the field name directly (device_type, country). For custom properties stored in the JSON properties column, prefix with properties. (e.g., properties.plan, properties.amount).

Custom aggregations

Run sum, average, min, max, or count on numeric event properties:
Supported aggregation functions: sum, avg, min, max, count.

First-time events

Count users who did an event for the first time within a period. This answers questions like “how many users signed up for the first time this week?” — distinct from total event counts, which include repeat actions.
Tell scans each user’s full event history to find their earliest occurrence, then counts only those whose first occurrence falls within the query range. The result is a time series of new user acquisition per period.

First-time vs first-match

Two modes control how filter conditions interact with the historical scan: first_time (default) — “How many users made their first purchase this month?”
first_match — “How many users made their first purchase over $100 this month?”

Lookback window

By default, Tell scans the entire event history to find true first occurrences. For large datasets, limit the scan with lookback_days:
This trades accuracy for speed — a user who first did the event 400 days ago would be miscounted as first-time if their next occurrence falls within the range. Use this when you know your product’s age or only care about recent cohorts. First-time events support breakdowns, comparison, and audience filtering. When combined with a breakdown, Tell captures the property value at the time of the first event using argMin. See the first-time events API reference for full endpoint documentation.

Per-actor metrics

Regular event counts tell you totals. Per-actor metrics tell you about user behavior — how many events does a typical user trigger? What does the 90th percentile look like? Tell computes this with a two-level aggregation: first per user, then across users.
This returns a time series where each point is the average number of page_view events per user for that day — not the total count, but the per-user average.

Aggregation functions

Property aggregation

By default, per-actor counts events. Add property to aggregate a numeric property instead:
Without property: inner aggregation is COUNT(*) per user (event count). With property: inner aggregation is SUM(property) per user (property total). The outer function (avg, p90, etc.) then operates on those per-user values.

How it differs from other metrics

  • Event counts — total events across all users. “50,000 purchases happened.”
  • Per-actor metrics — distribution across users. “The average user made 2.3 purchases. The p90 user made 8.”
  • Custom aggregations — single-level property aggregation. “Average purchase amount is $42.” (not per-user)
  • Grouped metrics — per-actor logic applied per group for treemap visualization
Per-actor metrics support breakdowns, all granularity levels, and audience filtering. See the per-actor API reference for full endpoint documentation.

Drill-down

Inspect raw event data when you need to see individual records:
Returns rows with timestamp, event_name, device_id, and session_id. Add filter conditions to narrow down the results.

Formulas

Combine multiple metric series with math. Define series A, B, C (up to 26), then write an expression:
This computes the daily conversion rate from sign-up to purchase. Series A is sign-up count, series B is purchase count, and the formula B / A * 100 gives a percentage.

Series references

Each series maps to a letter: the first is A, the second is B, and so on up to Z. Reference them in your formula by letter. Available series metrics: dau, wau, mau, events, event:<name>, sessions, users, logs.

Operators

Standard math precedence applies. Use parentheses to override: (A + B) / C. Division by zero returns 0 instead of an error.

Evaluation modes

Formulas evaluate in two modes depending on context:
  • Time series — per-bucket evaluation, used for charts. Missing values default to 0.
  • Total — evaluates on aggregate totals, used for KPI number blocks on boards.

Formulas on boards

Add formulas to any metric block on a board. Define your series, write the expression, and the board evaluates it on every refresh. Use this for computed metrics like conversion rates, ratios, or derived KPIs. See the formula API reference for full endpoint documentation.

Grouped metrics

Grouped metrics show proportional composition — which countries, events, or plans make up your traffic, and how engaged each group is. The result powers treemap visualizations on boards. Each group has two values:
  • Size — determines area (event count, unique users, or sum of a property)
  • Intensity — determines color (average events per user, percentile, or average of a property)
This returns groups ordered by size, each with a size value (user count) and intensity value (average events per user). The US might have 1,500 users averaging 3.2 events each, while Canada has 800 users averaging 2.8.

Size metrics

Intensity metrics

Options

Unlike breakdowns, grouped metrics always return a snapshot (not a time series) and use two-level aggregation — first per user, then per group — to reveal engagement patterns, not just raw counts. See the grouped metrics API reference for full endpoint documentation.

Lifecycle

The lifecycle metric tracks how your active user base evolves over time. Each period, Tell classifies every active user into one of three states:
Returns a time series with one point per state per period:
A healthy product has a large returning base with steady new user inflow. If resurrected starts outpacing new, your acquisition may be slowing while re-engagement improves. If returning shrinks, users aren’t sticking around. The default granularity is weekly. Supports daily, monthly, and all other granularity levels. Add compare=previous for period-over-period comparison.
This is different from lifecycle segments. The lifecycle metric is a time series — it classifies users per period with relative lookback. Segments are a snapshot — they classify all users right now using fixed 7/30-day windows and include dormant and churned states.
See the lifecycle API reference for full endpoint documentation.

Breakdowns and comparison

Event metrics support the full filtering system — breakdowns by any field, period comparison, and all granularity levels.