Back to Playbooks

Stop Emailing Ghosts: A Lapsed‑Subscriber Reactivation Journey for Shopify Apps

Free

This playbook walks Shopify app teams through an automated journey to identify lapsed newsletter subscribers, capture updated preferences, and gracefully unsubscribe true ghosts so you improve deliverability, protect MRR, and focus on engaged merchants.

Industry

Niche

Pattern

Loading sequence...

CartWizard’s founder thought their weekly “Cart Rescue Playbook” newsletter was doing fine.

Open rates hovered in the high teens, merchants replied with thank‑yous from time to time, and every so often an email would spark an upgrade from a $49 plan to a higher tier. Then one day they pulled a list of subscribers who hadn’t opened a single email in months.

Thousands of addresses. All still getting every send. All counting against sending limits. All trained to ignore CartWizard’s name in their inbox.

The sequence at the top of this page is the whole journey, end to end, that fixes this exact problem: it identifies lapsed subscribers, asks them “is this still useful?”, captures their preferences, and lets you quietly sunset true ghosts so you can focus on the people who actually want to hear from you.

For a Shopify app or e‑commerce tool, those “ghosts” are not just a deliverability risk. They are merchants who were interested enough once to install, trial, or buy from you, and who now never hear from you in a way that still fits their reality. That is pure lifetime‑value leak.

This playbook turns that leak into either a clean list or a re‑engaged, self‑selected audience with surprisingly little work.

Why cold subscribers quietly drain your MRR

As an e‑commerce app developer, your newsletter pulls more weight than you think.

It’s where you educate stores on new features, share case studies, announce pricing experiments, and nudge them toward higher tiers. The merchants who open and click are the ones who upgrade, stick around, and send your LTV up.

The ones who never open?

They:

  • Drag down your average open rate, which hurts deliverability across the whole list.

  • Soak up send volume you pay for.

  • Hide the real engaged audience in a fog of inactivity.

Most teams either do nothing or occasionally export a CSV, run some filters in a spreadsheet, and manually unsubscribe the worst offenders. That’s reactive, blunt, and it never scales.

The journey you see at the top of this page gives you a system instead:

  1. Detect when a subscribed contact has ignored a run of issues.

  2. Ask them, in one focused email, whether they still want the newsletter and in what form.

  3. Route them into the right cadence or gracefully stop emailing if they’re done.

All of it runs automatically inside Spreeflo’s campaign and journey automation, so the work you do once keeps your list clean and your LTV healthier for as long as you keep sending.

Step 1: Define “lapsed” with the Criteria Match trigger

The journey starts with a Criteria Match trigger. That matches the pattern’s “Profile State” trigger family: we care about who someone is and what their history looks like, not a single fresh click.

Inside that Criteria Match, you define “lapsed subscriber” using Spreeflo’s segment builder:

  • Email Subscription Status is “Subscribed”.

  • Tag contains "newsletter-subscriber" (or your equivalent tag).

  • Email Activity rule 1: email sent at least 5 times in the last 45 days (any email).

  • Email Activity rule 2: email did not open at least 5 times in the last 45 days (any email).

Combined with an AND group, that approximates “has received at least 5 recent issues and hasn’t opened any of them”.

A couple of design choices matter here:

  • Use “any email” if your newsletter goes out under different templates. If you always reuse a single marketing email template for a recurring send, you can narrow Email Activity rules to that template instead.

  • The 45‑day window and “5 issues” threshold are dials. Weekly senders might use 5 in 35 days; daily senders could use 15 in 30 days. The point is to catch consistent inattention, not a single missed week.

On the trigger itself, set Re-enrollment to ON.

That way, if a merchant goes cold again after you’ve reactivated them once, they can re‑enter the journey when they next meet the lapsed criteria. Spreeflo’s mid‑journey lock ensures they won’t be enrolled twice in parallel; they have to exit the flow before they can trigger it again.

Why Criteria Match instead of a saved segment plus Join Segment?

You have a few options, but Criteria Match keeps everything self‑contained in this journey. If you find yourself reusing “lapsed subscribers” in multiple places, turn that criteria into a saved segment later and swap the trigger to Join Segment. The logic is the same; only the source of the rules changes.

Step 2: Tag and send the “still useful?” email

From the Criteria Match trigger, the sequence flows into two quick actions.

2a. Add Tag: mark them as lapsed

First, an Add Tag node applies something like newsletter-lapsed to the contact.

Why bother when the Criteria Match already identifies them?

  • It gives you an easy filter in reporting and future journeys.

  • You can build a saved segment of “currently lapsed” subscribers using just this tag.

  • You can differentiate between people who are cold due to this journey versus other reasons.

Leave “Force tag trigger” off unless you have other journeys listening to an Added Tag trigger on newsletter-lapsed. In this playbook, the tag is mostly for analytics and later suppression.

2b. Send Email: the “is this still useful?” prompt

Next is the first Send Email node, the heart of the pattern.

In Spreeflo’s email builder, this email should:

  • Acknowledge the silence: “Haven’t seen you open CartWizard tips in a while.”

  • Make the value proposition explicit in one or two sentences.

  • Offer clear choices as buttons or links, each going to a distinct URL:

  • “Yes, keep sending weekly tips”

  • “Send me a monthly digest instead”

  • “Only send product updates”

  • “No thanks, unsubscribe me”

Keep the layout simple and mobile‑friendly. Use AI variables to pull in the store name or the feature they used most recently, so it feels tailored, not generic.

Two configuration notes on this node:

  • Consider turning Send only once OFF. If re‑enrollment is on for the trigger, you probably want a contact to receive this email again if they lapse in future. If you leave “send only once” on, they will skip this node on second and later passes.

  • Use one of your normal sender identities so this lands in the same inbox tab as your usual newsletters. This is a continuation of your content relationship, not a transactional system email.

From here, the journey lets a little time pass before judging their response.

Step 3: Wait, then branch on how they reacted

Right after the “still useful?” email, the sequence uses a Time Delay node:

  • Delay: 7 days

  • Unit: Day(s)

Seven days gives weekly senders one full cycle to catch up. If you mail less frequently, extend this. If you mail more often, you might tighten it to 3–5 days. The key is to give a normal reader ample time to see and act.

After the delay, a Check Email Activity process node inspects what happened with that specific email template. Configure it like this:

  • Marketing email: the “still useful?” template.

  • Activities to branch on:

  • Branch A: clicked

  • Branch B: opened

  • Branch C: unopened

  • Else branch: left as the catch‑all (contacts who, for example, bounced).

The sequence at the top of this page shows three outgoing paths from this node: clicked, opened, and everything else. That’s deliberate:

  • Clicked is your clearest signal of intent. They cared enough to choose.

  • Opened but didn’t click suggests mild ongoing interest.

  • Unopened after a full week confirms the lapsed pattern.

Each path now gets its own treatment.

Step 4: Capture preferences from the people who clicked

Contacts in the “clicked” branch head into a Multi-way Split process node.

Here you use the segment builder’s Link Clicked criteria to route by which option they chose:

  • Branch “weekly”: Link Clicked URL ends with /prefs/weekly at least 1 time in the last 7 days.

  • Branch “monthly”: URL ends with /prefs/monthly at least 1 time in the last 7 days.

  • Branch “product-updates”: URL ends with /prefs/product-updates at least 1 time in the last 7 days.

  • Branch “unsubscribe”: URL ends with /prefs/unsubscribe at least 1 time in the last 7 days.

  • Else branch: safety net for odd cases; you can treat it like “keep weekly” or send them to a support page.

For each preference branch:

Weekly branch

  • Remove Tag: clear any newsletter-monthly or newsletter-product-only tags.

  • Add Tag: apply newsletter-weekly and newsletter-reactivated.

  • Optional Update Contact Attribute: set a text attribute like newsletter_frequency to the literal "weekly".

  • Optional Send Email: short confirmation like “You’ll keep getting weekly Cart Rescue Playbook emails”.

Because the last email they received was at least 7 days ago, sending a confirmation here does not violate any pacing rules.

Monthly branch

  • Remove Tag: clear newsletter-weekly.

  • Add Tag: apply newsletter-monthly and newsletter-reactivated.

  • Optional Update Contact Attribute: set newsletter_frequency to "monthly".

You might have a separate monthly‑digest campaign that targets this tag. This reactivation journey simply hands them off cleanly.

Product‑updates‑only branch

  • Remove Tag: clear newsletter-weekly and newsletter-monthly.

  • Add Tag: apply newsletter-product-only and newsletter-reactivated.

  • Again, you likely have or will build a separate automation that uses this tag to send only feature announcements and changelogs.

Again, you likely have or will build a separate automation that uses this tag to send only feature announcements and changelogs.

Unsubscribe branch

Here the contact has explicitly told you they no longer want the newsletter.

  • Update Email Subscription Status: set to “Email unsubscribed”.

  • Remove Tag: clear any newsletter-* tags.

  • Add Tag: apply newsletter-unsubscribed-self-serve so you can distinguish voluntary unsubscribes prompted by this flow.

Once that node runs, they will not receive future marketing emails, including your main newsletter.

Merging the reactivated paths

The first three preference branches (weekly, monthly, product‑updates) all represent a win. After tagging and attributes, you can send each branch into a Merge node that leads to one more shared action:

  • Update Contact Attribute on newsletter_reactivated_at, with update type “Set to now”.

This gives you a timestamp on the contact showing the last time they re‑engaged. It’s a fixed, literal rule applied at execution time, so you can later filter for “reactivated in the last 90 days” in segments and reports.

From there, you simply exit the journey. The ongoing cadence is handled by your normal newsletter or product‑update automations.

Step 5: Give quiet readers a lighter touch, sunset the rest

Two branches are still unhandled: opened‑no‑click and unopened.

Opened but did not click

These contacts at least glanced at your email. Treat them as “soft reactivated”:

  • Remove Tag: newsletter-lapsed.

  • Add Tag: newsletter-soft-reactivated.

You can either keep them in the same frequency they were already on or, if you prefer, add a gentle follow‑up asking for preferences later. The playbook sequence keeps this simple and does not send another email here; it just stops labeling them as lapsed.

Unopened: one last check, then sunset

For the “unopened” branch from the first Check Email Activity, the sequence runs a second, final attempt before giving up.

  1. Send Email: “Last call on CartWizard tips”

  2. Time Delay: 7 days.

  3. Check Email Activity on this second email with two branches:

  4. For the opened/clicked branch:

  5. For the else branch (no activity twice in a row):

  • Short subject: “Should we stop emailing you?”

  • Two options: “Keep me subscribed” and “Unsubscribe me”.

  • Configure this as a new marketing email template.

  • Branch A: opened or clicked (you can create two branches and send both into the same downstream node).

  • Else: everyone who still did not open.

  • Remove Tag: newsletter-lapsed.

  • Add Tag: newsletter-soft-reactivated.

  • Optional: send a quick confirmation that they’re staying on the list.

  • Update Email Subscription Status: set to “Email non-subscribed” or “Email unsubscribed”, depending on how strict you want to be.

  • Remove Tag: all newsletter-* tags.

  • Add Tag: newsletter-sunset.

These are the true ghosts. Continuing to email them is pure noise. By letting this journey clean them up, you defend sender reputation and concentrate future experiments on people who still care.

What to measure and how to tune it

With this journey live, three metrics matter most, matching the pattern definition:

  1. Reopen rate

  2. Reactivation rate

  3. Unsubscribe rate

How many lapsed subscribers open the “still useful?” email?

Watch this both as a raw open rate and as a share of all lapsed contacts. If it’s low:

  • Test different subject lines using a Random Split before the first Send Email.

  • Move the Time Delay and Check Email Activity windows to fit your sending rhythm.

The number of lapsed subscribers who either click a preference link or open one of the two reactivation emails.

Use the newsletter-reactivated and newsletter-soft-reactivated tags to build a segment and track its size over time. For a Shopify app with solid content, salvaging even 5–10% of lapsed subscribers can be material for upsell revenue.

This journey will increase unsubscribes in the short term, especially via the explicit unsubscribe path. That is good.

Use tags like newsletter-unsubscribed-self-serve and newsletter-sunset to see how much of your list you’re cleaning. Over a few months, you should see:

  • Higher average open/click rates on your regular newsletter.

  • More accurate engagement metrics to feed into trial‑to‑paid or expansion models.

All of this runs on top of the same contact record, with tags and attributes managed via the journey. You can see how each group behaves in your campaigns using the campaigns and journeys view and, if you’re on the Professional plan, tie it back to website behavior with web tracking and analytics.

Why this plugs a real lifetime‑value leak for Shopify apps

For a typical Shopify app doing $50k–$200k MRR, most of the upside is already in the account base you have.

Those merchants installed you once. They are solving cart recovery, AOV boosts, analytics, or personalization every day. When they stop opening your emails, it is usually because the cadence or content stopped fitting their reality, not because they no longer care about revenue.

Letting a lapsed‑subscriber journey like the one at the top of this page run in the background is the kind of quiet automation that adds up:

  • Fewer “ghost” contacts dragging down your stats.

  • A clearer, self‑selected signal of who wants weekly, monthly, or only product updates.

  • A clean off‑ramp for people who really are done.

Most businesses leave this gap open and keep blasting the whole list forever. That is exactly the kind of lifetime‑value leak Spreeflo exists to fix: places where a bit of intelligent automation would keep your engaged users engaged and let the rest go without drama.

You build this once, wire it into your existing newsletter setup, and let it run. Every future install that goes cold is handled the same way, freeing your small team to focus on product and growth instead of spreadsheet hygiene.

That is the leverage founder‑led, Shopify‑focused SaaS teams get when they treat engagement as a lifecycle problem and use automation thoughtfully, not aggressively.