Stop Hoping Merchants Remember You: Build a Weekly Active-Customer Digest
Shows how to build a weekly active-customer digest for Shopify apps in Spreeflo, using cyclic journeys, a tight “Active Customers” segment, and ROI-driven email content so merchants repeatedly see your value and quiet churn drops.
Industry
Niche
Pattern
Loading sequence...
Every Monday, Sarah from “Luma & Loom” opens her inbox and scans for one thing: proof that the tools she pays for are actually earning their keep.
If your Shopify app is lucky, she taps a report that starts with:
“Last week, CartWizard recovered $1,982 in abandoned carts for your store.”
Suddenly your $49 line item looks small. It’s not “some app I installed months ago.” It’s a revenue machine she can point to.
This is why weekly active-customer digests are so effective for e‑commerce apps. They don’t pitch. They remind. They turn invisible background utility into a habit-forming scoreboard.
The sequence at the top of this page is the whole journey, end to end. It sends that scoreboard every Monday at 8am to your active customers, indefinitely, without you touching it again.
In this article, we’ll unpack how a fictional Shopify app, CartWizard (cart recovery and upsells, ~$100k MRR), would set up this exact journey in Spreeflo, why each node is configured the way it is, and how you can adapt it to your own product.
Why a weekly digest quietly defends your MRR
Shopify app churn often isn’t angry churn. It’s quiet churn.
The merchant forgets what you do. They don’t remember the last time your app “showed up” for them. When costs tighten, your app looks like optional overhead instead of a profit lever.
A weekly digest to active customers solves three problems at once:
It makes value visible. “Recovered $1,982” or “Tracked 14k sessions” is concrete. It reframes your app as a revenue or insight engine.
It builds a ritual. Every Monday at 8am, your product gets a slot in your customers’ mental calendar. That’s positioning you can’t buy with ads.
It creates a low-friction upsell channel. Once a merchant is already opening a useful report, slipping in a contextual CTA (“Enable multi-step flows”, “Turn on back-in-stock alerts”) feels natural, not salesy.
Most SaaS businesses leak lifetime value because they don’t nurture engagement after the first 30 days. For Shopify apps, that leak is brutal: merchants install, poke around, then forget. A recurring digest is one of the simplest ways to patch that hole with automation.
Now let’s make it concrete.
Step 1: Define who counts as an “Active Customer”
Before we touch the journey, we need a clean definition of “Active Customers.”
For CartWizard, that might be:
They’ve installed the app and not uninstalled.
They’re on a paid plan (not in trial).
They’ve recovered at least one cart in the last 30 days.
You capture those behaviors as custom events using the Spreeflo SDK or the Spreeflo API:
app_installedapp_uninstalledsubscription_started/subscription_cancelledcart_recovered(with properties likeamountandorder_id)
Then you create a saved segment “Active Customers” using Spreeflo’s segment builder. The rules might look like:
Custom event
app_installedhas triggered at least 1 time over all time.Custom event
app_uninstalledhas not triggered over all time.Custom event
subscription_startedhas triggered at least 1 time over all time.Custom event
subscription_cancelledhas not triggered over all time.Custom event
cart_recoveredhas triggered at least 1 time in the last 30 days.
You can tweak that recipe for your own product:
Analytics app? Swap
cart_recoveredforreport_viewed.UGC app? Use
review_publishedorphoto_uploaded.Returns app? Use
return_processed.
The key: “Active Customers” should mean “people currently paying you and actually using the product.” This is who deserves a weekly digest.
Once that segment exists, the journey at the top of this page can key off it.
Step 2: Anchor the journey with a Cyclic trigger
Open the Spreeflo journey builder (see Campaigns & Journeys) and create a new journey, not a one-off campaign. This needs to run forever.
The first node in the sequence is a Cyclic trigger:
Type: Cyclic
Repeat interval: Every 1 week
Time of day: 08:00
Timezone: your primary customer timezone (e.g.
America/New_York)Criteria: “Member of segment ‘Active Customers’”
Re-enrollment: ON
Here’s why each piece matters.
Weekly, not daily or monthly
Weekly is often the sweet spot for Shopify apps:
Daily feels noisy unless you’re high-volume infrastructure (payments, shipping).
Monthly is too slow for habit formation and too laggy for churn defense.
If your app is especially sensitive to daily metrics (e.g. ad spend optimizers), you could adapt this pattern to “every day.” For most e‑commerce apps, once a week is plenty.
Monday at 8am
You want this to land before merchants dive into their week but after they’re at their desks. Monday 8am in their main timezone hits that.
If your base is global, pick the region that matters most for retention (e.g. North America), then later you can clone the journey for EU/APAC with different timezones.
The Criteria: segment-based, not re-implemented
Inside the Cyclic trigger’s Criteria, you could rebuild the whole “Active Customers” logic from scratch. Don’t.
Instead, use a Segment Membership rule to say:
Contact is member of segment ‘Active Customers’.
This keeps your definition of “active” in one place. If you later tighten the segment, the digest automatically follows.
Re-enrollment ON (this is critical)
Cyclic with re-enrollment OFF would send exactly one digest, then never again for the same contact. For a weekly digest, that’s obviously wrong.
Setting re-enrollment to ON tells Spreeflo:
Every Monday at 8am, for every contact who currently matches the criteria and is not mid-journey, run this again.
Because the digest journey is short (we’ll keep it to a couple of nodes), contacts exit quickly and are ready for the next Monday tick.
Step 3: Send the digest email (and only once per week)
From the Cyclic trigger, the sequence flows into a Send Email node.
Configuration for CartWizard:
Template:
Weekly ROI DigestFrom: your primary support or “noreply” email identity
Send only once: ON
“Send only once” prevents weirdness if you later restructure the flow and a contact somehow re-enters this exact node in the same run. They will still only ever get one copy of this week’s digest.
Building the digest itself happens in our email builder:
Subject line. Make the value explicit and time-bound. For example: “Your CartWizard results for last week” and “Last 7 days: 13 carts recovered (+2 vs. prior week)”. You can use AI personalization and AI variables to tweak the subject based on plan, industry, or size. But even simple, consistent wording wins if the numbers inside are strong.
Hero metric block. Top of the email, above the fold: “Recovered revenue: $X”, “Carts recovered: Y”, and “Average recovery rate: Z%”. These values live as contact attributes you maintain via your frontend calling
Spreeflo.identifyor the Spreeflo API. The email just reads them.Trend or comparison. Merchants care whether they’re doing better or worse, not just the level. For example: “Up 18% vs. previous week” or “Down 7% vs. store average”. You compute these in your own system and store them as attributes (e.g.
recovered_revenue_last_week_delta). The email template pulls them into a short sentence or colored badge.Feature spotlight, tuned to their behavior. This is where you stop being a passive report and start gently guiding usage. For example, if they’ve never used “multi-step flows”: “Stores like yours recover 23% more with multi-step flows. Turn it on in 2 clicks.” If their top recoveries are from mobile: “Your mobile recovery rate is 2.3x desktop. Here’s how to optimize your mobile abandoned cart experience.” These conditions can be handled either in your app logic (setting a
recommended_featureattribute) or with conditional blocks in the template, driven by tags or attributes.One clear CTA. Don’t stuff the digest with five different asks. Pick one actionable step: “Review all recovered carts”, “Enable high-intent exit popups”, or “Book a 15-minute strategy review”. The digest’s job is to keep them engaged with the app, not to sell them on something unrelated.
This Send Email node is the heart of the journey. Every other node exists to either gate who enters or enrich what this email can say.
Step 4: Stamp the send for better analytics later
Immediately after the Send Email node, the sequence uses an Update Contact Attribute node.
Configuration:
Attribute:
last_weekly_digest_sent_at(a TIMESTAMP custom attribute).Update type: Set to now.
Delete value: OFF.
Why bother, when you already have email logs?
You can build segments later like “did not receive digest in the last 21 days” if you ever pause it for a subset.
You can cross-reference digest recency with churn or downgrades in your own reporting.
You can suppress other sequences when the digest has just gone out (e.g. avoid stacking another big product update on the same day for heavy senders).
Because Set to now writes the current timestamp when the node executes, you don’t have to wire any values by hand.
At this point, the journey for that contact ends. They sit idle until the next Monday tick, when the Cyclic trigger considers them again.
What powers the numbers inside the digest
The automation we’ve designed is surprisingly short:
Cyclic trigger (weekly, “Active Customers”, re-enrollment ON)
Send Email (weekly digest)
Update Contact Attribute (stamp last send time)
The work isn’t in the nodes. It’s in the data.
To make that weekly digest feel personal and genuinely useful, your backend should:
Aggregate per-store metrics weekly. For each merchant, calculate total recovered revenue last 7 days, number of carts recovered, key product or category insights (optional), and any standout stats (best-performing flow, highest-value recovery).
Write those into contact attributes. Using the Spreeflo SDK in your app or the Spreeflo API, call
Spreeflo.identify(email, attributes)so each contact’s record has fields likerecovered_revenue_last_7_days,recovered_carts_last_7_days,top_recovery_flow_name, andrecommended_feature.Optionally feed usage behavior. If you also embed the SDK on your app’s dashboard, Spreeflo’s web tracking and analytics can track visits to specific pages:
Page Visitedrules like “URL contains/flowsat least 1 time in the last 7 days” become inputs for future segmenting and targeting. You don’t need this for the first version of the digest, but it opens up interesting forks later (e.g. “hasn’t opened dashboard in 14 days but is still recovering revenue”).
The more detailed your per-contact attributes, the more uniquely you can speak to each merchant in the same digest template. That’s exactly the kind of high-impact personalization founder-led teams win with.
Measuring success and iterating without babysitting
Once the journey is live, you care about three core metrics:
Digest open rate. This tells you whether the subject line and timing are earning a glance. If opens are low, test subject variations with a Random Split node before the Send Email step, with Branch A focused purely on numbers (“$X recovered last week”) and Branch B adding emotional payoff (“Your abandoned carts are quietly paying your rent”).
Click-through rate per section. You’ll see this in your email analytics: are merchants clicking “View recovered carts” but ignoring the feature spotlight, or vice versa? This guides which sections should expand, shrink, or be cut entirely.
Repeat opens. Merchants who open the digest every week are deeply engaged; those who open once then stop are more at risk. You can eventually feed these behaviors back into Spreeflo segments: tag contacts as “digest-regular” vs “digest-dormant” based on Email Activity rules in the segment builder, and treat them differently in other lifecycle journeys (e.g. more aggressive win-back for dormant digest readers).
The beauty of this pattern is that none of these optimizations require you to touch the core trigger. They’re small adjustments inside the same journey canvas.
Common pitfalls (and how this sequence avoids them)
A few easy mistakes when teams first try a recurring digest:
Sending to everyone, not just customers
Blasting the digest to everyone who ever trialed your app dilutes the value signal. Non-customers don’t have meaningful numbers yet. They see “$0 recovered” and quietly uninstall.
Anchoring the journey on the “Active Customers” segment prevents that. Only people currently getting value see the scoreboard.
Forgetting re-enrollment
If you’re used to thinking “trigger runs once per contact,” it’s easy to leave re-enrollment OFF and wonder why week two is silent. The Cyclic trigger with re-enrollment ON is the key move here.
Overstuffed content
Founders try to cram every metric and every feature announcement into the digest. Result: information overload, lower open rates over time.
Treat this journey as a retention asset, not a mini newsletter. Lead with three numbers that answer, “Why am I paying for this app?” Everything else supports that answer.
Neglecting unsubscribes and fatigue
Remember: if a contact’s email subscription status is Unsubscribed or Non‑subscribed, Spreeflo will respect that. You don’t need extra conditions in the journey for consent. But you should include a clear unsubscribe or preferences link in the digest template itself.
If merchants start to feel overwhelmed, offer a “monthly summary only” option and back that with a second, monthly version of this journey.
Why this pattern is worth the setup for a small team
As an e‑commerce app developer, your default bias is usually toward shipping product, not writing emails. That’s rational.
But this is one of those rare automations where a few hours of thinking and setup can meaningfully bend your churn curve for months:
You’re not inventing new campaigns every week.
You’re not asking merchants for anything they don’t already want.
You’re simply surfacing the value you already create, on a cadence that keeps you off the chopping block.
With Spreeflo, the actual journey is tiny: a Cyclic trigger, a Send Email node wired to a thoughtfully built template, and a timestamp update. Once it’s live, it quietly runs in the background while you get back to shipping features.
Most Shopify apps will lose more MRR this quarter to silent, preventable churn than they’ll spend on marketing automation. A weekly active-customer digest flips that equation. It turns your existing success into a visible, recurring reason for merchants to stay.
Build it once. Let it run. Then watch how many more Mondays your app survives on Sarah’s subscription list.