Get help with webhooks, third-party integrations, and attribution providers.
Recently active
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
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?
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.
When certain settings are disabled to prevent double counting (double spending), install and usage events also stop working. This seems to be caused by disabling options on the Datasets page. Additionally, parts of the documentation appear outdated and need revision.There are inconsistencies between the configurations available in Meta Apps / Meta Events Manager and the current RevenueCat documentation.Tech Stack React Native (Expo) react-native-fbsdk-next react-native-purchases Relevant DocumentationFrom RevenueCat docs:https://www.revenuecat.com/docs/integrations/attribution/meta-ads#setting-device-attributesRemove Meta SDK Purchase TrackingMake sure to remove all client-side tracking of revenue. Since RevenueCat sends events for all revenue actions, tracking purchases directly with the Meta SDK can lead to double counting in Meta Ads Manager.You can disable automatic In-App Purchase event logging from the Meta SDK or from your Meta app dashboard:Settings > Platform > Log I
Hi everyone,I wanted to bring up a feature request that I believe would be highly valuable for many developers using RevenueCat for subscription management.Currently, there’s no native integration with TikTok Ads for conversion tracking. As TikTok continues to grow as a major user acquisition channel, especially for mobile apps, the lack of direct support makes it difficult to accurately attribute subscription events and optimize campaigns.Right now, developers have to rely on workarounds like server-side events or third-party attribution tools, which can introduce complexity and potential inconsistencies in data.It would be incredibly helpful if RevenueCat could support TikTok Ads integration in a similar way to other ad networks, enabling: Subscription and purchase event tracking Better attribution for ad campaigns Simplified setup without needing custom pipelines Improved ROAS optimization for TikTok campaigns Is this something that’s on the roadmap, or has anyone found a clea
I'm using revenuecat with paddle integration, I would like to implement a subscription downgrade logic that calls the paddle API since revenuecat doesn't support paddle subscription upgrade/downgrades through its sdks (I have already asked about this on github months ago without any answer https://github.com/RevenueCat/purchases-js/issues/182#issuecomment-3519530263).I was wandering if I make a PATCH request to https://api.paddle.com/subscriptions/{subscription_id} (check https://developer.paddle.com/build/subscriptions/replace-products-prices-upgrade-downgrade) with full_next_billing_period proration mode to downgrade, what webhooks revenuecat will trigger. And also, will revenuecat immediately change the user entitlement or wait until the current period ends since the user is only charged at the end of the current period with full_next_billing_period.Basically, does revenuecat rely on paddle subscription state or transactions or both to manage entitlements/revenuecat customer subscri
I have identified an issue where RevenueCat does not send complete app event data to the Meta Conversions API.Below is a sample request body obtained from the RevenueCat → Meta Ads integration:Reference: Meta Conversions API documentation – https://developers.facebook.com/documentation/ads-commerce/conversions-api/app-events{ "action_source": "app", "app_data": { "advertiser_tracking_enabled": 1, "application_tracking_enabled": 1, "extinfo": [ "i2", "com.my.app", "", "1.0.0", "26.3.1", "", "en-US,en;q=0.9", "", "", 0, 0, "", 0, 0, 0, "" ], "vendor_id": "5E153361-2630-4731-9D6F-XXXXXXX" },Subparameter Name RevenueCat Sends to Meta extinfo version YES app package name YES short version NO long version YES os version YES device model name NO locale YES timezone abbr NO ca
Hi.We've set up the RevenueCat + Appsflyer integration.We built a Fire OS build and uploaded it to Live App Testing.We're successfully processing payments and subscriptions, and we can see the data in RevenueCat.We can also see that the data has been successfully sent to Appsflyer.BUT we can't find this data in Appsflyer.What are we doing wrong?UPDATED!Appsflyer replied that the problem lies in the request data between the servers (RevenueCat → Appsflyer).I don't know how to fix this.
Hi everyone,We’re investigating a sudden failure on our AppsFlyer integration and wanted to check whether anyone else has seen the same pattern.Context:AppsFlyer integration was working before failures started after the RevenueCat incident on Apr 18, 2026: https://status.revenuecat.com/incidents/10dkhmtf8155 RevenueCat’s incident update mentioned delayed third-party integration events and replay of queued requestsWhat we’re seeing:after the last successful AppsFlyer delivery, subsequent RevenueCat -> AppsFlyer events started failing failures affect all our app versions 1.3.1 , 1.3.2 and 1.3.3 failures affect multiple event types AppsFlyer responses are now a mix of: 403 Forbidden 400 Unauthorized What we already checked:RevenueCat AppsFlyer config uses the correct iOS App ID we are using an AppsFlyer Dev Key, not an S2S token the dev key has not changed RevenueCat is definitely attempting delivery to AppsFlyer successful and failed events exist for 1.3.1 , 1.3.2 and 1.3.3, so this
I am experiencing the exact same issue as this user, whose problem was not solved > @hussain - what info do you need from me to investigate?
Hi everyone,I’m using the Airbridge integration, our dashboard is being "polluted" with sandbox transactions from our IT/QA teams testing in TestFlight. I noticed that some RevenueCat integrations (like Mixpanel, AppsFlyer) allow for a dedicated "Sandbox API Key" , but the Airbridge configuration doesn't seem to have this.My questions for the community/team: Is there a way to globally disable "Sandbox Environment" events specifically for the Airbridge integration? If not, how are others handling this? Does everyone just create a separate RevenueCat Project for staging/testing to keep the API keys isolated? Is there any plan to add an "Ignore Sandbox" toggle to the Airbridge integration settings? Any advice on keeping production MMP data clean without stopping internal testing would be much appreciated!
We are using a hybrid approach for our RevenueCat integration: iOS: We use the react-native-purchases SDK for native In-App Purchases. Mobile Web: We provide an option for users to purchase via Stripe Checkout Links directly in a mobile browser (bypassing the native SDK for these specific transactions). The IssueWe are consistently seeing Error 7746 ("This fetch token is currently being ingested") on the initial delivery of Stripe webhooks for these web purchases.Since we are not using the RevenueCat Web SDK to initiate these transactions, we are confused as to why a "fetch token" would already be under ingestion when the webhook arrives.We're seeing subscriptions sync, but the initial 7746 errors force Stripe to rely on retries, causing a delay in granting entitlements. We're not super concerned with this error, but mainly want to confirm that it is expected.Integration Details Webhook URL: https://api.revenuecat.com/v1/incoming-webhooks/stripe/app1280305636 Configuration: "Track
We have the RevenueCat Meta/Facebook integration set up and CAPI events are flowing — we can see "Start trial" (87 events) and "Subscribe" (80 events) in Facebook Events Manager under Conversions API. Client-side Facebook SDK events (ActivateApp, App installs) are also working fine.Issue:Facebook cannot attribute trial starts or subscriptions back to our ad campaigns. In Events Manager, the "iOS 14.5 ATE True Status Rate" shows "No Rate Displayed" with a warning icon.What we're doing in the app before every purchase```// Right before Purchases.shared.purchase(package:)Purchases.shared.attribution.collectDeviceIdentifiers()Purchases.shared.attribution.setFBAnonymousID(metaAnonymousID) // from AppEvents.shared.anonymousIDPurchases.shared.attribution.setMixpanelDistinctID(distinctID)```We also call `collectDeviceIdentifiers()` and `setFBAnonymousID()` earlier during onboarding via `syncRevenueCatIdentifiers()`.For a confirmed test user (ATT authorized):- IDFA: available and valid- FB Anon
Hi,I’m evaluating Virtual Currencies for my mobile apps. My apps do not have a login/account system for users, but I always assign my own UUID as the RevenueCat App User ID instead of using anonymous RevenueCat IDs.My main question is about reinstall behavior.Scenario: user installs app app is initialized with my own UUID-based App User ID user buys virtual currency and has remaining credits user deletes the app user reinstalls the app app may now generate/store a new UUID and use that as a new App User ID in this case in my other premium based apps, I see a message like “Created a new alias …” in the RevenueCat dashboard From the docs, the balance endpoint is:curl --location 'https://api.revenuecat.com/v2/projects/<YOUR_PROJECT_ID>/customers/<YOUR_CUSTOMER_ID>/virtual_currencies' \--header 'Authorization: Bearer sk_***************************'My questions are: If a new App User ID is used after reinstall, and RevenueCat creates an alias, will querying /customer
Hey everyone, Im trying to integrate AppsFlyer with RevenueCat, but I cannot seem to hook things up properly. I get the AppsFlyer data on my customers but the event is never sent, there is neither successful nor unsuccessful events. Any pointers what i need to check? This is sandbox testing, do i need to add different keys and or apps for this, or do I use the same app IDs and dev key?
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.