RevenueCat

For teams using RevenueCat as the single source of truth for subscription state. You'll have RevenueCat subscribers tied to funnel sessions via app_user_id, optionally enriched with email and funnel metadata. You need a RevenueCat project and a payment provider connected to both Zellify and RevenueCat.

Two parts#

This integration has two distinct parts. Only the first is required for entitlements to work; the second adds Zellify context to the RevenueCat subscriber profile.

Part 1 (required): connect RevenueCat to your payment provider#

This is done entirely in RevenueCat, not Zellify. RevenueCat receives Stripe or Paddle events directly via server-to-server webhooks and creates subscribers based on payment events. Zellify does not send purchase data to RevenueCat — that path goes payment provider → RevenueCat directly. Zellify's role is to stamp app_user_id into Stripe Customer/Subscription metadata and Paddle Customer/Transaction custom_data on every checkout, so RevenueCat creates the subscriber under the same id you use everywhere else.

This is sufficient for RevenueCat to know a user is paid.

Part 2 (optional): Zellify enrichment#

When enabled, Zellify pushes funnel and campaign attributes onto the RevenueCat subscriber profile so you can segment inside RevenueCat on funnel, campaign, experiment, or organization.

Connect RevenueCat to Stripe#

In RevenueCat, open your project → Apps & Providers and add your Stripe account, then:

  1. Add RevenueCat's webhook endpoint in Stripe Dashboard → Developers → Webhooks.
  2. In RevenueCat, enable Track new purchases from server-to-server notifications.
  3. Set the App User ID detection method to read from the Stripe Customer metadata field named app_user_id.
  4. Map your Stripe products to RevenueCat entitlements.
App User ID detection method: Without step 3, RevenueCat creates subscribers under its own generated ids and the link to Zellify's app_user_id is broken.

Connect RevenueCat to Paddle#

Same flow:

  1. In RevenueCat, create a Paddle configuration and enter your Paddle API key.
  2. Apply RevenueCat's webhook configuration in your Paddle account.
  3. Enable Track new purchases from server-to-server notifications.
  4. Set the App User ID detection method to read from custom_data.app_user_id.
  5. Map your Paddle products to RevenueCat entitlements.

Enable Zellify enrichment#

  1. Open Zellify Dashboard → Settings → Integrations.
  2. Locate RevenueCat.
  3. Toggle it on.
  4. Paste your RevenueCat REST API Key (starts with sk_).
  5. Save.

Once enabled, Zellify attaches the following subscriber attributes on the RevenueCat profile when the funnel registers the user:

  • email
  • funnel_id
  • campaign_id
  • experiment_id
  • organization_id

Where to find the REST API Key#

In RevenueCat, open Project Settings → API Keys and copy the REST API Key (the one prefixed with sk_). Public SDK keys won't work for enrichment — Zellify writes to subscriber profiles via the REST API.

When you need this#

  • Entitlement in your app depends only on the payment event: skip enrichment.
  • You want to segment RevenueCat audiences by funnel or campaign: enable enrichment.
  • You already initialize RevenueCat in your app with a different user id: enrichment alone does not fix this; you must set the detection method correctly.

Test and verify#

  1. Run a test funnel payment end to end.
  2. Confirm the subscriber in RevenueCat → Subscribers appears with App User ID equal to the funnel app_user_id.
  3. If enrichment is on, confirm attributes (email, funnel id) on the subscriber.

Troubleshooting#

SymptomLikely causeFix
RevenueCat subscribers under random IDsApp User ID detection method not setSet it to read from Stripe metadata.app_user_id or Paddle custom_data.app_user_id
Enrichment attributes missingZellify toggle off or key wrongRe-check the RevenueCat secret API key in Zellify
Mobile app with RevenueCat
End-to-end recipe.
app_user_id
The identifier RevenueCat reads.
Stripe
Metadata reference.
Paddle
custom_data reference.