End-to-end RevenueCat integration — sets up the dashboard side via the RevenueCat MCP or the `rc` CLI (project, app, public API key) and installs/configures the Purchases SDK in the app. Use when the user asks to add RevenueCat, hook up RevenueCat, add subscriptions or in-app purchases to an app, integrate Purchases, install the RevenueCat SDK, set up a RevenueCat API key, configure Purchases on launch, or set up a brand new RevenueCat integration on iOS, Android, Kotlin Multiplatform, Flutter, or React Native.
Use this skill when the user wants to add RevenueCat to a project for the first time, or to reconfigure the SDK with a public API key. The skill covers two halves:
rc CLI.Purchases.configure(…) at app entry, and verify the configuration banner in the logs.Once the SDK is configured, settle how the paywall is built (Section 5c) before writing any paywall code.
Walk them in order. Most integrations need both halves, even when the user asks "just install the SDK" — the SDK needs an API key from the dashboard.
If a project + app already exist and the user only wants to wire the SDK into code, jump to Section 3 below. If the user wants to bootstrap a brand new RevenueCat project (apps + products + entitlements + offerings), use the
create-revenuecat-projectskill instead, then come back here for the SDK install.
Available as $ARGUMENTS when invoked as a slash command:
platform (optional): One of ios, android, kmp, flutter, react-native. If omitted, run the detection algorithm in Section 3a.app_identifier (optional): Bundle ID (iOS) or package name (Android). If omitted, read it from the project files (Info.plist, AndroidManifest.xml, app.json, pubspec.yaml).project_name (optional): Name of the RevenueCat project to use. If omitted, list projects (via MCP or rc projects list) and ask the user.Before touching the dashboard, gather the facts:
Info.plist / AndroidManifest.xml / app.json / pubspec.yaml rather than asking.Use whichever surface the user has available: the RevenueCat MCP server or the rc CLI (see the revenuecat-cli skill for CLI discovery and conventions). Both cover the same operations for these steps, and each step below notes the MCP tool and the rc command.
list-projects (MCP) or rc projects list. If multiple, ask the user which one matches this app, or offer to create a new one (create-project / rc projects create).create-revenuecat-project skill, then resume here.project_id for the rest of the steps.list-apps / rc apps list). A test_store app is always present; app_store and play_store apps are present only if the user has finished store-side setup.test_store app is enough to start integrating.create-app (or rc apps create):
type: "app_store", bundle_id from Section 1.type: "play_store", package_name from Section 1.name derived from the identifier or asked from the user.list-public-api-keys (MCP) or rc apps keys <app-id>:
app_store / play_store if the store-side app exists.test_store app.appl_…, Android keys goog_…, Amazon amzn_….Never use the secret API key in client code. Secret keys are server-side only.
Inspect the working directory and pick the first match, from top to bottom:
package.json has a react-native-purchases entry, or react-native as a dependency → read platforms/react-native.md. If expo is also a dependency, note it as an Expo project.pubspec.yaml exists at the project root → read platforms/flutter.md.build.gradle.kts contains a kotlin { … } multiplatform source sets block, or depends on com.revenuecat.purchases:purchases-kmp* → read platforms/kmp.md.build.gradle(.kts) applies com.android.application (and is not KMP) → read platforms/android.md.Package.swift, *.xcodeproj, *.xcworkspace, or Podfile at the project root → read platforms/ios.md.If several match (e.g. an ios/ folder inside a Flutter project), pick the outermost project, the one that owns the build. If still ambiguous, ask the user which platform they want to configure.
appl_… key, Android apps use a goog_… key (Amazon uses amzn_…). Server-side secret keys must never appear in client apps.Purchases.configure(…) exactly once, as early as possible (app entry point). Later calls no-op or warn.appUserID, RevenueCat creates a stable anonymous ID. Only pass appUserID if you already have an authenticated user at launch; otherwise call logIn(…) later (see the revenuecat-identify-user skill)..env (RN), xcconfig (iOS), local.properties / gradle.properties (Android), or dart-define (Flutter) when the user asks about secret management.Read the platform file that matches detection:
platforms/ios.mdplatforms/android.mdplatforms/kmp.mdplatforms/flutter.mdplatforms/react-native.mdEach platform file is self-contained: install command, exact configure snippet, and where to place it in the app entry point.
Do not claim setup is complete until:
./gradlew assembleDebug, flutter run, npx react-native run-ios, or the KMP equivalent).If the user only asked to "install" without running the app, tell them what to look for in the logs when they do run it.
Check whether products, entitlements, and offerings are already set up in the project. If not, offer to help via the create-revenuecat-project skill.
iOS (App Store Connect)
.p8 file. Note the Key ID and Issuer ID.create-app / update-app.Android (Google Play Console)
create-app / update-app.The app still needs a paywall, and there are two ways to build one. This is a product decision, not an implementation detail, so settle it before writing any paywall code.
revenuecat-paywall-design skill and follow its creating workflow (create-paywall-ai via MCP or rc paywalls generate via CLI, attached to the current offering and informed by the app's codebase), then present it with revenuecat-paywall. The user does not have to design anything in the dashboard; they can refine it later in the paywall builder. Design, copy, and packages change without an app release, and paywall variants can be A/B tested with RevenueCat Experiments.getOfferings() and the purchase handled by revenuecat-purchase-flow. Full visual control, but every design change ships in an app release and the paywall design cannot be A/B tested. Price and offering tests still work, because packages come from the offering.Pick the path:
If you can ask the user, ask one question with both options, the recommended one first, each with a one-line trade-off. If you cannot ask (for example, you are running non-interactively), do not stop: take the recommendation above, and in your summary say which path you took and how to switch to the other.
Do not hand-code a paywall screen by default just because it keeps the work in code. A new RevenueCat Paywall is an unpublished draft: tell the user to review it in the paywall builder, and publish it only when they ask, because the app renders the default fallback layout until a paywall is published and attached to the offering.
Common follow-ups after integrate-revenuecat:
revenuecat-paywall-design — create or edit the dashboard paywall.revenuecat-paywall — display a dashboard-configured paywall.revenuecat-purchase-flow — implement purchase + restore for a custom paywall.revenuecat-entitlements-gate — gate features behind active entitlements.revenuecat-identify-user — wire logIn / logOut to the app's auth system.revenuecat-testing-setup — set up a sandbox testing channel.revenuecat-troubleshoot — diagnose offerings / products / entitlement bugs.RevenueCat/ai-toolkit
4b3b463
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.