299 lines
6.6 KiB
Plaintext
299 lines
6.6 KiB
Plaintext
---
|
|
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
|