A trial flow can look polished and still fail if it starts at the wrong moment. In Customer.io, most trial onboarding issues come from bad timing, missing data, or loose exit rules.
Fix those first, and the build becomes much easier. The setup below gives you a working Customer.io trial onboarding flow you can use as a repeatable template.
Pick the Event That Starts the Trial
Your first decision is simple, but it controls everything after it. You need one event that defines day zero for the trial.
These are the three common choices:
| Trigger | Use it when | Main risk |
|---|---|---|
signed_up | Every new signup gets a trial immediately | Reminder timing breaks if trials start later |
trial_started | Trial access begins after billing, setup, or approval | You need a reliable event from your app or billing system |
| First key event | The trial starts only after a user completes setup | Some users may never enter the flow |
For most products, trial_started is the cleanest trigger. It lines up with the real countdown, which makes expiry reminders and conversion checks much easier.
If every signup starts a trial at once, signed_up is fine. If trial access begins only after a setup step, then trigger from that step instead. Don’t mix signup time and trial time in the same flow unless they are always the same.
Also decide how late entries should work. If a user can start a trial through a billing page, sales assist, or import, keep a fallback segment like “in trial and not yet enrolled.” That catches edge cases without changing the main trigger.
Pick one day-zero event and build the whole timeline around it. Mixing signup time with trial time causes most reminder bugs.
Define the Data Customer.io Needs
Customer.io runs on two data types, person attributes and events. Your trial onboarding logic needs both.
At a minimum, send these person-level fields:
emailidor another stable user keytrial_start_attrial_end_attimezoneplan_nameor trial typeis_paidor a paid status flagactivated_at, if you store milestone dates as attributes
Then send the events that move people through the flow:
signed_uptrial_started- your activation event, such as
project_createdorfirst_report_published converted_to_paidtrial_extended, if extensions are possiblecanceledorsubscription_deleted
Name events once and keep them stable. If your app sends workspace_created today and created_workspace next month, your branches become hard to trust.
Use timestamps from the system that owns the truth. For example, if billing controls trial end dates, take trial_end_at from billing, not from a guessed value in the app. Send dates in a consistent format, usually ISO 8601.
If your product is account-based, decide whether the flow follows a person or a workspace. Many B2B teams send onboarding to the account owner while storing workspace status on that person’s profile. That works, but only if the data model is clear.
Customer.io’s feature set changes over time, so verify current options in the Customer.io onboarding overview and recent release notes. If you’re also documenting event tracking or lifecycle automation for your team, use this same data map as the source document.
Create Segments Before You Build Messages
A good trial onboarding flow is easier to read when the audience rules live in segments, not inside long branch conditions.
Start with a few practical segments:
- Active trial users
- Trial users who reached activation
- Trial users who have not activated
- Trial users expiring soon
- Paid users, to use as an exclusion group
- Internal and test users, to exclude from sends
In Customer.io, you can trigger entry from an event, a segment, or both, depending on how your workspace is set up. Keep the logic simple. If your main entry is trial_started, segments should support the journey, not compete with it.
A useful pattern is to keep one segment for operational safety, such as “trial active and not in paid status.” Then use branches inside the journey for behavior-based steps.
If a condition reads like a legal contract, split it out. Segments are easier to QA, easier to reuse, and easier to hand off to another person later.
Build the Journey Logic With Delays, Branches, and Exits
Now create the campaign or journey, depending on the current UI in your workspace.

A reusable trial onboarding template usually looks like this:
- Enter the journey on
trial_started, or on entry to your active trial segment. - Send the first message right away. Keep it focused on the next action, not a full product tour.
- Wait for either the activation event or a short time limit, such as 24 hours.
- Branch based on activation status.
- Schedule mid-trial guidance.
- Schedule trial expiry reminders from the actual end date.
- Exit the person when they convert, cancel, or leave the trial window.
The first branch matters most. If a user activates early, stop pushing setup content. Move them to deeper guidance, milestone tips, or account expansion steps.
Mid-trial messages should reflect behavior. If someone has done nothing, send one concrete task. If they already activated, send a usage prompt or a second-step action. For message ideas, ProductLed’s onboarding email examples and this SaaS email sequence guide are useful references.
For delays, use trial_end_at whenever possible. A fixed wait of seven days works only if every trial lasts seven days and no one gets an extension.
Use date-based waits tied to
trial_end_atwhen the end date can change. Fixed waits break as soon as a trial is extended.
Your expiry path is usually simple: remind users a few days before the end, one day before, and on the last day if your product and local rules allow it. Respect timezone data if you have it. A “last day” email sent at 2:00 a.m. local time is easy to ignore.
If your plan includes in-app, SMS, mobile push, or tooltips, use them for time-sensitive or context-based steps, not as a copy of every email. A tooltip near the activation action can work well, but only if the user is already in the product.
Finally, add exit rules at multiple points. Don’t wait until the last step. If a person becomes paid after the second email, remove them from the trial flow right there.
Test the Flow Before You Turn It On
Testing matters more than copy changes. A short flow with clean rules beats a polished sequence that misfires.

Create at least three test profiles. Use one fresh trial user, one user who already activated, and one converted customer. Then replay events in the right order and in the wrong order.
Check these points as you test:
- The person enters only once
- Delays use the expected timestamp
- Activation branches switch correctly
- Paid users exit right away
- Expiry reminders respect timezone and trial extensions
- Internal domains stay excluded
Also inspect the activity log for each test person. Look for skipped steps, duplicate sends, or waits that schedule from the wrong date.
Track a small set of metrics from the start. For most teams, the important ones are activation rate, time to activation, and trial-to-paid conversion. Those numbers tell you whether the workflow is helping, not just sending.
If you keep separate internal guides, this is a good point to document related topics like customer onboarding emails, trial expiry reminders, lifecycle automation, and activation metrics.
Common Mistakes That Break Trial Onboarding
Most broken Customer.io trial onboarding setups fail for predictable reasons.
Missing attributes are the first problem. If trial_end_at or paid status is blank, reminder timing and exit rules fall apart.
Race conditions are next. If the activation event lands before trial_started, the user can enter the flow already “late.” In that case, add a short initial delay or fix event order at the source.
Duplicate enrollment is common when a person can enter from both an event and a segment. Pick one primary entry path, then use the other only as a backup with strict filters.
Timezone issues show up near the end of the trial. If your account stores UTC but your users live across regions, a “tomorrow” email can arrive too early or too late.
Missing conversion or exit criteria causes the most visible damage. Paid users keep getting trial nudges, canceled users stay in reminders, and extended trials keep old schedules. Define those exits before you write the second email.
One more problem is flow overload. If self-serve users and sales-assisted trials behave differently, split them early. One journey can support both only if their timing and milestones are close.
Conclusion
The hard part of Customer.io trial onboarding is not the email copy. It’s the rule set behind the flow.
When you pick one clear trigger, send clean event data, branch on real behavior, and exit people the moment they no longer belong, the automation stays readable and reliable. That structure gives you a trial journey you can test, reuse, and improve without guessing.