TL;DR: Customer.io is the right lifecycle marketing platform when your most important signals come from what users do inside your product — not just what they fill out in forms. Its event-based data model, Liquid templating, and multi-channel campaign builder make it the natural choice for product-led SaaS teams.
This guide covers Customer.io's data model for lifecycle campaigns, how to build an event-triggered onboarding journey, behavioural segmentation, Liquid personalisation, and where it beats HubSpot — and where it does not. For the strategic lifecycle framework underpinning all of this, see our lifecycle marketing strategy guide.
Why Customer.io for lifecycle marketing?
Most marketing automation platforms are built around forms. A contact fills in a form, a workflow fires. That model works well when your most important lifecycle signals are CRM interactions: form fills, email opens, deal stage changes.
It breaks down for product-led SaaS teams where the most important signals are in the product itself: did the user complete onboarding? Did they invite a teammate? Have they logged in in the last 14 days? Did they hit the usage threshold for their plan tier?
Customer.io is built around events — actions that happen — and attributes — properties of a person or their behaviour. This means a lifecycle campaign can fire the moment a user completes (or fails to complete) a specific product action, without waiting for a CRM field to be manually updated by someone on the team.
This is the architecture that makes real lifecycle marketing possible for PLG SaaS teams.
The Customer.io data model
Customer.io structures data around three core concepts:
People: Individual contacts, identified by email or a unique ID. Each person has attributes — properties like plan_tier, days_since_signup, onboarding_complete, nps_score.
Events: Actions a person takes, tracked in real time. Each event has a name ('Signed Up', 'Used Feature X', 'Invited Teammate') and can carry properties ('feature_name': 'dashboard', 'invited_count': 3).
Attributes: Properties of a person that describe their current state. Unlike events (which are momentary), attributes persist and can be queried in segment conditions ('plan_tier is Free AND days_since_signup > 14').
How data gets into Customer.io:
- JavaScript snippet (browser-side tracking)
- Server-side API calls (from your product backend)
- Segment or RudderStack (CDP integration — recommended for production use)
- Native integrations (Stripe, Salesforce, Zendesk, and others)
The cleanest architecture for a SaaS product is server-side API calls for events (most reliable) and a CDP like Segment for routing data from multiple sources into Customer.io.
Key events to track for lifecycle marketing
Before building any campaigns, define the events that matter for your lifecycle stages. A starting framework:
| Event | Lifecycle stage | Trigger |
|---|---|---|
| Signed Up | Stranger → Prospect | Account creation |
| Onboarding Step Completed | New Customer | Each onboarding step |
| First Value Moment Reached | New Customer → Active | The FVM action you have defined |
| Used Feature X | Active Customer | Any key feature usage |
| Invited Teammate | Active Customer | Collaboration signal |
| Became Inactive | Active → At-Risk | Computed: last seen > 14 days |
| Upgraded Plan | Active / Loyal | Plan change |
| Submitted NPS | Any stage | NPS survey completion |
| Referred Contact | Loyal → Advocate | Referral programme activity |
For the full seven-stage framework these events map to, see the lifecycle marketing strategy guide.
Building a lifecycle campaign in Customer.io: onboarding example
The following campaign gets a new SaaS user from signup to their first value moment within 7 days. The goal condition — 'First Value Moment Reached' — exits the user from the campaign immediately when triggered, regardless of where they are in the sequence.
Campaign type: Journey (event-triggered)
Trigger event: Signed Up
Goal condition: Event First Value Moment Reached is fired
| Step | Timing | Condition | Action |
|---|---|---|---|
| Email 1 | Immediately | — | Welcome — one clear first action |
| Wait | 2 days | Goal not met | — |
| Email 2 | Day 2 | FVM not reached | Getting started guide / walkthrough |
| Wait | 3 days | Goal not met | — |
| Email 3 | Day 5 | FVM not reached | Shortcut or offer to book onboarding call |
| Wait | 2 days | Goal not met | — |
| Email 4 | Day 7 | FVM still not reached | Route to re-engagement track |
The power here is the goal condition. A user who completes their first project on Day 1 exits the campaign immediately and enters the Active Customer track. A user who reaches Day 7 without completing it routes to a different campaign designed for at-risk early-stage customers.
For detailed onboarding sequence copy and timing, see our SaaS onboarding email sequence guide.
Behavioural segmentation in Customer.io
Customer.io's segment builder combines event conditions and attribute conditions for precise lifecycle targeting. Unlike static list segments, Customer.io segments update in real time as events fire and attributes change.
| Segment name | Criteria | Purpose |
|---|---|---|
| Onboarding incomplete | Signed Up > 3 days ago AND onboarding_complete = false | Intervention campaign |
| At-risk customers | last_seen > 14 days AND plan_tier ≠ Free | Re-engagement campaign |
| Upsell candidates | plan_tier = Starter AND feature usage > 20 in 30 days | Upgrade campaign |
| NPS detractors | nps_score ≤ 6 AND days_since_signup > 30 | Save campaign |
| Advocate candidates | nps_score ≥ 9 AND days_since_signup ≥ 90 AND plan_tier ∈ Pro, Enterprise | Advocacy invite |
| Feature non-adopters | Customer AND used_feature_x = false AND days as Customer > 14 | Feature adoption campaign |
For how to layer persona and intent on top of these behavioural segments, see our CRM segmentation strategy guide.
Personalisation with Liquid templating
Customer.io uses Liquid — the same templating language used by Shopify — for email personalisation. This enables a single email template to render differently for every recipient based on their attributes and event history. No engineering required for standard personalisation.
Practical examples
Personalised greeting with fallback: Hello {{ customer.first_name | default: "there" }}, Plan-based conditional content: {% if customer.plan_tier == "free" %} You are currently on our free plan. Here is what you unlock with Pro: {% elsif customer.plan_tier == "starter" %} As a Starter user, you are already getting [X]. Here is what Pro adds: {% else %} As a Pro user, here is what is new this month: {% endif %} Days since signup: {% if customer.days_since_signup < 7 %} You are just getting started — here is the fastest path to [result]. {% elsif customer.days_since_signup < 30 %} You have been with us for {{ customer.days_since_signup }} days. {% endif %} Feature recommendation: {% if customer.used_integrations == false %} Did you know you can connect your CRM in 2 clicks? {% endif %}
This level of personalisation — conditional content blocks based on live attributes — is what makes Customer.io sequences feel individually relevant rather than broadcast. For the email sequence frameworks that use this personalisation, see our email nurture sequences guide.
Multi-channel lifecycle campaigns
Customer.io supports email, push notifications, SMS, in-app messages, and webhooks in a single campaign journey. A complete re-engagement journey for an at-risk SaaS user might look like:
| Day | Channel | Condition | Message |
|---|---|---|---|
| 0 | Inactivity trigger | Gentle check-in — one helpful resource | |
| 3 | In-app banner | No login in 3 days | "Welcome back — here is what is new" |
| 7 | Still inactive | Pure value email — no ask | |
| 10 | Push notification | Mobile user, still inactive | "You have [X] projects waiting" |
| 14 | Final | Honest close — easy re-entry or exit |
The key is orchestrating channels based on the individual's behaviour — have they logged in? opened the email? clicked anything? — rather than firing all channels on a fixed schedule regardless of response.
Customer.io vs HubSpot: which is right for your team?
| Capability | Customer.io | HubSpot |
|---|---|---|
| Lifecycle trigger model | Event-based (product behaviour) | Property and form-based (CRM) |
| Personalisation depth | Liquid templating — very deep | Smart content — good |
| CRM and sales pipeline | Basic — integrates via Segment/API | Native — full CRM built in |
| Multi-channel | Email, push, SMS, in-app, webhooks | Email, SMS, ads, social |
| AI features | Limited native AI | Breeze AI — growing |
| Reporting | Campaign-level — strong | CRM-integrated — stronger for B2B |
| Best for | PLG SaaS, product-led teams | Sales-led B2B, HubSpot CRM users |
| HubSpot coexistence | Common — Cust.io for product triggers, HubSpot for CRM | — |
Many B2B SaaS teams use both: HubSpot as the CRM of record and Customer.io for product-triggered campaigns. For the HubSpot-specific setup guide, see how to build a lifecycle marketing engine in HubSpot. For AI tools that extend Customer.io's native capabilities, see our AI lifecycle marketing tools guide.
Common Customer.io implementation mistakes
Mistake 1: Tracking events client-side only
Browser-based event tracking misses users who clear cookies, use ad blockers, or switch devices. For lifecycle marketing accuracy, track critical events (signup, onboarding steps, feature usage) server-side via the Customer.io API. Use client-side tracking only for supplementary signals.
Mistake 2: Not defining goal conditions on campaigns
Without goal conditions, a user who reaches their first value moment on Day 1 still receives all seven onboarding emails. This is the lifecycle equivalent of sending a welcome email to an existing customer of 3 years. Always set goal conditions on campaigns with a clear success signal.
Mistake 3: Over-personalising before the data is clean
Liquid templating is powerful but exposes data quality problems immediately. The first_name fallback covers for missing names. But conditionals based on plan_tier will render incorrectly if plan_tier is not being reliably sent from your product backend. Audit your event and attribute data quality before building complex personalisation.
Mistake 4: Building one campaign per sequence instead of one per lifecycle stage
Customer.io campaigns are composable. Build a campaign for each lifecycle stage — Active Customer, At-Risk, Advocate — and manage stage transitions by changing the person's lifecycle_stage attribute, which then triggers entry into the appropriate campaign. This is more maintainable than having 15 disconnected campaigns with overlapping audiences.
Frequently asked questions
What is Customer.io used for?
Customer.io is a marketing automation platform primarily used for event-triggered, behavioural lifecycle campaigns. It is best known for its event-based data model (tracking actions users take in your product), Liquid personalisation (adapting email content dynamically per recipient), and multi-channel campaign builder (email, push, SMS, in-app, webhooks in a single flow).
How does Customer.io differ from HubSpot?
HubSpot is built around CRM data — form fills, contact properties, and deal stages. Customer.io is built around product events and user behaviour. HubSpot excels for sales-led B2B teams; Customer.io excels for product-led SaaS teams where lifecycle signals come from in-app actions. Many teams use both.
What is Liquid templating in Customer.io?
Liquid is a templating language (also used by Shopify) that allows email content to be dynamically adapted per recipient based on their attributes and event history. It enables conditional content blocks, personalised CTAs, and dynamic product recommendations within a single email template — without requiring engineering support for standard use cases.
Can Customer.io and HubSpot be used together?
Yes — this is a common architecture for B2B SaaS teams. Customer.io handles product-triggered lifecycle campaigns; HubSpot handles CRM, sales pipeline, and executive reporting. Data is typically synced via Segment (CDP), RudderStack, or a direct Customer.io–HubSpot integration.
What is an event in Customer.io?
An event is an action a person takes, tracked in real time. Examples: 'Signed Up', 'Completed Onboarding', 'Used Feature X', 'Invited Teammate'. Events can carry properties (e.g. 'feature_name': 'dashboard') and are used as campaign triggers, segment criteria, and goal conditions.
How do I set up lifecycle stages in Customer.io?
Customer.io does not have a native lifecycle stage field like HubSpot. The recommended approach is to set a lifecycle_stage attribute on each person ('prospect', 'new_customer', 'active', 'at_risk', 'advocate') and update it via API when stage transitions occur. Campaigns are then triggered by attribute changes or specific events rather than a built-in stage system.
Next steps
- Lifecycle marketing: from stranger to advocate — understand the full strategy
- How to build a lifecycle engine in HubSpot — compare with HubSpot
- SaaS onboarding email sequence guide — build your onboarding campaign
- AI lifecycle marketing tools guide — write sequences with AI
- Book a go-to-market assessment — audit your current setup
- Work with ARISE GTM
- Talk to Paul
About the author
Paul Sullivan
Founder of ARISE GTM and creator of the ARISE GTM Methodology®. Author of Go To Market Uncovered (Wiley, 2025) and host of the GTM Uncovered podcast. Paul has designed lifecycle marketing architectures using Customer.io, HubSpot, and hybrid setups for B2B SaaS teams across EMEA. Platform recommendations are based on the specific team's lifecycle signal model — not platform preference — and are always rooted in the ARISE GTM Methodology® (Assess, Research, Ideate, Strategise, Execute).
- HubSpot Platinum Solutions Partner
- Here East, Queen Elizabeth Olympic Park, London E15 2GW
- Paul Sullivan Marketing Limited t/a ARISE GTM (Companies House 10614777)
- Work with ARISE GTM · Speak to Paul · GTM Uncovered on Spotify · @gtmuncovered
Guide based on ARISE GTM's Customer.io lifecycle marketing engagements (2022–2026) and Customer.io platform specifications current as of April 2026.