Back to Playbooks

One Signup Question, Three Journeys: Persona-Based Nurture for Shopify Apps

Free

This playbook walks through CartWizard’s persona-based onboarding for Shopify apps in Spreeflo, using a single signup question to drive three segmented nurture journeys that boost email engagement, activation, and qualified demos per install.

Industry

Niche

Pattern

Loading sequence...

CartWizard had a very “average” onboarding problem.

They build a cart-recovery and upsell app for Shopify stores, doing just over $80k MRR. Their install rate from the Shopify App Store was solid. Their trial-to-paid conversion was… fine. But inbox replies told a different story:

  • Solo founders were asking, “Can you just show me how this adds $X/month?”

  • In‑house marketers wanted deeper segmentation and A/B testing.

  • Agencies were asking about multi‑store rollout and client reporting.

Everyone was getting the same four-email “getting started” sequence. It spoke cleanly to nobody.

So they added a single question to their post‑install screen and welcome email:

“Which best describes you? \n◻ Founder / owner \n◻ Marketing lead \n◻ Agency / freelancer”

Behind the scenes, each answer applied a different tag, which dropped that contact into its own persona track.

Click‑through rates on onboarding emails jumped 40–70% depending on persona. The “agency / freelancer” path alone produced 2x more qualified demos per 100 installs.

The sequence at the top of this page is the whole journey, end to end. The rest of this article breaks down how it works inside Spreeflo, node by node, and how to adapt it to your own Shopify or e‑commerce app.

Why one persona attribute compounds across your funnel

If you’re selling an app into Shopify or another e‑commerce platform, you’re not selling to “merchants” in the abstract.

You’re selling to:

  • Founders who care about revenue and speed.

  • Marketing managers who care about campaigns, attribution, and experiments.

  • Agencies who care about repeatable processes, client results, and margins.

Give all three the same onboarding and you get middle‑of‑the‑road performance for each.

The pattern here is simple:

  1. Capture persona once (from a survey, form, or in‑app self‑select).

  2. Store it on the contact (via tags and an attribute).

  3. Use that to drive every subsequent touch: welcome, activation nudges, upsell, expansion.

That’s Brand Message #1 in action: capture detail on every customer so you can speak to each uniquely.

In Spreeflo terms, you’ll use:

  • Tags to express persona choices.

  • An Added Tag trigger to start each persona journey.

  • A shared skeleton of Send Email, Time Delay, Wait Condition, and If/Else nodes, with copy tailored to each persona.

  • Optional Update Contact Attribute nodes so persona is queryable across the app using the segment builder.

Let’s walk through the exact journey shown in the visual sequence.

Step 1: Capture persona and apply tags

CartWizard wired persona selection in two places:

  • A short post‑install screen inside the app.

  • A welcome email asking the same question for those who skipped in‑app.

On the implementation side, they:

  • Called Spreeflo.identify(email, { persona: "founder" }) from the app when someone chose a persona.

  • Hit the Spreeflo API to apply a tag like persona:founder, persona:marketer, or persona:agency.

  • Used tags chosen to be human‑readable and consistent: persona:founder, not p1.

Those tags are the only thing the journey depends on. You can collect persona from a form, a webhook, a CSV import, or your own backend. As long as the right tag is added, the journey just works.

You could stop at tags. But CartWizard also maintained a persona text attribute. That makes it easy to filter in the audiences view and build persona segments later.

They used a tiny helper journey for that:

  • Trigger: Added Tag on any persona:* tag.

  • Action: Update Contact Attribute persona to a static value ("founder", "marketer", "agency" depending on the tag).

  • Action: Add Tag persona:set as a generic “we know who this is” flag.

Now the main journey at the top of this page can assume persona exists and focus entirely on the nurture.

Step 2: Three Added Tag triggers — one per persona

The main journey begins with three separate triggers, one for each persona:

  • Added Tag: persona:founder

  • Added Tag: persona:marketer

  • Added Tag: persona:agency

All three triggers have re‑enrollment turned on (isReEnrollment = true).

Why?

  • In Spreeflo, re‑enrollment is journey‑scoped. If every trigger had re‑enrollment off, the first persona tag a contact ever got would “lock” them out of every other branch, forever.

  • In real life, people change roles or install your app in a different context. You want the option to retag them and drop them into a better‑fit journey later.

  • The mid‑journey lock still prevents duplicate enrollments. A contact currently moving through the founder path won’t be re‑enrolled into marketer mid‑stream, even if someone mis‑applies a tag.

Each trigger’s only job is to hand the contact off to the appropriate path. From there, the three persona tracks share the same backbone of nodes, with only content and minor conditions changing.

Step 3: Standardize the backbone, personalize the story

All three persona paths follow the same structure:

  1. Normalize data and mark the start.

  2. Send a persona‑specific Day 0 email.

  3. Follow up after a delay.

  4. Wait for activation behavior.

  5. Branch based on whether activation happened.

  6. Close out with either expansion or “rescue” messaging.

  7. Tag completion for analytics.

That consistency matters. It keeps your canvas readable and your experiments sane. You’re not maintaining three entirely different automations; you’re maintaining one pattern expressed three ways.

Let’s take the founder path as the detailed example. The marketer and agency paths mirror it.

Founder path: from install to first win

3.1 Normalize persona and mark enrollment

Directly after the Added Tag (persona:founder) trigger, the founder branch starts with:

  • Update Contact Attribute: set persona to the text "founder". \n Even though the app already set this via Spreeflo.identify, this node acts as a guardrail. If the tag came from a CSV import or manual update, you still get a clean attribute.

  • Add Tag: journey:onboarding-founder. \n This is a journey‑scoped tag that means, “currently in the founder track.” It’s useful for suppression (don’t drop them into other conflicting sequences) and quick support lookups.

Neither of these steps talks to the contact. They’re there so the rest of your campaigns and journeys have a reliable view of who this person is.

3.2 Day 0: Welcome email tailored to founder jobs‑to‑be‑done

Next comes the first touchpoint:

  • Send Email: “Welcome to CartWizard — here’s your extra $X/month.”

Configuration details:

  • “Send only once” is left on. If a contact ever re‑enters this path (because someone re‑applied persona:founder later), they won’t get a confusing duplicate welcome.

  • The copy is built in the email builder, focusing on revenue outcomes, not knobs and dials. A founder wants, “Here’s proof this pays for itself,” plus a single, clear setup CTA.

Immediately after this node:

  • Time Delay: 1 day (minimum spacing between emails, and a good real‑world cadence).

  • If you stacked another Send Email right away, you’d have both a human spam problem and a violation of Spreeflo’s message‑pacing rule.

3.3 Day 1: Setup checklist with a single metric

After the delay:

  • Send Email: “Your 10‑minute setup checklist.”

Here the CTA is narrow: enable one key feature and confirm tracking is working. The email reflects the founder’s context:

  • Screenshots or GIFs of the exact pages they’ll see.

  • A simple “you’re done when…” definition.

  • A light mention of expected uplift once that feature is live.

Again, this email’s “send only once” flag stays on, and it’s followed by the core behavior‑based wait:

  • Wait Condition: up to 3 days for activation.

The condition uses the segment builder:

  • Custom event feature_used

  • Event name / property filters: your north‑star activation behavior (for CartWizard, first recovered order over $X).

  • Frequency: at least 1 time in the last 3 days.

The timeout is set to 3 days in the node. That means:

  • If they activate quickly, they move on immediately.

  • If they don’t, they wait at most 72 hours before the journey continues.

This Wait Condition is also your second anti‑spam spacer between emails. Even if activation happens in minutes, there’s still a material delay since the last send.

3.4 Branch: activated vs stuck

After the Wait Condition, the path hits an If/Else process node that re‑checks the same activation condition:

  • If condition is true: go down the “activated” branch.

  • Else: go down the “not yet activated” branch.

Why check twice instead of branching inside the Wait Condition?

Because Wait Condition alone doesn’t branch; it just controls timing. You still need a decision point to treat activators and non‑activators differently.

Activated branch: lock in value and expand

The activated sub‑path looks like this:

  1. Send Email: “Nice win — here’s what to do next.” \n - Subject line references their first recovered revenue. \n - Content frames the next step: scaling to more campaigns, enabling an upsell widget, whatever your natural expansion is.

  2. Time Delay: 2 days.

  3. Send Email: “How founders like you use CartWizard long‑term.” \n - Case study or testimonial featuring another founder. \n - Soft prompts toward upgrading, enabling add‑ons, or inviting team members.

  4. Merge: both activated and non‑activated branches eventually feed into a Merge node so you can standardize wrap‑up steps (more on that in a second). Merge is the only node type that accepts multiple incoming paths.

Every Send Email in this branch has at least one Time Delay or Wait Condition between them, keeping you clear of the back‑to‑back rule.

Not‑yet‑activated branch: rescue before churn

The non‑activated sub‑path is similar structurally but different in tone:

  1. Send Email: “Want us to just set it up for you?” \n - Focuses on removing friction: links to a loom walkthrough, office hours, or a “we’ll configure it for you” form. \n - You might also mention what they’re leaving on the table in concrete terms (e.g., “stores like yours recover $Y/mo after this step”).

  2. Time Delay: 2 days.

  3. Send Email: “Before you uninstall, a quick check…” \n - Short, empathetic copy with a 1–2 question survey or reply‑to‑this‑email ask. \n - It’s your last automated attempt to understand why they’re stuck.

  4. Merge: same merge node as the activated branch.

Again, every email is spaced out, and each path stays cleanly separated until the Merge.

3.5 Wrap‑up: tag completion for analytics

After the Merge node, the founder track finishes with:

  • Add Tag: onboarding:completed. \n This fires for everyone who made it through the sequence, regardless of activation outcome.

You can now build segments like:

  • persona = founder AND tag contains "onboarding:completed" AND custom event "feature_used" has not triggered in last 14 days → founders who finished onboarding emails but never actually activated.

That’s where you might later hang a re‑engagement or sales‑assist journey.

Marketer and agency paths: same skeleton, different emphasis

The marketer and agency branches reuse the exact same node pattern:

  • Update Contact Attribute persona ("marketer" or "agency").

  • Add Tag journey marker (journey:onboarding-marketer / journey:onboarding-agency).

  • Day 0 and Day 1 emails with 1‑day Time Delay in between.

  • Wait Condition on the same activation behavior.

  • If/Else split into activated / not‑yet.

  • Two‑email sub‑sequences after the split, each spaced with a 2‑day Time Delay.

  • Merge and Add Tag onboarding:completed.

What changes is the narrative:

  • Marketers care about campaign controls, segmentation depth, and reporting. \n Their emails emphasize dashboards, split tests, and calendar‑ready reporting screenshots.

  • Agencies care about multi‑store rollouts, templated setups, and client ROI. \n Their emails highlight speed of onboarding new stores, reusable “recipes,” and white‑label reporting.

Structurally, every persona moves through the same logical journey. You’re not maintaining three separate automations, just three variations of the same one.

That’s exactly how a small team wins on leverage: build the system once, then speak uniquely to each contact with tailored content.

Reading the right numbers: persona CTR and persona‑to‑MQL

With this setup, two metrics tell you whether your persona paths are doing their job:

  1. Persona‑specific CTR \n The email analytics view already breaks down opens and clicks per email. Because each persona has its own templates, you can compare: \n - Founder CTR vs marketer CTR vs agency CTR on the same “Day 1” theme. \n - Activated‑branch CTR vs rescue‑branch CTR. \n If founder CTR is lagging, it’s usually a copy/value prop problem, not a structural one.

  2. Persona‑to‑MQL rate \n In CartWizard’s case, “MQL” was defined as: \n - Installed \n - Activated the core feature within 7 days \n - Recovered at least $Z in revenue \n That’s easy to express with the segment builder: \n - Custom events for installation and recovered orders. \n - Time windows and frequency counts. \n - AND filters on tags/attributes. \n Once you have a “MQL:yes” segment, it’s trivial to filter it down by persona attribute and calculate conversion rate per persona off your install numbers.

Because persona is captured permanently on the contact record, you’re not guessing. You can see exactly which buyer types your onboarding talks to effectively.

Adapting this pattern to your own app

A few practical tweaks for different e‑commerce apps:

  • Analytics / reporting tools (like a fictional ShopMetrics) \n Make the activation event “connected at least one sales channel and opened a report.” Activation emails should show concrete reporting wins for each persona.

  • Inventory / logistics tooling \n Personas may be “Ops lead,” “Founder,” and “Virtual assistant.” Adjust copy to their responsibilities: ops wants reliability, founders want cost savings, assistants want clear checklists.

  • Headless or API‑heavy apps \n Your third persona might be “Developer.” Their path should foreground API docs, sample repos, and test environments while still moving them toward the same high‑value activation.

The spine of the journey stays the same: Added Tag → normalize → Day 0 → Day 1 → Wait Condition → If/Else → persona‑specific branches → Merge → completion tag.

The bigger win: you stop shouting, start speaking

At first glance, this pattern looks like “extra work”: three paths instead of one.

In practice, it’s the opposite. You standardize how onboarding works, then let persona shape language and examples. The same journey template can travel across new apps, new features, and new markets with only minor edits.

Most Shopify and e‑commerce app teams already track rich behavior. What they often lack is a clear, durable persona attribute that connects those behaviors to what each person actually cares about.

The journey you saw at the top of this page turns a single signup question into that durable attribute, then lets the rest of your marketing talk to people as who they are: a founder, a marketer, an agency — not just “another install.”

That’s the core idea Spreeflo is built around: when you capture detail on every customer, you can speak to each one uniquely, and your automations finally start compounding instead of blending into the noise.