The Set-and-Forget Weekly Digest That Keeps Your Shopify App Top-of-Mind
This playbook shows how to build a set-and-forget weekly digest journey in Spreeflo for a Shopify or e‑commerce app, using a cyclic trigger, RSS-powered content blocks, and engagement-based branching to grow subscribers and reduce churn.
Industry
Niche
Pattern
Loading sequence...
Every week, your team ships something: a new onboarding pattern, a breakdown of a merchant case study, a teardown of a high-converting product page.
And every week, a familiar thing happens.
You tell yourself you’ll “send a newsletter about it later.” Then support tickets spike, a partner asks for a quick integration tweak, someone breaks staging. The newsletter tab stays closed. Those posts do their work only for whoever happens to stumble across your blog.
CartWizard, a fictional cart-recovery Shopify app doing $90k MRR, was in exactly that spot. Two solid posts a week, strong App Store reviews, but no consistent distribution. When they finally looked at analytics, they realised most existing customers never saw their best content. Churned users definitely didn’t.
So they set up a weekly email digest that ships whether or not anyone remembers to build it. The sequence at the top of this page is the whole journey, end to end. It quietly pulls in everyone who has raised their hand for “blog updates,” sends them only the posts published since the last send, and adjusts messaging based on how they interact.
This article walks through how that journey is built in Spreeflo, node by node, and how to adapt it for your own Shopify app or e‑commerce tool.
Why a recurring digest is such an efficient growth lever
For a Shopify or e‑commerce app, content is doing several jobs at once: teaching merchants how to win with your product, showing off advanced use cases, and reminding them why the subscription is worth it.
A recurring “new posts since last time” digest does three things very well:
It turns every blog post into a distribution asset, not a one-off announcement.
It nurtures existing users so they keep discovering value, which pushes down churn.
It collects engagement data over time, so you can speak differently to heavy readers vs. people who never open.
That maps directly onto two of Spreeflo’s core beliefs:
You should capture detail on every customer so you can speak to each uniquely.
Most businesses leak lifetime value because they don’t keep engagement warm.
Our pattern here solves both.
We’ll use a Cyclic trigger to run the digest on a schedule, contact attributes and tags to record who interacts, and email activity checks to decide how aggressively to nudge non-openers.
If you’re new to this style of automation, the campaigns and journeys overview gives a quick primer. We’ll stay focused on this specific digest pattern.
The data plumbing: RSS in, email-ready content out
Spreeflo doesn’t pull RSS feeds natively, which is actually fine for a technical audience like you.
The pattern assumes a small helper service that does three jobs:
Watches your blog’s RSS feed.
Computes “posts since the last digest send.”
Uses the Spreeflo API to write a formatted snippet of HTML (or markdown) into a contact attribute, for example
weekly_digest_block.
In your digest email template, you simply drop that attribute in as a personalization variable when composing content in the email builder. The helper service is responsible for ensuring the block only contains posts since the last send.
We won’t go deeper into the integration code here. Think of it as a tiny cron job that prepares the content. The journey we’re about to walk through handles who gets it, when, and what you do with the engagement data.
Step 1: Cyclic trigger – your weekly “content cron”
The journey starts with a Cyclic trigger.
Configuration:
Repeat interval: every 1 week
Time of day: when your audience is most likely to read (CartWizard picked Tuesday 08:30 in their core timezone)
Timezone: whatever lines up with your main customer base
Re-enrollment: turned on
Criteria (via the Segment Builder): Segment membership: is member of segment
Digest subscribers; Email subscription status: isSubscribed
That segment of subscribers is defined once in the segment builder. Maybe they signed up via a blog form, checked “send me new content” during onboarding, or you tagged them in another journey.
Why Cyclic and not a one-time campaign?
Because you want this to run forever, automatically. With re-enrollment on, every week that a contact matches the criteria, they enter the journey again, as long as they’re not already mid-flow. That last bit is important: the mid-journey lock means you must keep the whole digest flow shorter than your send interval so contacts exit before the next cycle. We’ll design for that.
Step 2: Send Email – one template, constantly refreshed
Next node: Send Email.
This is the core digest send. The configuration looks like this:
Template: “Weekly Shopify growth digest”
From: your usual marketing sender
Send only once: turned off
That last toggle matters. “Send only once” would block this node from emailing the same contact twice across the entire lifetime of the journey. For a weekly digest, you want the opposite: the same automation step should send again and again as the Cyclic trigger re-enrolls people, so you turn it off.
Inside the email content:
The body pulls in your
weekly_digest_blockattribute, which your RSS helper keeps updated.You still write a short, human intro each week or use AI variables to customise it by plan type or audience size. The help article on personalize with AI variables walks through that part.
At this stage, everyone in the digest segment who is subscribed gets the email.
Step 3: Time Delay – give people space to open and click
You never want two email sends back to back with no wait. It feels spammy, and it breaks the house rules for message pacing.
So immediately after the Send Email node, the journey moves into a Time Delay:
Delay: 3 days
Unit: Days
Three days is a common sweet spot for weekly content. It gives people the rest of the week to open and click before you decide what to do with non-openers. If your digest is monthly, you might use 5–7 days instead.
The only hard rule here: whatever delay you choose, the whole branch must still finish before the next weekly cycle hits, or contacts will get “stuck” and miss future issues because of the mid-journey lock.
Step 4: Check Email Activity – who actually engaged?
After the delay, you add a Check Email Activity process node, aimed at the digest email you just sent.
Configuration:
Marketing email: “Weekly Shopify growth digest”
Activities to branch on: Branch
opened:opened; Branchunopened:unopenedElse branch: the default catch-all
Now you have three paths:
People who opened the digest.
People who didn’t open it.
Everyone else (edge cases, e.g., email still in flight).
This is where you start turning the broadcast into a feedback loop. You’re not just blasting content; you’re recording how each merchant is behaving so future touch points can adjust.
Step 5: Openers – tag and score your readers
On the opened branch, you probably don’t need to send another email. They saw the subject, clicked in, and may have visited your blog.
Two simple actions here are enough.
Add Tag: apply a
digest-engagedtag. Over time, this gives you a clear slice of contacts who consistently consume content. Those are perfect candidates for beta invites, advanced feature webinars, or case study outreach.Update Contact Attribute: increment a numeric attribute, for example
digests_opened.
Configuration:
Attribute:
digests_openedUpdate type:
INCREMENTNew value:
1
You’ve now started an engagement score specifically for your digest. Combine that later with product usage (via custom events) and you can target “high content + low feature adoption” users with very specific onboarding nudges.
Once these two actions run, the path can end or flow into a Merge node if you want to recombine with other branches later. In the base pattern, we let it end cleanly.
Step 6: Non-openers – gentle resend and auto-downgrading
On the unopened branch is where you prevent your digest from turning into noise.
First, you track the behaviour:
Update Contact Attribute: increment a
digest_unopen_streakattribute.
Attribute:
digest_unopen_streakUpdate type:
INCREMENTNew value:
1
Now you know how many issues in a row they’ve ignored.
Next, add an If/Else node to branch on that streak:
Condition (using the Segment Builder): Contact attribute
digest_unopen_streakgreater than2
That effectively means: “Three or more issues in a row without opening.”
You get two paths:
6a. Streak under 3: send a one-time resend
For people who have skipped fewer than three issues, a resend is reasonable.
On the else branch (streak < 3):
Send Email: "In case you missed this week’s Shopify growth ideas"
Template is either the same digest with a tweaked subject, or a shorter “top story only” version.
Send only once: still turned off so it can run in future cycles, not resend the same email twice in one week.
Because we already had a 3‑day Time Delay after the original digest, this resend is spaced out enough to feel like a nudge, not a barrage.
You could optionally add a tag like digest-resent for reporting or A/B testing different subject lines with a Random Split, but that’s an optimisation layer, not core to the pattern.
6b. Streak 3+: reduce frequency or ask for confirmation
For the then branch (streak >= 3), the contact is sending a clear signal. The worst thing you can do is keep sending the same weekly email and hope something changes.
Here the base pattern does two things:
Add Tag: apply a
digest-mutedtag.Send Email: a short "Still want these content digests?" message.
The copy does two jobs:
It offers a preference: “Get this monthly instead” or “Only send big announcements.”
It reminds them there’s actual value in the content (e.g., “We send 2–3 real merchant case studies every month, no fluff”).
You do not auto-unsubscribe them in this journey. Instead, you use the combination of digest-muted tag and email activity to adjust who the Cyclic trigger targets.
For example, you can update the Cyclic criteria to:
Include
Digest subscribersExclude
digest-muted
Then have a separate, lower-frequency digest journey for muted contacts that runs monthly instead of weekly.
Step 7: The edge cases – the Else branch
The else path from Check Email Activity picks up contacts whose activity looked ambiguous in that three-day window (email delayed, bounced, still sending).
In most setups, you keep this path lightweight:
Optional Add Tag:
digest-unknownEnd of path
You’ll see these contacts if something is systematically wrong (deliverability issues, domain misconfiguration), and can fix the underlying problem instead of guessing. The help doc on setting up your sending domain is useful if you see this group grow unexpectedly.
Keeping the timing and re-enrollment healthy
All of this only works if the timing respects the journey-scoped re-enrollment rules:
The Cyclic trigger runs weekly with re-enrollment turned on.
The Time Delay after the initial digest is 3 days.
The resend or confirmation email happens immediately after the check.
There are no additional waits.
That means each contact exits the flow in under a week. By the time the next weekly tick hits, they’re no longer mid-journey, so they can be re-enrolled cleanly.
If you add extra waits, always make sure the sum of all delays on the longest path is less than your repeat interval. Otherwise, some contacts will silently stop receiving the digest because they never technically “finish” the journey.
Tracking the right metrics for this pattern
For a content digest, you care less about raw send volume and more about what it does for product engagement and revenue over time.
At a minimum, track:
Subscriber growth: how the size of your
Digest subscriberssegment changes.Open rate per issue: did that subject line earn attention.
Click-through rate: are people actually visiting the articles.
Sessions per send: if you install the SDK from the web tracking and analytics guide, you can tie website sessions back to each digest.
Unsubscribe rate: especially after resends or frequency changes.
Over a couple of months, CartWizard saw three trends that mattered more than vanity metrics:
Trial-to-paid conversion for users who had opened at least two digests was several points higher.
Churn among long-term digest readers dropped noticeably; they stuck around because they kept discovering new ways to win with the app.
Support tickets shifted from “How do I…” to “Saw this post, can I also do X?”, which is a much better problem to have.
That is what “not leaking lifetime value” looks like in practice.
Adapting the pattern for your own app
Once the core journey is working, you can shape it to your business:
Segment digests by feature: a merchant heavily using analytics may get different article blocks than one only using your basic reports.
Route power readers into advanced onboarding: anyone with
digests_openedover a certain threshold can be pulled into a separate journey for upsells or webinars.Change cadence by segment: enterprise clients may prefer a lower-frequency but deeper digest; small shops might like weekly ideas.
The mechanics stay the same. You’re just changing the criteria and tags that move people between journeys.
Underneath all of this is the same philosophy: you’re storing detailed, behavioural data on every merchant (who opens, who clicks, who never does), and you’re using that context to talk to them differently over time. Without adding headcount. You set up the journey once and let it run.
For a founder-led Shopify app or e‑commerce tool, that’s the kind of automation that actually earns its retainer line in your stack.
The content you’re already writing starts pulling more weight. The merchants you already have stay engaged longer. And your marketing workload doesn’t go up with your MRR, which is exactly the point.