Skip to main content

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.

  1. Learn the core differences; create and prepare an Adapty account (5 minutes);
  2. Install Adapty SDK for your platform (iOS, Android, React Native, Flutter, Unity) instead of RevenueCat SDK (1 hour);
  3. Set up Apple App Store server notifications to Adapty and (optionally) raw events forwarding (5 minutes);
  4. Test and release updates of your app (30 minutes);
  5. (Optional) Ask RevenueCat support for historical data in CSV format (5 minutes);
  6. (Optional) Import historical data via Adapty support (30 minutes).
info

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:

RevenueCatAdapty
PackageProduct
OfferingPaywall
PaywallPaywall Builder
EntitlementAccess 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.

info

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

warning

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.

  1. Send the CSV file you exported from RevenueCat directly to our support team.
  2. If importing Google Play transactions, include the CSV file with Google Purchase Tokens that you received from RevenueCat support.
  3. Let us know which user ID should be used as the Customer User ID (Adapty’s primary user identifier): rc_original_app_user_id or rc_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:

ParameterDescription
user_idCustomer User ID, the main identifier of your user in Adapty and your system.
apple_original_transaction_idFor subscription chains, this is the original transaction's purchase date, linked by store_original_transaction_id.
google_product_idThe product ID in the Google Play Store.
google_purchase_tokenA unique identifier provided by Google Play for each transaction, required for validation.
countryThe country of the user.
created_atThe date and time of the user creation.
subscription_expiration_dateThe date and time when the subscription expires.
emailThe end user's email.
phone_numberThe end user's phone number.
idfaThe Identifier for Advertisers (IDFA), assigned by Apple to a user's device.
idfvThe Identifier for Vendors (IDFV), a code assigned to all apps by one developer and shared across those apps on a device.
advertising_idA unique identifier provided by the Android OS that advertisers may use for tracking.
attribution_channelThe marketing channel name.
attribution_campaignThe marketing campaign name.
attribution_ad_groupThe attribution ad group.
attribution_ad_setThe attribution ad set.
attribution_creativeThe attribution creative keyword.

In addition, integration identifiers for the following integrations will be imported: Amplitude, Mixpanel, AppsFlyer, Adjust, and FacebookAds.

FAQ

I successfully installed Adapty SDK and released a new app version with it. What will happen to my legacy subscribers who did not update to a version with Adapty SDK?

Most users charge their phones overnight, it's when the App Store usually auto-updates all their apps, so it shouldn't be a problem. There may still be a small number of paid subscribers who did not upgrade, but they will still have access to the premium content. You don't need to worry about it and force them to update.

Do I need to export my historical data from RevenueCat as quickly as possible, or will I lose it?

You don't need to make it super fast; make a release with Adapty SDK first, and then give us your historical data. We will restore the history of your users' payments and fill in profiles and charts.

I use MMP (AppsFlyer, Adjust, etc.) and analytics (Mixpanel, Amplitude, etc.). How do I make sure that everything will work?

You first need to pass us the IDs of such 3rd party services via our SDK that you want us to send data to. Read the guide for attribution integration and for analytics integration. For historical data and legacy users, make sure you pass us those IDs from the data you exported from RevenueCat.