Mobile App with RevenueCat

Grant entitlements in your mobile app using RevenueCat after a web funnel purchase through Stripe or Paddle.

The Problem

You have a mobile app that uses RevenueCat to manage subscriptions and entitlements. You want to acquire users through a Zellify web funnel — run them through a quiz or onboarding, present a paywall, and collect payment via Stripe or Paddle. After the user pays, they need to end up in your app with the correct entitlements already granted.


How It Works

  1. The end-user goes through your Zellify funnel (quiz, onboarding, personalization) and reaches the paywall

  2. They complete checkout via Stripe or Paddle. The payment goes directly to your account. Zellify creates a customer in your payment provider with app_user_id set in metadata

  3. Stripe or Paddle sends a server-to-server webhook to RevenueCat with the transaction details

  4. RevenueCat reads app_user_id from the payment provider's metadata and creates (or updates) a subscriber profile with the correct entitlements

  5. The end-user lands on your success page, which contains a Deep Link Button configured with the app_user_id

  6. The end-user taps the button, is routed to your app (via App Store, Play Store, or directly if already installed), and the app initializes the RevenueCat SDK with the app_user_id from the deeplink

  7. RevenueCat returns the subscriber's entitlements — access is granted


What Zellify Handles

  • Generates a unique app_user_id for every funnel visitor

  • Sets app_user_id on Stripe Customer/Subscription metadata or Paddle Customer/Transaction custom data at checkout

  • Optionally pre-creates a RevenueCat customer profile with email and funnel metadata (if the RevenueCat toggle is enabled)

  • Provides the Deep Link Button component on the success page, which interpolates app_user_id into the deeplink URL


What You Need to Set Up

1. Connect RevenueCat to your payment provider

This is the required step that makes entitlement granting work. RevenueCat needs to receive transaction events directly from Stripe or Paddle.

If you use Stripe:

  • Connect your Stripe account to RevenueCat

  • Configure server-to-server notifications (add RevenueCat's webhook endpoint in Stripe)

  • Enable "Track new purchases from server-to-server notifications"

  • Enable app_user_id detection from Stripe metadata

  • Map your Stripe products to RevenueCat entitlements

Follow the full setup: RevenueCat: Stripe Integrationarrow-up-right

If you use Paddle:

  • Connect your Paddle account to RevenueCat

  • Configure server-to-server notifications

  • Enable "Track new purchases from server-to-server notifications"

  • Enable app_user_id detection from Paddle custom data

  • Map your Paddle products to RevenueCat entitlements

Follow the full setup: RevenueCat: Paddle Integrationarrow-up-right

For more details on Zellify's side of the RevenueCat configuration, see RevenueCat Integration.

This is optional but recommended. When enabled, Zellify calls the RevenueCat API at checkout to pre-create a customer profile with:

  • app_user_id (the same one set on Stripe/Paddle)

  • Email address

  • Funnel, campaign, and experiment metadata

This is valuable because the automatic server-to-server integration between Stripe/Paddle and RevenueCat does not carry the email address. By enabling this toggle, the email is available on the RevenueCat subscriber profile, giving you a second way to identify the user beyond app_user_id.

To enable:

  1. Go to Dashboard → Settings → Integrations (https://dash.zellify.app/settings?tab=integrationsarrow-up-right)

  2. Locate RevenueCat and toggle it on

  3. Enter your RevenueCat REST API Key (starts with sk_)

Add a Deep Link Button component to the page that appears after your paywall. In the component's configuration panel, set the URL to your deeplink scheme and enable app_user_id interpolation.

The button URL should route users to your mobile app. If you use a deferred deeplink provider (Adjust, AppsFlyer, Branch, etc.), configure the URL according to that provider's format. The app_user_id parameter will be interpolated into the URL automatically.

4. Initialize RevenueCat with app_user_id in your app

When your app opens from the deeplink, extract the app_user_id parameter and use it to configure the RevenueCat SDK. This tells RevenueCat which subscriber profile to load, and the entitlements granted from the web purchase will be immediately available.

Refer to RevenueCat's SDK documentation for how to configure a custom App User ID:


The Linking Key

The entire flow depends on app_user_id appearing in three places:

  1. Stripe/Paddle metadata — set by Zellify at checkout, read by RevenueCat via server-to-server webhook

  2. Deep Link Button URL — interpolated by Zellify on the success page, carried into your app

  3. RevenueCat SDK initialization — your app uses it to load the correct subscriber profile

Because the same app_user_id is present in all three systems, the web purchase and the in-app experience are connected without any manual matching.


Last updated