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 two-tool workflow
Section titled “The two-tool workflow”The pattern:
- gplay creates the Google Play subscription, base plans, offers, and per-country prices.
- RevenueCat MCP registers those products, wraps them in an entitlement and offering, and generates a paywall referencing them.
- RevenueCat MCP renders a screenshot for review.
- 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”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.appgplay 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.appgplay 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 proThe 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.appand generate a paywall.Products to register (Google Play):
pro:monthly(subscriptionpro, base planmonthly) andpro:yearly(subscriptionpro, base planyearly).Create a “Pro” entitlement, attach both products. Create a “default” offering with
$rc_monthlyand$rc_annualpackages.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.
Step 3 — what the agent does
Section titled “Step 3 — what the agent does”Chains of tool calls, roughly:
- RC MCP
create-product-in-store× 2 (monthly and yearly). - RC MCP
create-entitlement“Pro”. - RC MCP
attach-products-to-entitlement. - RC MCP
create-offering“default”. - RC MCP
create-packages($rc_monthly,$rc_annual). - RC MCP
attach-products-to-package. cat README.md→ extract feature list.- RC MCP
list-paywalls→ find “starter” →get-paywallfor style reference. - RC MCP
create-paywall-aiwith the assembled brief → returns task ID. - RC MCP poll
get-paywall-ai-task→ wait ~30s. - RC MCP
render-paywall-screenshot→ PNG saved to./paywalls/pro-launch.png.
You get back the screenshot. You look at it.
Step 4 — iterate
Section titled “Step 4 — iterate”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.
Step 5 — ship it
Section titled “Step 5 — ship it”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.
Verification
Section titled “Verification”Before you ship, double-check the plumbing:
# 1. Play-side products actually exist and are activegplay subscriptions get --package com.example.app --product-id proPrompt 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_monthlyprice matches Google Play US ($9.99).
RC MCP get-customer → list-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.
Where this saves the most time
Section titled “Where this saves the most time”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-paywalls → edit-paywall-ai → render-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.
Getting started
Section titled “Getting started”brew install tamtom/tap/gplaygplay setup --autoSet up the RevenueCat MCP with your RC secret key. Install the IAP setup skill:
npx skills add tamtom/gplay-cli-skillsThen 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/.