Documentation
Set up RevenueCat
RevenueCat handles subscriptions. You still need to set up the products, entitlements, and testing. This guide walks through it without jargon.
The simple mental model
Good to know
Products → What users buy (monthly, yearly)
Entitlements → What your app unlocks (pro access)
Offerings → What your paywall displays (monthly vs yearly)
Apple and Google own the actual payments. RevenueCat reads store data, tells your app what the user can access, and syncs purchase history.
Create store products
Start in App Store Connect and Google Play Console. Create your subscription products before touching RevenueCat. Use boring, stable IDs.
text
1pro_monthly2pro_yearlyTip
pro_ prefix). This makes your code and team communications easier.What to verify in the store
- ✓Subscription products are active and priced.
- ✓The app bundle ID or package name is correct.
- ✓App Store agreements and tax/banking are complete.
- ✓Sandbox testers are added (Apple) or license testing is enabled (Google).
Import into RevenueCat
In RevenueCat, go to your project and connect your iOS and Android apps. Then import the products. If products do not appear:
- →Double-check bundle ID and package name
- →Wait 15 minutes after store changes — RevenueCat caches product data
- →Make sure the store product is in an active state
Create the entitlement
An entitlement represents "access to premium." The kit examples use pro. Attach every paid product that should unlock premium features to this entitlement.
text
1entitlement id: proGood to know
Create the offering
An offering is what your paywall shows. Create "default", mark it as current, and add the packages (monthly, yearly, etc.) to it.
text
1offering: default2packages: monthly, yearly3unlocks entitlement: proPaywallReady loads the current offering automatically. Changing the current offering in RevenueCat updates what your paywall displays without any code changes.
Add the SDK keys
RevenueCat gives you a public SDK key per platform. These are safe to put in your app — they are public by design.
.env
1EXPO_PUBLIC_REVENUECAT_IOS_API_KEY=appl_xxxxxxxx2EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY=goog_xxxxxxxx3EXPO_PUBLIC_REVENUECAT_ENTITLEMENT_ID=proWatch out
Test with a development build
Expo Go does not include the RevenueCat native module. You must use a development build or TestFlight. This is the #1 reason new users see their paywall not working.
bash
1npx expo run:ios2 3# or with EAS:4eas build --profile development --platform iosSandbox testing checklist
- ✓Paywall shows real prices, not placeholder text.
- ✓Sandbox purchase completes without crashing.
- ✓RevenueCat dashboard shows the purchase event.
- ✓The
proentitlement is active after purchase. - ✓Restore purchases works after reinstalling the app.
- ✓Premium status is still correct after restarting the app.
Common mistakes
Paywall loads but prices are missing
Check the offering status and store product configuration. RevenueCat might not have synced the products yet.
Purchase starts but fails
Verify sandbox account setup (Apple) or license testing (Google). Ensure the app is running in a development build, not Expo Go.
Purchase succeeds but premium stays locked
Check that the product is attached to the pro entitlement in RevenueCat. Also check that your app is checking the entitlement, not the product ID.