Turn Every Ebook Download Into a Demo-Ready Shopify Lead
This playbook shows Shopify and e‑commerce app teams how to turn a single lead magnet download into an automated, topic-specific nurture in Spreeflo that tags, qualifies, and routes merchants into demo-ready, high-intent segments.
Industry
Niche
Pattern
Loading sequence...
A merchant lands on your blog from the Shopify App Store. They skim a post about “Recovering 20% More Abandoned Carts,” see your gated Black Friday playbook, and drop their email to get the PDF.
You send the asset, feel good about the conversion, then… nothing. A few months later they uninstall your app and you realise they never actually became a customer. That “lead magnet” was just a glorified file server.
For Shopify and e‑commerce app teams, this is where a lot of potential MRR quietly dies. Content works. Forms convert. But the follow-up is manual, inconsistent, or generic.
The sequence at the top of this page is the whole journey, end to end. It shows how to turn a single download event into a short, topical nurture that moves a contact from “random ebook lead” to “qualified merchant with context around your app.”
In this article, we’ll walk that journey node by node and map it to a concrete example: CartWizard, a four-person cart recovery app doing around $100k MRR with a mix of $49/mo and $99/mo plans. They drive steady installs from the Shopify App Store and content, but their lead magnets weren’t producing many MQLs. Here’s how they fixed it in Spreeflo.
Why most lead magnets underperform for Shopify apps
Merchants collect resources like trading cards. They grab your “BFCM Recovery Playbook,” a competitor’s “Post‑Purchase Upsell Blueprint,” and three random checklists from LinkedIn, all in one afternoon.
If your only follow-up is the PDF and then a generic newsletter, three things usually happen:
They never connect the asset’s topic to your app’s value.
They forget who you are by the time Black Friday planning actually starts.
Your best prospects never see examples that match their store size or stack.
This is a classic lifetime value leak. You’ve already paid the “attention tax” to earn the download, but you’re not nurturing that interest into activation, expansion, or retention.
The fix is simple in principle: deliver the asset, then send 2–3 follow-up emails that stay tightly on that topic and gradually introduce your app. The trick is doing this automatically, with the right level of personalization, from a small team that can’t babysit every form fill.
That’s exactly what the journey in this playbook is built for.
Overview: from “downloaded PDF” to “qualified lead”
At a high level, the journey works like this:
A merchant submits the form for a specific asset, and your site fires a
lead_magnet_downloadedevent into Spreeflo.A Custom Event trigger enrolls them in a journey for that asset’s topic.
The journey immediately sends the delivery email with the PDF link.
Over the next 5–7 days, two more Send Email nodes go out: a case study and a tactical how‑to that naturally introduces your app.
After a short Time Delay, the journey checks whether they engaged with the emails and whether they’ve taken a key product action (for example,
app_installedorfeature_used).Engaged merchants get tagged and, optionally, handed to sales or added to a higher‑intent segment. Everyone else flows back into your broader newsletter or onboarding.
All of this runs on autopilot once you’ve wired the event and built the journey. Let’s break down why each node is configured the way it is.
Step 1: Trigger on the download event (Custom Event)
The journey starts with a Custom Event trigger set to fire when lead_magnet_downloaded is received.
Configuration choices that matter:
Event name:
lead_magnet_downloaded.Property conditions:
asset_slug is "bfcm-recovery-playbook"(or whatever you call this asset).Re-enrollment: set to
true.
Why Custom Event and not a generic list upload? Because you want behavioral precision. You’re reacting to a very specific intent signal: “this contact cares about abandoned cart recovery for Black Friday.”
Setting re-enrollment to true means the same contact can go through this journey again in the future for a different asset topic. Spreeflo will still guard against duplicates by preventing re-entry while they’re mid‑journey, so a merchant who panic‑clicks the form twice won’t get double emails.
If you’re running several flagship lead magnets, you can create one journey per topic with its own Custom Event trigger filtered on asset_slug. Or you can use one shared event name with a property-based split, which we’ll get to later.
Step 2: Stamp the topic on the contact (Add Tag + Update Attribute)
Immediately after the trigger, CartWizard adds some structure:
An Add Tag node with tags like
leadmagnet-bfcmandtopic-cart-recovery.An Update Contact Attribute node that sets a custom text attribute
last_lead_magnet_topicto the literal stringBFCM cart recovery.
This does two things:
It gives you human-readable tags you can work with anywhere else in Spreeflo. You can learn more about this approach in our guide on getting started with tags.
It writes a durable attribute you can use in segments and future journeys, for example: “Merchants whose last_lead_magnet_topic is BFCM and who have not yet installed the app.”
Because Update Contact Attribute writes a static literal at design time, every contact through this node gets the same value. That’s perfect for “this journey is about BFCM” or “this person downloaded our pricing benchmark report,” which are naturally fixed per journey.
This step is where Brand Message 1 comes in: you’re capturing detail on every contact so you can speak to them uniquely later.
Step 3: Deliver the asset (Send Email)
Next is the obvious part, but it still pays to design it well: a Send Email node that delivers the promised content.
Configuration notes:
Use your main sending identity.
Keep “Send only once” turned on so a re-enrolled contact doesn’t get duplicate delivery emails for the same asset.
Build the email in the visual email builder so it renders cleanly on mobile (where a lot of merchants skim content between support tickets).
Content-wise, this email shouldn’t try to sell. Its job is to:
Deliver the PDF or link clearly.
Reiterate what the merchant will learn.
Set the expectation that you’ll send a couple of follow-ups with examples.
You don’t want back-to-back emails on the same path, so we send nothing else here. The next step is a pause.
Step 4: Give them room to read (Time Delay)
After delivery, insert a Time Delay set to 2 days.
Why 2 days? For CartWizard, analytics showed that most downloads happened during the work week, but real BFCM planning typically happens toward the end of the week or early the next. Two days felt long enough for a quick skim, short enough that the topic was still fresh.
More generally:
The minimum in Spreeflo is 1 hour, but lead magnet nurtures work better on a “days” cadence.
If your audience skews enterprise or agency, a 3–4 day delay may make more sense.
This node exists largely to satisfy pacing discipline. Every path a contact can take should space Send Email nodes by at least one Time Delay or Wait Condition, and usually more than an hour. It keeps you out of spam folders and out of merchants’ bad books.
Step 5: Topical case study (Send Email)
Now that they’ve had time with the asset, the journey sends Email 2: a case study directly tied to the topic.
For CartWizard’s BFCM asset, this email broke down how a mid‑market Shopify store used their app to:
Recover an extra $42k during BFCM.
Automate the core sequence in under an hour.
Avoid common pitfalls mentioned in the original playbook.
You build this as another Send Email node. Again, keep “Send only once” on, and reference the same topic tags in the copy so the whole mini-series feels cohesive.
Immediately after, add another Time Delay of 3 days. That spacing gives this story time to work and keeps you safely away from “three emails in three days” territory.
Step 6: Product‑flavored how‑to (Send Email)
Email 3 closes the topical loop. It’s a how‑to that shows the merchant how they could implement one key idea from the asset inside your app.
Examples:
“Turn Playbook Page 7 Into a Live Flow in CartWizard (10‑Minute Setup)”
“The 3 Events to Track Before You Try This Upsell Strategy in Our App”
This is still content, not a hard pitch. Screenshots, short GIFs, and specific numbers earned from real customers are your friends here.
Mechanically, it’s another Send Email node, spaced after Email 2 with that Time Delay you just added. Across these three emails, you’ve:
Delivered on the initial promise.
Proved the concept with a real store.
Shown how your product fits that job-to-be-done.
Now you need to decide who graduated from “content consumer” to “MQL.”
Step 7: Check engagement (Time Delay + Check Email Activity)
You don’t want to evaluate engagement the moment Email 3 sends. Give people time.
CartWizard added:
A Time Delay of 2 days after the third email.
A Check Email Activity node configured on that third email with branches:
clickedfor merchants who clicked any link.openedfor merchants who opened but didn’t click.no_engagementfor everyone else (the implicit “else” branch).
Conceptually:
clickedare high-intent leads. They saw the implementation email and cared enough to click.openedare warm. They’re paying attention but haven’t raised their hand.no_engagementare cold (for now).
This is where Spreeflo’s segment builder logic shows up inside a journey. The node is just applying those “opened / clicked / not opened” rules at a specific point in time.
Step 8: Treat different branches differently (Add Tag, Send Internal Email, Merge)
Each branch does something slightly different:
clicked branch:
Add Tag: apply
bfcm-mqlandhigh-intent.Send Internal Email: notify a shared inbox or the founder with context on the merchant, including store URL and plan if you have it as contact attributes.
opened branch:
Add Tag: apply
bfcm-warm.Optionally, add them to a “soft nurture” segment that gets a monthly tips email.
no_engagement branch:
Add Tag: apply
bfcm-cold.Do not be tempted to immediately send another email. Let your general newsletter or product onboarding carry them forward.
After each branch completes its tagging and (optionally) internal alert, all three paths run into a Merge node. This keeps the canvas tidy and lets you add any “universal” steps after the topical nurture.
For example, CartWizard uses a Webhook action after the Merge to push bfcm-mql contacts with their tags into their CRM. They send only a subset of contact attributes to keep payloads small.
Step 9: Feed the wider lifecycle
At this point the dedicated topical nurture is done. You’ve moved people into more permanent buckets with tags, and your sales or success team has clear signals to act on.
From the Merge node, CartWizard sends all contacts into their general onboarding and newsletter system, which they built as separate journeys:
A welcome series triggered by Add to Audience for brand‑new emails.
A product onboarding journey triggered by a
app_installedCustom Event.A re‑engagement journey for inactive users.
Because Spreeflo journeys can share tags and segments, you don’t need to cram everything into a single, mega‑journey. Each topical lead magnet can have its own mini‑journey like the one at the top of this page, handing off cleanly via tags and attributes.
You can explore this modular approach more deeply in the overview on how to build a journey.
Wiring the event from your app or site
All of this runs on a single behavioral input: the download event.
You can send this in a couple of ways:
From your marketing site or blog using the Spreeflo JavaScript SDK, calling
Spreeflo.identify(email, attributes)when they submit the form, followed bySpreeflo.track("lead_magnet_downloaded", { asset_slug: "bfcm-recovery-playbook" }).From your backend or app via the Spreeflo API when the download is registered server-side.
Either way, what matters is that:
The email address is linked to the visitor via
identifyso the event attaches to a contact.You send a consistent
asset_slugor similar property so your Custom Event trigger and tags can stay topic-specific.
Remember that Spreeflo doesn’t charge for unlimited non‑marketing contacts, so you can afford to track behavior broadly, then only mark people as marketing contacts when they enter journeys like this. The detailed event history is what lets you speak to each merchant uniquely over time.
Measuring success: from download rate to MQL rate
The pattern’s core metrics are:
Asset download rate: how many visitors see the form and complete it.
Follow-up CTR: how many contacts click through the nurture emails.
MQL rate: how many become “sales‑worthy” based on behavior and fit.
In Spreeflo, you can track and iterate on these by:
Using Email Activity filters in the segment builder to build a segment like “clicked Email 3 at least once in the last 30 days AND has tag topic-cart-recovery”.
Comparing that to a segment of all contacts with
leadmagnet-bfcmto get an MQL percentage.Running A/B tests on subject lines with Random Split inside the journey, sending 50% down path A and 50% down path B to different email variants.
Once you have a baseline, you can justify more time investing in better assets, better copy, or more granular branching, because you know how many MRR dollars a single lead magnet actually throws off over a quarter.
If you want a clearer picture of which contacts you’re converting to paid or higher tiers, the audiences overview explains how to combine tags, attributes, and activity into reusable segments.
Adapting this for multiple lead magnets
If you have three or four big content pieces (for example, BFCM, post‑purchase upsells, subscription retention), you have two good options:
One journey per topic, each with its own Custom Event trigger on
lead_magnet_downloadedfiltered byasset_slug.One “universal” journey with:
A Custom Event trigger on
lead_magnet_downloadedwithout property filters.An immediate Multi-way Split on
last_lead_magnet_topic(set by upstream logic in your app) with one branch per topic.
In both cases, set the trigger’s re-enrollment to true so contacts can complete the BFCM nurture, then months later complete the upsell nurture when they download that asset. Spreeflo’s journey‑scoped lock prevents mid‑journey duplicates, but allows new entries once a contact finishes.
What you want to avoid is cramming unrelated topics into a single generic sequence. The whole power of this pattern is topical coherence. A merchant who downloaded a BFCM playbook shouldn’t get a series about email deliverability or SMS compliance just because you only built one nurture.
The quieter compounding effect
The obvious outcome of this journey is more demo requests or install clicks from each lead magnet. For CartWizard, wiring this into their Black Friday playbook turned a trickle of ad‑hoc replies into a steady flow of demo‑ready merchants each week.
The less obvious outcome is structural: you’re building a library of topic-level signals on every contact that your small team can reuse everywhere. Tags like topic-cart-recovery and attributes like last_lead_magnet_topic become the raw material for smarter newsletters, upsell campaigns, and churn‑prevention journeys.
That’s the heart of good marketing automation for founder‑led SaaS: capture detail on every customer, nurture engagement around what they actually care about, and let the system do the repetitive work for you.
A lead magnet delivery journey like the one at the top of this page doesn’t take a large team or months of setup. A few nodes, a single event, and three well‑written emails are enough to turn passive content into a predictable MQL engine for your Shopify app.