All posts
OPERATIONS

iOS subscription product ID migration: what happens to existing subscribers and how to manage the switch

When you need to change iOS subscription product IDs — to restructure tiers, fix naming mistakes, or consolidate after an acquisition — existing subscribers don't automatically follow. This guide explains Apple's rules, what happens to active subscribers, and how to plan a clean migration.

By the AppsOps team · · 9 min read

At some point, most iOS subscription apps hit the same wall: a product ID that made sense when you shipped it no longer fits the product you've built. Maybe you restructured your tier names, merged two apps, corrected a typo in the product identifier, or changed your subscription architecture entirely. Whatever the reason, the problem is the same — App Store product IDs are permanent, and existing subscribers don't automatically follow you when you create new ones.

This post covers everything you need to know before you start a product ID migration: what Apple allows, what happens to subscribers on your old product, and how to design a migration path that minimises churn and confusion.

Why product ID changes happen

The most common triggers for a subscription product ID migration:

Before you start any product ID migration, make sure you actually need one. If the underlying billing period, price tier, and entitlements aren't changing, you may be able to solve the problem with localisation strings, display names, or paywall copy alone — all of which you can update without touching the product ID.

Apple's rules on product ID permanence

Apple's App Store Connect documentation makes the constraints clear. Once a subscription product is created, the product ID is permanent and cannot be changed. You can update the following after creation:

You cannot:

When you "remove a product from sale" in App Store Connect, the product is retired from the storefront. New subscribers cannot sign up for it. However, existing active subscribers continue to renew at their current price and billing cycle indefinitely — until they cancel or the subscription lapses. Apple does not force existing subscribers off a retired product.

Existing subscribers continue renewing on retired products until they cancel — Apple doesn't time them out

This is mostly good news — it means you won't accidentally churn your entire subscriber base by creating new products. But it also means you'll be running two product families in parallel for months or years while the old cohort winds down, which creates operational complexity in your analytics, entitlement logic, and customer support flows.

Understanding the migration scenarios

How you approach the migration depends heavily on whether your old and new products are in the same subscription group and whether you want to offer any pricing incentive to encourage subscribers to switch.

Scenario Same subscription group? User action required Pricing flexibility Complexity
Rename or restructure within same group Yes User must accept offer or upgrade Promotional offer on new product Medium
Move to a new subscription group No User must subscribe as net-new Introductory pricing on new product High
App merger (different app, same developer) No (different bundle ID) User must subscribe in the new app Offer codes in new app Very high
Price change only (no ID change needed) N/A None — Apple handles notification Grandfathering options available Low

The same-group scenario is the most manageable. If your old and new subscription products are both in the same subscription group, a subscriber on the old product is already in a relationship with the group. They can upgrade or downgrade to the new product, and if they do so via a promotional offer, they can receive a discounted first period. Apple handles the proration logic automatically based on the relative position of the products in the group hierarchy.

The cross-group scenario is substantially harder. From Apple's perspective, a subscriber on product A in group 1 and a subscriber on product B in group 2 have no relationship. Moving someone from A to B means they cancel A and start a fresh subscription on B — with a potential coverage gap, with their trial eligibility potentially reset, and with no guarantee they'll actually complete the switch. RevenueCat's engineering documentation has noted that cross-group migrations are one of the leading sources of subscriber data fragmentation in production apps, because entitlement systems must track two entirely separate transaction histories for what is effectively the same subscriber.

How to migrate subscribers using subscription offers

For same-group migrations, the recommended approach uses Apple's promotional offer mechanism. Here's the general flow:

  1. Create the new product in App Store Connect within the same subscription group as the old one. Set your new pricing tier and display name, and position the product correctly in the group upgrade hierarchy.
  2. Retire the old product by setting it to "Developer Removed from Sale." New subscribers will no longer see it; existing subscribers are entirely unaffected and continue to renew normally.
  3. Create a promotional offer on the new product — typically a free or heavily discounted first period. Promotional offers require an active subscription within the same group to be eligible, which your legacy subscribers satisfy automatically.
  4. Surface the offer in-app with a signed SKPaymentDiscount (original StoreKit API) or by presenting the offer through the appropriate StoreKit 2 purchase flow. The offer signature must be generated server-side using your promotional offer key — never on device.
  5. Track acceptance. In StoreKit 2, look for a Transaction.offerType of .promotional on incoming transactions. App Store Server Notifications will carry the offerIdentifier field in the signed transaction payload, letting your backend update its subscriber records in real time.

Research from Phiture on subscription lifecycle messaging suggests that in-app prompts delivered at high-engagement moments — the session after a user completes a core workflow, or just before their upcoming renewal date — produce meaningfully higher offer acceptance rates than background push notifications. A mid-session modal explaining the benefits of the new plan and the time-limited promotional pricing tends to outperform a generic "we've updated our plans" banner, particularly when it acknowledges that the subscriber's existing access is uninterrupted.

For cross-group migrations, offer codes are the most practical tool available. You can generate offer codes tied to your new product's introductory offer and distribute them via email or targeted push notification to subscribers on the old product. See our full guide to iOS subscription offer codes for the generation flow, redemption UX options, and the App Store Connect limits on code batches.

If you're migrating subscribers across apps after an acquisition, App Store Connect offer codes can be redeemed through a URL scheme or an in-app code entry screen in the receiving app. This is the only Apple-sanctioned way to extend subscription entitlements to users who subscribed in a different app bundle. The subscriber must redeem the code themselves — there is no server-side entitlement transfer mechanism in Apple's system.

Running two product families in parallel

Regardless of how smoothly your migration campaign executes, you'll almost certainly have a tail of subscribers on the old product for an extended period. Some are on annual plans and won't see any migration prompt until their renewal. Others won't accept the promotional offer when it's shown. A few simply never open the app again but continue paying on the existing billing cycle.

Here's what you need to get right for the parallel-operation period:

12–18+ months: the realistic tail for annual subscribers on a retired product who don't switch at their next renewal

Timing and communication

The migration offer window matters. Apple limits promotional offers to a fixed number of periods, set when you create the offer, and each offer ID can only be used once per subscriber. That means you get one organised campaign window per subscriber before the promotional pricing is exhausted — making your first in-app prompt the highest-leverage moment in the entire migration.

A practical calendar for a typical same-group migration:

Apple requires that subscription price increases go through a specific consent flow with mandatory user notification — covered in detail in our guide to raising iOS subscription prices without killing your renewal rate. Product ID migrations are handled differently: because you're not changing what existing subscribers pay, Apple's mandatory consent mechanism doesn't apply. The communication responsibility falls entirely on you, which is both a flexibility and a risk.

The flexibility: you can frame the migration however fits your product best — a feature upgrade, a simplification, a fresh start. The risk: if subscribers feel surprised or misled, the cancellation rate on the old product tends to spike in the weeks following the campaign, because confused subscribers often cancel before they investigate. Clear, proactive communication about what is changing and what is staying the same is the most reliable lever you have.

Sources and further reading

Share this post

Ready to put this into practice?

AppsOps is the first App Store ops dashboardPPP-fair pricing for 175 App Store territories, AI metadata localization in 39 languages, AI screenshot localization for 14 Apple device classes, and one-click App Store Connect API push — all from one dashboard, all for $19/month.

Try AppsOps free — no card →

Related reading