--- title: Segment-Based Targeting description: Target specific audiences with filters icon: Users --- ## Overview Segments are dynamic groups of contacts based on filters. Use them to send targeted campaigns or trigger workflows when contacts enter/exit segments. ## Create a segment 1. Go to **Segments** → **Create Segment** 2. Name: `Premium Users` 3. Description: `Users on premium or enterprise plan` ## Add filters ### Simple filter Filter by a single field: - Field: `plan` - Operator: `equals` - Value: `premium` All contacts where `plan` equals `premium` are in this segment. ### Multiple filters (AND logic) All conditions must be true: - `plan` equals `premium` - **AND** `subscribed` equals `true` - **AND** `lastLoginAt` within `30` days Only premium users who are subscribed AND logged in recently. ### Multiple filters (OR logic) Any condition can be true: - `plan` equals `premium` - **OR** `plan` equals `enterprise` Users on either premium or enterprise plan. ### Complex filters (AND + OR) Combine both: - `subscribed` equals `true` - **AND** (`plan` equals `premium` **OR** `plan` equals `enterprise`) Subscribed users on premium OR enterprise plans. ## Filter operators ### Equals Exact match: - `plan` equals `premium` - `country` equals `United States` ### Not equals Everything except: - `plan` not equals `free` - `status` not equals `cancelled` ### Contains Partial text match: - `email` contains `@gmail.com` - `companyName` contains `Inc` ### Greater than / Less than Numeric comparisons: - `mrr` greater than `100` - `age` less than `30` - `loginCount` greater than `10` ### Exists / Does not exist Field has any value: - `phoneNumber` exists - `referralCode` does not exist ### Within Time-based (requires ISO date): - `signupDate` within `7` days - `lastLoginAt` within `30` days - `trialExpiresAt` within `3` days ## Example segments ### Active users Users who logged in recently: - `lastLoginAt` within `7` days - **AND** `subscribed` equals `true` ### High-value customers Users spending over $100/month: - `mrr` greater than `100` - **AND** `plan` is not `free` ### Trial expiring soon Users whose trial ends in 3 days: - `trialExpiresAt` within `3` days - **AND** `plan` equals `trial` ### Inactive users Haven't logged in for 30+ days: - `lastLoginAt` within `30` days is `false` - **AND** `subscribed` equals `true` - **AND** `status` equals `active` **Note:** To check "NOT within", set the within filter and toggle the NOT operator. ### Power users High engagement score: - `loginCount` greater than `50` - **AND** `featureUsageCount` greater than `100` ### Geographic targeting Specific country or region: - `country` equals `United States` - **AND** `state` equals `California` ### Feature adopters Used a specific feature: - Custom event filter: `feature_used` triggered - **AND** event data: `featureName` equals `advanced_analytics` ## Use segments in campaigns ### Target a segment 1. Create campaign 2. Audience: Select **Segment** 3. Choose your segment 4. Campaign sends only to contacts in that segment ### Preview count Before sending, see how many contacts match: - Shows estimated recipient count - Updates in real-time as you adjust filters ## Use segments in workflows ### Trigger on segment entry Create workflow that runs when contacts enter a segment: 1. **Workflows** → **Create Workflow** 2. Trigger: Segment `trial_expiring_soon` 3. Trigger condition: Contact **enters** segment 4. Add email: Trial expiration reminder When a contact enters "trial_expiring_soon" segment, workflow triggers. ### Trigger on segment exit Run workflow when contacts leave a segment: 1. Trigger: Segment `active_users` 2. Trigger condition: Contact **exits** segment 3. Add workflow: Re-engagement sequence When user becomes inactive (exits "active_users"), re-engagement starts. ## Track membership changes Enable to trigger events when contacts enter/exit: 1. Edit segment 2. Toggle **Track Membership** 3. Save Now when contacts move in/out of the segment: - Event `segment_entry_[segment_id]` is tracked - Event `segment_exit_[segment_id]` is tracked - Can use these events in other workflows **Performance note:** Only enable for segments you'll use for triggers. Adds processing overhead. ## Segment best practices **Keep it simple** - 3-5 filters per segment max - Avoid deeply nested conditions - Test with expected contacts **Use consistent data** - Store dates as ISO strings - Use numbers for numeric values - Consistent field naming **Name clearly** - ✅ `Premium Users - Active` - ❌ `Segment 1` **Monitor size** - Check segment count regularly - Too large = slow processing - Too small = not enough data ## Update segments Segments update automatically: - When contact data changes - When contacts are added/removed - Typically updates within minutes Force refresh: 1. Go to segment 2. Click **Refresh Count** ## Advanced: Multi-level targeting ### Premium users in specific region - `plan` equals `premium` - **AND** `country` equals `United States` - **AND** `lastLoginAt` within `7` days ### Churn risk scoring - `lastLoginAt` within `30` days is `false` - **AND** `supportTickets` greater than `3` - **AND** `npsScore` less than `7` ### Upsell targeting - `plan` equals `free` - **AND** `featureUsageCount` greater than `50` - **AND** `teamSize` greater than `5` Users on free plan who are power users with teams (good upsell candidates). ## Performance at scale Segments work efficiently with millions of contacts: - Indexed queries for fast filtering - Cursor-based pagination - Background count computation **Tips for large segments:** - Use specific filters (avoid `contains` on large text fields) - Store commonly queried data as top-level fields - Use numeric comparisons when possible (faster than text) ## Troubleshooting **Segment count is 0 but should have contacts** - Check filter logic (AND vs OR) - Verify field names match exactly (case-sensitive) - Ensure contacts have the required fields - Try simpler filters to debug **Segment not updating** - Click **Refresh Count** to force update - Check that contact data was actually updated - Segments typically update within 5 minutes **Workflow not triggering on segment entry** - Workflow is enabled - Track Membership is enabled on segment - Trigger is set to segment entry (not exit) **Too many contacts in segment** - Filters too broad - Add more specific conditions - Use AND logic instead of OR ## Next steps - [Send a campaign](/tutorials/newsletter-campaign) to a segment - [Build a workflow](/tutorials/welcome-series-workflow) triggered by segment changes - [Track events](/tutorials/event-tracking-integration) to update contact data