Use this skill when rolling out subscription price changes on Android with RevenueCat. Covers opt out decreases versus opt in increases, RevenueCat's automatic handling of the change confirmation flow, and the dashboard configuration involved.
72
89%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Use this skill when you roll out a new price for an existing subscription product on Android and want RevenueCat to manage the cohort and consent plumbing for you.
Google Play supports two kinds of price changes for active subscribers:
RevenueCat processes SUBSCRIPTION_PRICE_CHANGE_UPDATED and related RTDNs on its backend and updates CustomerInfo when a subscriber's cohort or consent state changes. Your app reads entitlements the same way it always does.
For most price change scenarios, there is nothing to implement in your app or backend.
Decide which path applies before you touch anything.
| Question | Opt out | Opt in |
|---|---|---|
| Typical trigger | Decrease, or small increase within Google's threshold | Larger increase above Google's threshold |
| User consent | Not required | Required, prompted by Google Play UI |
| If user declines | N/A | Subscription cancels at period end, CANCELLATION webhook fires |
| New price applies | Automatically at next renewal | After user consents in Play's dialog |
| RTDN RevenueCat consumes | SUBSCRIPTION_PRICE_CHANGE_UPDATED | SUBSCRIPTION_PRICE_CHANGE_UPDATED, then SUBSCRIPTION_CANCELED if declined |
| App code change | None required | None required |
| Paywall price source | pkg.product.price.formatted (new purchases only) | pkg.product.price.formatted (new purchases only) |
Questions to answer before executing:
Most of the work is in the Play Console and the RevenueCat dashboard. Your app stays the same.
In Google Play Console, open the subscription, select the base plan, and edit the price. Google will prompt you to choose how existing subscribers are treated (opt out vs opt in) based on the magnitude of the change and your region.
RevenueCat processes the RTDNs from Google automatically. You do not need to toggle anything in the RevenueCat dashboard for the price change itself. Confirm the updated product price appears on the product in the RevenueCat dashboard after Google propagates it.
If you want the paywall to show the new price immediately for new purchasers, refresh offerings after the Play Console change propagates. The SDK call is unchanged:
val offerings = Purchases.sharedInstance.awaitOfferings()
val pkg = offerings.current?.availablePackages?.firstOrNull() ?: return
val displayPrice = pkg.product.price.formattedLegacy cohort subscribers continue to pay their old price until Google migrates them. pkg.product.price.formatted is always correct for new purchases.
For opt in increases, RevenueCat updates CustomerInfo when the consent outcome is known. Read entitlements the usual way.
val info = Purchases.sharedInstance.awaitCustomerInfo()
val isPro = info.entitlements["pro"]?.isActive == trueDo not build a consent dialog. Google Play shows it.
If the user declines the opt in increase, the subscription cancels at period end. RevenueCat fires a CANCELLATION webhook event. Treat it the same way you treat any other cancellation on the server side.
If you want to warn subscribers about an upcoming increase before Google's dialog appears, drive an in app banner from a RevenueCat webhook event or show a specific Offering to the affected cohort with a Targeting rule. This is an enhancement, not part of the price change contract.
ccfc038
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.