Customer.io Segments and Campaigns: Precision Targeting for Product Teams
Most marketing platforms treat segments as a filing system. You create a list, people get added manually or by import, and the list stays mostly static until someone cleans it up. The problem is that user state changes constantly — especially in SaaS and consumer apps. Someone who signed up last week is a different person to market to than someone who activated three months ago and just went quiet.
Customer.io’s segment architecture is built on a different model: segments are dynamic conditions, not static lists. A user enters a segment the moment they match its criteria, and they leave it automatically the moment they no longer match. This real-time responsiveness is what makes Customer.io campaigns genuinely contextual rather than just personalised.
This guide covers how to build effective segments in Customer.io, how to use them across different campaign types, and how to architect a campaign structure that serves every distinct user state your product creates.
How Customer.io Segments Work
In Customer.io, a segment is a condition or set of conditions evaluated continuously against all the people in your workspace. When someone’s data changes — a new event fires, an attribute gets updated, a time threshold passes — Customer.io re-evaluates whether they belong in each relevant segment.
This is fundamentally different from a traditional list-based ESP where you’d need a workflow or manual process to move people between lists. In Customer.io, the movement is automatic and continuous.
The Three Types of Segment Conditions
Attribute-based conditions evaluate person-level data: values you’ve set via the Identify call or API. Examples: plan_type = "trial", account_age_days > 30, company_size = "enterprise", country = "UK". These are static values that you maintain on each person record.
Event-based conditions evaluate whether a specific event has or hasn’t occurred, within a time window or across all time. Examples: “Has performed feature_activated at least once in the last 30 days”, “Has not performed app_login in the last 7 days”, “Has performed payment_failed at least once”. The time windows are configurable and update continuously.
Combined conditions let you layer attribute and event conditions with AND/OR logic. This is where segments become genuinely powerful. “Is on a trial plan AND has not performed activation_milestone AND has performed app_login in the last 3 days” is a precise, high-value segment: trial users who are still engaged but haven’t activated. Your messaging to this group can be very targeted.
Building Segments That Reflect Real User States
The most useful segments map to meaningful user lifecycle states rather than arbitrary demographic groups. Start by identifying the distinct states a user can be in during their journey with your product.
For a typical SaaS product, meaningful lifecycle states include:
New trial user, not yet logged in — signed up but hasn’t returned to the product. High churn risk immediately. Your segment condition: signed_up_at > 24 hours ago AND has not performed app_login in last 24 hours AND plan = trial.
Active trial user, onboarding in progress — logging in, making progress, but not yet activated. Your highest-priority nurture audience. Segment: plan = trial AND onboarding_complete = false AND has performed app_login in last 3 days.
Activated trial user — has reached your activation milestone. The most likely conversion candidate. Segment: plan = trial AND activation_milestone_reached = true.
Paid user, healthy engagement — converted and actively using the product. Segment: plan != trial AND has performed app_login in last 14 days.
Paid user, declining engagement — converted but usage dropping. Churn risk. Segment: plan != trial AND has not performed app_login in last 14 days.
Churned user — cancelled subscription. Segment: churned_at is set.
Each of these segments becomes an audience for a specific campaign type. Your messaging to each group should be completely different because their needs, risks, and opportunities are completely different.
Segment Updating in Real Time
The real-time nature of Customer.io segments has practical implications for campaign design that many teams don’t fully utilise.
When you configure a campaign to use a segment as an entry trigger, Customer.io continuously checks for new entrants to that segment. The moment someone enters it, they’re eligible for campaign enrolment. This isn’t a daily batch process — it happens continuously throughout the day.
This means you can build a campaign that fires within minutes of a user entering a particular state. A paid user who goes 14 days without logging in enters your “declining engagement” segment and can receive a re-engagement email that same day — not at the next scheduled send time.
It also means segment exits are actionable. If you want to suppress campaign sends when a user upgrades, you can build suppression logic based on segment membership: “Do not send if person is in segment: Paid Users.” The moment someone converts, they leave the trial segment and enter the paid user segment, and the campaign immediately stops considering them as a target.
Campaign Types in Customer.io and When to Use Each
Customer.io offers two distinct campaign types, and understanding when to use each is essential for building a coherent campaign architecture.
Newsletter Campaigns
Newsletter campaigns are one-time broadcasts to a segment at a specific point in time. They’re the equivalent of a traditional email send: you choose an audience (a segment or a filtered view of your people), write the email, and send it — either immediately or at a scheduled time.
Use newsletter campaigns for:
- Product announcements and new feature launches
- Content newsletters (weekly digests, industry roundups)
- Time-sensitive promotions or offers
- Company news and updates
Newsletter campaigns are not reactive — they don’t respond to individual user behaviour. They’re appropriate when the message is the same for everyone in the audience at a given moment in time.
Triggered Campaigns
Triggered campaigns are the heart of behavioural email in Customer.io. They fire automatically when a specific condition is met: an event occurs, an attribute changes, or a user enters or exits a segment.
Triggered campaigns can be:
Event-triggered: Fire when a specific event is tracked. The email is personalised using event properties (e.g., {{ event.feature_name }}). Ideal for onboarding milestone acknowledgements, post-purchase sequences, and behavioural nudges.
Segment-triggered: Fire when a user enters a specific segment. Ideal for lifecycle state transitions — a user entering the “declining engagement” segment, a trial user reaching the expiry window, a new customer entering a welcome nurture sequence.
Date-based: Fire at a specific time relative to a date attribute on the person record. Ideal for subscription renewal reminders, anniversary emails, and trial expiry sequences.
Use triggered campaigns for everything that should respond to individual user behaviour or state. This is the majority of your most impactful email programmes.
Using Segments to Personalise Campaign Content
Segments aren’t just audience-selection tools — they’re also the basis for personalisation within campaigns using Customer.io’s Liquid templating.
Within any campaign email, you can use conditional logic based on segment membership or person attributes:
{% if customer.plan == "pro" %}
As a Pro user, you have access to unlimited reporting...
{% elsif customer.plan == "starter" %}
Upgrade to Pro to unlock unlimited reporting...
{% endif %}
This allows a single campaign to deliver meaningfully different content to users in different states, without managing separate campaigns for each variation. You might have a weekly product tips newsletter that shows different feature highlights depending on which features each user has and hasn’t yet activated — all handled in a single campaign with segment-based conditional blocks.
Building a Campaign Architecture That Serves Different User States
With segments defined and campaign types understood, you can design a complete campaign architecture that ensures every user state is served by an appropriate programme.
The architecture should cover five zones:
Zone 1: Acquisition to Activation — campaigns that fire between signup and activation milestone. Segment-triggered. Focused on product guidance and milestone encouragement.
Zone 2: Trial Conversion — campaigns that fire as the trial window closes. Date-triggered based on trial_ends_at. Focused on upgrade value and urgency.
Zone 3: Onboarded Customer Adoption — campaigns that fire after conversion, helping paying users adopt deeper features. Event-triggered on feature milestones. Focused on outcomes and ROI.
Zone 4: Engagement Maintenance — regular touchpoints for healthy paid users. Newsletter campaigns and low-frequency event-triggered tips. Focused on product news and value realisation.
Zone 5: Churn Prevention — campaigns for declining engagement segments. Segment-triggered on inactivity thresholds. Focused on re-engagement and identifying blockers.
Each zone has its own set of segments as entry/exit conditions, its own campaign type mix, and its own messaging strategy. The zones connect: a user progresses through them as their lifecycle advances, with Customer.io’s real-time segment evaluation handling the routing automatically.
Avoiding Overlap and Message Fatigue
One of the risks of a rich campaign architecture is that users end up in multiple campaigns simultaneously and receive too many emails. Customer.io provides several tools to manage this.
Campaign suppression conditions let you prevent a campaign from sending to a user who is currently in another high-priority campaign. Configure these for every campaign that targets overlapping audiences.
Global frequency caps (available in some plan tiers) limit how many campaigns a single person can receive within a given time window, regardless of how many campaigns they qualify for.
Priority ordering within the campaign settings lets Customer.io respect the most relevant campaign when a user qualifies for multiple triggered entries simultaneously.
Build suppression into every campaign as standard practice, not as an afterthought. Decide which campaigns take priority for which segments, and encode that logic explicitly.
The Segment Hygiene Habit
Customer.io segments are only as useful as the data that feeds them. Build a regular habit of auditing your segment populations — checking that the counts make sense, that users are entering and exiting segments at the rates you’d expect, and that the underlying attributes and events are firing correctly.
If a segment that should contain 500 users contains 50, there’s either a tracking issue (events not firing) or a data issue (attributes not being updated). Both are worth investigating before building campaign logic on top of unreliable foundations.
The invest-in-data-first principle applies here as much as anywhere in Customer.io: clean, reliable events and attributes produce segments that work. Unreliable data produces campaigns that send to the wrong people at the wrong time — which is worse than not sending at all.
Working With Excelohunt
Designing a Customer.io segment and campaign architecture that covers the full user lifecycle — and keeps it maintainable as your product evolves — is a strategic task as much as a technical one. Excelohunt builds and audits Customer.io campaign architectures for SaaS and app-based businesses, ensuring your segments reflect real user states and your campaigns fire with the precision behavioural email requires.
Related Excelohunt Services
Looking to implement these strategies with expert support?
- Customer.io — learn how we implement this for clients
- Email Campaigns — learn how we implement this for clients Get a free audit →
Want Us to Implement This for Your Brand?
Get a free email audit and see exactly where you're losing revenue.
Get Your Free Audit