Determining if subscription change is upgrade or downgrade

  • 20 November 2023
  • 2 replies

Badge +4

I am developing a Google Play application which has multiple subscription tiers and multiple subscription periods:

[Tier A - Annual] [Tier A - Monthly]

[Tier B - Annual] [Tier B - Monthly]

[Tier C - Annual] [Tier C - Monthly]

I would like to apply different proration methods depending on if the user upgrades/downgrades their subscription.

What is the most sensible method to determine if a subscription change is an upgrade or downgrade in this scenario?

In this guide an upgrade is described as a change where the ‘price per unit of time increases’. I’m confused about how to compare two subscriptions which use different time units (e.g. moving from [Tier A - Annual] to [Tier B - Monthly])


Many thanks


Best answer by sharif 22 November 2023, 19:21

View original

2 replies

Badge +4

Great, that clears things up thanks!

Userlevel 5
Badge +9


I hope I can shed some light on the topic in general.

Computing the price per unit of time is as simple as dividing the price by the time. Google has a decent example here where they compare an annual subscription and a monthly subscription. Basically they divide the annual subscription price per month to get the monthly price and compare with the monthly subscription.

You can always safely use IMMEDIATE_WITH_TIME_PRORATION for upgrades and downgrades as that’s what RevenueCat used to do before support for all proration modes was implemented.

If you want, you can take some guidance from how Apple handles upgrades and downgrades as detailed in this blog post: Apple, unlike Google, enforces specific proration modes when upgrading, downgrading, and crossgrading, so you can choose the modes that match Apple if you want a framework for how to do this.