
You've finally decided to stop giving Apple 30% of your hard-earned subscription revenue. You've done the math, you've read the April 2025 Epic v. Apple ruling, and you're ready to move. So you build a web redirect, slap a "Manage Your Subscription" button in the settings menu, and watch the chaos unfold: conversion rates crater, support tickets spike, and angry cancellations roll in from users who felt confused or, worse, deceived.
This is the most common way iOS developers blow their first attempt at migrating off StoreKit — and it completely sours them on direct billing for months.
As developers on r/iOSProgramming have noted, "the uncertainty about whether the proposed payment structure complies with Apple's guidelines is a major concern," and "the fear of violating the in-app purchase requirements creates hesitation." That anxiety is real. But so is the upside — and in 2025, the tools finally exist to migrate subscribers to direct billing safely, systematically, and without torching your churn rate.
This post walks you through a three-phase migration playbook: a gradual rollout to de-risk the switch, a Switch & Save campaign to make the offer irresistible, and smart cancellation flows to catch the holdouts. We'll also show you how to quantify exactly what's at stake for your subscription revenue platform.
Before we get into the playbook, let's establish why this is worth doing.
At $1M ARR, if you migrate just 40% of your subscribers to direct billing, here's what the math looks like:
That's $100K dropped straight to your bottom line — every single year — without acquiring a single new user. That's a new engineer, a meaningful marketing budget, or a full year of runway. At $5M ARR, the number becomes half a million dollars. The migration economics are, frankly, undeniable.
The biggest mistake developers make isn't the web redirect — it's going all-in on day one. You're changing a billing system that thousands of paying customers rely on. Even a small bug can cause double charges, lapsed access, or broken renewal flows. That's a churn catastrophe waiting to happen.
The solution is a gradual, controlled rollout.
Step 1: Start with 10% of your user base. Don't flip the switch for everyone. Begin by exposing the direct billing path to just 10% of your active subscribers. This limits the blast radius of any unforeseen issues and gives you a clean test cohort to measure against your StoreKit baseline.
Step 2: Control the rollout from a dashboard, not the app binary. The migration logic must live server-side or in a remote config — not hardcoded in your app. This gives you instant rollback capability without waiting days for an App Store review cycle. If something breaks, you kill the experiment in minutes, not weeks.
Step 3: Instrument everything from day one. Track conversion rates, support ticket volume, cancellation rates, and revenue per cohort. You need to see, before expanding the rollout, that direct billing subscribers behave as well as (or better than) StoreKit subscribers.
Allocents is purpose-built for this workflow. Its SDK — available for Swift/SwiftUI, Kotlin, Flutter, and React Native — includes a dashboard control for gradual rollout percentage (start at 10%, scale to 25%, 50%, 100%), with one-click rollback at any stage. The analytics dashboard tracks migration rates, cohort adoption, and revenue impact in real time, so you're never flying blind. Under the hood, Allocents's backend interfaces with Apple's App Store Server API to accurately read each subscriber's current StoreKit state before presenting them with any switching flow — a detail that prevents double billing and access gaps.
Once your 10% rollout is stable and your metrics look good, it's time to actively convert subscribers. The goal here is to make switching feel like a benefit — not a confusing detour to a random webpage.
Most developers get this wrong in the same predictable way: they show a generic banner that says "Pay on our website instead" and link to a checkout page that feels nothing like the app. Users see this and assume it's a phishing attempt or a scam. They bounce. They cancel.
Here's what works instead:
Step 1: Design a compelling offer. The switch needs to come with a tangible incentive. A 15–20% discount on the next renewal is typically enough to move the needle. Frame this as a thank-you for supporting the developer directly, not as a technical migration. Copy like "Support us directly and save 20%" outperforms "Switch payment method" in virtually every test.
Step 2: A/B test the timing, copy, and discount depth. Don't assume what works. Research from subscription billing platforms consistently shows that the same offer, shown at different moments in the user journey, can produce wildly different conversion rates. Test:
Step 3: Make the checkout feel native. This is the critical UX detail most teams miss. The payment experience should feel like it belongs inside the app — not like you've been teleported to a 2012 checkout page. An embedded payment sheet with Apple Pay and Google Pay as primary options dramatically increases trust and completion rates.
Allocents's SDK ships with pre-built, fully customizable Switch & Save campaign flows for exactly this scenario. You configure the offer copy, discount, and trigger conditions from the dashboard, and the SDK renders a native-feeling UI — no custom development required. Built-in A/B testing lets you pit variants against each other with statistical significance tracking. And because Allocents includes jurisdiction-aware routing, the direct billing flow is automatically suppressed for users outside compliant regions (like outside the US), so you're never inadvertently surfacing options to users where the Epic ruling's protections don't yet apply. This directly addresses the compliance anxiety developers expressed on r/iOSProgramming — the system handles the geo-gating for you.
Even with a well-designed Switch & Save campaign, some subscribers won't bite. A portion of your user base will simply keep ignoring the offer — and some will eventually churn through StoreKit in the normal course of events. This final phase is about capturing both groups.
The most powerful moment to present a final switching offer? When a user is about to cancel.
Step 1: Intercept the cancellation intent. When a subscriber navigates to the "Manage Subscription" screen or initiates a cancellation, don't just let them walk out the door. This is the highest-intent moment you'll ever have to make an offer.
Step 2: Build a save flow with multiple off-ramps. Research on reducing subscription churn consistently highlights that multi-option cancellation flows dramatically outperform single-offer flows. Give users choices:
The pause option often converts users who are churning due to temporary financial pressure, not genuine dissatisfaction. The Switch & Save offer here works especially well because the user is already in a loss-averse mindset — they're thinking about what they'd be giving up, not just what they'd be gaining.
Step 3: Handle the subscription state transition cleanly. The technical complexity of cancellation flows is often underestimated. You need to ensure that a user who switches from StoreKit to direct billing mid-cycle doesn't get charged twice, doesn't lose access, and has their existing renewal date respected. This requires accurate, real-time reads of transaction state from Apple's App Store Server Notifications.
Allocents's Smart Cancellation Flows are built into the SDK as a core, configurable feature. You enable them from the dashboard, customize the offer sequence, and Allocents handles the state management using its StoreKit product sync — which pulls your existing App Store Connect products so that pricing tiers, trial periods, and renewal dates map correctly to the direct billing backend. No double billing. No access gaps.
If you're thinking "this sounds complex to build," you're right — building it from scratch is a multi-month engineering project. The alternative is stitching together a multi-vendor stack: Paddle for payments, RevenueCat for subscription state, a custom cancellation flow, your own A/B testing layer, and manual jurisdiction handling. That's a meaningful ongoing maintenance burden for any team.
Allocents consolidates all of this into a single SDK with a 15-minute integration path.
There are two billing configurations depending on your team's preference:
Allocents Billing (Merchant of Record): Allocents acts as the full MoR at 5% + 50¢ per transaction. They handle payments, global tax remittance across 190+ countries, chargebacks, fraud protection, refunds, and customer support. If you want Apple-grade billing infrastructure without Apple's fee, this is it.
Bring Your Own Stripe (BYOS): If your team has existing Stripe infrastructure and wants full control, connect your Stripe account and use Allocents's SDK, checkout UI, and migration flows at just 0.5% of revenue successfully migrated. You retain MoR responsibilities and handle chargebacks and support internally.
Both modes use the same SDK, the same gradual rollout controls, the same A/B testing dashboard, and the same jurisdiction-aware routing. The difference is who manages the compliance and support stack underneath.
Let's revisit the math one more time — with specifics this time.
Scenario: App generating $1M ARR
| Apple IAP (30%) | Direct Billing (5%) | |
|---|---|---|
| Revenue migrated | $400,000 | $400,000 |
| Platform fee | $120,000 | $20,000 |
| Net to developer | $280,000 | $380,000 |
Annual savings from 40% migration: $100,000.
That's without growing revenue. That's without acquiring new users. That's purely from restructuring how you collect money from subscribers you already have.
At $5M ARR with the same 40% migration rate, the annual savings climb to $500,000 — meaningful enough to change the trajectory of a product team.
Migrating subscribers from Apple IAP to direct billing is no longer a risky, compliance-fraught gamble. The Epic v. Apple ruling cleared the legal path. The tooling — particularly purpose-built subscription revenue platforms like Allocents — has matured to the point where a three-person team can execute a safe, phased migration without a dedicated platform engineer.
The playbook is straightforward: start small with a 10% gradual rollout and instant rollback, convert willingly with A/B-tested Switch & Save campaigns that feel native, and catch the holdouts with smart cancellation flows at the moment of highest intent. Each phase builds on the last, and each phase is measurable.
The developers who move fast here will compound the advantage over years. Every subscriber migrated to direct billing is a subscriber generating 25 more percentage points of margin — permanently.
Direct billing is more profitable because it allows you to bypass Apple's standard 15-30% commission on subscription revenue. With a direct billing provider, transaction fees are typically much lower, often around 5%. For an app with $1M in annual recurring revenue (ARR), migrating just 40% of subscribers can result in an additional $100,000 in profit per year by reducing platform fees.
The safest way to begin is with a gradual, controlled rollout, exposing the new direct billing option to a small segment of your user base first, such as 10%. This approach minimizes risk by limiting the "blast radius" of any potential bugs or UX issues. It allows you to test the system, measure conversion rates, and monitor support tickets with a small cohort before expanding the rollout.
Persuade users by framing the switch as a benefit to them, typically through a "Switch and Save" campaign that offers a discount on their next renewal. Instead of a generic "manage your subscription" button, present a clear, compelling offer like "Save 20% by supporting us directly." The user experience should feel native to the app, not like a redirect to an untrustworthy website.
While building a migration system from scratch is a complex, multi-month engineering project, using a purpose-built SDK can make the process significantly easier. A comprehensive solution handles the difficult parts, including reading a user's current StoreKit subscription state to prevent double billing, managing gradual rollouts, and providing native-feeling UIs for migration campaigns.
Compliance involves adhering to Apple's rules about how and where you can link to external payment options, which are often jurisdiction-specific. Following the Epic v. Apple ruling, developers in the US have more flexibility. Using a platform with built-in, jurisdiction-aware routing automatically handles this by only showing the direct billing option to users in compliant regions, reducing the risk of violating App Store policies.
An effective migration strategy uses the moment of cancellation intent as a final opportunity to retain the user with a compelling offer. Instead of simply letting the user churn, you can implement a smart cancellation flow that presents multiple options, such as a temporary pause, a last-chance retention discount, or a final "Switch & Save" offer to move to direct billing at a permanent discount.
Ready to start your migration? Learn more about Allocents's single-SDK solution and see how quickly you can reclaim your margins.