Skip to content

AI-generated paywalls linked to real Google Play products: RevenueCat MCP + gplay

RevenueCat’s MCP server exposes an AI paywall generator — describe what you want, get a rendered paywall. Good, but a paywall pointing at products that don’t exist isn’t a paywall, it’s a mockup. To ship, the paywall needs to be linked to a real Google Play subscription with real base plans, real offers, and real prices.

That’s where gplay fits: it creates the actual Play-side objects, RC MCP builds the paywall around them, and your AI agent wires them together.

The pattern:

  1. gplay creates the Google Play subscription, base plans, offers, and per-country prices.
  2. RevenueCat MCP registers those products, wraps them in an entitlement and offering, and generates a paywall referencing them.
  3. RevenueCat MCP renders a screenshot for review.
  4. You (or your agent) iterate on the paywall copy, re-render, repeat.

Every step is scriptable. The Google Play side is the ground truth; the paywall renders on top of that truth.

Full example: launching a “Pro” paywall

Section titled “Full example: launching a “Pro” paywall”

Step 1 — create the Play-side subscription with gplay

Section titled “Step 1 — create the Play-side subscription with gplay”
Terminal window
gplay subscriptions create \
--package com.example.app \
--product-id pro \
--listing en-US:title="Pro",description="Unlimited access"
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
gplay baseplans prices set --region US --price-micros 9990000 \
--subscription-id pro --base-plan-id monthly --package com.example.app
gplay baseplans prices convert --from-region US \
--subscription-id pro --base-plan-id monthly --package com.example.app
gplay baseplans prices set --region US --price-micros 89990000 \
--subscription-id pro --base-plan-id yearly --package com.example.app
gplay baseplans prices convert --from-region US \
--subscription-id pro --base-plan-id yearly --package com.example.app
gplay offers create \
--package com.example.app \
--subscription-id pro \
--base-plan-id monthly \
--offer-id monthly-trial-7d \
--phases FREE_TRIAL,P7D,0
gplay subscriptions activate --package com.example.app --product-id pro

The Play-side is now real: pro:monthly at $9.99 with 7-day trial, pro:yearly at $89.99, PPP-converted across 175 countries.

Step 2 — prompt your AI agent to build the RC side + paywall

Section titled “Step 2 — prompt your AI agent to build the RC side + paywall”

Open Claude Code (or Cursor, or any of the 12 supported agents) and prompt:

Using the RevenueCat MCP, wire up the “Pro” subscription for com.example.app and generate a paywall.

Products to register (Google Play): pro:monthly (subscription pro, base plan monthly) and pro:yearly (subscription pro, base plan yearly).

Create a “Pro” entitlement, attach both products. Create a “default” offering with $rc_monthly and $rc_annual packages.

Then generate a paywall:

  • Hero: “Try Pro free for 7 days”
  • Emphasize the yearly plan (25% savings vs monthly)
  • Feature list: read from README.md, take the top 4 items
  • Style: same brand palette as our existing “starter” paywall (get it from RC to reference)
  • Trust signal: “Join 50,000+ Pro users”

When done, render a screenshot and show it to me.

Chains of tool calls, roughly:

  1. RC MCP create-product-in-store × 2 (monthly and yearly).
  2. RC MCP create-entitlement “Pro”.
  3. RC MCP attach-products-to-entitlement.
  4. RC MCP create-offering “default”.
  5. RC MCP create-packages ($rc_monthly, $rc_annual).
  6. RC MCP attach-products-to-package.
  7. cat README.md → extract feature list.
  8. RC MCP list-paywalls → find “starter” → get-paywall for style reference.
  9. RC MCP create-paywall-ai with the assembled brief → returns task ID.
  10. RC MCP poll get-paywall-ai-task → wait ~30s.
  11. RC MCP render-paywall-screenshot → PNG saved to ./paywalls/pro-launch.png.

You get back the screenshot. You look at it.

The magic isn’t the first render, it’s the second and third.

That looks great but the trial CTA is too subtle. Make it a persistent button at the bottom in accent color, and add “No commitment, cancel anytime” microcopy under it.

Agent calls RC MCP edit-paywall-ai with the change brief → new task → re-render.

Or:

Try three variants: the current one, one where yearly is the default selection, one with the testimonial replaced by a screenshot mockup. Render all three and show me side-by-side.

Agent chains create-paywall-ai three times with variant briefs → renders all three → shows you the grid.

When the paywall’s right, wire your app’s SDK to fetch it via RC’s Purchases.getOfferings(). Nothing else to configure — the paywall lives inside RC, references your products, which reference your gplay-created Play subscriptions. Every layer is real.

Before you ship, double-check the plumbing:

Terminal window
# 1. Play-side products actually exist and are active
gplay subscriptions get --package com.example.app --product-id pro

Prompt the agent:

Look up the RC customer for a sandbox test user, verify they can see the “default” offering with both packages, and that $rc_monthly price matches Google Play US ($9.99).

RC MCP get-customerlist-purchases → cross-reference with gplay baseplans prices list --region US.

If Play says $9.99 and RC says $9.99, you’re wired end-to-end.

Marketing iteration. “Try a version with a countdown timer and social proof.” Fifteen seconds prompt to rendered variant. No designer round-trip.

Localized paywalls. “Generate the paywall in Japanese, French, and German using the Play Console’s localized offer names as the source of truth.” RC MCP creates variants; the agent pulls localized names via gplay offers locales list.

A/B test scaffolding. “Set up an experiment: 50% of new users get the current paywall, 50% get the countdown variant. Run for 2 weeks.” RC MCP list-experiments → create → assign traffic. Two weeks later, get-experiment-results and the agent summarizes.

Compliance rerender. “The Play Console policy team requires we show the auto-renew disclosure above the fold. Update every paywall in the account and re-render.” Loop of list-paywallsedit-paywall-airender-paywall-screenshot.

Fastlane, gradle-play-publisher, hand-coded paywall builders

Section titled “Fastlane, gradle-play-publisher, hand-coded paywall builders”

Not part of this workflow. Fastlane and gradle-play-publisher don’t touch monetization at all. Hand-coded paywalls (SwiftUI/Jetpack Compose views maintained in your app repo) mean every copy change is a code change, a build, a release. RC’s paywall system + gplay-created products means paywall changes are remote-configured, and product changes are one gplay command.

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

Set up the RevenueCat MCP with your RC secret key. Install the IAP setup skill:

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

Then prompt your agent to launch a subscription and paywall in one go. Full subscription reference at /reference/subscriptions/, offers at /reference/offers/, base plans at /reference/baseplans/.