Skip to main content

Creating Segments

Segments are dynamic groups of users that automatically update as users match or stop matching your criteria. Use them to:

  • Target campaigns to specific user groups
  • Trigger user journeys
  • Analyze cohorts
  • Personalize experiences
  • Track conversions by segment

Creating a segment

Step 1: Open the segment editor

  1. Click Segments in the sidebar.
  2. Click New Segment (or open an existing segment to edit it).

Step 2: Details

Fill in the Details card:

  • Name - descriptive (e.g. "Premium trial users - expiring this week").
  • Description - what this segment represents and where it's used.
  • Tags - type a tag and press Enter to commit. Tags appear as removable pills below the input. There's no separate Add button.

Step 3: Build the filter groups

The segment editor uses the same v2 filter builder as the campaign and journey wizards. The builder has two blocks:

  • Filter Groups - the include block. Users must match these to be in the segment.
  • Exclude filters - the exclude block. Users matching any exclude group are removed from the segment, even if they match an include group.

v2 chrome at a glance

  • Numbered colored badges per group - 1 green, 2 amber, 3 blue, 4 pink, 5 purple - replacing the old "Filter Group N" header. Colors rotate by group index so it's easy to track which group you're editing.
  • AND/OR ConnectorChip between sibling rows AND between groups. The chip is the toggle - there's no separate "Match ALL/ANY" header per group, no top-level "Match ALL groups" radio.
  • + Add condition - dashed button at the foot of each group.
  • + Add filter group - dashed button below the last group in the block.
  • Confirm modal before deleting a non-empty group ("Remove this filter group? It contains N condition(s)…"). Empty groups delete silently.
  • Live count pills per group - re-evaluate ~400ms after edits stop, so you always know how many users each group matches.
  • Event and attribute pickers are searchable comboboxes. When you type a name that doesn't match anything, the dropdown surfaces an extra + Create event "<query>" (or + Create attribute "<query>") row that registers the schema entry on the spot - useful when you're building segments before tracking is in place.

Filter rows render as bordered cards so each row is a distinct unit. There's no drag handle - reordering filters inside a group has no effect on evaluation (AND / OR are commutative).

Step 4: Save

Click Save. The segment becomes available immediately for campaigns, journeys, and dashboards. Membership refreshes in the background as user attributes and events change.

Filter types

Segments support 13 filter types - same set across the segment editor, campaign Audience step, and journey Audience step.

User attribute

Match on any user attribute - system fields like country, email, ML scores, or custom attributes you've defined.

plan equals "premium"
country equals "US"
mrr greater than 1000
signup_date within last 30 days

Event

Match on whether (or how often) a user performed a tracked event, optionally filtered by event properties and time range.

Performed "purchase" within last 30 days
Performed "feature_used" at least 5 times
Did NOT perform "onboarding_completed"
Performed "purchase" with property amount >= 100

Behavioral

Activity-based shortcuts: active_last_7_days, active_last_30_days, inactive_7_days, inactive_30_days.

Segment

Membership in another saved segment. Operators: in_segment / not_in_segment. Useful for nested segmentation:

In segment "VIP Customers"
NOT in segment "Churned Users"

Entity

Match on the user's relationship to custom entity records (orders, subscriptions, etc.).

App

Whether the user has used a specific app (or any app on a platform) in the last N days.

Canvas execution

Users currently in / who have completed / who have exited a specific journey (or any journey).

Channel subscription

Subscribed / not-subscribed to a specific channel (email / SMS / WhatsApp / push) with optional status filter.

List membership

Is / isn't a member of a subscription list.

Bounce status

Email validity status: email_valid, email_bounced, email_hard_bounced, email_soft_bounced.

Wallet pass

Whether the user currently holds an active wallet pass, optionally scoped to a specific pass template and/or wallet platform (Apple / Google). Operators: has_active / not_has_active.

Ecommerce

RFM segment match plus order/spend/cart filters. Useful for "all Champions" or "users with total spend ≥ $500".

ML score / purchase

Predictive score thresholds (engagement, churn, channel preference, predictive-event likelihood) and purchase-recency filters. Backed by the ML service.

Combining filters

AND / OR within a group

Use the ConnectorChip between rows to switch a group's logic between AND and OR. AND means every condition must match; OR means at least one must match.

Group 1 (AND between rows):
plan = "trial"
AND signup_date within last 14 days
AND email_verified = true

Matches: trial users who signed up recently AND have a verified email.

AND / OR between groups

Use the ConnectorChip between groups to switch how groups compose. AND means a user must match every group; OR means matching one group is enough.

Group 1 (AND): plan = "trial" AND signup_date within last 14 days
OR
Group 2 (AND): performed "feature_used" >= 3 times AND performed "purchase_completed"

Matches: recent trial users OR users who are active and converted.

Exclude filters

The Exclude block uses identical chrome - numbered badges, ConnectorChip, dashed + Add buttons, confirm-on-delete, live count pills. Users matching ANY exclude group are removed from the segment, even if they're in an include group.

Live count

The right rail tracks total segment size as you edit:

  • Total matching count + percentage of the workspace
  • Re-evaluates with the same ~400ms debounce as the per-group pills
  • Updates when you switch the AND/OR ConnectorChips

Approximate by default, exact on demand

The live size is an approximate estimate by default, shown with a leading (for example ≈ 12,400). This keeps the editor responsive even on workspaces with millions of users. When you want the precise figure, click Calculate exact - the drops and the count is recomputed exactly.

This estimate is only ever a preview of size. The segment's actual membership - and the audience a campaign or journey sends to - is always computed exactly. You never send to an estimate.

Growth analytics

For a saved segment, the editor shows a Growth card that tracks how the segment's size changes over time:

  • Current size and a trend indicator - growing / declining / stable.
  • Average daily growth and the segment's peak size.
  • A chart of size over time.

A daily job records a size snapshot per segment. If you've just saved a segment and there's no history yet, click Snapshot now to seed the first data point immediately.

Segment examples

Trial conversion opportunity

Trial users approaching expiration who haven't converted:

  • Group 1 (AND): plan = "trial" AND trial_ends_date within next 3 days AND did NOT perform "purchase_completed"

Power users

Highly engaged users:

  • Group 1 (AND): performed "login" >= 20 times within last 30 days AND performed "feature_used" >= 50 times within last 30 days

At-risk paying customers

Paying users showing churn signals:

  • Group 1 (AND): plan = "paid" AND inactive_30_days AND lifetime_value > 500

Onboarding drop-off

Started but didn't complete:

  • Group 1 (AND): performed "signup_completed" AND did NOT perform "onboarding_completed" AND signup_date within last 7 days

Cross-platform users

Active on multiple platforms:

  • Group 1 (AND): used app on web AND used app on ios

Best practices

Keep segments focused

"Premium users in US who haven't logged in for 7 days" "All users with various random criteria"

Use descriptive names

"Trial users - expiring this week" "Segment 1"

Document purpose

Use the description to explain what the segment represents, which campaigns/journeys use it, and when to revisit the criteria.

Start simple, iterate

Phase 1: plan = "premium" Phase 2: plan = "premium" AND active_last_30_days Phase 3: plan = "premium" AND active_last_30_days AND performed "feature_x" >= 5 times

Dynamic membership

Segments update in real time as user attributes and events change. There's no manual refresh - when a user signs up, upgrades, or churns, segment membership reflects it within seconds.

Limits

  • Filters per segment: unlimited
  • Filter groups: unlimited
  • Segments per workspace: unlimited

Next steps