Skip to content

Sync Google Play subscription prices with RevenueCat across 175 countries

Google Play supports subscription pricing in 175 countries. RevenueCat abstracts pricing across stores. Keeping the two in sync — the actual per-country prices on Google Play, the offering-level packages in RevenueCat — is the kind of task that traditionally means opening two dashboards and a spreadsheet.

gplay covers the Google Play side; the RevenueCat MCP covers the RevenueCat side. Together, an AI agent can keep them synchronized in one prompt.

On Google Play:

  • A base plan has a regional price for each country, denominated in that country’s currency, stored in micro-units (1 USD = 1,000,000 micros).
  • Google offers a PPP conversion — you set the anchor (e.g. US $9.99), Google proposes prices for every other region weighted by local purchasing power. You accept, override, or reject per country.
  • Prices can change over time; you have to explicitly re-set them.

In RevenueCat:

  • A package (e.g. $rc_monthly) points to a store product (e.g. pro:monthly on Google Play).
  • The price RevenueCat sees is whatever Google Play reports for that product in the user’s region — RC doesn’t set prices, it observes them.
  • RC’s equalize-subscription-prices tool normalizes prices between stores (iOS ↔ Android) so that a user seeing $9.99 on iOS also sees the equivalent $9.99 on Android after currency and store-fee adjustments.

The takeaway: gplay writes the ground truth on Google Play. RevenueCat aligns iOS to match.

Step 1 — set the anchor price on Google Play

Section titled “Step 1 — set the anchor price on Google Play”
Terminal window
gplay baseplans prices set \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--region US \
--price-micros 9990000

That’s your US monthly price at $9.99.

Step 2 — expand to all 175 countries with PPP

Section titled “Step 2 — expand to all 175 countries with PPP”
Terminal window
gplay baseplans prices convert \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--from-region US

convert uses Google’s PPP tables. Your $9.99 US price becomes:

  • India: ₹499
  • Brazil: R$19.90
  • Japan: ¥1,500
  • Turkey: ₺149
  • Argentina: AR$4,999
  • Nigeria: ₦4,500
  • … 170 more.

You can review the whole set:

Terminal window
gplay baseplans prices list \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--output table

Override any single country:

Terminal window
gplay baseplans prices set \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--region GB \
--price-micros 7990000 # £7.99 flat, not the PPP-converted £8.53

Step 3 — sync RevenueCat prices to match

Section titled “Step 3 — sync RevenueCat prices to match”

Once Google Play has the prices you want, tell RevenueCat to align iOS to match:

Prompt your AI agent (Claude Code, Cursor, or any of the 12 supported agents):

Using the RevenueCat MCP, equalize subscription prices for the “default” offering so the App Store side matches what’s now on Google Play. Show me the diff before executing.

Under the hood the agent calls RC MCP’s equalize-subscription-prices — it reads Play Store prices as the source of truth and adjusts App Store prices to match after fee-and-currency normalization.

Full round trip: gplay writes to Google Play → RC observes → RC MCP equalizes App Store.

Prices drift over time. Google changes its PPP tables (sometimes materially). Local currency swings. Store fee changes.

Weekly audit prompt:

Compare the current Google Play prices for com.example.app pro subscription against the anchor ($9.99 US monthly) using PPP tables from 3 months ago. Flag any country where the current price is more than 15% off the recomputed PPP.

The agent chains gplay baseplans prices list → PPP math against the anchor → diff report.

You can also cross-reference with RevenueCat’s revenue metrics:

For countries where the Play price is >15% below the PPP anchor, pull the last 30 days of RC revenue metrics. Are we leaving money on the table?

RC MCP get-revenue-metric filtered by region → agent computes revenue-per-user against the reduced-price cohort.

When you decide to raise US monthly from $9.99 to $12.99, you want the change to propagate cleanly.

Prompt:

Change Google Play US monthly price for pro subscription to $12.99, propagate via PPP to all other regions except IN and BR (keep them at current), then equalize RevenueCat so iOS matches. Show the full diff — old vs new for every affected region and every affected RC package — before executing.

Chains:

  1. gplay baseplans prices set --region US --price-micros 12990000 (dry-run)
  2. gplay baseplans prices convert --from-region US --exclude IN,BR (dry-run)
  3. gplay baseplans prices list → diff vs pre-state
  4. You approve.
  5. Steps 1-2 re-run for real.
  6. RC MCP equalize-subscription-prices triggers iOS equalization.
  7. RC MCP list-prices to confirm alignment.

A price change that used to be a ticket handed between finance, product, and the mobile team is now a prompt.

What Fastlane and gradle-play-publisher can’t do

Section titled “What Fastlane and gradle-play-publisher can’t do”

Neither supports subscription pricing at all. This isn’t a gap — they were built for a different scope. But if you’re doing anything with subscriptions, they’re not part of the toolchain.

gplay covers the full monetization surface; combined with RC MCP, that surface stretches across both stores.

Terminal window
brew install tamtom/tap/gplay
gplay setup --auto

Set up the RevenueCat MCP in your agent. Install the PPP pricing skill so your agent knows the anchor-and-convert pattern by default:

Terminal window
npx skills add tamtom/gplay-cli-skills

Full base plan pricing reference at /reference/baseplans/. Try the audit prompt above against your live subscriptions — most teams find at least three countries out of sync on the first run.