Skip to content

Set up a Google Play subscription with RevenueCat and gplay CLI

If you’ve set up a Google Play subscription with RevenueCat before, you know the split: RevenueCat manages the cross-store abstraction (entitlements, offerings, paywalls, receipt verification), and you do the Play Console side by hand in a web UI — create the subscription product, create a base plan, create offers, click through 175 country prices, localize the offer names.

The Play Console side of that story is what gplay automates. Paired with the RevenueCat MCP server, the entire stack now lives in your terminal (or your AI agent’s).

Cleanest way to think about it:

Layer Tool Owns
Google Play native gplay CLI Subscription, base plans, offers, PPP-converted country prices, offer localization, purchase verification against Google
Cross-store abstraction RevenueCat MCP Entitlements, offerings, packages, paywalls, customer view, revenue analytics
Your app SDK RevenueCat SDK Present offerings, hand off to Play Billing, sync customer info

gplay talks to Google directly. RevenueCat talks to gplay’s output (the Play product IDs). Your app talks to RevenueCat.

Let’s launch a new “Pro” subscription with monthly and yearly base plans, a 7-day free trial offer on monthly, and prices in USD, EUR, GBP, JPY, INR, BRL.

1. Create the Google Play subscription with gplay

Section titled “1. Create the Google Play subscription with gplay”
Terminal window
gplay subscriptions create \
--package com.example.app \
--product-id pro \
--listing en-US:title="Pro",description="Unlimited access to Pro features"
Terminal window
gplay baseplans create \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--billing-period P1M \
--auto-renewing
gplay baseplans create \
--package com.example.app \
--subscription-id pro \
--base-plan-id yearly \
--billing-period P1Y \
--auto-renewing

3. Set prices in the anchor country + expand with PPP

Section titled “3. Set prices in the anchor country + expand with PPP”
Terminal window
# Set the anchor price (US, monthly)
gplay baseplans prices set \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--region US \
--price-micros 9990000 # $9.99
# Expand to 175 countries using Google's purchasing-power-parity conversion
gplay baseplans prices convert \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--from-region US

Same two commands for yearly at $99.99.

convert uses Google’s PPP tables — a $9.99 US price becomes ₹499 in India, R$19.90 in Brazil, ¥1500 in Japan, etc. You can override individual countries after.

4. Add a 7-day free-trial offer on monthly

Section titled “4. Add a 7-day free-trial offer on monthly”
Terminal window
gplay offers create \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--offer-id monthly-trial-7d \
--phases FREE_TRIAL,P7D,0
Terminal window
gplay subscriptions activate \
--package com.example.app \
--product-id pro
# Localize offer names for major markets
gplay offers locales set \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--offer-id monthly-trial-7d \
--locales en-US:"7-day free trial",fr-FR:"7 jours gratuits",de-DE:"7 Tage kostenlos",es-ES:"7 días gratis",ja-JP:"7日間無料"

That’s the Google Play side, done. Take a screenshot of the Play Console page as proof — the subscription, both base plans, the trial offer, and localized names are all there.

Now wire it up in RevenueCat.

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

Using the RevenueCat MCP, register the Google Play products for com.example.app:

  • Product pro:monthly (subscription pro, base plan monthly)
  • Product pro:yearly (subscription pro, base plan yearly)

Then create a “Pro” entitlement and attach both products to it.

Under the hood the agent will call the RevenueCat MCP tools: create-product-in-store, create-entitlement, attach-products-to-entitlement. All you did was describe the intent.

Create an offering called “default” with two packages: “$rc_monthly” mapped to pro:monthly and “$rc_annual” mapped to pro:yearly. Attach both to the “Pro” entitlement.

The agent calls create-offering, create-packages, attach-products-to-package.

Your app’s Purchases.getOfferings() will now return this shape.

RevenueCat’s MCP includes an AI paywall generator:

Generate a paywall for the “default” offering with a “Try Pro free for 7 days” hero, feature list of “Unlimited exports, No ads, Priority support”, and a testimonial from an existing paywall on file. Render a screenshot when done.

The MCP calls create-paywall-ai → returns a task ID → agent polls get-paywall-ai-task → then render-paywall-screenshot when ready. You get back a PNG.

After a tester runs a sandbox purchase in your app:

Terminal window
# Play-side verification
gplay purchases subscriptionsv2 get \
--package com.example.app \
--token "$PURCHASE_TOKEN"

And in RevenueCat via the MCP:

Look up the RevenueCat customer for user ID test-user-42 and show me their subscriptions and entitlements.

The Play subscriptionState and the RC entitlement should match. If they don’t, gplay tells you exactly what Google’s servers see; RC tells you what its webhook processed. That’s how you triage sync issues.

Three things you get from doing it this way:

One source of truth per layer. The Play product IDs live in Play Console (managed by gplay). The RC entitlement/offering/paywall live in RevenueCat (managed by MCP). No copy-paste between dashboards.

AI-agent-driven. Both surfaces are agent-native. A prompt like “add a yearly plan with 30% discount for existing monthly users” becomes: gplay creates the base plan, RC MCP creates the targeting rule, done.

Cross-store when you’re ready. Everything above works for App Store Connect too — same RC MCP calls, use the asc CLI for the App Store side.

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

Install the RevenueCat MCP in your AI agent per RevenueCat’s setup docs, and install the subscription skill for gplay so your agent knows the full Play-side workflow:

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

Full subscription reference at /reference/subscriptions/, base plans at /reference/baseplans/, offers at /reference/offers/.