iOS subscription upgrade and downgrade flows: pricing and proration mechanics explained
A practical guide to how Apple handles subscription upgrades, downgrades, and cross-grades — covering proration mechanics, timing, entitlement management, and the pricing strategy behind multi-tier subscription groups.
Multi-tier subscription pricing is one of the most powerful levers in an iOS app’s monetization playbook. Basic, Pro, and Team plans let you segment users by willingness-to-pay and drive higher lifetime value — but only if the mechanics Apple uses to move subscribers between tiers work in your favor. Upgrades, downgrades, and cross-grades have distinct timing rules, proration behaviors, and UX implications. Getting them wrong produces mysterious charges, confused users, and preventable churn.
This guide breaks down every transition type, explains what happens to money when a subscriber changes tier mid-billing-cycle, and offers practical guidance on designing your subscription group to make tier movement smooth for subscribers and profitable for your business.
Subscription groups: the container that enables tier changes
Every subscription product that can replace another must live in the same subscription group. Apple enforces a hard rule: a subscriber can hold only one active subscription per group at any moment. That constraint is what makes upgrades, downgrades, and cross-grades meaningful — they are all state transitions within a single group.
Within a group, each product carries an integer priority. Apple’s convention is that a lower number means a higher tier. A move from priority 3 to priority 1 is an upgrade; from priority 1 to priority 3 is a downgrade. A move between products at the same priority level but different billing durations is a cross-grade.
Name your group for subscribers, not your codebase. Apple surfaces subscription group names in cancellation and management flows in several storefronts. Use a name that describes the service to the subscriber (“Acme Pro Membership”) rather than an internal code (“SKU_GROUP_A”).
Products that should be independent — a standalone lifetime unlock, a consumable expansion pack — should live in separate groups. The tier-change mechanics described below apply only within a group.
The four transition types and what each one does
Apple recognizes four distinct transition types, each with its own timing and financial handling. Knowing which bucket a given subscriber action falls into is fundamental to building correct entitlement logic and honest UI copy.
| Transition | Direction | When it takes effect | Proration / billing |
|---|---|---|---|
| Upgrade | Current product → higher tier (lower priority number) | Immediately | Unused days on old plan credited against new plan price; subscriber charged the net difference |
| Downgrade | Current product → lower tier (higher priority number) | At end of current billing period | No mid-cycle refund; subscriber keeps current tier until renewal, then new lower price applies |
| Cross-grade (same duration) | Same priority level, different product or price | Immediately | Unused days credited proportionally |
| Cross-grade (different duration) | E.g., monthly → annual at same tier | At end of current billing period | No mid-cycle charge; new billing cycle starts at next renewal |
The immediate-vs-deferred split is the most consequential behavior for your UI. When a subscriber taps “Upgrade to Pro,” they receive new features immediately and see a prorated charge right away. When they tap “Switch to Basic,” nothing visible changes until the renewal date. If you do not communicate the deferred timing clearly, subscribers often believe the downgrade failed — or are surprised when entitlements change weeks later.
How Apple calculates proration on upgrades
Apple’s proration formula on upgrades is straightforward: credit = (remaining days / billing period days) × old plan price. That credit is subtracted from the new plan’s price for the current period. If the credit exceeds the new plan price — unusual on upgrades but possible if a subscriber is moving from an expensive annual plan to a cheaper monthly tier — Apple issues a refund rather than carrying forward a balance.
To make this concrete: a subscriber on .99/month Basic who upgrades to .99/month Pro on day 10 of a 30-day cycle has 20 days of unused Basic remaining. The credit is approximately (20/30) × .99 ≈ .33. The net charge is roughly .99 − .33 = .66 for the remainder of the current period. From the next renewal onward, the full .99 applies.
You do not need to calculate or trigger this proration yourself — Apple handles it at the billing layer. Your server’s responsibility is to detect the upgrade and grant the new entitlement immediately. That means listening for the DID_CHANGE_RENEWAL_STATUS App Store Server Notification (v1) or the equivalent StoreKit 2 Transaction update, verifying the new productID, and adjusting access accordingly. Any delay in entitlement delivery after a paid upgrade is a trust-breaking event for subscribers.
One practical implication: if your price differentials produce prorated charges with unusual decimal places (e.g., .13, .84), consider whether your tier pricing is creating unnecessary confusion. Cleaner price ratios — .99 / .99, or .99 / 9.99 — produce rounder prorated amounts and meaningfully fewer support tickets from users who do not recognize the charge on their statement.
Building a subscription group that makes transitions clean
The mechanics above interact with your pricing architecture in ways that can either reinforce or undermine your monetization strategy. A few structural decisions at setup time will save significant developer and support time later.
Leave gaps in priority levels. Apple allows up to 10 subscription products per group. If you assign priorities 1, 2, 3 to your initial tiers, there is no room to insert a mid-tier product later without restructuring. Assigning priorities with deliberate gaps — 1, 3, 5 — lets future tiers slot in cleanly without disrupting existing subscribers’ transition behaviors or requiring a data migration.
Match annual and monthly plan positions deliberately. A common architecture is to offer both monthly and annual billing at each tier: Basic Monthly (priority 3), Basic Annual (priority 3), Pro Monthly (priority 1), Pro Annual (priority 1). A subscriber switching from Basic Monthly to Basic Annual is a same-tier cross-grade with different durations — it defers to renewal. A subscriber switching from Basic Annual to Pro Annual is an upgrade — immediate. Make sure your UI copy sets accurate expectations for both paths, since the timing differs.
Surface pending tier changes in your app. StoreKit 2’s Product.SubscriptionInfo.RenewalInfo exposes autoRenewProduct, the product ID scheduled for the next renewal. If autoRenewProduct differs from the current active product, a tier change is pending. Use this signal to show the subscriber what is coming (“Your plan switches to Basic on June 14”) and to suppress upgrade CTAs when a downgrade is already scheduled — otherwise subscribers encounter an upsell for a plan they are in the process of leaving.
Build a Sandbox test matrix before submitting. Verify every transition — upgrade, downgrade, cross-grade same duration, cross-grade different duration — using separate Sandbox accounts. Sandbox compresses billing periods, so all transitions can be observed within minutes. Edge cases in entitlement delivery and receipt validation often only surface in Sandbox and can be difficult to reproduce or investigate in production.
Pricing strategy: designing tiers that convert in both directions
Upgrade and downgrade mechanics are not just plumbing — they are conversion paths. Effective multi-tier pricing means thinking about subscriber movement in both directions from the moment you design your tier structure.
Upgrade triggers. The highest-converting upgrade prompts are contextual: shown at the moment a subscriber hits a limit or reaches a locked feature. “You’ve used 8 of 10 projects — upgrade to Pro for unlimited” outperforms a generic “Go Pro” button because the value exchange is concrete and the timing is relevant. Phiture’s paywall research suggests that framing the upgrade around what subscribers gain rather than what they lose on the lower tier consistently produces stronger conversion. For the full mechanics of trial-to-paid conversion, see our guide to iOS subscription introductory offers.
Downgrade interception. A subscriber requesting a downgrade is signaling price sensitivity rather than dissatisfaction with the product — a distinction worth preserving. Because the downgrade defers to renewal, you have a window (the rest of the current billing period) to present a retention offer. Apple’s promotional offers are purpose-built for this: a discounted renewal for existing subscribers at a price that undercuts the downgrade they have already requested. See our post on iOS subscription promotional offers for eligibility rules and implementation mechanics.
International tier gaps. If your tiers are priced globally at .99 and .99, the 2× differential looks consistent in USD terms — but is very inconsistent in purchasing-power terms across markets. In markets where .99 already represents a meaningful discretionary spend, the additional upgrade delta can be a hard barrier for engaged subscribers who would otherwise convert. Per-market pricing, including the ability to set independent custom price points for each subscription tier, can close that gap without undermining your premium positioning in higher-income markets. Our pricing tools surface per-territory price comparisons across all your subscription products to help you spot these gaps.
RevenueCat’s cohort data has consistently shown that apps with local pricing across their subscription tiers — not just their top tier — see materially higher upgrade rates in emerging markets. Setting only the annual plan to a local price while leaving the monthly upgrade path at global rates limits the benefit, because the monthly-to-annual cross-grade is a lower-friction upgrade than monthly Basic to monthly Pro.
Sources and further reading
- Apple Developer Documentation — StoreKit Product.SubscriptionInfo
- Apple App Store Server API reference
- Apple — Subscriptions overview (App Store developer resources)
- RevenueCat Blog — iOS subscription benchmarks and cohort data
- Phiture Mobile Growth Stack — paywall and subscription design research
- Apple Developer Documentation — Subscriptions and Offers (Original API)
Share this post
Ready to put this into practice?
AppsOps is the first App Store ops dashboard — PPP-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 →