A patron's card declines on a Wednesday morning. They don't know yet — Patreon emails them a generic "your payment didn't go through" notice, and most patrons archive that without reading. The patron still thinks they're supporting you. You still think they're a paid patron. And nothing about either belief is true.
The Winback · Decline sequence is the friendly nudge from you that Patreon's template can't be. It waits two days (in case the card update fixes itself, which it often does), then sends three short emails over the following ten days — each one a soft "your card seems to have expired, here is the one-click fix."
This post walks the exact Shopify Flow that makes it work — one trigger, four checkpoints, three sends, 12 days. Copy the chart, paste the values, ship the sequence.
Before you start
You need three things, and only three:
- A Shopify store with the free Shopify Flow app installed (Settings → Apps → search "Shopify Flow").
- Shopify Email (or any marketing tool that exposes a "marketing
activity" Shopify Flow can call). Three activities — one per email —
saved as drafts before you start. Name them clearly:
Winback · Decline · 01,Winback · Decline · 02,Winback · Decline · 03. - FanConvert connected to your Patreon and your Shopify store. That is
the small piece of software that listens to every Patreon membership
moment and marks the matching Shopify customer with the sequence label
fanconvert:winback_deniedthe second a declined-charge comes through.
If you have all three, this is a 20-minute job.
The chart, in one picture
Here is the Shopify Flow you are about to build. One trigger up top, an immediate label check (so customers whose label is something else fall out before the timer starts), a 2-day cool-off, then the condition-send pattern repeated three times over 10 more days.
Here is the cadence as a table, since most of the actual setup work is pasting these values into the Shopify Flow UI:
| Stage | Action | Wait before this stage | Day in sequence |
|---|---|---|---|
| — | Initial label check | (immediate) | Day 0 |
| 1 | Send Winback · Decline · 01 | 2 days | Day 2 |
| 2 | Send Winback · Decline · 02 | 3 days | Day 5 |
| 3 | Send Winback · Decline · 03 | 7 days | Day 12 |
Build it in seven steps
1. Create the workflow
Shopify admin → Apps → Flow → Create workflow. Name it
Winback · Decline · Patreon so a future-you, scrolling a list of 12
workflows, knows what it does without opening it.
2. Pick the trigger
Click Select a trigger and pick Customer tags added (under the
Shopify Admin category). This is the trigger Shopify fires the second
FanConvert marks a customer with the fanconvert:winback_denied label.
There is nothing to configure on the trigger itself.
3. Add the immediate label check
Click + → Condition directly below the trigger. In the condition builder:
- Field:
customer.tags - Operator: any item
- Inner field:
tags_item - Inner operator:
is equal to - Inner value:
fanconvert:winback_denied
This is the gate that runs before any wait. Shopify Flow fires the "Customer tags added" trigger for every tag, not only this one — without this immediate check, every tag on every customer would start a 2-day timer. The check ends those runs in milliseconds.
4. Add the 2-day cool-off
On the condition's true branch, click + → Wait. Set duration to
2 days. No email goes out during this window. Many card declines
self-heal in the first 48 hours — see the gotchas section below for
why this wait is the most important number in the workflow.
5. Add the second condition + first send
After the wait, add another condition (same
tags_item == "fanconvert:winback_denied" check) and on its true
branch, add a Send marketing activity action. Pick
Winback · Decline · 01 from the dropdown. Leave customer_id at its
default (customer.id).
If the patron updated their card during the cool-off and the next charge went through, FanConvert has already lifted the label, this condition returns false, and no email goes out.
6. Add a 3-day wait, the third condition, and the second send
Click + → Wait under the first send. Set duration to 3 days.
After the wait, add another condition (same check) and on its
true branch, add the second Send marketing activity with
Winback · Decline · 02.
7. Add a 7-day wait, the final condition, and the last send
Click + → Wait under the second send. Set duration to 7 days.
After the wait, add the final condition (same check again) and on
its true branch, add the third Send marketing activity with
Winback · Decline · 03. There is no wait after the last send — the
sequence ends there.
Save the workflow. Toggle Active at the top.
You are done.
What "done" looks like
Open your Shopify customers list, pick a test customer (yourself, on
a second email account), and apply the label fanconvert:winback_denied
manually — just type it into their tags field and save.
In the Shopify Flow run log (Apps → Flow → your workflow → Runs) you
should see the trigger fire, the first condition return true, and a
2-day wait scheduled. To rehearse the rest without waiting two days,
edit each wait duration to 1 minute, save, and re-trigger on a fresh
test customer. The first email should land within a minute, the second
four minutes after that, the third eleven minutes after that. Revert
the waits to 2 days, 3 days, 7 days before going live.
Remove the label from a third test customer during any of the waits. The next condition should return false and the run should end with no further sends.
Three things that bite people
Card declines often self-heal in the first 48 hours. The 2-day wait is the difference between sending three "your card declined" emails to patrons who already fixed it (annoying, makes you look careless) and sending zero emails to that group (the actual goal). Patreon retries the charge on a schedule, the patron updates their card, the next attempt succeeds, FanConvert lifts the label, the sequence stops before Email 1. If you shrink the 2-day wait to zero, you trade that quiet recovery for noise. Two days is the floor, not a ceiling.
The label is case-sensitive and exact. Shopify Flow's is equal to
does a strict string match. fanconvert:Winback_Denied,
fanconvert: winback_denied (notice the space), and
fanconvert:winback-denied (notice the hyphen) all silently fail.
FanConvert always writes the exact form fanconvert:winback_denied —
all lowercase, underscores, no spaces. Match that in your condition or
nothing fires.
Re-check the label at every stage, including the immediate one. A patron whose Email 1 lands on Day 2, who updates their card on Day 3, and whose next charge clears on Day 4 must not receive Emails 2 and 3 on Day 5 and Day 12. FanConvert lifts the label the moment the charge clears; the four checkpoint conditions are what turn that signal into "no further sends." Skip any of them and you'll email a paying patron three reminders to fix a card that already works. Worse outcome than not sending at all.
What about the other three sequences
The shape is identical (with cadence variations). Build three more workflows, one per sequence, each watching for its own label:
| Sequence | Label to watch for | Typical cadence |
|---|---|---|
free_to_paid | fanconvert:free_to_paid | 5 emails, 17 days |
onboarding | fanconvert:onboarding | 3 emails, 10 days |
winback_cancel | fanconvert:winback_cancel | 2 emails, 14 days |
winback_denied | fanconvert:winback_denied | 3 emails, 12 days |
Same trigger, same condition shape. Once you have the first one in muscle memory, the other three take about ten minutes each.
