Back to Playbooks

GDPR Re‑Consent That Doesn’t Torch Your List

Free

A detailed automation pattern for running a cyclic GDPR re‑consent journey in Spreeflo so Shopify app and e‑commerce tool builders can stay compliant, protect deliverability, and preserve long‑term revenue without manual clean‑up campaigns.

Industry

Niche

Pattern

Loading sequence...

CartWizard’s founder didn’t think much about GDPR consent… until a seven‑figure EU merchant emailed support asking for “evidence of ongoing marketing consent” for every contact on their account.

The legal risk was one thing. The bigger fear was this: “If we run a re‑consent campaign to clean this up, are we about to nuke half our list?”

If you ship a Shopify app or e‑commerce tool, you’re in the same position. Big merchants expect you to behave like a grown‑up SaaS company on privacy. But you also can’t afford to treat re‑consent as a one‑off, hand‑rolled campaign whenever a lawyer pings you.

You need a repeatable, low‑touch way to refresh consent that keeps you compliant and preserves as much lifetime value as possible.

The sequence at the top of this page is the whole journey, end to end. It’s a cyclic GDPR re‑consent flow: it checks consent age on a schedule, nudges people to renew, and, if they stay silent, falls through to a clear opt‑out state.

This article walks through that sequence node by node so you can adapt it to your own app.

Quick disclaimer: this is an automation pattern, not legal advice. Use it to implement whatever consent policy your counsel signs off on.

Most founders treat GDPR consent like taxes: something you deal with once a year with a grimace.

The problem is that consent renewal collides directly with revenue:

  • Every re‑consent run shrinks your marketing audience.

  • Done badly (“Do you still want emails? y/n”), it shrinks it faster than it needs to.

  • Done manually, you’ll delay it, forget it, or only run it when a big prospect demands proof.

For a Shopify app living on $30–$200/month subscriptions, your email list is where expansion revenue lives: new feature launches, plan upgrades, partner bundles, seasonal promos. When you let consent go stale and then flush everyone in a panic, you throw away years of potential ARPU.

That’s why this pattern is framed as lifecycle strategy, not compliance theater. You’re not just “being safe”; you’re:

  • Giving engaged customers a reason to reaffirm that they actually want to hear from you.

  • Letting disinterested, churn‑prone users quietly step off the list instead of dragging down engagement.

  • Keeping your list clean so every future launch email lands in inboxes, not spam.

Most businesses leak lifetime value by not nurturing engagement. GDPR renewal is one of the clearest examples: you either treat it as a thoughtful, value‑driven touchpoint or as a mass purge.

Let’s build the thoughtful version.

The data this journey assumes you already have

Before you copy the sequence, you need three ingredients in place.

  1. A “consent given” event In your app or billing flow, whenever someone explicitly agrees to receive marketing (checklist on signup, preference center, double opt‑in page), fire a custom event into Spreeflo such as gdpr_consent_given. Do this from your backend or your marketing site using the Spreeflo API or the JavaScript SDK. This event becomes the single source of truth for “when did they last say yes?”

  2. A way to identify who should care about GDPR For most Shopify apps, that means merchants in the EU or UK. Store this as a contact attribute (for example region = "EU"), or tag those contacts at import. You’ll use this later in the journey’s criteria.

  3. A few tags for reporting Tags make it easy to see who flowed through which path: gdpr-reconsent-pending, gdpr-reconsent-success, gdpr-reconsent-failed. If you’re new to tags in Spreeflo, the guide on getting started with tags is worth a skim.

With that data in place, you’re ready to turn re‑consent into a self‑maintaining system instead of an occasional panic project.

In Spreeflo, this pattern lives as a Journey, not a one‑off campaign. Journeys react to behavior over time, which is exactly what “consent age” is.

Start by creating a new journey in the campaigns and journeys builder, and choose a Cyclic trigger.

Here’s how to configure it:

  • Schedule: Run daily or weekly at a fixed time (for example, every day at 09:00 in your main operating timezone). That’s often enough to catch people as they become stale without hammering your systems.

  • Re‑enrollment: Turn re‑enrollment on. Someone might be in this journey again in a few years when their renewed consent ages out, and you want that future pass to happen automatically.

  • Criteria (who enters on each tick): Use the embedded segment builder in the Cyclic trigger to define “stale consent”. A sensible starting point:

  • Email Subscription Status is Subscribed

  • Region (or equivalent attribute) is EU or UK

  • Custom event gdpr_consent_given has not triggered in the last X months (e.g. 24)

  • Optional: Contact Added Date is before “30 days ago” (so brand‑new signups aren’t immediately pulled into renewal)

That custom‑event rule is what replaces messy “calculate a date two years ago” logic. You’re simply saying: “Take everyone subscribed in GDPR‑sensitive regions whose last explicit consent event was more than X months ago.”

Immediately after the trigger, add an Add Tag action to apply gdpr-reconsent-pending. This gives your team instant visibility into who’s in limbo.

Next node: Send Email.

This is the message most founders are scared of sending because they’ve only seen the “legalese & guilt trip” version.

In Spreeflo, pick your sender identity, and either choose an existing template or draft a new one in the email builder. Leave “Send only once” turned on so a contact who re‑enters the journey years from now doesn’t get the exact same email twice.

Structurally, the email should:

  • Remind them who you are (“You installed CartWizard to recover abandoned carts on your Shopify store”).

  • Show recent value or product evolution (new features, better analytics, more revenue recovered).

  • Explain plainly why you’re asking (“To keep sending you product updates and marketing tips, we need you to confirm you still want these emails.”).

  • Offer a single, clear CTA: “Yes, keep sending me updates.”

That CTA should hit a page on your own app or marketing site that:

Confirms their choice visually.

Fires the gdpr_consent_given event into Spreeflo again for that contact.

This is key. The journey itself doesn’t “know” they consented until it sees that event.

Step 3: Wait intelligently for action, not guesses

Right after the first Send Email node, add a Wait Condition.

Configure it to:

  • Condition: Custom event gdpr_consent_given triggered at least 1 time in the last 7 days.

  • Timeout: 7 days.

Semantically, you’re telling Spreeflo: “Pause here until either they re‑consent, or a week passes with no action.”

Why use Wait Condition instead of a blunt 7‑day Time Delay?

Because you want this journey to be responsive:

  • If they click the CTA two hours after you send the email, you don’t want them sitting in a delay queue for six more days.

  • If they never click, you still want to move them along to a reminder after a reasonable window.

Once the Wait Condition finishes (either way), add an If/Else node that uses the exact same condition:

“Yes” branch: Custom event gdpr_consent_given triggered at least 1 time in the last 7 days.

“Else” branch: everyone else.

Because of how Wait Condition works, anyone who woke the flow by consenting will flow down the “Yes” path. Everyone who timed out will flow down “Else”.

On the “Yes” path, do two things:

  1. Add Tag: apply gdpr-reconsent-success and remove gdpr-reconsent-pending.

  2. Optionally, Update Contact Attribute to set a custom last_consent_source text field to something like "gdpr_renewal_v1", which helps you distinguish how they came back in future analysis.

Then you can end that path. They’re renewed and out of the flow.

Use a Merge node after this success path if you plan further shared steps later. For now, think of it as the clean terminal for “all good, they said yes.”

Step 4: A gentle reminder, then a firm final call

Back on the “Else” branch (no response after 7 days), we start the escalation.

  1. Second re‑consent email Add another Send Email node. This is your reminder. You’ve already had a Wait Condition between emails, so you’re not violating pacing. In this message: Acknowledge the previous email quickly. Emphasize what they’ll miss: new playbooks, upcoming features, partner discounts. Keep the same clear “Yes, keep me on the list” CTA that fires gdpr_consent_given again.

  2. Wait for action one more time Repeat the Wait Condition → If/Else pair: Wait up to 7 days for gdpr_consent_given. Branch on whether it happened. On the “Yes” branch, use another Add Tag to apply gdpr-reconsent-success (if you want to distinguish “needed a reminder”, add a different tag), clear gdpr-reconsent-pending, and flow into the same Merge “success” point you used earlier.

  3. Final notice before hard fall‑through On the second “Else” (no action after two emails and ~14 days), send a last Send Email: Subject along the lines of: “Last chance to keep getting CartWizard updates”. Make the consequence explicit: “If we don’t hear from you in the next 7 days, we’ll stop sending marketing emails to stay within our privacy commitments.” Again, single clear CTA that records consent via the event. After this email, add a Wait Condition with a 7‑day timeout and the same gdpr_consent_given in last 7 days rule, followed by an If/Else. “Yes” branch: treat them like other successes, tag appropriately, clear gdpr-reconsent-pending, merge out. “Else” branch: time for the hard fall‑through.

  4. The hard fall‑through: stop marketing to them On this final “Else” path, add: Update Email Subscription Status Set status to either Email unsubscribed or Email non-subscribed, depending on how your legal and deliverability strategy interpret “no response”. The key is that they’re no longer eligible for marketing journeys or campaigns. Add Tag Apply gdpr-reconsent-failed and remove gdpr-reconsent-pending. This helps you report on churn from the renewal exercise. If you actively use Spreeflo’s Marketing Status attribute, you can follow up with an Update Contact Attribute node to set Marketing status to Non-marketing. That makes it explicit in your data model that they’re off‑limits for promos but can still receive transactional emails through your transactional email setup.

That’s the “consent clock” fully automated: you ask politely, you follow up once, you give a clear final call, then you stop.

With the tags and events in place, you can now answer three questions every time this journey runs a cohort through:

  1. Re‑consent rate Among contacts who started a renewal cycle (tagged gdpr-reconsent-pending at entry), what percentage end with gdpr-reconsent-success? Create a segment for each tag using the segment builder, then compare counts over a period.

  2. Opt‑out rate / hard fall‑through How many ended in gdpr-reconsent-failed and have Email Subscription Status of Unsubscribed or Non-subscribed? This is the real “cost of compliance” number. But it’s also a proxy for whether your emails are compelling. If opt‑out is uncomfortably high, tweak the copy, the value proposition, or the lead‑in period before they’re considered stale.

  3. List churn from renewal vs organic churn Over a month or quarter, look at: Natural unsubscribes from other flows. Unsubscribes driven by this renewal journey. If renewal is a huge share of churn, it might be firing too aggressively (e.g., asking again after 6 months in a low‑touch product) or not reflecting real ongoing value.

Because this journey runs on a Cyclic trigger with re‑enrollment, you don’t have to remember to revisit it. As long as your app keeps sending gdpr_consent_given events and your list keeps growing, the automation quietly protects your compliance posture and your future revenue.

Why this earns a permanent place in your automation stack

For an e‑commerce app developer, the tempting move is to ignore this stuff until a big Shopify Plus prospect, an auditor, or the platform itself asks awkward questions.

But the economics are simple:

  • Every engaged merchant who re‑consents is future expansion revenue you don’t lose in a panicked one‑off purge.

  • Every disengaged subscriber you quietly move to non‑marketing improves overall deliverability, so the next feature launch lands stronger.

  • Every month this journey runs without your intervention is one less manual “GDPR clean‑up campaign” your tiny team has to orchestrate.

Founder‑led businesses win on leverage, not headcount. A journey like the one at the top of this page is classic leverage: you design it once, connect it to your app via the Spreeflo API, and it keeps handling a messy, high‑stakes process while you ship features.

GDPR consent renewal will never be the sexiest part of your growth strategy. But when you treat it as an ongoing, value‑driven lifecycle moment instead of a legal chore, you stop bleeding lifetime value quietly in the background.

And you get to open that next “Can you prove we have consent?” email with a single, satisfying answer: “Yes. Here’s exactly how it works.”