Migration from RevenueCat
Your migration plan will have 5 logical steps and take an average of 2 hours. 90% of all migrations take less than one working day.
- Learn the core differences; create and prepare an Adapty account (5 minutes);
- Install Adapty SDK for your platform (iOS, Android, React Native, Flutter, Unity) instead of RevenueCat SDK (1 hour);
- Set up Apple App Store server notifications to Adapty and (optionally) raw events forwarding (5 minutes);
- Test and release updates of your app (30 minutes);
- (Optional) Ask RevenueCat support for historical data in CSV format (5 minutes);
- (Optional) Import historical data via Adapty support (30 minutes).
Your subscribers will migrate automatically
All users who have ever activated a subscription will instantly move to Adapty as soon as they open a new version of your app with Adapty SDK. The subscription status validation and premium access will be restored automatically.
Before you push a new version of your app with Adapty SDK, make sure to check our release сhecklist.
Learn the core differences; create and prepare an Adapty account
Adapty and RevenueCat SDKs are similarly designed. The biggest difference is the network usage and the speed: Adapty SDK is designed to provide you with information on demand as fast as possible when you ask for it. For example, when requesting a paywall, you get the remote config first to pre-build your onboarding or paywall and then request products in a dedicated request.
Naming is slightly different:
RevenueCat | Adapty |
---|---|
Package | Product |
Offering | Paywall |
Paywall | Paywall Builder |
Entitlement | Access level |
Adapty has a concept of placement. It's a logical place inside your app where the user can make a purchase. In most cases, you have one or two placements:
- Onboarding (because 80% of all purchases take place there);
- General (you show it in settings or inside the app after the onboarding).

Install Adapty SDK and replace RevenueCat SDK
Install Adapty SDK for your platform (iOS, Android, React Native, Flutter, Unity) in your app.
You need to replace a couple of SDK methods on the app side. Let's look at the most common functions and how to replace them with Adapty SDK.
SDK activation
Replace Purchases.configure
with Adapty.activate
.
Getting paywalls (offerings)
Replace Purchases.shared.getOfferings
with Adapty.getPaywall
.
In Adapty, you always request the paywall via placement id. In practice, you only fetch no more than 1-2 paywalls, so we made this on purpose to speed up the SDK and reduce network usage.
Getting a user (customer profile)
Replace Purchases.shared.getCustomerInfo
with Adapty.getProfile
.
Getting products
In RevenueCat, you use the following structure:Purchases.shared.getOfferings
and then self.offering?.availablePackages
.
In Adapty, you first request a paywall (read above) to get immediate access to Adapty's remote config and then call for products with Adapty.getPaywallProducts
.
Making a purchase
Replace Purchases.shared.purchase
with Adapty.makePurchase
.
Checking access level (entitlement)
Get a customer profile (read above first) and then replace
customerInfo?.entitlements["premium"]?.isActive == true
with
profile.accessLevels["premium"]?.isActive == true
.
Restore purchase
Replace Purchases.shared.restorePurchases
with Adapty.restorePurchases
.
Check if the user is logged in
Replace Purchases.shared.isAnonymous
with if profile.customerUserId == nil
.
Log in user
Replace Purchases.shared.logIn
with Adapty.identify
.
Log out user
Replace Purchases.shared.logOut
with Adapty.logout
.
Switch App Store server-side notifications to Adapty
Read how to do this here.
Test and release a new version of your app
If you're reading this, you've already:
- Configured Adapty Dashboard
- Installed Adapty SDK
- Replaced SDK logic with Adapty functions
- Switched App Store server-side notifications to Adapty and optionally turn on raw events forwarding to RevenueCat
- Made a sandbox purchase
- Made a new app release
If you checked the points above, just make a test purchase in the Sandbox and then release the app.
Go through release checklist.
Make the final check using our list to validate the existing integration or add additional features such as attribution or analytics integrations.
(Optional) Export your RevenueCat historical data in CSV format
Don't rush the historical data import
You should wait for at least a week after the release with the SDK before doing historical data import. During that time we will get all the info about purchase prices from the SDK, so the data you import will be more relevant.
Export your historical data from RevenueCat in CSV format by following the instructions in RevenueCat’s official documentation.
(Optional) Ask RevenueCat support for Google Purchase Tokens
If you need to import Google Play transactions, contact RevenueCat support for a CSV file containing Google Purchase Tokens via their support page. The Google Purchase Token is a unique identifier provided by Google Play for each transaction, essential for accurately tracking and verifying purchases in Adapty. This information is not included in the standard export file. The file contains the following three columns:
user_id
google_purchase_token
google_product_id
Write us to import your historical data
Contact us via the website messenger or email us at [email protected] with your CSV files.
- Send the CSV file you exported from RevenueCat directly to our support team.
- If importing Google Play transactions, include the CSV file with Google Purchase Tokens that you received from RevenueCat support.
- Let us know which user ID should be used as the Customer User ID (Adapty’s primary user identifier):
rc_original_app_user_id
orrc_last_seen_app_user_id_alias
.
Our Support Team will import your transactions to Adapty. The following data will imported to Adapty for every transaction:
Parameter | Description |
---|---|
user_id | Customer User ID, the main identifier of your user in Adapty and your system. |
apple_original_transaction_id | For subscription chains, this is the original transaction's purchase date, linked by store_original_transaction_id . |
google_product_id | The product ID in the Google Play Store. |
google_purchase_token | A unique identifier provided by Google Play for each transaction, required for validation. |
country | The country of the user. |
created_at | The date and time of the user creation. |
subscription_expiration_date | The date and time when the subscription expires. |
The end user's email. | |
phone_number | The end user's phone number. |
idfa | The Identifier for Advertisers (IDFA), assigned by Apple to a user's device. |
idfv | The Identifier for Vendors (IDFV), a code assigned to all apps by one developer and shared across those apps on a device. |
advertising_id | A unique identifier provided by the Android OS that advertisers may use for tracking. |
attribution_channel | The marketing channel name. |
attribution_campaign | The marketing campaign name. |
attribution_ad_group | The attribution ad group. |
attribution_ad_set | The attribution ad set. |
attribution_creative | The attribution creative keyword. |
In addition, integration identifiers for the following integrations will be imported: Amplitude, Mixpanel, AppsFlyer, Adjust, and FacebookAds.