App-to-web purchases
Read more about app-to-web purchases in our blog post announcement. This feature was previously referred to as the Web Purchase Button.
RevenueCat paywalls allow you to modify a purchase button to complete a purchase on the web. You can use RevenueCat Web purchase flows backed by RevenueCat Billing, Stripe Billing, or Paddle, or provide a URL to your own custom web checkout flow.
App-to-web purchases are currently available in some regions, depending on App Store and Play Store guidelines. They may also require registering for a specific App Store or Play Store program first. See our app-to-web purchase guidelines for current availability and requirements. SDKs that do not support web purchases will default to the standard checkout flow in the app that the paywall is being viewed on. To serve different paywalls in different countries or across different platforms, we recommend using Targeting.
Enable web purchases on a purchase button
To get started, select a purchase button in the paywall editor. Purchase buttons have an Open option that allows you to select the type of checkout flow to start.
Importantly, the Open option only controls which checkout flow to prioritize if a selected package has both an app product and a web product. If a selected package only has either an app or a web product, the purchase button will start the standard checkout flow regardless of the Open option selected.
Even if you're only looking to direct customers to a web checkout flow, the packages on your paywall must include products for the app that the paywall is being viewed on in order to be displayed properly.
Purchase button options
All three web modes below require the selected package to have both an app product and a web product. If it has only one, the purchase button starts the standard checkout flow instead.
| Option | Behavior description |
|---|---|
| Standard checkout | Starts the standard checkout flow for the platform the paywall is being viewed on (in-app or web). |
| Web checkout (browser) | Opens a web checkout for the selected package using the device's browser. |
| Web paywall | Opens your web paywall in the device's browser, allowing customers to choose the web product to purchase. Use this when you want to offer product selection on the web, rather than in the app. |
| Custom checkout | Opens your custom checkout URL, appending the selected package ID, App User ID, and environment as URL parameters when enabled. |
If you're using a web or custom checkout flow, we recommend hardcoding the web product details such as its price, duration, or introductory offer instead of using variables. This is because variables will always reflect the app product details, which may differ from the web product you're offering. If they don't, you can safely use variables, but as you experiment with prices and offers please keep this in mind.
Custom purchase parameters
When using your own custom checkout flow, you'll have the option of passing the following parameters in the URL:
- Package - The selected package ID, appended as
rc_package - App User ID - The RevenueCat app user ID, appended as
rc_app_user_id - Environment - Whether the paywall is being viewed in a sandbox or production environment, appended as
rc_env
In addition, custom purchase buttons can be set to open a URL via external browser, or via deep link if your app is set up to do additional processing before opening the URL.
Paywall behavior
When a user taps a purchase button that directs them to a web browser to complete the checkout flow, the RevenueCat SDK will automatically invalidate the cached customer info so that new info is fetched from the server when the user returns to the app. You can additionally choose whether to have the app paywall be dismissed when the user returns to the app, or whether to keep the paywall open, using the Auto dismiss setting on your paywall.
Supported SDK versions
App Store
| RevenueCat SDK | Required SDK version |
|---|---|
| purchases-ios | 5.24.0 and up |
| react-native-purchases | 8.10.1 and up |
| purchases-flutter | 8.8.1 and up |
| purchases-kmp | 1.7.8+13.32.0 and up |
| purchases-capacitor | 10.3.3 and up |
| purchases-unity | 8.4.0 and up |
Play Store
| RevenueCat SDK | Required SDK version |
|---|---|
| purchases-android | 9.12.0 and up |
| react-native-purchases | 9.6.1 and up |
| purchases-flutter | 9.9.1 and up |
| purchases-kmp | 2.2.4+17.2.0 and up |
| purchases-capacitor | 11.2.9 and up |
| purchases-unity | 8.4.1 and up |
Older, unsupported SDK versions will default to the standard checkout flow when a purchase button is tapped.
Legacy option on the Button component
This legacy option lives on the separate Button component, and is unrelated to the Open modes on the purchase button described above.
When the US court ruling was first announced to allow web checkout flows in-app in the App Store, we released an option on the Button component to navigate to a Web purchase flow. This is still supported, but not recommended for new paywalls, since it does not support navigating directly to the checkout experience for a selected package. However, if you're already using this option, or would like to, you may continue to do so on the following supported SDK versions.
| RevenueCat SDK | Version required for the legacy Web purchase option |
|---|---|
| purchases-ios | 5.22.2 and up |
| react-native-purchases | 8.9.6 and up |
| purchases-flutter | 8.7.5 and up |
| purchases-kmp | 1.7.7+13.29.1 and up |
| Other SDKs | Not supported |
Considerations
For more information about support for external web purchases, see FAQs.