Use this skill when rolling out subscription price changes on Android with RevenueCat. Covers price decreases, opt out versus opt in increases, the in app notice required for opt out increases, RevenueCat's price increase consent webhooks, and the dashboard and Play Console configuration involved.
83%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
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 handle the consent outcome on the server.
Google Play supports two kinds of price changes for active subscribers:
customerInfo.managementURL).With Google Real Time Developer Notifications connected to RevenueCat, RevenueCat ingests SUBSCRIPTION_PRICE_CHANGE_UPDATED and sends PRICE_INCREASE_CONSENT_REQUIRED and PRICE_INCREASE_CONSENT_APPROVED webhooks. If the user never accepts, the subscription is canceled (CANCELLATION webhook, cancel_reason PRICE_INCREASE) and the affected entitlement's willRenew flips to false. CustomerInfo has no cohort or consent field; your app still reads entitlements the same way it always does.
For price decreases and opt in increases there is nothing to implement in your app or backend; an opt out increase requires the in app notice in Step 6.
Decide which path applies before you touch anything.
| Question | Decrease or opt out increase | Opt in increase |
|---|---|---|
| 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 | Decrease: next payment. Opt out increase: first renewal after the 30 or 60 day notice | 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 | For an increase: required prominent in app notice at least 30 days before the new price takes effect, on all device types (subscription name, current and new price, effective date, how to cancel). For a decrease: none | None required (in app notice recommended, with a deep link to the Play subscription screen) |
| 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. The app changes only for an opt out increase, which requires the in app notice in Step 6.
monetization.subscriptions.basePlans.migratePrices). Choose opt in, or opt out if eligible and you certify its requirements.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 you end their legacy price cohort. pkg.product.price.formatted is always correct for new purchases.
For opt in increases, CustomerInfo changes only if the user does not accept: the subscription is canceled and the entitlement's willRenew flips to false. Read entitlements the usual way either way.
val info = Purchases.sharedInstance.awaitCustomerInfo()
val isPro = info.entitlements["pro"]?.isActive == trueDo not build a consent dialog; consent happens in Google Play.
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.
PRICE_INCREASE_CONSENT_REQUIRED webhook, or show a specific Offering to the affected cohort with a Targeting rule.RevenueCat/ai-toolkit
2aeae8c
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.