RORK LABJP
SDK57 — Expo SDK 57 landed, moving React Native from 0.85 to 0.86 while React stays at 19.2, and it is meant to ship no breaking changesCADENCE — The release hints at a new cadence: small, non-breaking upgrades slotted between the larger SDK releases, which makes keeping up easier to planRN086 — React Native 0.86 highlights include edge-to-edge fixes on Android, light and dark mode emulation in React Native DevTools, and rendering, layout, and animation fixesPREBUILD — expo prebuild improved how it clears and regenerates native directories, and expo-dev-client picked up iOS enhancementsIOS27 — iOS 27 reached beta 4 on July 20 and opened to public beta testers on July 22, so it is time to check generated apps ahead of the autumn releaseAND17 — Starting with Android 17, traditional Developer Previews are gone, replaced by continuously updated Canary buildsSDK57 — Expo SDK 57 landed, moving React Native from 0.85 to 0.86 while React stays at 19.2, and it is meant to ship no breaking changesCADENCE — The release hints at a new cadence: small, non-breaking upgrades slotted between the larger SDK releases, which makes keeping up easier to planRN086 — React Native 0.86 highlights include edge-to-edge fixes on Android, light and dark mode emulation in React Native DevTools, and rendering, layout, and animation fixesPREBUILD — expo prebuild improved how it clears and regenerates native directories, and expo-dev-client picked up iOS enhancementsIOS27 — iOS 27 reached beta 4 on July 20 and opened to public beta testers on July 22, so it is time to check generated apps ahead of the autumn releaseAND17 — Starting with Android 17, traditional Developer Previews are gone, replaced by continuously updated Canary builds
Articles/Business
Business/2026-06-13Advanced

Raising Your Subscription Price: How to Handle Existing Subscribers on the App Store and Google Play

Raise your subscription price without losing existing subscribers: break-even churn math, store consent flows, PRICE_INCREASE and EXPIRED handling, and cohort tracking.

Rork522Subscriptions15Price IncreaseApp Store82Google Play21Monetization37

Premium Article

This spring I raised the monthly price of the paid membership on a site I run. The Stripe side of it took about thirty minutes — create a new Price, point the checkout at it, done. What took far longer was the decision that came before any of that: what should happen to the people who were already paying me?

I ended up grandfathering my existing members at the old price. But the moment you try to make the same move in a mobile app, both the decision and the implementation get considerably harder. The App Store and Google Play handle price changes in completely different ways, and mishandling existing subscribers can turn an increase that was supposed to grow revenue into a wave of cancellations. With AI features pushing per-user API costs into more apps every month in 2026, most indie developers will face this decision sooner or later. Here is how I would work through it, from the math to the webhooks.

Before anything else, calculate your break-even extra churn rate

Pricing discussions tend to start with "how much should we raise it?" The question that actually matters comes first: do existing subscribers move to the new price, or stay where they are?

If you apply the new price to existing subscribers, you are trading a higher unit price against the extra cancellations the increase will trigger. For a plan priced at p per month raised by Δp, the increase loses money once the extra churn rate x crosses this line:

x = Δp ÷ (p + Δp)

Raising a $4.80 plan to $6.00 means 1.20 ÷ 6.00 = 0.2, so the change is revenue-positive as long as fewer than 20% of subscribers leave because of it. Put differently, a 25% price increase can survive one in five subscribers walking away. A small simulator makes it easy to plug in your own numbers.

// Break-even simulator for a subscription price increase
// Computes the extra churn you can absorb when migrating existing subscribers
type PriceChangePlan = {
  currentPrice: number;   // current monthly price
  newPrice: number;       // price after the change
  subscribers: number;    // current subscriber count
  baselineChurn: number;  // normal monthly churn (e.g. 0.04 = 4%)
};
 
function breakEvenExtraChurn(plan: PriceChangePlan): number {
  const delta = plan.newPrice - plan.currentPrice;
  return delta / plan.newPrice; // above this rate, the increase loses money
}
 
function monthlyRevenueAfter(plan: PriceChangePlan, extraChurn: number): number {
  const retained = plan.subscribers * (1 - plan.baselineChurn - extraChurn);
  return Math.round(retained * plan.newPrice);
}
 
const plan: PriceChangePlan = {
  currentPrice: 480,
  newPrice: 600,
  subscribers: 800,
  baselineChurn: 0.04,
};
 
console.log(`Break-even extra churn: ${(breakEvenExtraChurn(plan) * 100).toFixed(1)}%`);
console.log(`Monthly revenue at 8% extra churn: ${monthlyRevenueAfter(plan, 0.08)}`);
// Output:
// Break-even extra churn: 20.0%
// Monthly revenue at 8% extra churn: 422400

One caveat: the formula only gives you the ceiling. The churn you actually see depends on how the change is communicated and how the consent flow is designed, which is most of the rest of this article. The alternative — raising prices for new subscribers only — carries almost no churn risk, but the revenue gain arrives slowly because it depends entirely on new signups. That slow-but-safe profile is exactly why I grandfathered my own members. Either way, you cannot make the choice properly without understanding what each store does next.

App Store price changes: when consent is required and when it is not

When you edit a subscription price in App Store Connect, the first fork in the road is whether to preserve prices for existing subscribers.

  • Preserve prices: only new subscribers pay the new amount. Existing subscribers keep renewing at their current price and no consent flow ever starts
  • Apply to existing subscribers: Apple informs subscribers by email, push notification, and an in-app sheet. Depending on the size of the increase and the region, the change is either applied automatically after notice, or requires explicit consent

As a rule of thumb, Apple allows increases without consent when the change happens no more than once a year, stays within roughly 5 US dollars and 50% for monthly plans (50 dollars and 50% for annual plans), and is permitted by local law. Beyond that envelope — or in regions where consent is legally required — the new price never applies on its own, and a subscriber who has not consented by their renewal date is simply cancelled.

This is the sharpest difference from running subscriptions on Stripe. On the web, applying a new price is largely at your discretion. On the App Store, an unconsented increase ends in an irreversible cancellation. Whether you keep the increase inside the no-consent envelope or deliberately step beyond it should be decided together with the break-even math from the previous section.

The exact thresholds and regional rules shown above are a guideline; the authoritative version is whatever App Store Connect displays at the moment you make the change. Always confirm there before committing.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Replace the vague fear of losing subscribers with a concrete number by calculating the break-even extra churn rate before touching any store console
Handle the very different price change mechanics of the App Store and Google Play, including PRICE_INCREASE and EXPIRED server notifications
Avoid the hardcoded price trap and set up reason-tagged cohort tracking so you can tell whether the increase actually paid off
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

Related Articles

Business2026-07-12
Lower Store Fees by Their Structure, Not Their Rate — Apple SBP and Google Play's June 2026 Pricing
A working breakdown of Apple's Small Business Program and Google Play's new fee model that started June 30, 2026, framed as fee design for indie developers, with code to compute your effective rate and a break-even table.
Business2026-06-14
Validating StoreKit 2 Subscriptions Server-Side: Granting Access Without Trusting the Device
To stop 'I paid but the feature won't unlock' and 'still usable after canceling,' you need a design that does not trust the device's verdict and settles entitlements on the server. Covers StoreKit 2 signed transactions, verification with the App Store Server API, and state sync via App Store Server Notifications V2, from real indie monetization.
Business2026-05-19
The First 72 Hours After Shipping a Rork App — Crashes, Reviews, and Ad Priorities
The 72 hours right after you ship a Rork-generated app to the App Store or Google Play quietly decide most of the next six months of ratings and ranking. Here is the order I watch things in, after many years of solo iOS and Android releases.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →