Stop Letting Day-One Trials Ghost You: A Dormant Trial Nudge for Shopify Apps
This playbook walks through a behavior-based Spreeflo journey that targets dormant Shopify app trials, using events, tags, delays, and focused emails to nudge day-one ghosts into activation, deepen engagement, and quietly lift trial-to-paid conversion.
Industry
Niche
Pattern
Loading sequence...
CartWizard had what every Shopify app founder wants: a strong install curve and glowing reviews from the people who actually used the product.
The problem was the silent majority who didn’t.
Roughly 40% of new trials would install the app, click around for a few minutes, then disappear. No campaigns created, no flows turned on, no data in the dashboard. A week later, those stores quietly churned out of trial, never hitting a “paid” state, never replying to generic onboarding emails.
Same trial length. Same product. Two completely different outcomes.
The only meaningful difference? The people who stuck around had done at least one high‑value action in the first 24–48 hours. Everyone else simply never came back.
The sequence at the top of this page is the whole journey, end to end. It’s designed specifically for that second group: trial users who install, fail to reach activation on day one, and go dark. They get a completely different sequence from the active triallers already engaging with your app.
Below, we’ll walk through that journey node by node inside Spreeflo, explain why it’s built the way it is, and show you how to adapt it to your own Shopify or e‑commerce app.
Why “one welcome sequence for everyone” quietly kills trial conversion
Most SaaS onboarding for Shopify apps follows a familiar pattern:
Install → generic welcome email with a feature tour
Day 2 → another generic email with “Did you know you can also…?”
Day 5 → “Your trial is ending soon” email
Everyone gets the same three touches, regardless of behavior. That’s easy to set up, but it ignores the single strongest predictor of trial success: whether a user actually does something valuable early on.
For your niche, that usually means actions like:
Creating their first automation flow or campaign
Enabling a core feature (abandoned cart, post‑purchase upsell, reviews, etc.)
Integrating with their store theme or another key app
If someone hasn’t done any of that after day one, they don’t need a “here are ten advanced features” email. They need one specific thing: a short, opinionated path to first value.
This is exactly what this “dormant-trial nudge” journey does:
It captures detail on every customer: who started a trial, who hit activation events, who bounced.
It treats dormant trial users as a separate audience and nurtures them differently.
It plugs one of the biggest lifetime-value leaks for Shopify apps: trials that die before the user ever sees a result.
Let’s start with the data this relies on, then walk through the journey.
Step 0: What you need to track from your app
Before the automation, you wire up a couple of key events from your app to Spreeflo.
You can do this through the Spreeflo API or, if your app is web‑based, the JavaScript SDK described in the web tracking and analytics guide.
You don’t need an exhaustive schema. For this pattern, three events are enough:
trial_startedFired when a store installs your app or starts a trial inside your billing flow.activation_eventYour definition of “they’ve actually used it.” Examples:subscription_upgraded(optional but useful) Fired when they move from trial to a paid plan.
Cart recovery app:
recovery_flow_enabledAnalytics app:
dashboard_viewedorreport_sharedReviews app:
review_widget_published
On each event, you identify the contact with Spreeflo.identify (usually the account owner’s email) and can also set attributes like plan = "trial" or shopify_store_url.
Those events and attributes are what power the criteria in the journey’s trigger and branching logic, using Spreeflo’s segment builder.
Now, let’s step onto the canvas.
Node 1: Criteria Match trigger – defining “dormant trial”
This journey starts with a Criteria Match trigger rather than “Add to Audience”.
Configuration (conceptually):
Contact Attribute
planistrialCustom Events →
trial_started- Operator: at least 1 time - Time window: in the last 7 days (so you’re focusing on fresh trials)Custom Events →
activation_event- Operator: has not triggered - Time window: in the last 24 hoursEmail Subscription Status is
SubscribedRe-enrollment: off
Why this design:
We’re defining a profile state, not a one‑off event. A contact enters the journey when they’re simultaneously a trial user, recently started, and haven’t hit activation after ~day one.
Using Custom Events and time windows avoids having to maintain your own “last active” timestamps in the database.
Turning re-enrollment off matters. Once someone has been through this dormant-nudge sequence, you don’t want them re‑entering it if they go quiet again later in the trial. They should instead fall into your broader churn‑risk or win‑back journeys.
This trigger is where you put your product knowledge into the system: what “dormant trial” means for your app.
Node 2: Tagging them as a dormant trial
Next, the journey moves into an Add Tag action:
Tags: trial-dormant-day1
No reconfiguration tricks here. It’s simple and deliberate.
Why tag right away:
It creates a historical record: you’ll later be able to build segments like “people who were once dormant but later converted.”
It gives you a way to suppress these contacts from your generic onboarding if needed, using that same tag in other journeys’ conditions.
Tags are cheap, and they pay off when you start optimizing.
Node 3: First nudge – a focused “what to try first” email
Now we send the first message, using a Send Email action:
Content: built in Spreeflo’s email builder, either from a template or from scratch.
“Send only once” toggle: on (the default), so they never get this email twice across re‑entries or future edits.
What goes in this email:
Acknowledgement: “You installed CartWizard yesterday but haven’t had a chance to set it up yet.”
A single, opinionated next step: “Turn on your first abandoned cart flow in 5 minutes.”
A very short checklist (ideally 3 steps) that maps 1:1 to your
activation_event.One primary CTA button back into the app, linking directly to the setup screen.
Because Spreeflo lets you store attributes like shopify_store_url and plan data on the contact record, you can also personalize the copy or subject line using AI and variables, with help from the AI personalization guide. This keeps the message relevant without manual copywriting for each scenario.
Why email first:
Email is the one channel you can rely on immediately post‑install.
It’s durable: if they open it later in the day, the value is still there.
Crucially, this is not your usual welcome tour. It’s a single, sharp nudge designed to get them to one success moment, fast.
Node 4: Time Delay – giving them 24 hours to act
After the first email, we insert a Time Delay:
Delay:
1 day
This is a small but important detail. You never want back‑to‑back email sends in a journey; it feels spammy and makes it harder to reason about attribution.
More importantly, you want to give that first email room to work. One day is usually enough for someone to see it and click through during their next work session.
Node 5: Wait Condition – watching for activation
Once the 24‑hour delay passes, we move into a Wait Condition action:
Condition: Custom Event
activation_event- Operator: at least 1 time - Time window: over all timeTimeout:
1 day
What this does:
Spreeflo pauses the contact here and waits for the activation event to appear on their profile.
If the event happens (they finally turn on that first flow or publish the widget), the wait ends immediately and the journey continues.
If nothing happens within 24 hours, the timeout expires and the journey continues anyway.
This node doesn’t branch on its own; it just gives reality time to change.
Why not just another Time Delay?
Because the Wait Condition makes the rest of the journey responsive:
People who act quickly move on quickly.
People who remain dormant take the slower path.
We’ll split those paths explicitly with an If/Else node right after.
Node 6: If/Else – reactivated vs still dormant
Immediately after the Wait Condition, we add an If/Else process:
Condition (same as the Wait Condition):
Custom Event activation_event
Operator: at least 1 time over all time
Branches:
Then (Yes): “Reactivated”
Else (No): “Still Dormant”
Why repeat the condition?
The Wait Condition was about timing. The If/Else is about routing. This makes the logic very explicit on the canvas:
“If they’ve activated by now, treat them as newly engaged.”
“If they still haven’t, give them one last, different nudge.”
You could technically collapse this into one or the other, but keeping them separate makes debugging and later editing much easier.
Reactivated branch: consolidate the win and move them toward conversion
On the “Yes, activated” branch, we do three things.
Node 7A: Add Tag – mark them as reactivated
Another Add Tag action:
Tags: reactivated-from-dormant
This simple label is gold for reporting:
You can later compare conversion rates between people who activated immediately and those who only activated after the dormant nudge.
It also lets you exclude these contacts from future “we haven’t seen you yet” automations.
Node 8A: Time Delay – a short breather
Insert a Time Delay:
Delay:
1 day
Once they’ve just taken a meaningful in‑app action, you don’t want to immediately throw another email at them. Let them explore a bit.
Node 9A: Send Email – upgrade path or deeper use case
Then, a second Send Email action tailored for newly‑activated trial users:
Angle: “You’re live – here’s how to get the most out of it.”
Content ideas:
A case study or example from a similar store: “How DTC brand X recovered $5,200 in 14 days.”
A shortlist of “next 2–3 things” to try now that their first flow/report/widget is running.
A soft mention of the paid plan benefits, especially if your pricing scales with store volume.
Because this is still within the trial window, the goal of this email is twofold:
Cement the feeling of value (“this thing is already doing work for me”).
Position upgrading as the natural next step, not a separate decision.
From here, you might flow them into your standard “engaged trial” nurture journey via another tag or a separate segment. The dormant sequence has done its job.
Still-dormant branch: one last, empathetic nudge
On the “No activation yet” branch, we aim for one more thoughtful attempt instead of a barrage.
Node 7B: Send Email – “What’s blocking you?” + alternative CTA
We send a second Send Email immediately after the If/Else, but remember we already had a Wait Condition and multiple days of delay behind us, so pacing is still healthy.
Content for this email:
Subject along the lines of: “Still want to try [AppName] without the setup headache?”
Acknowledge reality: “Most merchants install apps with good intentions then get pulled into other fires.”
Offer one of:
A done‑for‑you setup offer for high‑value stores (even if it’s just “reply and we’ll help”).
A simpler alternative path: “If you only do this one thing, do X.”
A link to a 3‑minute loom video showing an end‑to‑end setup.
Make this email feel like a helpful check‑in, not a guilt trip.
Node 8B: Time Delay – let the dust settle
Add another Time Delay:
Delay:
2 days
This gives them a bit of breathing room and time to respond or act.
Node 9B (optional): Wait Condition for conversion
Optionally, you can insert another Wait Condition:
Condition: Custom Event
subscription_upgradedat least 1 timeTimeout:
5 days(or the remaining trial length)
If they upgrade, you might route them into your customer onboarding journey with a separate trigger. If they don’t, you can end this dormant sequence quietly and let your standard “trial ending soon” automation pick up the slack.
Notice what we’re not doing: we’re not sending five more “hey, you forgot us” messages. The whole point of this journey is a focused, behavior‑based intervention, not a noisy safety net.
Why this pattern works for founder‑led Shopify app teams
Three reasons this pattern tends to move the needle:
It’s built on behavioral detail, not guesses. You’re not treating all trials the same. You’re using events, tags, and attributes to tell the difference between: - Someone deep in your app every day. - Someone who bounced after install and never came back. Those two people should not get the same emails. Spreeflo’s unified contact record and segment builder make those differences actionable.
It fixes a lifecycle leak you probably aren’t measuring. Most dashboards show “trial-to-paid conversion,” but very few app teams break that down by engagement segment. Once you add tags like
trial-dormant-day1andreactivated-from-dormant, it becomes obvious how many accounts were lost before they ever reached activation. That’s a leak you can actually plug with automation, not more ad spend.It compounds without extra headcount. You build this journey once in the campaigns and journeys editor, point your app’s events at it, and it runs quietly in the background. Every week, a handful more “would-have-churned” trials convert instead. For a 3‑person team, that’s the definition of doing more with the hours you already have.
Adapting this journey to your own app
To retrofit this pattern into your stack:
Define your activation event. Be specific. “Used the app” isn’t helpful. “Enabled at least one automation,” “connected one data source,” or “published one widget” is.
Wire three events into Spreeflo. Use the Spreeflo API or SDK to send
trial_started, your chosenactivation_event, andsubscription_upgradedinto the system, always callingSpreeflo.identifywith the store owner’s email.Recreate the Criteria Match trigger. In the journey builder, define “dormant trial” in the criteria pane using plan attributes, Custom Events, and Total Visits as needed.
Draft two distinct email paths. - Path A: “You’re back, here’s how to go further.” - Path B: “You’re busy, here’s the one thing that matters (and we’ll help).”
Add tags that make the impact measurable. Later, you can build reports and experiments by segmenting on those tags and subscription outcomes.
You can keep your existing broad onboarding journey in place; this one simply catches the people slipping through the cracks and speaks to them like what they are: busy store owners who meant to try your tool and got pulled away.
The bigger lesson: speak to the trial you actually have, not the one you wish you had
Dormant trials are not bad leads. They’re human.
They installed your app for a reason, but the first experience they had wasn’t clear or urgent enough to compete with everything else on their plate. Treating them the same as power users isn’t just ineffective; it’s disrespectful of their attention.
When you:
Track the right events from your app,
Use automation that reacts to those events in real time,
And write copy that assumes people are busy, not irrational,
you start to close the gap between “trial started” and “trial activated,” one quiet, behavior‑driven journey at a time.
Spreeflo exists for exactly this kind of work: capturing enough detail on every customer that you can speak to each of them uniquely, and then using automation so that care scales beyond what a small team could ever do manually. If you can win back even a slice of your “day-one ghosts,” the journey you just walked through will more than pay for itself.