Back to Playbooks

The Month-Two Moment: A Repeat‑Customer Welcome Journey for SEO SaaS

Free

This playbook shows how to build a Spreeflo journey that treats the second subscription charge in SEO SaaS as the real conversion moment, using behavior-based branching to welcome repeat customers, rescue at-risk accounts, and seed advocacy.

Industry

Niche

Pattern

Loading sequence...

Month two is where a lot of SEO SaaS revenue quietly dies.

The trial converted, the first invoice cleared, everyone high‑fived… and then usage flattened, no one nudged the account, and the second renewal never happened. On paper you “acquired” the customer; in Stripe you just lost them.

For a rank tracker or content-brief tool doing $40k–$80k MRR, that second billing cycle is often the difference between a $100 customer and a $1,000+ customer. The sequence at the top of this page is the whole journey, end to end, for treating that moment like the real conversion it is.

In this playbook we’ll build a Spreeflo journey that:

  • Recognises when a customer pays you again.

  • Welcomes them as a returning user, not a stranger.

  • Adapts the follow-up based on whether they’re actually using the product.

  • Plants the seeds for advocacy once they’re getting results.

We’ll use a Custom Event trigger on a backend “purchase” event, email as the main channel, and Spreeflo’s campaigns and journeys editor to wire it all together.

To make this concrete, imagine “RankSignal”: a 4‑person SEO SaaS at ~$60k MRR, selling rank tracking and content briefs to agencies. Their biggest leak is customers who pay once, never really adopt, and churn before invoice #2. This journey is designed for them.

What “second purchase” actually means for SEO SaaS

In ecommerce, “second purchase” is obvious: another order. For SEO SaaS you’ve got a few candidates:

  • The second monthly renewal on a core subscription.

  • The first upgrade (e.g. Starter → Pro).

  • The first expansion (extra seats, new workspace, add‑on module).

All three are valid. To keep the journey tight, we’ll focus on the first renewal: the second successful charge on the main subscription.

That’s when:

  • The customer has had long enough to see value.

  • You’ve already sent the standard onboarding.

  • You either cement the relationship or they quietly cancel.

From Spreeflo’s perspective, this is a backend event. Your billing system (Stripe, Chargebee, Paddle, custom) already emits “payment succeeded” or “subscription renewed” webhooks. Instead of trying to fire Spreeflo.track from the server, you push those into Spreeflo via the Spreeflo API:

  • Event name: subscription_charged (or whatever you prefer).

  • Properties: at minimum, plan_name, billing_cycle_number (1, 2, 3…), amount, and any useful metadata (seat count, billing period, etc.).

The journey’s Custom Event trigger will listen for subscription_charged where billing_cycle_number is exactly 2. That’s your “second purchase”.

If you later decide you want this journey to run on every renewal, not just the second, change the condition to “greater than 1” and turn Re-enrollment on. Just keep the sequence short enough that they’ve exited before the next billing cycle.

The spine of the journey

At a high level, the flow you see in the sequence viewer does this:

  1. Listen for the second successful subscription charge.

  2. Tag the contact as a repeat customer.

  3. Wait a day to avoid colliding with transactional receipts.

  4. Send a “welcome back” email that acknowledges them as a returning customer.

  5. Watch how they use the product for up to a week.

  6. Branch:
    - If they hit clear “value” signals, send an advanced, advocacy‑oriented email.
    - If they stay low‑engagement, send a “let’s get you to results” rescue email.

  7. Tag them based on which branch they hit, so you can treat them differently in later journeys.

Now let’s walk through each node and how to configure it.

1. Custom Event trigger: catching that second charge

Node: Custom Event trigger
Event name: subscription_charged
Property conditions: billing_cycle_number equals 2
Re-enrollment: Off

This trigger fires whenever your backend posts a subscription_charged event where the numeric property billing_cycle_number is 2.

Why set the filter here instead of branching later?

  • You avoid accidental double‑handling of other charges. Only the first renewal enters this journey.

  • With Re-enrollment off, each customer can only pass through this “second purchase welcome” once. Later renewals can be handled by a different lifecycle journey if you want long‑term retention flows.

Under the hood, the trigger’s property conditions use the same engine as the segment builder: data type is Number, operator is “equals”, value is 2.

If you later decide you want this journey to run on every renewal, not just the second, change the condition to “greater than 1” and turn Re-enrollment on. Just keep the sequence short enough that they’ve exited before the next billing cycle.

2. Add Tag: mark them as a repeat customer

Node: Add Tag
Tags: repeat_customer
Force tag trigger: Off

The first thing we do after the trigger is mark the contact with a repeat_customer tag.

This looks trivial, but it’s where Brand Message #1 comes to life: capture detail so every contact can get unique messaging. Once this tag exists you can:

  • Build a “Repeat customers” segment for analytics.

  • Exclude them from first‑purchase onboarding campaigns.

  • Target them with offers that assume familiarity with your product.

We don’t need Force tag trigger here because we’re not chaining off Added Tag triggers in other journeys yet.

3. Time Delay: give space after the receipt

Node: Time Delay
Delay: 1 day

Your billing system should already send a transactional receipt when the charge succeeds, often via a different system or via Spreeflo’s transactional email capabilities.

You don’t want your marketing email landing in the same minute. A 1‑day Time Delay creates breathing room:

  • The customer has mentally logged that they paid you again.

  • Support tickets from failed charges have had time to pop up.

  • Your “welcome back” email feels considered, not automated.

Time Delay only supports hours or days, so “1 day” is a clean default. If your invoices go out at odd hours you can tune this to “24 hours” instead.

4. Send Email: the repeat‑customer welcome

Node: Send Email
Channel: Email
Content: Built in the email builder
Send only once: On

This is the hero of the journey: an email that explicitly recognises them as a returning customer and sets the tone for the next stage of the relationship.

A simple structure that works well for SEO SaaS:

  • Line 1: Recognise them
    “You’re into month two with RankSignal — thanks for sticking with us.”

  • Line 2–3: Reflect what they’ve already done
    “Over your first month you tracked keywords across 3 domains and ran 2 technical audits. That’s a strong foundation.”

  • Section: “Here’s what successful month‑two customers do”
    A short list of advanced behaviours that correlate with retention:
    - Invite a client into a read‑only workspace.
    - Set up weekly ranking alerts for top‑value keywords.
    - Turn their best‑performing SEO pages into content briefs.

  • Closing: A simple ask
    “Hit reply and tell us the one SEO win you’re aiming for this month. We’ll point you at the features that help most.”

If you’re on Professional, this is a great place to tap Spreeflo’s AI inside the editor and personalise copy to each contact’s use case. Even without AI, you’re still far ahead of a generic invoice or a recycled onboarding email.

Make sure Send only once is on. Even if you later change the trigger logic, no one should receive this specific email twice.

5. Wait Condition: watch for real product engagement

Not every repeat payer is actually using your tool. Some forgot to cancel, some are still trying you sporadically, and a handful are logging in daily.

We want the second email to adjust to that reality.

Node: Wait Condition
Condition: “Has hit value actions”
Timeout: 7 days

Using the segment builder inside the Wait Condition, define “value actions” as something like:

  • Custom event checked_rankings triggered at least 3 times in the last 7 days, OR

  • Custom event generated_content_brief triggered at least 1 time in the last 7 days.

Both of these events can be captured via the Spreeflo SDK in your app or via web tracking and analytics on your frontend.

The Wait Condition then does:

  • If the contact meets this condition at any point in the next 7 days, it moves them forward immediately.

  • If they don’t, it moves them forward once the 7‑day timeout runs out.

Critically, this node also spaces out your emails. It sits between Send Email #1 and the branch that leads to Email #2, satisfying the “no back‑to‑back sends” pacing rule.

6. If/Else: split high‑engagement from at‑risk

Right after the Wait Condition, drop an If/Else process node.

Node: If/Else
Condition: Same “value actions” definition as the Wait Condition

  • “Yes” branch: contacts who have hit those value actions.

  • “Else” branch: contacts who haven’t.

Reusing the same criteria keeps your logic simple: the Wait Condition controls when you branch; the If/Else decides which path they take once the waiting is over.

Why not collapse these into one node? Because Wait Condition doesn’t branch; it only holds. You need a dedicated If/Else to create separate downstream paths.

7A. High‑engagement branch: move them toward advocacy

For customers who are in your app, checking rankings and generating briefs, the second email can assume they’re seeing value.

Node: Send Email (high‑engagement path)
Send only once: On

Content for this email might look like:

  • Subject: “You’re doing the right things — here’s how to go further”

  • Body:
    - Acknowledge the behaviour: “We’ve seen you tracking X keywords and creating briefs regularly.”
    - Share 1–2 advanced tactics your best customers use (e.g. integrating rank data into client reports, combining content briefs with CRO tests).
    - Invite them into a soft advocacy action:
    - Share an anonymised SEO win: reply with a recent ranking lift and how they used your tool.
    - Opt in to a “customer stories” list where you occasionally ask for quotes or case study participation.
    - Forward a referral link to a colleague (if you have a simple referral program, this is where it lives; if not, just ask for intros in plain language).

You can then follow that email with an Add Tag node:

Node: Add Tag
Tags: repeat_engaged, advocacy_candidate
Force tag trigger: Off

Now you have a cohort of repeat customers who are both paying and using the product — prime targets for future upsell, beta tests, or case study outreach.

7B. Low‑engagement branch: rescue the relationship

If the contact didn’t hit your value actions within a week, they’re a churn risk. Treat them very differently.

Node: Send Email (rescue path)
Send only once: On

Angle this email as a helping hand, not a scare tactic:

  • Subject: “Let’s make sure month two is worth it”

  • Body:
    - Acknowledge lightly: “We haven’t seen much activity in your account over the last week.”
    - Offer 2–3 “easy wins”:
    - A 10‑minute setup checklist for their first site.
    - A short loom video showing how agencies similar to them use the tool.
    - A preconfigured sample project they can import.
    - Provide a low‑friction support option: “Reply with your domain and we’ll send back three SEO opportunities you can track in RankSignal.”

Depending on your team size and ACV, you can optionally follow this with a Send Internal Email node:

  • Alert the founder or success inbox when a high‑MRR account hits this branch.

  • Include contact attributes and tags so a human can decide whether to step in.

Finally, tag them:

Node: Add Tag
Tags: repeat_at_risk
Force tag trigger: Off

This label is powerful fuel for future win‑back efforts. For example, a later journey could trigger when a repeat_at_risk contact visits your pricing page twice in a week.

Why this structure works

A few design choices here are worth calling out.

  1. The trigger is narrow and precise. By keying off billing_cycle_number = 2 in the Custom Event trigger, we avoid messy logic inside the journey. The backend already knows how many times it has charged this subscription; Spreeflo just listens for the right case.

  2. The journey respects transactional vs marketing roles. We let your billing tool or transactional setup send the receipt, then follow up a day later with narrative, value‑focused messaging. No mixed signals in the inbox.

  3. Engagement, not just revenue, drives the branch. The Wait Condition + If/Else combo uses behavioural data — not gut feel — to decide whether to ask for advocacy or offer rescue. This is the essence of “capture detail on every customer so you can speak to each uniquely”.

  4. Tags turn this from a one‑off into an asset. repeat_customer, repeat_engaged, repeat_at_risk, advocacy_candidate — these become building blocks for more sophisticated automations down the line, all reusable from the same campaigns and journeys canvas.

  5. Pacing avoids spammy vibes. There’s always at least one Time Delay or Wait Condition between Send Email nodes on any path. You can lengthen those windows easily if your customers prefer a slower cadence.

Adapting the pattern for upgrades and expansions

For some SEO SaaS products, the “second purchase” that really matters is an upgrade, not a renewal. You can reuse the same structure with minimal tweaks:

  • Listen on a different Custom Event, like plan_upgraded or seats_purchased.

  • Use property conditions instead of billing_cycle_number, for example:
    - previous_plan is “Starter” and new_plan is “Pro”.
    - seats_added greater than 0.

  • Adjust the copy:
    - Recognise the higher commitment.
    - Share best practices that match the new plan’s capabilities.
    - Offer help migrating projects or onboarding extra users.

The key idea doesn’t change: when someone deepens their relationship with your tool, don’t re‑sell them the basics. Acknowledge what they’ve already done and show them what “the next level” looks like.

What to measure — and how to iterate

This journey doesn’t live in a vacuum. You should be watching:

  • Second‑cycle retention: Of all customers who start billing, what percentage make it past invoice #2? Track that for those who received the journey vs a previous cohort.

  • Engagement split: In the Wait Condition, how many go down the “engaged” vs “at‑risk” branch? If 80% are “at‑risk”, your initial onboarding, not this journey, may need attention.

  • Advocacy signals: How many “engaged” repeat customers:
    - Reply with results?
    - Agree to be a testimonial?
    - Send referrals that show up as new trials?

Because each branch ends with clear tags, you can build saved segments and monitor their behaviour in your analytics and email reporting. Over time you can refine:

  • The “value action” definition inside the Wait Condition.

  • The time window before you branch (7 days vs 14).

  • The offers inside each email, using the editor’s A/B testing or Random Split nodes upstream.

The deeper win: plugging a quiet LTV leak

Most SEO SaaS founders are obsessed with the trial‑to‑paid curve and the top of the funnel. That’s rational. But a huge share of lifetime value is decided right after that — in how you treat the people who chose to pay you again.

By wiring up this simple second‑purchase journey in Spreeflo, you:

  • Turn a raw “payment succeeded” webhook into a tailored conversation.

  • Let behaviour, not assumptions, decide who gets asked for advocacy and who gets support.

  • Build a richer customer record with tags and events that keep paying dividends.

You still need a good product and honest marketing. This flow won’t fix a tool that doesn’t deliver. But if people are willing to pay you twice, they’re telling you something important. Treat that as the beginning of the relationship, not the end of onboarding, and you’ll see it in your MRR curves.

And because the whole thing lives in a single, visual journey using Spreeflo’s campaigns and journeys, you set it up once and let it compound. That’s the kind of quiet automation that lets a 4‑person team run like a 20‑person one without drowning in manual “check‑in” emails.