23 September 2026, Vinson Leow, for Austin. Numbers are live from Klaviyo, measured on payments that went through in Stripe, last 90 days unless stated. Gavin handles all email, paid hourly and ad hoc. Kevin does anything on the website, the app or Stripe.
| # | Change | Who | Status |
|---|---|---|---|
| 1 | Rebuild the failed-payment flow: one entry per customer per 30 days, an "Update payment method" button in every email, everyone kept to the end, free-month offer paused. | Gavin. Kevin: in-app banner, two Stripe settings | Ready. Needs the billing page link |
| 2 | Extend Stripe's retries from 7 to 14 days. Emails on days 0, 3, 7 and 14. | Austin decides, Kevin sets it | Decision |
| 3 | Remind yearly subscribers before they renew. First renewals in November. | Kevin, then Gavin | Decision on route |
| 4 | Abandoned checkout: two emails when someone leaves the Stripe payment page. | Kevin sends the event, Gavin builds | Gavin can build the draft now |
| 5 | Campaign rules: exclude recent payers and anyone inside a flow. | Gavin | Ready |
| 6 | Send the cancellation reason to Klaviyo so the cancel emails branch. | Kevin | Ready |
| 7 | Trial sequence, five emails. | Vinson writes, Gavin builds | After 1 to 6 |
| 8 | One sender name, 13 old drafts deleted, template fixes. | Gavin | Ready |
| Flow | Emails, 90 days | Clicks | Payments | Value | Last 30 days |
|---|---|---|---|---|---|
| Payment failed | 27,157 | 32 | 176 | $1,248 | 51 payments, $374, 5 clicks |
| Account created | 24,174 | 208 | 6 | $128 | 0 |
| Trial cancelled | 16,662 | 84 | 10 | $116 | 3, $23 |
| Trial started | 10,143 | 209 | 1 | $10 | 0, from 306 emails |
| Became paid | 8,483 | 43 | 2 | $10 | 0 |
| Subscription cancelled | 3,737 | 20 | 4 | $115 | 3, $55 |
| Total | 90,356 | 596 | 199 | $1,628 | $453 |
Klaviyo credits a payment to an email when it follows an open or a click. Apple Mail opens emails automatically, so "credited" does not mean "caused". Clicks are the honest signal: 596 in 90 days across 90,356 emails.
| Campaign | Sent | To | Excluded | Clicks | Payments | Unsubscribed |
|---|---|---|---|---|---|---|
| Beta over, email 2 | 28 Jun | 4,355 openers of email 1 | paid in last 7 days | 1,239 (28%) | 1 | 1.5% |
| "Go Hyper for $60/year" | 8 Sep | 6,601 in two "cancelled" segments | nobody | 10 | 15, $135 | 0.1% |
15,487 profiles can be emailed.
Today the flow restarts every time Stripe retries a card: 27,157 emails in 90 days to about 3,800 people. The first email links only to Discord. After 48 hours only "insufficient funds" customers continue; everyone else is dropped, although they recover better (2 to 8%, against 1.8%). The free-month offer went to 88 people and produced no payments.
At stake: in the last dashboard window 412 past-due subscriptions recovered and 484 were lost ($3,453 MRR). The rebuild is aimed at the 484.
Six changes to the rebuild agreed on 17 September:
Kevin: an in-app banner from the day a payment fails until it is fixed, same button. In Stripe, Smart Retries on and Stripe's own failed-payment emails off, so customers do not get two sets.
Stripe cancels a failing subscription after 7 days today. Stripe recommends 8 retries over 2 weeks. Customers with insufficient funds often recover on payday, and a 7-day window gives up on them first. Change: 14 days, with a fourth email on day 14.
1,811 subscribers on the legacy $47.88 yearly plan renew for the first time between November and June: 43 in November, 330 in December, then 170 to 310 a month. That is about $86,700 of renewals. 352 of them have already set their plan to cancel. Nothing tells anyone a renewal is coming, so the first they hear is the charge, and the ones whose card has expired go straight into failed payments.
Two routes:
Recommended: Stripe's reminder now, the Klaviyo version before the December batch.
Klaviyo has recorded no checkout starts since June. GA4 counted 2,963 checkout starts in the 20 days to 21 September against about 1,100 new paying subscriptions. Some are repeat attempts and some are trials that pay later, but the gap is large and nobody gets an email.
Kevin: when a Stripe checkout expires unpaid, send a "Checkout Abandoned" event to Klaviyo with the email, plan, price and Stripe's recovery link. Checkout expiry set to one hour. Skip anyone already subscribed. Gavin: an email after one hour and another the next day, one button to the recovery link, stopping as soon as they pay.
The 8 September campaign went to two segments with no exclusions and Smart Sending off. One segment's definition includes "started a paid subscription in the last 90 days and has paid in the last 90 days", which is a current customer: 3,213 active subscriptions matched. Another 729 recent cancellers were partway through a cancel sequence. Result: 10 clicks, 15 payments, $135. In June the team excluded recent payers.
Standing rules for every campaign: exclude anyone who paid in the last 30 days, exclude anyone who entered a flow in the last 14 days, Smart Sending on, one job per email, one tagged destination. Fix the "Paid & Cancelled users" segment.
Both cancel flows branch on "Reason Left" to send a discount (too expensive), setup help (too complicated) or a fix-it email (no improvement). The field is never filled in, so those emails have never sent and everyone gets the generic one. The answers exist: the dashboard shows 730 survey responses last window. Kevin writes the answer to the Klaviyo profile on cancel. Gavin rewrites the first paid-cancel email, which reuses the trial version, so it acknowledges they were a paying customer.
About 300 trials a month now (306 trial-welcome emails in the last 30 days). They get one email. The day-2 and day-4 emails, including "your trial ends soon", are switched off. A five-email sequence is still right, but it reaches a tenth of the people it would have in July, so it comes after items 1 to 6.
Exit filter on every flow: leave once Successfully Paid has happened since entering. Conversion metric everywhere: Successfully Paid.
| # | Build | Ready? |
|---|---|---|
| 1 | Payment failed (Un6Nkh): re-entry once per 30 days; card-update button in every email; decline reason changes copy only; days 0, 3, 7 (14 if approved); pause the free-month A/B. | Needs the billing page link |
| 2 | Campaign policy: exclusions and Smart Sending as in section 5; fix "IB // Paid & Cancelled users". | Ready |
| 3 | Confirm Successfully Paid as the account default and on all six flows. | Ready, 10 minutes |
| 4 | Abandoned checkout: new flow on Checkout Abandoned. Hour 1 "You didn't finish", plan and price, button to {{ event.recovery_url }}. Day 1 explains that changes are reversible and tuned to the customer's hardware, same button. Re-entry once per 7 days. | Build as draft; live when Kevin's event arrives |
| 5 | Renewal reminder (Klaviyo route): date-based flow on the renewal date property, 14 and 3 days before, card-update button. | When Kevin syncs the date |
| 6 | Account created (Rwzvi6) day 8: remove the free month, make it "start your 7-day trial". Subscription cancelled (XK844V) email 1: acknowledge they paid. | Ready |
| 7 | Template pass, 21 templates. | Ready |
| 8 | Delete the 13 draft flows, keeping two shells if wanted. One sender name. | Sender name waits on Austin |
| 9 | Trial started (SDXETb): day 0 download and first optimise; day 1 first win; day 3 restore point and what changes; day 5 game profiles; day 6 "trial ends tomorrow", one price. | Waits on Vinson's brief |
Waiting on Kevin:
| What | Unblocks |
|---|---|
Checkout Abandoned event on unpaid checkout expiry: email, plan, price, recovery_url. Expiry 1 hour, recovery link on, skip if subscribed. | Build 4 |
Reason Left written to the profile on cancel. | Cancel-flow branches |
| In-app banner from payment failure until paid. | Build 1 |
| Stripe: Smart Retries on, retry window as decided, Stripe's failed-payment emails off, renewal reminder on. | Builds 1 and 5 |
| Renewal date on each yearly subscriber's profile. | Build 5 |