Skip to main content
skill CX Codex

rc-price-changes — Claude Code skill for Android price changes

Walks you through a subscription price change on Android with RevenueCat, without touching app code.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add RevenueCat/ai-toolkit --skill rc-price-changes -a claude-code
Open on GitHub

What rc-price-changes does

Reach for this skill when you change the price of an existing subscription product on Android and want RevenueCat to handle the cohort and consent plumbing. Google Play splits these changes in two: opt out (usually a decrease, or a small increase inside Google's threshold) and opt in (a larger increase). Opt out applies at the next renewal with no user action. Opt in shows Google's own consent dialog, and declining cancels the subscription at period end.

RevenueCat consumes SUBSCRIPTION_PRICE_CHANGE_UPDATED and related RTDNs on its backend, then updates CustomerInfo when a subscriber's cohort or consent state changes. Your app reads entitlements the same way it always does. For most scenarios there is nothing to implement in the app or on your server — the work lives in Play Console and the RevenueCat dashboard. If you want the paywall to show the new price right away for new purchasers, refresh offerings once the Play Console change propagates. The call is unchanged: Purchases.sharedInstance.awaitOfferings(), with the price read from pkg.product.price.formatted.

Do not build a consent dialog. Google Play shows it. Declines arrive as a CANCELLATION webhook event, so handle them like any other cancellation on the server. Legacy subscribers keep paying their old price until Google migrates them, and the SDK does not surface that — it is a Play concern. One thing to watch: pkg.product.price.formatted is only correct for new purchases.

What it helps with

  • tell an opt out decrease from an opt in increase before you touch anything
  • roll out a new Android subscription price with no app code changes
  • refresh offerings so the paywall shows the new price to new purchasers
  • catch a declined increase through the CANCELLATION webhook
  • confirm the updated product price in the RevenueCat dashboard

Example prompts for the agent

  • Walk me through a subscription price change on Android with RevenueCat — is this opt out or opt in?
  • Refresh offerings so the paywall shows the new price for new purchasers
  • A user declined the price increase — what webhook fires and how do I handle it

How to install rc-price-changes

1Skills CLI (Vercel)

npx skills add RevenueCat/ai-toolkit --skill rc-price-changes -a claude-code

2Manually: put the files in place

~/.claude/skills/rc-price-changes/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/rc-price-changes/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about rc-price-changes

How do I install rc-price-changes in Claude?

Run npx skills add RevenueCat/ai-toolkit --skill rc-price-changes -a claude-code. The skill lands at ~/.claude/skills/rc-price-changes/SKILL.md.

What does rc-price-changes do?

It covers rolling out a new price for an existing Android subscription through RevenueCat: the opt out versus opt in split, RevenueCat's handling of the RTDNs, and the Play Console and dashboard configuration involved.

Do I need to build my own consent dialog?

No. For opt in increases Google Play shows the consent dialog, and RevenueCat updates CustomerInfo once the outcome is known. If the user declines, the subscription cancels at period end and a CANCELLATION webhook fires.

Source text

SKILL.md · MIT
---
name: rc-price-changes
description: 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.
license: Apache-2.0; see LICENSE
metadata:
  author: RevenueCat
  source: revenuecat-handbook chapter 14
  keywords:
  - android
  - revenuecat
  - price-change
  - opt-in
  - opt-out
---

# Price Changes

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.

## Phase 1: Understand

Google Play supports two kinds of price changes for active subscribers:

- Opt out changes (typically decreases, and increases within Google's opt out threshold). The new price applies automatically at the next renewal. No user action required.
- Opt in changes (larger increases). Google shows its own in app consent dialog. If the user consents, they continue at the new price. If they decline, the subscription cancels at period end.

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.

## Phase 2: Plan

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:

- Is the change a decrease, a small increase, or a larger increase? That determines opt out vs opt in.
- Do you want to notify existing subscribers in app before the change takes effect? That is optional, driven by a webhook or a Targeting rule, not a requirement.
- Which legacy cohorts exist today? Existing subscribers keep paying their old price until Google migrates them. This is a Google Play concern, not visible in the SDK.

## Phase 3: Execute

Most of the work is in the Play Console and the RevenueCat dashboard. Your app stays the same.

### 1. Update the price in Play Console

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.

### 2. Let RevenueCat pick up the change

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.

### 3. Refresh offerings in the client (optional)

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:

```kotlin
val offerings = Purchases.sharedInstance.awaitOfferings()
val pkg = offerings.current?.availablePackages?.firstOrNull() ?: return
val displayPrice = pkg.product.price.formatted
```

Legacy cohort subscribers continue to pay their old price until Google migrates them. `pkg.product.price.formatted` is always correct for new purchases.

### 4. Observe CustomerInfo on consent resolution

For opt in increases, RevenueCat updates `CustomerInfo` when the consent outcome is known. Read entitlements the usual way.

```kotlin
val info = Purchases.sharedInstance.awaitCustomerInfo()
val isPro = info.entitlements["pro"]?.isActive == true
```

Do not build a consent dialog. Google Play shows it.

### 5. Handle declines via webhook, if you care

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.

### 6. Optional: notify affected users

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.

## References

- [Full chapter](https://www.revenuecat.com/guides/revenuecat-android-sdk/price-changes)

© RevenueCat · MIT · RevenueCat/ai-toolkit

Similar skills

Everything for Mobile →

From the same set28

rc-catalog-management Walks through the Android product catalog across Play Console and the RevenueCat dashboard: import products, attach entitlements, wire offerings. CX Codex +1 627installs rc-subscription-states A skill for Android apps on RevenueCat that tells the agent how to gate paid features through CustomerInfo and EntitlementInfo. CX Codex +1 623installs rc-error-handling Tells your agent how to handle RevenueCat Android SDK errors: which exception to catch, what each code means, what to show the user. CX Codex +1 627installs rc-revenuecat-api-quick-reference A lookup table for the RevenueCat Android SDK 10.x and REST API inside your editor: call signatures, Offerings structure, CustomerInfo fields. CX Codex +1 624installs rc-understanding-revenuecat Orients an agent in the RevenueCat Android SDK 10.x architecture before it writes any code. Useful when you are coming from raw Play Billing. CX Codex +1 617installs rc-cancellations-pauses-winback Surfaces cancellation, pause and winback state in Android apps on RevenueCat. Saves you from guessing what happened to a subscriber's access. CX Codex +1 612installs rc-revenuecat-vs-raw-billing A skill that helps you pick between RevenueCat and raw Google Play Billing, showing what the SDK takes over and what stays with your team. CX Codex +1 601installs rc-alternative-billing A skill that maps which Google Play alternative billing programs RevenueCat's Android SDK handles and which you build yourself. CX Codex +1 603installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor