A health brand's subscription programme was constrained by Recharge's standard UI. We built a custom admin layer on top of Recharge that the operations team could actually use — and a subscriber portal that halved cancellation rates.
The situation
A UK health and wellness brand had 3,000 active subscribers on Recharge and a growing problem: their customer service team spent two hours a day navigating Recharge's admin to make manual adjustments subscribers requested — swap flavour, delay next shipment, add a one-off product to the next box. The off-the-shelf subscriber portal wasn't reducing those calls. It was adding to them.
At the same time, the commercial team wanted to introduce subscription bundles and dynamic upsells at renewal time. Recharge's native tooling didn't support what they had in mind.
The problem, properly diagnosed
This was two separate problems wearing the same jacket.
Problem 1: Admin friction. The Recharge admin wasn't built for high-volume manual adjustments. Each change was several clicks in the wrong direction. The fix was a custom internal tool, not a Recharge workaround.
Problem 2: Subscriber portal experience. The default Recharge portal gave subscribers a minimal set of actions and no contextual information about their next shipment. The result was unnecessary cancellations from subscribers who didn't know they could pause, swap, or delay. Cancellations that could have been saves with better UX.
These needed separate solutions.
The approach
Custom admin overlay. We built a Shopify app (embedded, using App Bridge) that sat on top of the Recharge API. The ops team could:
- Search and open any subscriber in a single step
- Adjust the next shipment date, skip a delivery, or add a one-off product — all from one screen
- See the subscriber's full history in context
The ops workflow went from 8 steps per adjustment to 2.
Custom subscriber portal. We rebuilt the subscriber portal as a Shopify storefront page, pulling data from Recharge's Storefront API. The design made the key actions prominent: delay, swap, pause, cancel. Adding a visible "delay by 2 weeks" button that appeared prominently in the flow — rather than buried in a menu — was the single change that moved the save rate most.
We also built a product swap UI that surfaced the brand's bestsellers as contextual swap suggestions. Subscription flexibility became a selling point rather than a support problem.
Renewal upsells. In the 14-day pre-renewal window, we added a notification flow (Klaviyo-triggered) with a custom landing page showing tailored add-on recommendations based on the subscriber's purchase history. The add-on attach rate in the first month was 19%.
The outcome
The subscription programme crossed £1.2m ARR in month twelve — up from £680k at project start. The growth came from three sources: lower churn, higher average subscription value from the upsell flow, and improved new subscriber conversion from a cleaner presentation of the subscription proposition.
The ops team's admin time dropped by 75%. Support tickets related to subscriptions fell by 40% in the first quarter.
The cancellation save rate — subscribers who interacted with the portal and didn't cancel — improved from 22% to 51%.
What we learned
The Recharge Storefront API has some documentation gaps that only emerge under real load. We spent two days early in the build mapping exactly which operations needed to go through the API versus which could be handled through webhooks. This mapping is worth doing properly before you start building; we now do it on every Recharge integration.
The upsell flow underperformed on mobile in the first iteration — the add-on suggestions were desktop-designed and the tapable area was too small. A quick redesign in week 8 recovered the mobile conversion rate to match desktop.
Tech stack
Shopify Plus, Recharge (Storefront API), custom Shopify app (Node.js + React), App Bridge 3, Klaviyo, custom subscriber portal (Next.js, deployed separately on Vercel).
Looking for results like this?
Tell us about your store and what you're trying to achieve.
Start a project