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
- Click Segments in the sidebar.
- 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 -
1green,2amber,3blue,4pink,5purple - 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"ANDtrial_ends_date within next 3 daysANDdid NOT perform "purchase_completed"
Power users
Highly engaged users:
- Group 1 (AND):
performed "login" >= 20 times within last 30 daysANDperformed "feature_used" >= 50 times within last 30 days
At-risk paying customers
Paying users showing churn signals:
- Group 1 (AND):
plan = "paid"ANDinactive_30_daysANDlifetime_value > 500
Onboarding drop-off
Started but didn't complete:
- Group 1 (AND):
performed "signup_completed"ANDdid NOT perform "onboarding_completed"ANDsignup_date within last 7 days
Cross-platform users
Active on multiple platforms:
- Group 1 (AND): used app on
webAND used app onios
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