Back to Playbooks

How Shopify Apps Can Keep Critical Prompts Visible (Without Rebuilding Your UI)

Free

This playbook walks Shopify and e‑commerce app teams through building a persistent, behaviour-based reminder journey in Spreeflo that keeps critical setup prompts visible via web push and email until merchants act, without changing your existing UI.

Industry

Niche

Pattern

Loading sequence...

The CartWizard team had a familiar graph on the wall.

Installs up and to the right. Revenue growing, but not at the same slope. When they dug in, the pattern was brutal: hundreds of Shopify merchants installed the app, clicked around once, then never set up their first abandoned-cart flow.

Inside the product, the prompt was “good enough”: a banner saying “Create your first recovery campaign” that showed after install. Close the tab and that reminder vanished. No one was going to log back in _just_ to hunt down that card again.

What they really needed was something more durable. A reminder that stayed in front of the merchant until they either set up that campaign or clearly opted out.

That’s what the “persistent contextual reminder” pattern is for.

The sequence at the top of this page is the whole journey, end to end. It approximates an in-app content card using two channels you already have: browser push and email, both driven by product usage events. In this article we’ll walk that journey node by node, and you’ll see how to adapt it for your own Shopify or e‑commerce app.

The job of a persistent reminder journey

For e‑commerce apps, there are a few prompts that really matter:

  • “Connect your store / install the tracking snippet.”

  • “Create your first automation / flow.”

  • “Turn on this revenue-driving feature (one-click upsell, post‑purchase sequence, advanced analytics).”

These aren’t generic nurture. They’re contextual, high-value asks that directly influence LTV and churn. If a merchant ignores them once, you still want that reminder to keep showing up _somewhere_ until they act.

This journey has three jobs:

  1. Spot the right moment to show the prompt (based on real behaviour, not a guess).

  2. Keep that prompt visible using durable channels (web push first, then inbox).

  3. Stop the reminders the moment they complete the action, so you’re helpful, not annoying.

Spreeflo gives you all the raw ingredients for this: Custom Event triggers via the Spreeflo API, browser notifications from the web push setup, and behaviour-aware logic in campaign and journey automation.

Let’s work through the CartWizard-style example: nudging merchants to create their first abandoned‑cart recovery flow.

Step 1: Triggering off real behaviour with a Custom Event

First, we decide what should start this journey.

For CartWizard, the high-intent moment is when a merchant has:

  • Installed the app, and

  • Opened the dashboard at least once.

That’s captured as a custom event, e.g. app_installed, sent from their app using Spreeflo.track and the web tracking and analytics setup.

In the journey, that maps to a Custom Event trigger:

  • Event name: app_installed.

  • Property conditions: only fire if, say, shops_orders_last_30_days > 50 (so you don’t nag tiny or test stores).

  • Re-enrollment: on.

Why re-enrollment on? Because merchants sometimes uninstall and reinstall. You want them to go through this reminder path again on a fresh install. Spreeflo’s mid-journey lock ensures they can’t be inside two copies of the journey at once, so you’re safe from duplicate messages.

This uses Brand Message 1 in a very literal way: you’re not sending the same setup nag to everyone. You’re only targeting merchants whose install and store stats mean this feature genuinely matters.

Step 2: Catching existing merchants with a Criteria Match trigger

CartWizard didn’t launch with this journey on day one. They already had thousands of installed merchants, many of whom had never set up a recovery flow.

That’s where a second entry point helps: a Criteria Match trigger that catches existing stores who need the same nudge.

Using the segment builder, the criteria inside this trigger might look like:

  • Email subscription status is “Subscribed”.

  • Custom event recovery_campaign_created has not triggered over all time.

  • Tag does not contain recovery-feature-disabled (your manual opt-out tag).

  • Optional: Total visits to your app dashboard at least 2 in the last 14 days (engaged enough to care).

In the journey:

  • Trigger type: Criteria Match.

  • Criteria: as above.

  • Re-enrollment: off.

This trigger runs once per existing merchant who matches, giving them the same persistent reminder as new installs. Because the Custom Event trigger has re-enrollment on and this one is off, you avoid the “only the first trigger ever fires” antipattern while still respecting that you don’t want to badger long-time merchants repeatedly.

Both triggers feed into the same path via a Merge node in the sequence, so you only have to maintain one reminder flow.

Step 3: First nudge via Send Web Push

From that Merge, the journey’s first action is a Send Web Push node.

Configuration:

  • Template: “Recover your first cart in 5 minutes”.

  • Title: “Finish setting up CartWizard to start recovering revenue”.

  • Body: Short, concrete benefit. For example: “Stores like yours recover an extra 10–15 sales a month once this is on.”

  • Click URL: Deep link straight to your “Create first recovery campaign” screen.

You set this up once in the web push notification editor, then select it in the node. Leave “Send only once” off so a merchant who genuinely reinstalls your app in future can see this prompt again when they re-enter the journey.

Why web push first?

  • It’s immediate and tied to the browser they were already using.

  • On many systems, that notification stays visible until they click or dismiss it.

  • It doesn’t require them to go into their inbox and find you.

Of course, only merchants who have granted notification permission will see it. That’s fine; for the others, email will be your only durable channel and the rest of the journey still works.

Step 4: Waiting (but not forever) with Wait Condition

After the push, you want to give them time to act.

That’s where a Wait Condition node comes in:

  • Condition: custom event recovery_campaign_created triggered at least 1 time in the last 7 days.

  • Timeout: 2 days.

Under the hood, this node does: “Pause here until either they create their first recovery campaign, or two days pass, whichever comes first.”

This keeps your timeline responsive. If they click the push and set things up within five minutes, they don’t sit around in a dead two‑day delay — the journey will move them forward immediately. If they ignore it entirely, you’ll still resume the flow after a reasonable cooling-off period.

Step 5: If/Else branching to separate doers from non‑doers

Right after the Wait Condition, the sequence uses an If/Else process node with essentially the same condition:

  • Condition: has the merchant triggered recovery_campaign_created at least 1 time in the last 7 days?

By the time a contact reaches this node:

  • If they acted during the wait, the condition is true.

  • If the wait timed out with no action, the condition is false.

That lets you neatly route:

  • “Yes, they created a campaign” down an activation path.

  • “No, still no campaign” down the reminder path.

This is where you’re cashing in on the detailed event data you’ve captured. You’re not guessing who might need help based on a flat list; you’re reacting to the exact behaviour of each merchant.

Step 6: Closing the loop for merchants who already set it up

On the “Yes” branch of the If/Else, the goal is twofold:

  1. Mark them so they never enter this reminder journey again for the same feature.

  2. Optionally reinforce that they did the right thing.

A simple sequence here:

  1. Add Tag: apply recovery-feature-activated.

  2. Update Contact Attribute: set a custom attribute like onboarding_stage to the literal value recovery_enabled.

Those two changes give you future control. For example:

  • Exclude anyone with tag recovery-feature-activated from other feature-adoption campaigns.

  • Use the onboarding_stage attribute to personalise future onboarding emails (“Since you’ve already turned on abandoned cart recovery…”).

You can end the journey for this branch here, or add a short “Nice work” Send Email a day later with optimisation tips. If you do add an email, make sure to insert a Time Delay of at least 1 hour before it to respect pacing.

Step 7: Crafting the email that keeps the prompt alive

Now the interesting part: what happens on the “No action yet” branch.

The cart-recovery prompt has already shown up once as a web push. For many merchants, that will be enough. For the rest, you want a durable reminder that lives where they already spend time: their inbox.

So the first node on this branch is a Send Email:

  • Use the email builder to create a clean, mobile-friendly message.

  • Subject line: specific and benefit-focused, e.g. “Recover your next 10 lost carts in under 10 minutes”.

  • Body: remind them what they’re missing _in their context_. You know their platform and rough size from your tracking, so this might be:

    “You installed CartWizard to recover lost revenue on your Shopify store. Right now, recovery is still off — which means every abandoned cart is still lost. Click below to create your first recovery campaign. It takes less than 10 minutes.”

  • CTA: a single button leading straight to the same “Create first recovery campaign” page as the notification.

This is where Spreeflo’s contact attributes and AI personalisation become powerful. If you’re already syncing store name, vertical, or recent order volume into attributes, you can use AI variables to generate copy that says:

“Based on stores like AcmeStreetwear that process around 200 orders per month, turning on recovery can often win back 8–15 abandoned carts monthly.”

That’s Brand Message 1 in practice: you collected detail on each merchant, then wrote one journey that still speaks uniquely to each store.

Step 8: One more chance to act, then stand down

You could stop after that email. But for a high‑value feature, it’s reasonable to give the merchant one more window to complete the action before you let it go.

So the sequence repeats the pattern in a lighter way:

  1. Wait Condition:
    Same condition: custom event recovery_campaign_created at least 1 time in the last 7 days.
    Timeout: 5 days.

    This says: “Let’s give them up to five more days to act, either from clicking the email or finding the feature on their own.”

  2. If/Else:
    Same condition again.

From here:

  • “Yes” branch: reuse the activation steps from earlier (Add Tag recovery-feature-activated, Update Contact Attribute, then end).

  • “No” branch: stop the journey, but add a marker:
    Add Tag: recovery-feature-ignored.

This tag is less about punishment and more about analytics. You can:

  • Exclude these merchants from future hard-sell campaigns on the same feature.

  • Build a segment to understand who tends to ignore this prompt: small stores? Agencies? Specific geos?

What you _don’t_ do is send a third, fourth, or fifth reminder. That’s where durable crosses into spam.

Measuring whether this pattern is working

A pattern like this is about eventual conversion, not immediate clicks. Three metrics matter most.

  1. Eventual conversion rate on the target action

    Among all contacts who enter this journey, what percentage eventually trigger recovery_campaign_created within, say, 30 days?

    To calculate this, create two segments:
    - “Entered persistent reminder journey” (based on a tag or attribute you set when they hit the Merge).
    - “Created first recovery campaign” (based on the custom event rule).

    Using the audiences and segments, you can intersect those to see how many did both.

  2. Durable-reminder retention

    The whole reason to care about this feature is its impact on churn and ARPU. Compare:
    - Merchants with tag recovery-feature-activated.
    - Merchants without that tag.

    Then, in your own billing or analytics stack, compare churn and MRR between those groups. The journey’s value shows up in that delta.

  3. Opt-out and fatigue signals

    Watch:
    - Email unsubscribe rate on that reminder email.
    - Web push unsubscription/denial trends after the first notification (you’ll see this in your web push analytics).

    If either is higher than your usual campaigns, tighten the criteria or soften the copy. The goal is a prompt that feels like a helpful nudge, not a nag.

Adapting this for other “must-see” prompts in your app

The exact events and copy will change, but the skeleton of this journey holds for a lot of SaaS and e‑commerce app moments:

  • Analytics apps nudging users to connect all data sources.

  • Reviews apps reminding merchants to turn on post‑purchase emails.

  • Bundling or upsell apps pushing stores to enable a specific funnel.

Swap recovery_campaign_created for the right “activation” event in your product, and update the triggers to pick the segment of merchants for whom that step is truly critical.

The pattern stays the same:

  • Trigger: behaviour, not a static list.

  • First nudge: quick, contextual web push.

  • Wait for success, don’t assume failure.

  • Second nudge: durable email with deep link.

  • Stop nudging the instant they do the thing.

You design this once in Spreeflo’s campaign and journey automation, and it quietly works in the background for every future merchant who installs your app.

Why this earns its place in your stack

Most Shopify app developers already send “welcome” emails. Many have a one-off onboarding checklist in-app. Very few run a persistent, behaviour-aware reminder that keeps a key prompt in front of the merchant until they act.

That’s the gap this pattern fills.

It takes the detailed picture you already have — which events a merchant has fired, which features they’ve touched, how their store behaves — and turns it into copy that shows up at the right moments, in channels they can’t accidentally close forever.

For a small team, that’s the kind of system that quietly improves trial activation and churn without adding work to anyone’s week. You wire it up once. Every install from then on gets a thoughtful, contextual nudge instead of a one-time banner they’ll probably ignore.

If you’re already tracking events for your Shopify or e‑commerce app, you have everything you need to run this. The only question is whether those events are just analytics, or if they’re also driving the kind of persistent, personalised reminders that actually move your MRR.