Get help with webhooks, third-party integrations, and attribution providers.
Recently active
Hi everyone,We are currently setting up a RevenueCat Web Funnel using the pre-built template, with Paddle as the payment provider.Our planned setup is:Meta / Google Ads → RevenueCat Web Funnel → Paddle → PurchaseWe already use Adjust and are sending purchase events via S2S.What we are trying to figure out is how to attribute these web purchases to the original Meta/Google campaigns in Adjust.The main questions are:How can we capture the campaign information from Meta/Google when the user lands on the RevenueCat Web Funnel? Can we use UTM parameters / campaign IDs with the pre-built Funnel? Since the RevenueCat-hosted Funnel does not seem to use the Adjust Web SDK, how can we generate or pass an Adjust ID ($adjustId) for the web user? What is the recommended way to connect the Paddle purchase → Adjust → original campaign?Has anyone implemented a similar RevenueCat Web Funnel + Paddle + Adjust + Meta/Google Ads setup?Would really appreciate any guidance or examples of the recommended imp
Hi,I’ve set up an integration with Meta Ads a few days ago using the Conversions API.I can see a few events coming from “Server” in Events Manager, but only for the events shown in the screenshot. I don’t see any fb_mobile_purchase events. Is that expected?I’ve already had 10+ purchases with this event, and I can see that the event was sent to Meta in the customer profile. How does this work exactly?Also, for the events that do appear in Events Manager, I see significantly fewer events in Meta than were actually sent. Is that normal? Is there anything I can do to improve event matching/delivery and provide Meta with more data?Thanks in advance!
We use RevenueCat and Adjust together, but their cohorting logic is different.1. User count mismatch:Adjust counts each reinstall as a new install, while RevenueCat keeps the user tied to their original first_seen_time. So Adjust can show significantly more users in the short term.What is the recommended way to reconcile these two systems and make user counts comparable?2. Delayed conversions:We cohort users based on first_seen_time. However, a user may not start a trial or pay during their original cohort and then return months later and become a paid user. In this case, looking only at the first_seen cohort can make us miss when the actual conversion happened.Would it be better to keep first_seen as the acquisition cohort but create a separate conversion cohort based on the first trial/paid event? How do you usually handle this?
Project: c3502b62 App: PartagePourboire (Stripe Live), app03dec2277b Stripe account: acct_1UJV0pDP4Gr8JUhn (Live, card_payments active, no pending requirements) Flutter web (purchases_flutter 9.16.1) configures fine with the app's public key and the paywall shows my two Live products (monthly price_1UKe7HDP4Gr8JUhns0Ln15Hk, yearly price_1UKe7HDP4Gr8JUhnnvLDX2vY), both Published. When starting a purchase, POST https://api.revenuecat.com/rcbilling/v1/checkout/start returns 422: {"code": 8142, "message": "Stripe account setup error: Stripe rejected the checkout session configuration."} Stripe Managed Payments is not enabled. Stripe Business details, public details, Checkout settings and Tax settings show no warnings. No POST /v1/checkout/sessions appears in my Stripe logs. What does error 8142 mean here, and which Stripe setting is being rejected?
Hello, Flutter web, purchases_flutter 9.16.1, RevenueCat Billing. The browser language is French (navigator.language) and the checkout page is displayed in French, but all customer emails (subscription confirmation and the "Manage your subscription" portal email) are in English. Docs say lifecycle email bodies use the locale selected for the purchase. Is the portal email localized at all? Is there a dashboard setting for email language?
Hi there,I am trying to consolidate all my mcps into cloudflare MCP portal however when I use the oauth flow it fails with revenue cat. The secondary method is to use an api key but for the life of me I cannot find how to get an acount level api key, i can only make project level api keys.
The context:This was a question previously asked which RevCat never officially answered. I came across this problem myself and solved it, wanted to share the answer, but RevCat also prevented anyone from replying in that thread so I’m sharing it here in the hopes that it might help someone in the future.The Problem:So the problem is that Revenue Cat tells you to get Dataset ID and Conversion API Token. You go to Meta Events Manager as instructed. If you had previously set up your app with meta, you’ll see your app listed in Datasets. You click on that, yet there is no Dataset ID (just the meta app id) and no option to create a conversion API token in settings.The Solution:The instructions are missing a step.Go to the automatically created “Dataset” for your app Go to Settings Find the button that says something like “Link data”. Click it. (It might have been connect to dataset or something like that- can’t recall exactly, and can’t go back to double check) It tells you to choose betwee
I'd like to request support for Airwallex as a payment gateway / billing provider for RevenueCat's Web Billing (alongside Stripe and Paddle).Why this matters:Airwallex is widely used in Vietnam and across Southeast Asia, where Stripe availability and local payment method coverage are limited. It offers strong support for local payment methods and multi-currency settlement that are important for our market. Currently, needing Stripe or Paddle is a blocker for teams like ours who already run our web payments through Airwallex.Use case:We sell web subscriptions and want to use RevenueCat's paywalls, customer portal, and cross-platform entitlements — but process payments through our existing Airwallex account.Impact:This would let developers in underserved regions adopt RevenueCat Web Billing without switching payment processors.Thanks for considering!
Hi all 👋I'm building a small open-source CLI for testing RevenueCat webhooks locally. Before I build more of it, I'd rather learn what people actually struggle with than guess. 1. The last time you tested a subscription flow end to end, what did you actually do? a) Sandbox purchases and waited for the store's clock b) StoreKit Configuration file / Play test cards, locally c) RevenueCat Test Store d) Dashboard "send test webhook" + ngrok e) Didn't test it, shipped and watched f) Something else2. What was the last thing about purchases or webhooks that cost you more than an hour? Related (closed) threads:• Webhook local environment testing — https://community.revenuecat.com/third-party-integrations-53/webhook-local-envirement-testing-5082• Is there no way to do local testing with webhooks — https://community.revenuecat.com/dashboard-tools-52/is-there-no-way-to-do-local-testing-with-webhooks-6574• Webhook replay — https://community.revenuecat.com/sdks-51/webhook-replay-7209•
I got the mail from Adam about holding the event of shipathon at my campus and I replied on that mail the same day, but I didn't get any further updates on that. Our campus would be grateful to accept you as the hackathon in our college. Please reply asap.
Google Play recently sent an email announcing the new Review Refund API:“We are excited to share that the Review Refund API is now available to help you take an active role in managing chargebacks. This optional API enables you to share key transaction information with Play — such as item usage.”Does RevenueCat have plans to support integration with this API? If so, is there a timeline for when this functionality will be available?
After a year of running creator/affiliate campaigns for subscription apps on RevenueCat, here is the architecture that actually holds up in production. Posting it as a conversation because the affiliate threads here keep getting auto-closed while the same questions keep coming back.1. Attribution: typed codes as subscriber attributes. Let fans type the creator’s code into the app (a plain text field), then set it as a subscriber attribute before the purchase: Purchases.shared.attribution.setAttributes(["affiliate_code": code]). Typed codes work cross-platform, survive the App Store install gap, and need no deep links or fingerprinting.2. Revenue: webhooks carry the attribute. Point a RevenueCat webhook at your backend — every INITIAL_PURCHASE, RENEWAL and CANCELLATION event arrives with subscriber attributes attached, so each purchase and every renewal credits the right creator. That is the whole trick: RevenueCat already joins the two halves for you.3. Don’t build attribution on Apple
Hey everyone,I’m trying to run Meta paid ads to promote an iOS app, with the primary objective of maximizing for the Start Trial / Subscribe event. I've been struggling with missing signals and could use some advice on the current best practices.Here is what I’ve tried so far: Meta SDK + ATT prompt only: Not working well. I'm seeing way too many missing Free Trial/Subscription signals from the ad campaigns. Meta SDK + RevenueCat + ATT prompt (Pending): RevenueCat does use Meta's CAPI. I am still waiting on Apple App Review to see the outcome of this setup. The Core Dilemma:RevenueCat strongly recommend turning off "Log In-App Events Automatically" to avoid double-counting revenue when sending server-to-server data back to Meta.However, I recently readhttps://www.reddit.com/r/FacebookAds/comments/1mpaecw/implementing_skan_along_side_the_meta_ads/that raised a major concern: If we rely strictly on server-to-server data (RevenueCat to Meta), SKAdNetwork (SKAN) will not be able to get th
Hey everyone,I’m running Meta Ads to drive app installs and recently integrated RevenueCat to handle subscriptions and forward revenue events back to Meta.I am completely stuck on the "iOS 14.5 ATE True Status Rate" in Meta Events Manager - it has been sitting at 0% for a long time, and I know for a fact users are accepting the ATT prompt because my custom att_ok events are logging successfully in Firebase.Here is my timeline and setup: Before RevenueCat: FacebookAutoLogAppEventsEnabled was enabled in my Info.plist. The ATE True Status Rate was 0%. After RevenueCat: FacebookAutoLogAppEventsEnabled is still enabled in my Info.plist. However, following Adapty's docs, I turned OFF "iOS: Log in-app events automatically (Recommended)" in the Meta Developer console to prevent double-counting revenue. The ATE True Status Rate remains at 0%. Here is my current ATT request code:private func requestTrackingPermission() { ATTrackingManager.requestTrackingAuthorization { status in // 1
We're using the firestore-revenuecat-purchases-handler Firebase Extension, and we occasionally (not every time) see an error in Cloud Functions logs when a webhook event fires for a user who hasn't logged in yet (still on their RevenueCat anonymous ID):Error saving user $RCAnonymousID:xxx: Error: There is no user record corresponding to the provided identifier. at setCustomClaims (/workspace/lib/index.js:75:38)It looks like the extension tries to call setCustomUserClaims() using the app_user_id from the event, and when that ID happens to still be an RC anonymous ID ($RCAnonymousID:...) rather than a real Firebase UID, admin.auth() can't find a matching user and throws. Since it's intermittent, my guess is this only happens when a webhook event fires before the user has been identified/logged in with their real Firebase UID.Questions:Is this expected/known behavior, and safe to ignore since the claim will just be set correctly once the same user's event re-fires with their real Fireb
My App Store auto-renewable subscriptions are fully configured in App Store Connect (a monthly and a yearly), and RevenueCat *sandbox environment* clearly has them. The dashboard shows the correct products and "Billing Plan: Upfront" on the yearly. But calling GET /v2/projects/{project_id}/products returns both products with a null subscription block:"store_identifier": "com.myapp.yearly","state": "active","type": "subscription","subscription": { "duration": null, "grace_period_duration": null, "trial_duration": null }Everything else is correct, only subscription fields are null.What I've already confirmed (so this isn't a setup mistake):- App Store Connect API key and In-App Purchase key are connected and show Valid Credentials.- Both subscriptions are Ready to Submit in App Store Connect with their durations set (1 month / 1 year).- I've re-imported the products in RevenueCat.- No purchase has ever been made against these product IDs.I found an older thread suggesting duration only p
Hi RevenueCat team,My app has been integrated with Apple Search Ads (Advanced integration) for months and attribution data was coming through normally. However, for roughly the last 10 days no ASA data is being returned — all traffic is now showing as Organic in Charts, even though I can see conversions clearly coming from Apple Search Ads in the Apple Ads dashboard. No app-side code was changed during this period.This app uses the OAuth ("Sign in with Apple") authentication method, and its Advanced integration appears to have dropped. I already tried re-doing the integration by signing in with Apple again, but data still does not come back.For comparison: another one of my apps still uses the legacy method (Client ID / Team ID / Key ID) and that one is unaffected — ASA data is still flowing normally.Could you please check the server logs for my account to see whether RevenueCat is hitting an auth/token error when fetching attribution from Apple for the affected app? And is there a kno
Hi team,I am trying to understand why RevenueCat completely missed/dropped a successful Stripe payment recapture for a user on May 21st. The event simply does not exist on the RC timeline, even though Stripe successfully charged them.Here is the exact comparison of both timelines:Stripe Payment History: May 7, 1:01 PM: $0.99 (Subscription creation) - Succeeded May 14: Initial $19.99 billing cycle due (Failed) May 18, 8:05 AM: $19.99 (Payment Recaptured) - Succeeded May 21: Initial $19.99 billing cycle due (Failed) May 31, 11:03 PM: $19.99 (Payment Recaptured) - Succeeded May 28: Initial $19.99 billing cycle due (failed) Jun 1, 7:03 AM: $19.99 (Payment Recaptured) - Succeeded RevenueCat Customer Event History: 2026-05-28, 8:01 PM: Renewed subscription ($19.99) (Matches Stripe's May 31/Jun 1 block) 2026-05-21, 9:03 PM: Cancelled due to a billing error 2026-05-21, 9:03 PM: Had a billing issue 2026-05-14, 9:05 PM: Cancelled due to a billing error 2026-05-14, 9:05
Hi, Any update on changing the timestamps you’re sending to Customer.io via the direct integration from ISO to Epoch? I asked in this post before: Customer.io doesn’t run on ISO, they use Epoch. As it stands, this integration isn’t very useful (the most important piece of data that I need in Customerio is the user’s expiration date!).
Hi, we are setting up server-side analytics forwarding and I need to confirm where Apple Search Ads (ASA) attribution is stored after RevenueCat collects it.Context- Our iOS app calls `Purchases.enableAdServicesAttributionTokenCollection()`, so RevenueCat collects the AdServices attribution token.- On our backend we receive RevenueCat webhooks and forward the event payload to our analytics tool. We'd like to rely on the webhook `event.subscriber_attributes` map for per-customer context (we also read the Customer API `attributes`). What I can't find in the docs1. When RevenueCat exchanges the AdServices token, where does the resulting ASA attribution (campaign ID / ad group ID / keyword ID / org ID) get stored on the customer? Is it stored as reserved subscriber attributes? If so, what are the exact attribute names (e.g. `$apple_search_ads_*` or similar)?2. Does this ASA attribution data appear in the **webhook event payload** under `subscriber_attributes`? Or is it only available via
In the Android sandbox environment, the CANCELLATION callback is delayed until the subscription expires. However, in iOS, the CANCELLATION callback works without issue and is invoked after automatic renewal (subscription) is canceled.
I’m using Stripe with RC.And I use Stripe Test Clock to simulate ending subscription.It works fine with Stripe webhook, our system (BE) store the correct response from the Stripe webhook. But the mobile using RC’s entitlement and the subscription still there until the subscription will end in the future? Family (Monthly)Subscription expires in 15 daysMy question is: Does Revenue Cat support Stripe test clock simulation?
Project: Heartwyse Issue: 3 Stripe products (2 recurring flat-rate subscriptions, 1 one-time flat-rate purchase) appear in the import list but fail on import with only the message "Import complete. 1 product failed." — no error code All products are live and active in Stripe So yeah as it shows I am having an issue importing 3 products from stripe into revenue cat. There’s no error code, it shows the products are live. It just won’t import them no matter how hard I try.
I'm trying to use RevenueCat Customer Center (purchases_ui_flutter ^9.9.5) with FlutterFlow's built-in RevenueCat integration. Getting 'Action not defined' error and the action doesn't run. Has anyone got this working?
Been trying to fix this and looking around for solutions, but I still can’t figure out how to make the RevenueCat paywall UI on iOS / Apple reflect the selected package correctly. When switching between monthly and yearly, the text, button, and trial-related UI do not update the way they should. Yearly has a free trial, monthly does not, but the UI does not properly reflect that difference. Not sure how this is supposed to be configured in RevenueCat for iOS.
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.