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).
What each tool owns
Section titled “What each tool owns”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.
The end-to-end flow
Section titled “The end-to-end flow”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”gplay subscriptions create \ --package com.example.app \ --product-id pro \ --listing en-US:title="Pro",description="Unlimited access to Pro features"2. Add base plans
Section titled “2. Add base plans”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-renewing3. Set prices in the anchor country + expand with PPP
Section titled “3. Set prices in the anchor country + expand with PPP”# 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 conversiongplay baseplans prices convert \ --package com.example.app \ --subscription-id pro \ --base-plan-id monthly \ --from-region USSame 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”gplay offers create \ --package com.example.app \ --subscription-id pro \ --base-plan-id monthly \ --offer-id monthly-trial-7d \ --phases FREE_TRIAL,P7D,05. Activate and localize
Section titled “5. Activate and localize”gplay subscriptions activate \ --package com.example.app \ --product-id pro
# Localize offer names for major marketsgplay 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.
6. Register the products in RevenueCat
Section titled “6. Register the products 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(subscriptionpro, base planmonthly)- Product
pro:yearly(subscriptionpro, base planyearly)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.
7. Create the offering and packages
Section titled “7. Create the offering and packages”Create an offering called “default” with two packages: “$rc_monthly” mapped to
pro:monthlyand “$rc_annual” mapped topro: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.
8. Generate a paywall
Section titled “8. Generate a paywall”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.
9. Verify a test purchase (both sides)
Section titled “9. Verify a test purchase (both sides)”After a tester runs a sandbox purchase in your app:
# Play-side verificationgplay 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-42and 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.
Why this split makes sense
Section titled “Why this split makes sense”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.
Getting started
Section titled “Getting started”brew install tamtom/tap/gplaygplay setup --autoInstall 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:
npx skills add tamtom/gplay-cli-skillsFull subscription reference at /reference/subscriptions/, base plans at /reference/baseplans/, offers at /reference/offers/.