Subscriptions — the 96% churn problem¶
Current state¶
- 26 subscriptions created in the lifetime of the store
- 1 currently active
- 16 cancelled · 9 on-hold
- MRR: £51.98 (from that 1 sub)
Root cause¶
All 26 used a generic "Card" payment method — not branded WooPayments. Strongly suggests an old Stripe integration broke silently at some point, renewals failed, customers couldn't self-serve, and they all churned.
Fix: migrate to Stripe Billing¶
Why Stripe Billing over Woo Subscriptions:
| Capability | Woo Subscriptions | Stripe Billing |
|---|---|---|
| Smart Retries on failed cards | ❌ | ✅ |
| Dunning emails | Manual | ✅ Built-in |
| Customer Portal (pause / skip / cancel) | ❌ Have to build | ✅ Hosted link |
| Swap-a-fruit before renewal | ❌ | ✅ (via metadata) |
| Works in a native iOS app | ❌ (cookie-coupled) | ✅ |
The Customer Portal alone fixes half the churn: today, to cancel a sub, a customer has to log in to WP and find the right page. With Stripe's portal, it's one link.
Migration plan (Phase 2)¶
- Set up Stripe Billing Products + Prices for the 3 tiers:
- Tropical Box Subscription — £42.49/week
- Exotic Box Subscription — £59.99/week
- Plug-In Box Subscription — £82.49/week
- Migrate the 1 active subscription with customer consent (email + £10 credit incentive).
- Add a Stripe webhook
customer.subscription.*→ creates a fresh Woo order on each renewal via thefruitplug-apiplugin. - Deactivate Woo Subscriptions (leave installed for a month as rollback).
- Win-back campaign to the 25 dead subs: personalised email + £10 Stripe credit redeemed on signup.
PWA UX to support retention¶
On /account/subscription:
- Current plan + next charge date
- Skip next box (one tap)
- Pause up to 4 weeks (one tap)
- Swap a fruit (3 days before ship)
- Cancel (via Stripe Customer Portal link — stays in-app via
next/linkto the Stripe-hosted URL)
Targets¶
| Metric | Today | 6-month target |
|---|---|---|
| Active subs | 1 | 300 |
| MRR | £52 | £15,000 |
| Churn rate | 96% lifetime | <15% monthly |