The 14‑day trial sequence that turns dabblers into paying Shopify app customers
A behaviour-driven 14‑day trial journey for Shopify apps that uses custom events, tags, and targeted emails to move merchants from install to activation, show real value, and cleanly convert more trials into paying customers.
Industry
Niche
Pattern
Loading sequence...
The signup looks perfect on paper.
“New trial: BoldThreads Apparel – Shopify Plus – 14‑day Pro plan.”
They click “Install app” in the Shopify App Store, accept permissions, poke around your dashboard for six minutes, then disappear. Fourteen days later, Stripe quietly archives another unpaid subscription. Your MRR graph barely twitches.
You probably already send a welcome email and maybe a “Your trial ends soon” reminder. But if that’s all you do, you’re leaving a lot of lifetime value on the table. For Shopify apps and e‑commerce tools, the gap between “installed” and “activated” is where revenue dies.
The sequence at the top of this page is the whole journey, end to end. It’s a free‑trial nurture built around behavior, not a fixed drip: triggered when a trial starts, watching what the merchant actually does, and escalating from education to urgency as the 14‑day clock winds down.
Our example company is CartWizard, a cart‑recovery and post‑purchase upsell app doing $90k MRR. They run a 14‑day free trial on the Shopify App Store, charge $39–$149/mo after that, and track key product events (app_installed, flow_enabled, order_recovered, advanced_features_used) into Spreeflo via the SDK and backend API. Their goal: move trial‑to‑paid from 17% to 25% without hiring a salesperson.
This playbook is how they do it.
Why “set and forget” trials quietly churn
Shopify app developers are good at getting installs. You’ve learned App Store SEO, thumbnails, and review requests. But once the install lands, two problems show up:
Install ≠ activation. For CartWizard, a valuable trial user is not someone who clicked “Add app.” It’s someone who:
- Turned on at least one default recovery flow.
- Recovered at least one order.
- Looked at the recovered‑revenue report.Time is fixed, attention is not. The trial timer ticks down regardless of what the merchant does. Their attention spikes the day they install, then gets swallowed by order issues, staff, and 20 other apps.
A generic weekly newsletter doesn’t solve this. You need a sequence that:
Starts the moment a trial begins.
Responds to what they have or haven’t done.
Surfaces value early, then adds urgency near the end.
That’s exactly what the journey in this pattern is built to do.
Start with a behaviour‑aware trigger, not a static list
This isn’t a one‑off campaign. It’s a journey that runs whenever someone starts a trial.
CartWizard wires a Custom Event into Spreeflo whenever a new trial starts:
Event name:
trial_startedProperties:
plan,store_size,shopify_plan,trial_length_days
In the journey, the first node is a Custom Event trigger set to trial_started. This is more precise than “Add to Audience” because:
It only pulls in trial users, not every newsletter opt‑in.
It can branch later on trial length or plan without recomputing segments elsewhere.
Trigger configuration:
Custom Event:
trial_startedNo property filters here (you want every trial).
Re‑enrollment: off. If someone cancels and restarts months later, that’s a fresh trial with a new event and you can choose to create a separate win‑back journey.
If your architecture uses server‑side calls, this is handled by your backend posting trial_started to the Spreeflo API. If you prefer, you can send it from the Spreeflo SDK inside your app.
The point: the journey is anchored to a clear, explicit “trial started” moment, so timing stays accurate even if contacts pre‑exist in your database.
Tag and identify trialists so the rest of your system plays nice
Immediately after the trigger, CartWizard runs an Add Tag action:
Tag:
trial-activeOptional second tag:
trial-length-14for branching later if you run 7, 14, and 30‑day trials.
Why this matters:
Other journeys and campaigns can simply exclude
trial-activeso you don’t carpet‑bomb trial users with generic marketing while they’re onboarding.Support and sales tooling can filter on
trial-activeto prioritize responses.
Configuration:
Add Tag with
trial-active(and optionally the length tag).“Force tag trigger” off. You’re not trying to ping other Added Tag triggers; this is a lifecycle label.
If your contact model is still flat, this is the moment to clean it up. Use tags and audiences as your backbone instead of random CSVs and one‑off lists.
Day 0: welcome email focused on first activation, not features
The next node: Send Email.
Email 1 lands within minutes of the trial_started event. Its job is simple: get them to the first meaningful in‑app action. For CartWizard, that’s enabling the default cart recovery flow.
The content looks like:
Subject: “You’ve got 14 days. Here’s how to see results in 24 hours.”
Line one: acknowledges the install and sets expectations: “You just started a CartWizard trial. You don’t need all the features to see value. You just need one flow live.”
One clear CTA: “Turn on your default recovery flow” with a deep link back into the app.
Journey configuration:
Send Email node, template “Trial Day 0 – Activate recovery.”
From: a real human (e.g. “Maya at CartWizard”), not “no‑reply”.
“Send only once” on.
Why send immediately? Because motivation is highest just after install, and your app’s settings tab is probably still open. Waiting even a few hours risks losing that focus.
What skipping this costs: if your first email is a feature catalog or a generic company story, you burn that spike of intent without moving them toward activation.
Day 1: pause, then branch on actual behavior
After Email 1, insert a Time Delay of 1 day via the Time Delay node. This gives them time to click through and act. Then the journey forks based on what they did.
CartWizard tracks flow_enabled as a custom event when the merchant turns on their first recovery flow. So the next step is a Wait Condition:
Condition: Custom Event
flow_enabledhas triggered at least 1 time in the last 1 day.Timeout: 1 day.
Immediately after the Wait Condition, add an If/Else process:
“Yes” branch: they enabled a flow.
“Else” branch: they didn’t.
Why pair Wait Condition + If/Else? Because you want to give them a window to act before escalating, but also move on quickly if they don’t. The Wait Condition keeps the journey flexible: it resumes early if they activate fast, or after 24 hours if they ignore you.
This is the first behaviour‑aware decision point. From here on, trialists with the same “days since signup” will see different emails depending on what they’ve touched.
Path A: activated early? Teach them how to win bigger
On the “activated” side of the If/Else, you’re not begging them to turn things on anymore. You’re guiding them toward deeper usage.
CartWizard’s path looks like:
Send Email: “Nice — here’s how to double that recovery.”
- Show them where to see recovered revenue.
- Introduce one higher‑impact tweak: better subject lines, an extra step in the flow, or dynamic discounts.
- CTA to an “Optimization” screen.Time Delay: 2 days.
Send Email: “Power users do these three things in week one.”
- Highlight advanced features: multi‑step upsells, SMS integration, A/B testing.
- Include a quick Loom walkthrough or link to documentation.
Journey details:
Both emails set to “send only once.”
No urgent tone yet; they’re already engaged.
You can optionally insert a Multi-way Split before that second email based on a “store_size” attribute or total order volume:
Small stores get scrappy tactics (“Set your minimum cart value lower to see wins faster.”).
Plus merchants get “protect margin and brand” guidance.
The segment builder handles this logic cleanly without writing SQL.
The goal of this path: turn an activated trialist into a power user before the paywall hits, so renewal feels like a no‑brainer.
Path B: stalled? Remove friction, don’t nag
On the “no activation yet” branch, you assume something is blocking them.
Email here (Day 1–2) is different:
Subject: “Do you want us to set CartWizard up for you?”
Inside:
- Acknowledge reality: “Most stores install CartWizard meaning to finish setup the same day… then orders and staff get in the way.”
- List the top two blockers you see from support: fear of breaking checkout, being unsure which flow to start with.
- Offer two options:
- 1‑click “Finish setup” link back to the simplest setup flow.
- A link to a 10‑minute walkthrough or a live setup slot for qualifying stores.
Journey configuration:
Send Email node labelled “Trial Day 1 – Need help?”.
“Send only once” on.
Followed by another Wait Condition watching
flow_enabledfor up to 2 more days.
If they still don’t enable anything after that second wait, you have a decision: continue nudging or accept they’re a low‑intent trial. CartWizard sends one more message near mid‑trial, but changes the angle.
Mid‑trial, stalled path:
Send Email: “What made you install CartWizard?” with 3 quick buttons:
- “Increase recovered revenue”
- “Test against my current app”
- “Not sure yet / just exploring”Each button link can Add Tag (
trial-goal-revenue,trial-goal-compare, etc.) to drive future segmentation.
Even if they churn, you now have better context for later win‑back campaigns.
Countdown phase: move from education to clear urgency
A 14‑day trial always ends the same way: a paywall. The difference is whether trialists see it coming and feel ready.
For CartWizard, the countdown phase kicks in on Day 10. You can reach this point via:
The engaged path (they activated early).
The once‑stalled‑but‑now‑activated path.
The never‑really‑activated path.
You don’t want three separate mazes, so use a Merge process node:
Feed the different branches into a Merge.
From the Merge, add a Time Delay that lands everyone roughly on “4 days left.”
Then use another If/Else based on behaviour during the trial:
Condition: Custom Event
order_recoveredhas triggered at least 1 time during the trial window.Yes branch: they’ve seen real revenue.
Else branch: they haven’t.
Countdown email for “value seen” path:
Subject: “CartWizard has recovered $X so far. Your trial ends in 4 days.”
Body:
- Show their recovered revenue (or average if you don’t personalize yet).
- Highlight what happens after trial: “Flows keep running, you keep getting recovered orders. Without upgrading, flows stop.”
- Simple pricing explanation and CTA to “Choose a plan.”
Countdown email for “no value yet” path:
Subject: “Still deciding about CartWizard? Let’s get you a real test.”
Body:
- Admit they haven’t seen much yet: “So far, you don’t have enough data to know if CartWizard pays for itself.”
- Offer:
- Help to get flows live now.
- If your economics allow, a quiet extension for high‑intent stores (“Reply with your store URL and we’ll extend your trial after we help you set up.”).
Journey configuration:
Two Send Email nodes after the If/Else, each tailored.
Both set to “send only once.”
Time Delay of 3 days, landing you the day before expiry.
Finally, a last‑day reminder:
One more Send Email from a Merge of those paths:
- Subject: “Last day of your CartWizard trial.”
- Short, no fluff. “Tomorrow, recovery flows pause unless you pick a plan.”
You don’t need to beg. You’ve had two weeks to prove value. This is just the final nudge.
Exit cleanly: paid, churned, or paused
A free‑trial nurture doesn’t end when the timer does. It ends when the contact’s status is clear.
CartWizard sends trial_converted and trial_expired events from their backend. At the tail of the journey:
Insert a Wait Condition for up to 2 days after expiry:
- Condition: Custom Eventtrial_convertedtriggered at least 1 time over all time.If yes:
- Remove Tagtrial-active.
- Add Tagcustomer-active.
- Optionally increment a numeric “plans_started” attribute via Update Contact Attribute for cohort analysis.
- Drop them into a separate onboarding‑for‑paid journey triggered by Added Tagcustomer-active.If the timeout expires with no conversion:
- Remove Tagtrial-active.
- Add Tagtrial-churned.
- Optionally Send Internal Email to yourself or a teammate for high‑value stores (“BoldThreads churned from trial”) using the Send Internal Email node.
Notice what you’re not doing: spamming post‑churn discount offers to everyone. Those can be separate, well‑timed journeys, not a panicked reaction baked into this one.
Throughout, email subscription status is honored. If a contact unsubscribes via your email footer, the Update Email Subscription Status happens behind the scenes and future Send Email nodes simply don’t fire for them. The journey can still update tags and attributes, but respects their inbox.
Why this behaviour‑driven trial sequence pays for itself
For CartWizard, wiring this journey in Spreeflo changed three core metrics over a quarter:
Trial activation (at least one flow enabled) went from 52% to 68%.
“Value seen” (at least one
order_recoveredevent) went from 31% to 47%.Trial‑to‑paid conversion climbed from 17% to 24%.
They didn’t add SDRs. They didn’t triple ad spend. They simply stopped treating every trial the same.
Underneath those numbers is a mindset shift: most SaaS, especially Shopify apps, leak lifetime value because they don’t nurture engagement. They over‑optimize the App Store listing and under‑invest in what happens after install.
This pattern flips that:
Every trial starts in the same place (a
trial_startedCustom Event).The journey branches based on what contacts actually do.
Messaging escalates from “here’s how to get started” to “here’s the outcome you’re seeing” to “here’s your decision point.”
Spreeflo’s campaigns & journeys editor plus event tracking make this wiring straightforward: Custom Event triggers, Wait Conditions, If/Else processes, and a few Send Email nodes do most of the work. You bring your product knowledge and copy; the platform handles the targeting and timing.
You built your app so merchants don’t have to manually chase every abandoned cart or crunch every metric. Treat your free trial the same way. Capture the signals you already have, feed them into a behaviour‑aware journey, and let a well‑designed sequence work the trial for you, every day, while you keep building.