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:
- Add RevenueCat's webhook endpoint in Stripe Dashboard → Developers → Webhooks.
- In RevenueCat, enable Track new purchases from server-to-server notifications.
- Set the App User ID detection method to read from the Stripe Customer metadata field named
app_user_id. - Map your Stripe products to RevenueCat entitlements.
app_user_id is broken.Connect RevenueCat to Paddle#
Same flow:
- In RevenueCat, create a Paddle configuration and enter your Paddle API key.
- Apply RevenueCat's webhook configuration in your Paddle account.
- Enable Track new purchases from server-to-server notifications.
- Set the App User ID detection method to read from
custom_data.app_user_id. - Map your Paddle products to RevenueCat entitlements.
Enable Zellify enrichment#
- Open Zellify Dashboard → Settings → Integrations.
- Locate RevenueCat.
- Toggle it on.
- Paste your RevenueCat REST API Key (starts with
sk_). - Save.
Once enabled, Zellify attaches the following subscriber attributes on the RevenueCat profile when the funnel registers the user:
emailfunnel_idcampaign_idexperiment_idorganization_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#
- Run a test funnel payment end to end.
- Confirm the subscriber in RevenueCat → Subscribers appears with App User ID equal to the funnel
app_user_id. - If enrichment is on, confirm attributes (email, funnel id) on the subscriber.
Troubleshooting#
| Symptom | Likely cause | Fix |
|---|---|---|
| RevenueCat subscribers under random IDs | App User ID detection method not set | Set it to read from Stripe metadata.app_user_id or Paddle custom_data.app_user_id |
| Enrichment attributes missing | Zellify toggle off or key wrong | Re-check the RevenueCat secret API key in Zellify |