Back to Playbooks

The Once‑a‑Year Email That Cleans Your List And Boosts Engagement Scoring

Free

This playbook shows SEO SaaS teams how to build an annual “review your email preferences” journey in Spreeflo that cleans their list, refreshes consent, and turns engagement with a single housekeeping email into reusable scoring data.

Industry

Niche

Pattern

Loading sequence...

Your email list is probably lying to you.

If you’re running an SEO SaaS, there’s a good chance thousands of “subscribers” haven’t cared about your product updates, new rank-tracking features, or case studies for months. You still pay to send to them. They quietly drag down open rates and deliverability. And you have almost no fresh signal about what they actually want to hear from you now.

An annual “review your email preferences” journey fixes all three problems in one shot.

The sequence at the top of this page is the whole journey, end to end. In this article we’ll walk through how a team like “RankPulse” (a fictional 3‑person rank tracking SaaS doing ~$35k MRR) sets this up inside Spreeflo so it runs every year without touching it again.

You’ll see how to:

  • Stay on the right side of consent and expectations.

  • Capture fresh preference data per contact.

  • Turn opens and clicks on this email into a strong engagement signal you can reuse everywhere else.

Why this boring‑sounding email is a growth asset

On the surface, a yearly “hey, still want these emails?” message feels like housekeeping. For an SEO SaaS, it’s much more:

  1. It’s consent maintenance. Search marketers are wary of spam. Being explicit about what you send and how often makes you look like a peer, not a vendor shouting into their inbox.

  2. It’s a segmentation refresh. Your audience evolves. Agencies churn clients, in‑house SEOs change roles, and your product expands. A preference review nudges people to say “more of this, less of that.”

  3. It’s a dense engagement signal. Anyone who opens or clicks a non‑promotional housekeeping email is paying attention. That’s gold for your engagement scoring and for deciding who should see your next “hard” ask: annual upgrades, webinar pushes, or beta invites.

Most founder‑led SaaS teams skip this because it feels like a compliance chore. But if you’re serious about not leaking lifetime value, you need systematic ways to see who’s still listening and what they care about.

That’s exactly what this journey does.

What this journey does for an SEO SaaS

For a product like BrieflySEO (our fictional content brief generator):

  • It sends a single, clear email once a year asking subscribers to confirm topics and frequency, with a CTA to their account’s preference page.

  • It watches how they interact: opened, clicked, or ignored.

  • It updates two kinds of data on the contact:

  • It finishes with a cleaner, more informative list:

  • “Hard” profile data: when they last confirmed preferences.

  • “Soft” behavioral data: how much that action should move their engagement score.

  • You know who’s truly cold.

  • You know which paying customers are still very plugged in.

  • You avoid blasting the exact same cadence to a 6‑month‑inactive trial and a 3‑year agency champion.

All of this runs automatically once you build the journey in Spreeflo.

Let’s break down each node.

Step 1: Cyclic trigger – your once‑a‑year pulse

This is a Journey in Spreeflo, not a one‑off Campaign, because you want it to run every year without recreating it.

Trigger: Cyclic

Configuration:

  • Repeat interval: every 1 year

  • Time of day: pick a mid‑morning slot in your main timezone (e.g. 10:00)

  • Timezone: your primary customer base (e.g. America/New_York)

  • Re‑enrollment: ON

Re‑enrollment matters. With it on, the same contact can enter the journey again next year, as long as they’ve exited it. Without it, they’d get this email once in their lifetime and never again.

Under Criteria, you use Spreeflo’s segment builder to define who should be included each year. A sensible starting definition:

  • Email subscription status is Subscribed

  • Marketing status is Marketing

  • Contact is not tagged with do-not-email

  • Optional: Total visits at least 1 in the last 12 months OR Email opened at least 1 time in the last 12 months

That last line decides whether this journey is for your whole subscribed list, or just people who’ve shown some sign of life in the past year. Many teams run the preference review on everyone, but carve out a separate “last‑chance re‑permission” journey for long‑term zombies.

Either way, the Cyclic trigger gives you a clean, scheduled wave of contacts once a year.

Step 2: Split customers from leads so you can talk like an adult

Not all subscribers are equal. An agency paying $199/mo and a free trial from two weeks ago should not read the same “preferences” copy.

After the Cyclic trigger, add an If/Else process node:

Process: If/Else – is this a paying customer?

Condition (using the segment builder):

  • Contact attribute plan_type is paid (or however you label paying accounts)

Branches:

  • Then (Yes): Paying customers

  • Else (No): Trials, freemium, and leads

Why split here?

  • For paying users, you can reference the exact parts of the product they rely on: “You rely on RankPulse alerts to catch SERP drops. Tell us if weekly changelog emails are still helpful.”

  • For non‑customers, keep it lighter and more value‑led: “Want more teardown content and fewer product pushes?”

You could also split by role (agency vs in‑house) or region. If you do, use a Multi‑way Split instead of If/Else. The tradeoff is complexity vs precision; start simple and refine after you see first‑year data.

Step 3: Send the actual preferences review email

Each branch now gets its own Send Email action.

Action: Send Email – “Update your BrieflySEO email preferences”

Key configuration points (for each branch):

  • Use the email builder to design:

  • From (email account): whatever sender your audience already trusts for product communication.

  • Send only once: OFF

  • A plain, text‑heavy email.

  • A single, obvious CTA button: “Manage email preferences”.

  • A quick reminder of what they currently receive (product updates, new SEO playbooks, billing notices, etc.).

That last setting is subtle but important. Because this is a yearly journey and the Cyclic trigger has re‑enrollment on, you want contacts to receive this email once per year. If you left “Send only once” on, they’d get it just the first year and the node would block it forever after.

A few copy tips for SEO SaaS:

  • Make the benefit concrete: “Tune this so you only see technical SEO changes and ranking swings that actually affect you.”

  • Reassure them this isn’t a trick: “If you’d rather not hear about new features, that’s fine. We’ll keep sending you only billing and account notices.”

  • Keep it short. You’re asking for a small housekeeping favor, not pitching a webinar.

The CTA should link to your app’s existing email preferences / notification settings page. That page controls what your system sends; Spreeflo’s job in this journey is to send the reminder and watch the interaction.

Step 4: Give them time to act

Immediately checking who opened or clicked will undercount people in different timezones or people who batch‑process email.

After the Send Email node on each branch, add a Time Delay:

Action: Time Delay – wait 7 days

Configuration:

  • Delay value: 7

  • Unit: Days

Seven days is a good default: enough time for people to clear their inbox, but not so long that your deliverability dashboard has moved on and forgotten this send.

Step 5: Branch on email engagement

Next, use a Check Email Activity process node to fork the journey based on how they interacted with that specific preferences email.

Process: Check Email Activity – what did they do with the preferences email?

Configuration:

  • Marketing email: the exact template you used in Step 3 (you pick it in the dropdown).

  • Activities to branch on:

  • Clicked

  • Opened

  • Not Opened

This gives you three outgoing paths:

  1. Clicked – Strongest possible positive signal. They cared enough to go tweak things.

  2. Opened – They saw it, but didn’t feel the need to click. Still a meaningful engagement.

  3. Not opened – Either they missed it or they’re cold.

Now you’ll turn those behaviors into data.

Step 6: Treat clicks as a “preferences confirmed” event

For the Clicked branch, we’ll record two things:

  1. When they last confirmed preferences.

  2. A bump in their engagement score.

First, add an Update Contact Attribute node:

Action: Update Contact Attribute – preferences_last_confirmed_at

Configuration:

  • Attribute: preferences_last_confirmed_at (create this as a Timestamp custom attribute if you don’t have it yet).

  • Delete value: Off

  • Update type: Set now

This writes the current timestamp when the node runs. You can now:

  • Filter “has confirmed preferences in the last 12 months”.

  • Suppress the next year’s run for people you’ve already re‑permissioned in some other flow.

  • Prove to yourself, in a year’s time, how many people you’ve refreshed.

Next, add another Update Contact Attribute node for engagement scoring:

Action: Update Contact Attribute – engagement_score

Configuration:

  • Attribute: engagement_score (Number custom attribute).

  • Delete value: Off

  • Update type: Increment

  • Value: 5 (or whatever points you assign to this action).

This is where the “bonus signal for engagement scoring” shows up. Anyone who clicks a non‑promotional housekeeping email gets +5. Later, you can build segments like “engagement_score at least 20 AND plan_type is paid” for upgrade campaigns.

If you prefer tags over numeric scores, you can instead add an Add Tag node here:

  • Tags: prefs-confirmed, high-engagement

Tags are simpler; scores are more flexible. For a small SEO SaaS, either works.

Step 7: Record softer signals from opens

For the Opened branch (opened but didn’t click), you might choose not to update preferences_last_confirmed_at, since they didn’t explicitly adjust anything. But it’s still a useful engagement nudge.

Add:

Action: Update Contact Attribute – engagement_score

Configuration:

  • Attribute: engagement_score

  • Update type: Increment

  • Value: 2

You can optionally tag them as prefs-email-opened. That’s often enough differentiation:

  • Clickers: very engaged (score +5).

  • Openers: moderately engaged (score +2).

  • Non‑openers: neutral or negative (we’ll handle next).

Again, the point isn’t to build a perfect scoring model on day one. It’s to stop treating everyone as equally warm.

Step 8: Give non‑openers one last, lighter touch

For the Not Opened branch, you have a choice:

  • Do nothing and wait until next year.

  • Or send a single, gentler follow‑up.

The sequence at the top of this page shows the second option.

On the Not Opened branch:

  1. Add a Time Delay of 3 days.

  2. Add a second Send Email action:

  • Subject: “We’ll only email you when it’s useful”

  • Copy: even shorter than the first, emphasizing control and reassurance.

  • Same CTA to the preferences page.

  • “Send only once”: OFF (so they’ll get it again next year if they still never open).

Now you’ve given disengaged contacts a final chance to either adjust preferences or decide you’re not for them.

After that second email, add an Update Contact Attribute node:

  • Attribute: engagement_score

  • Update type: Decrement

  • Value: 1

A tiny negative score is enough to push them down relative to your clickers and openers, without automatically disqualifying them from all marketing.

Step 9: Merge paths and end cleanly

You now have three different branches (Clicked → two actions, Opened → one action, Not Opened → delay + email + one action). To keep the canvas tidy and respect Spreeflo’s single‑incoming‑edge rule, add a Merge node.

Wire:

  • Clicked branch → after its last Update Contact Attribute → Merge

  • Opened branch → after its score update → Merge

  • Not Opened branch → after its score update → Merge

You can optionally add one last Add Tag after the Merge, such as prefs-cycle-2026-complete, then end the journey.

That tag can help you compare cohorts year by year (“people who completed the 2025 preferences cycle vs 2026”).

At this point, the annual journey has done its job:

  • Everyone eligible got at most two touches, spaced out.

  • You’ve updated preferences_last_confirmed_at for your strongest responders.

  • You’ve injected differentiated engagement scores into the contact record.

From here, your other automations can treat contacts differently based on that richer profile.

Reading the numbers: what good looks like

Once this has run at least once, watch three metrics:

  1. Preference‑update rate
    Roughly: the share of contacted subscribers who clicked the preferences email. For an SEO SaaS with a reasonably warm list, seeing 10–30% click is common. Lower than that suggests your overall cadence might be off or copy needs work.

  2. Opt‑out rate
    Some people will unsubscribe when reminded they’re on your list. That’s healthy. If unsubscribes spike, it’s feedback on how aligned your ongoing content is with what they signed up for.

  3. Downstream engagement lift
    This is where your scoring and timestamps matter. Use Spreeflo’s audiences and segments to compare:

  • Contacts who clicked the preferences email vs those who didn’t.

  • How each group performs on future launches, webinar invites, or upgrade nudges (opens, clicks, conversions).

If your clickers respond 2–3x better to future campaigns, you’ve just surfaced a high‑intent cohort you can treat like VIPs.

Why this fits founder‑led teams especially well

This entire system is maybe an hour’s work the first time you set it up:

  • One form email per audience segment.

  • A few simple nodes in a journey.

  • Two custom attributes (preferences_last_confirmed_at, engagement_score) if you don’t already use them.

Then it runs quietly every year.

For a 3–5 person SEO SaaS team, that’s exactly the kind of leverage you want: build once, reap cleaner data and better targeting forever. You’re capturing more detail on every customer so you can speak to each uniquely, and you’re plugging a subtle lifecycle leak most competitors ignore.

If you’re already using Spreeflo forms and web tracking on the free tier, this pattern is your excuse to explore Journeys and Spreeflo’s pricing for marketing contacts. Once this annual preferences review is in place, every other automation you build sits on a healthier, more honest list — and that compounds with every campaign you send.