Back to Playbooks

Stop Treating Month-Two Customers Like Strangers: Build a Second‑Purchase Journey

Free

This playbook walks through a Spreeflo journey that treats second‑month customers as committed regulars, using billing events, tags, and behaviour-based branches to send tailored emails, flag advocates, rescue under‑engaged users, and plug lifetime‑value leaks.

Industry

Niche

Pattern

Loading sequence...

Your Stripe report looks fine on the surface. Installs are steady, first payments roll in, MRR ticks up.

But zoom in on cohort charts and an ugly pattern appears: a wall of customers who pay you once… then silently churn before invoice #2 or #3.

For a Shopify or e‑commerce app, that second successful charge is the real moment of commitment. They went beyond “I’ll try this for a month” and decided you’re worth keeping in their stack.

Most teams don’t mark that moment at all. At best, the customer gets the same generic onboarding sequence again. At worst, they hear nothing.

The sequence at the top of this page is the whole journey, end to end. It’s a Spreeflo journey designed specifically for that second purchase: a repeat‑customer welcome that recognises them, skips the basics, and nudges them toward long‑term value and advocacy.

We’ll walk through it node by node and adapt it to an example: CartWizard, a $90k MRR Shopify app that recovers abandoned carts for merchants. They charge merchants monthly, plus a usage add‑on. Month‑two is where CartWizard either becomes an “always‑on” app or gets uninstalled.

CartWizard’s founders wanted a way to treat that second payment as a milestone: recognise the merchant, move them into an advanced success path, and quietly flag advocates.

Spreeflo is how they do it.

Why the second purchase deserves its own journey

For e‑commerce apps, churn is front‑loaded. Huge share of customers install, pay once, then leave when the value isn’t obvious or the app never gets fully set up.

Once a merchant pays a second invoice (or buys a second add‑on), three things are true:

  • They’ve seen at least a hint of value.

  • They’ve invested attention into setup.

  • Their probability of sticking around and expanding jumps.

Treating those customers like brand‑new signups is a waste. You end up:

  • Re‑selling the basics they already know.

  • Ignoring the features they’re ready for now.

  • Missing the chance to seed advocacy (reviews, referrals, case studies).

This is classic lifetime‑value leak. You did the hard work to acquire and activate them, then you let that inflection point pass without a specific conversation.

The repeat‑customer journey fixes that by doing two things:

  1. Capturing a little more detail on every customer (which payment is this? how engaged are they?).

  2. Using that detail to send a different cadence from day one customers.

Let’s look at how the journey does that in Spreeflo.

Step 1: Fire on the exact second payment (Custom Event trigger)

Everything starts with a Custom Event trigger.

CartWizard already has their billing system call the Spreeflo API whenever a charge succeeds. That event might be named subscription_payment_succeeded and includes a simple numeric property like billing_cycle_number.

In the journey:

  • Trigger node: Custom Event

  • Event name: subscription_payment_succeeded

  • Re-enrollment: On (true)

  • Property condition: billing_cycle_number equals 2

Why configure it this way:

  • You only care about the second successful payment for this journey, not the first or the tenth.

  • Turning re‑enrollment on means if a merchant churns, comes back six months later, and hits billing cycle 2 again, they can run through this journey a second time.

  • You’re not relying on contact attributes being perfectly in sync; the event itself carries which billing cycle just fired.

This is the first place we reinforce a key Spreeflo belief: if you can emit a richer event, do it. A tiny property like billing_cycle_number is all it takes to separate casual triers from committed customers.

Step 2: Tag and stamp them as repeat customers

The next few nodes don’t send anything; they reshape your data.

Immediately after the trigger, the journey runs:

  1. An Add Tag action: Tags applied: repeat-customer

  2. An Update Contact Attribute action: Attribute: lifecycle_stage (custom TEXT attribute), Update type: UPDATE, Value: literal string repeat_customer

Why do this before any messaging:

  • The repeat-customer tag gives you a reusable handle. You can build saved segments, run campaigns, or trigger other journeys from it later. The tags help doc shows how to pivot your whole audience around tags.

  • lifecycle_stage = repeat_customer is a clean flag in your data model. Anywhere in Spreeflo that uses the segment builder can now differentiate “new trial” from “repeat customer” with a single rule.

This is Brand Message #1 in action: you’re capturing more detail on every customer so later messages can speak to them uniquely.

If you want to go further, this is also a good place to:

  • Increment a numeric attribute like payments_count using an Update Contact Attribute.

  • Record a timestamp attribute like second_payment_at using an Update Contact Attribute with SET_NOW.

None of that sends email yet. It just sets you up so the same merchant never feels like an anonymous row again.

Step 3: Give transactional email some breathing room (Time Delay)

You do not want this journey competing with your invoice or receipt email.

CartWizard inserts a Time Delay action right after the data‑shaping steps:

  • Time Delay: 1 day

That 24‑hour buffer:

  • Makes sure the “you paid” transactional email is out of the way.

  • Gives their app time to show results. For an abandoned cart app, one day of recovered revenue looks compelling in an email.

In Spreeflo, every path that passes through multiple Send Email nodes must have a Time Delay or Wait Condition in between. This delay satisfies that, and it keeps your messaging from feeling like a barrage.

Step 4: Send a proper repeat‑customer welcome (Send Email)

Now the core moment: a Send Email action with content written specifically for returning customers.

Configuration:

  • Send Email node:

  • From: their usual marketing identity

  • Send only once: On

  • Content: built with Spreeflo’s email builder

What’s different about this email:

  • It recognises the milestone: “You didn’t just try CartWizard. You came back for month two. That’s where stores start seeing real revenue lift.”

  • It skips setup basics. No “install the script” or “connect your Shopify store” walkthroughs; that’s already done.

  • It surfaces proof. For example, “In your first month, CartWizard recovered $X in lost carts” (pulled from your own app data, not from Spreeflo).

  • It previews what “pro” usage looks like. Maybe three bullet points:
    - Using A/B tests on flows.
    - Segmenting high‑value cart abandoners.
    - Syncing recovered revenue into their reporting stack.

CartWizard also uses AI‑driven personalisation to tweak subject lines and copy based on the merchant’s niche, using tools described in the AI variables guide.

The key is tone. This email treats them like someone who has already committed, not a stranger who needs convincing.

Step 5: Give them time to act (second Time Delay)

From here the journey branches on behaviour, but only after a bit more breathing room.

CartWizard adds another:

  • Time Delay: 5 days

Reasoning:

  • That’s enough time for merchants to log in, try a couple of features, and see whether results accelerate.

  • It keeps the overall cadence gentle: invoice day, then one day later the recognition email, then a five‑day gap before the next message.

You could tighten or loosen this window, but for most B2B SaaS pricing in the $29–$199/month range, a week‑ish rhythm feels appropriate.

Step 6: Split engaged vs. under‑engaged customers (If/Else)

Now comes the important fork.

CartWizard cares whether repeat customers actually use the app between invoices. They send usage events from their app into Spreeflo:

  • feature_used

  • campaign_launched

  • recovered_cart

Using those events, the journey inserts an If/Else process node:

  • Condition (Segment Builder): Custom Event feature_used triggered at least 3 times in the last 7 days
    OR
    Custom Event campaign_launched triggered at least 1 time in the last 7 days

If a contact matches, they go down the “engaged” branch. If not, they follow the “under‑engaged” branch.

Why this structure:

  • It uses the same segment builder you use for saved segments, but inline inside the journey.

  • Engagement here is defined in clear behavioural terms, not guesswork. A merchant launching campaigns or hitting features multiple times is clearly on the right path.

  • Splitting here, rather than earlier, means every repeat customer at least got a recognition email before they’re categorised.

This step is where a lot of teams stop in their thinking. They “know” some customers are active and some are not, but they never encode that definition into their tooling. Once it lives inside an If/Else, the rest of the journey becomes obvious.

Step 7A: Fast‑track the engaged (Send Email + Add Tag)

For the “engaged” branch, CartWizard sends a more ambitious email.

  • Send Email node:

  • Subject along the lines of: “You’re using CartWizard like a pro. Here’s what’s next.”

  • Content:

  • Highlights advanced workflows used by top stores.

  • Softly introduces an upsell like a higher plan or add‑on module, but only after reinforcing value.

  • Suggests sharing results with their team or agency (social proof inside the merchant’s organisation).

Because there was a five‑day Time Delay before the If/Else, this email respects the pacing rule; there’s no back‑to‑back send.

Immediately after, the branch runs an Add Tag action:

  • Tag: advocate-candidate

That tag does two jobs:

  • It gives CartWizard a clean list of merchants who both passed the second‑payment milestone and showed strong engagement.

  • It can drive a separate “ask for review / referral” journey triggered by an Added Tag trigger.

This is an important pattern: you don’t have to cram every outcome into a single journey. Use tags as “handoff handles” for future automations.

Step 7B: Rescue the under‑engaged (Send Email + risk flag)

The “under‑engaged” branch looks different.

Here the journey adds:

  • Send Email node:

  • Positioning: “You’re paying for CartWizard, but you might not be getting full value yet.”

  • Content:

  • 2–3 quick wins they can set up in under 10 minutes.

  • Links to specific help articles or Loom walkthroughs.

  • An explicit line on ROI: “Most stores see CartWizard pay for itself by recovering at least $X/month. Here’s how to get there.”

  • Update Contact Attribute:

  • Attribute: risk_segment (TEXT)

  • Update type: UPDATE

  • Value: repeat_under_engaged

You could also add a tag like at-risk instead or as well.

Why not just rely on a “churned” event later? Because by the time they uninstall, it’s too late. Flagging under‑engaged repeat customers early lets:

  • Your success team filter for them and reach out manually if you’re doing any high‑touch work.

  • Future journeys or one‑off campaigns target them with specific incentives or guidance.

Again, this is brand message #3 at work: fixing lifetime‑value leak through ongoing, intelligent nurture rather than waiting for a cancellation email.

Step 8: Let other journeys take over (and keep this one lean)

After those two branches, the sequence in the diagram merges back with a Merge process node and ends.

CartWizard deliberately keeps this journey short:

  • Recognition email.

  • One follow‑up tailored to engagement level.

  • Data changes that other automation can hook into.

That keeps messaging focused and avoids crowding the inbox. From here, several other journeys can react:

  • An “Advocacy” journey triggered by the advocate-candidate tag that, after another month of solid usage, sends a single email asking for a Shopify App Store review or a testimonial.

  • A “Rescue” journey for the repeat_under_engaged segment that uses a Cyclic trigger to check in every 30 days while they remain under‑engaged.

  • A generic lifecycle journey where lifecycle_stage = repeat_customer shapes how ongoing newsletters and announcements are written.

Because Spreeflo separates journeys cleanly and charges primarily for marketing contacts, not anonymous visitors, CartWizard can keep as many of these lightweight flows running as they want without worrying about bloat in Spreeflo’s pricing.

Build them once, let them run, and iterate when metrics tell you to.

How to measure whether this journey is earning its keep

A repeat‑customer welcome should pay for itself quickly. For a Shopify or e‑commerce app, two simple numbers make that obvious:

  1. Second‑to‑third payment conversion rate.
    Among customers who have hit billing cycle 2, how many make it to 3? Compare cohorts before and after turning this journey on.

  2. Expansion / advocacy among repeat customers.
    Within the repeat-customer tag:
    - How many upgrade plan within 60 days?
    - How many install add‑ons?
    - How many fire an “advocacy” signal (clicked a review link, replied positively, or triggered a referral_sent event)?

Because the journey explicitly tags advocate-candidate and stamps risk_segment, you can answer these questions just by building a couple of audience views under the campaigns and journeys overview.

If you see:

  • Second‑to‑third payment conversion improve.

  • Upgrade rates higher in the “engaged + repeat‑customer” cohort.

  • More advocacy signals from advocate-candidate than the rest of the base.

…then this journey has earned its line item in your mental budget.

The deeper shift: from flat billing events to behavioural milestones

On paper, this is a small automation. One trigger, a few data updates, two emails, a fork, done.

The real change is how you treat customer activity:

  • A billing event is not just “revenue logged.” It’s a lifecycle milestone.

  • A repeat customer is not just “a user in month two.” They’re someone whose context has shifted and who deserves different messaging.

  • Tags and attributes are not admin fields. They’re the backbone that lets you talk to merchants in a way that reflects their journey with your app.

For founder‑led teams building Shopify and e‑commerce apps, that’s leverage. You don’t need a big success team to run VIP treatment for hundreds of stores. You need a clear journey and a tool that translates your data into the right messages.

That’s what the sequence at the top of this page shows: a narrow, intentional slice of automation that plugs one of the biggest lifetime‑value leaks in your business.

Build your own version, wire it to your billing events, and next month’s cohort chart will tell you whether your second‑purchase customers finally feel like the regulars they are.