Discussion and help from anything related to RevenueCat.
Recently active
Since I know manage user IDs, then when a user logs out and logs in with a new user, then I will have two users with unique IDs but the same idfv/gpsAdId. What should I do? They might be the same user logging in or creating a user through a different login, but they also might be a completely new user.What should I do?
Heads up everyone it looks like all icons for both iOS and Android apps have suddenly disappeared from the UI, on both web and mobile.Not sure if this is a bug or part of an update, but the interface is currently missing key visual elements, which makes navigation pretty confusing.Is anyone else experiencing this?It’s been like this for weeks
Hi,I'm experiencing an issue where purchases are completing successfully but entitlements are not being automatically granted. All purchases show as "Unattached products" in the customer profile, even though the product is correctly attached to the entitlement in the dashboard. Purchase completes successfully, appears in both Play Console and RevenueCat customer history. However, the product appears under "Unattached products" in the customer profile. This happens for every user and every purchase. What I've verifiedProduct identifiers in RevenueCat match exactly with Google Play Console (subscription ID + base plan ID) Product is attached to the entitlement Service Account Credentials JSON is uploaded Store Status shows Published Purchases are coming through the correct store (Play Store) App User ID is set correctly in code and matches the dashboard Google Play Order ID is valid and matches Play Console Entitlement identifier used in code matches the one in the dashboard Could someon
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?
was trying to integrate, My App store connect with my RC but getting this issue:“The key is not valid or is not compatible with the bundle id of your app.”Even though my Bundle ID is valid on both xcode and appstore connect i just copy pasted from that,
If anyone else is struggling with RevenueCat not exposing Google Play's OneTimePurchaseOfferDetails (like Launch Offers or region-specific discounts for In-App products on Android), here is a bulletproof workaround we implemented in production.The Problem: Google Play added oneTimePurchaseOfferDetailsList in Billing Library v6 for in-app products, but purchases_flutter (and the underlying purchases-hybrid-common) currently drops this array when serializing the Native ProductDetails into the Dart StoreProduct. So storeProduct.price just returns the un-discounted base list price.The Workaround: Use the official in_app_purchase package strictly as a "read-only scanner" to fetch the real JSON natively, and keep using RevenueCat for the actual purchase. Add the dependency Add in_app_purchase: ^3.2.0 to your pubspec.yaml. We won't use it to buy things, only to query the Google Play API directly. Create a quick Extractor Service This queries the Google Play Billing Library and finds the low
I am experiencing an issue with the "Transfer if there are no active subscriptions" restoration strategy. This behavior works as expected on iOS but appears to be bypassed on Android.The Scenario: Both User A and User B are identified (non-anonymous App User IDs). User A has an active subscription linked to a specific Google Play / Apple ID. I log out User A and log in as User B on the same device. User B calls Purchases.restorePurchases(). Expected Behavior (observed on iOS): On iOS, RevenueCat correctly blocks the transfer (there won’t be any transfer event) and returns the RECEIPT_ALREADY_IN_USE_ERROR because User A still has an active subscription.Actual Behavior (observed on Android): On Android, the restorePurchases() will return an error but the transfer event will still happen.This contradicts the documentation for this transfer behavior. I have confirmed that this is happening in a sandbox environment, User A's subscription has not expired, and I’m applying "Transfer if
I read a previous reply what was closed for comments that suggested a Package list but there is no such component.The template picks up my monthly and yearly packages, but I have two lifetime packages that I’d also like to display. Is there a way to have a show all packages button? Or is there some other approach?
I have added a logic to the paywall and now it cannot be published or changed. The Browser in the Console shows me this: { "code": 7862, "errors": [ { "field": "config.base.stack.components.1.stack.components.1.package.overrides.0.properties.visible", "message": "Extra inputs are not permitted", "type": "extra_forbidden" }, { "field": "config.base.stack.components.1.stack.components.1.package.overrides.1.properties.visible", "message": "Extra inputs are not permitted", "type": "extra_forbidden" }, { "field": "config.base.stack.components.1.stack.components.2.package.overrides.0.properties.visible", "message": "Extra inputs are not permitted", "type": "extra_forbidden" } ], "message": "Paywall validation failed"} Which extra Inputs? Without the logic, it makes no sense. Best regards and thanks!
https://api.revenuecat.com/v2/projects/${project.id}/charts/actives?realtime=false&start_date=${dateStr}&end_date=${dateStr}I want to get the result for a single specific app from the link above.How do I do that?
I have read many posts about this but still don't know what's going on. I can't figure out why I can show my subscriptions but not the non-consumable product. Starting from Google Play, these are my subscriptions (again, no problem with them):The no-consumable product:(no country restrictions, set price...) And now comes RC. This is my product catalog:These package were imported from the Play Store. I did not create anything manually.If we go inside lifetime option:As we can see, it's published and IDs are fine (I'll explain later why I'm showing it from 2 offers).Now moving to the paywall, I'm showing the 3 offers correctly:But when I show the paywall in my phone, the last option is not there, just showing the subscriptions. Inspecting the products I get, there are only the 2 subscriptions.I tried to create a new paywall so I duplicated the offer with same products (that's why) and when showing the new paywall, the same problem happens.I'm using Flutter and Android.What am I doing wro
Hi,I’m using the RevenueCat Web Paywall Editor and would like to keep using it (no custom paywall in code).With Android 16, forcing portrait is no longer allowed → I now need proper landscape support.Current challenges: Paywall is optimized for portrait, but breaks in landscape (height constraints) Editor only provides FIT / FILL / FIXED — no responsive rules No way to: show/hide elements based on orientation adjust layout/spacing per orientation Tried switching images from FILL → FIT, but still not getting good results Questions: What are the best practices to design a paywall that works well in both portrait & landscape using the Web Editor? Is the expected approach: one responsive layout? or multiple paywalls handled in the app? Any docs / examples for landscape optimization? Thanks
Hello,I am encountering the well-known readable_error_code: CONFIGURATION_ERROR (code: 23) while implementing subscriptions on iOS.I have already performed several checks to identify the cause of the issue, and so far all configurations appear to be correct: All contracts in App Store Connect have been properly signed. The product identifiers match exactly between App Store Connect and RevenueCat. All required metadata and configurations have been completed. The backend integration has been finalized and appears to be working as expected. We also performed tests on physical devices (iPad and iPhone) running iOS 26.2.1, and the error still occurs when attempting to fetch the products.The only potential issue I can identify is the subscription status. The products are currently listed as “Waiting for Review” in App Store Connect and also appear with the same status in the RevenueCat dashboard.Because of this, I would like to confirm whether this status could prevent the purchases f
Hey, I’m in the process of selling my app to someone. It’s on iOS + Web. I use RevenueCat for both. As far as I’m aware, when I transfer the app on App Store Connect, all the secrets/keys remain the same? How does it work on RevenueCat web billing? I can’t transfer my Stripe account as I’ve got other apps running through there, but I also don’t want any disruption to existing subscribers. What would be the best way going about moving web purchases over to a new Stripe Account? Thanks!
My custom paywall was showing for a couple of days in TestFlight, but for some reason its reverted to the Apple default paywall...which is causing my app to be rejected. HELP!!
We're using RC Billing (Web Billing) with the RevenueCat JS SDK. During the purchase flow, we pass the customer's email via the `customerEmail` parameter in `Purchases.purchase()`.Due to a bug on our side, some subscribers had an incorrect email passed as `customerEmail` at checkout time. We've since fixed the bug, but for the affected subscribers, all lifecycle emails (subscription confirmation, renewal reminders, billing issue notices, etc.) are still being sent to the old incorrect email.What we've already tried:1. Updated the `$email` subscriber attribute in the RevenueCat dashboard — lifecycle emails still go to the old address.2. Updated the email on the corresponding Stripe Customer — lifecycle emails still go to the old address.It appears that RC Billing stores the checkout email internally, separate from both the `$email` subscriber attribute and the Stripe Customer email, and uses that internal email for lifecycle emails.Questions:1. Is there an API endpoint or dashboard opti
I have a scenario where I would like to have one Offering and Paywall general design, but be able to customize the text and header imagery depending on some user chosen option or paywall trigger.Examples:The user has chosen a preference (favorite type of sport). I would like to display an image related to that specific sport for him. The Paywall trigger is specific to a feature. User clicks a locked feature (ie. offline-mode, dark-mode, etc). I would like to display a specific image and text header for each of these.In this example, the header differs for those cases, but the rest of the Paywall visual and structure is the same. Offering/Package choices, Feature list, boutons in the footer, etc.All these options also share the same offering for example.In my understanding, right now, with the 1:1 Offering/Paywall model, it seems that I would need to have a dozen different Offerings and Paywalls for this. Meaning that changing the Offering choices, or changing a logo or colour in my Pay
I have been using revenue cat for over 6 months now and I just started my first price point experiment yesterday. I went to open the paywall today and my app froze. It also froze in my development build and I was able to find the following log. DEBUG [RevenueCat] ℹ️ API request failed: GET '/v1/subscribers/user_1234/health_report' (500): There was an unknown backend error. Internal server error.Request-ID: <DEPRECATED>; Amzn-Trace-ID: <DEPRECATED> ERROR [RevenueCat] 😿‼️ There was an unknown backend error. Internal server error.Code: construct.js 2 | var setPrototypeOf = require("./setPrototypeOf.js"); 3 | function _construct(t, e, r) {> 4 | if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); | ^ 5 | var o = [null]; 6 | o.push.apply(o, e); 7 | var p = new (t.bind.apply(t, o))();I quickly stopped the price point experiment and after a min or two, the error disapp
Hi everyone, We’ve been stuck on this issue for a while and would really appreciate some guidance. We are integrating RevenueCat in a React Native / Expo app and using our own custom paywall UI (we are not using RevenueCat Paywalls). Our app is already in App Store Connect → Ready to Submit, and our subscriptions are configured, but the SDK is still returning empty offerings. Setup Products in App Store Connect babysoothe_monthly (auto-renewable) babysoothe_yearly (auto-renewable) Both products currently show:Status: Ready to SubmitThey also have: localization pricing screenshot for review subscription group configured RevenueCat configurationDefault offering:default ├─ $rc_monthly → babysoothe_monthly └─ $rc_annual → babysoothe_yearlyWe previously had a lifetime product but removed it from the offering to simplify debugging.Products appear correctly in RevenueCat Product Catalog.App setupWe fetch offerings like this:const offerings = await Purchases.getOfferings();But the re
Credentials need attention Valid key format The key is not valid or is not compatible with the Bundle ID of your app.
Looking into the RC Privacy Policy, I found the following snippet:If you are using our products or services as a developer, the following information regarding your end users may be received and processed by us: “End User Technical Information”: This refers to technical information related to an end user’s mobile device or computer, such as: device type, operating system, “End User Transaction Information”: This refers to transaction information related to an end user’s activities with respect to your app or other digital product, and may include: Last seen time that the end user used your app or digital product; Apple receipt file; and Google purchase token, “Optional End User Information”: This refers to information that we may receive if you select or enable this option in our products, which may include: User ID of the end user in your app or digital product; and Additional attribution or metadata associated with an end user.End User Technical Information, End User Transaction Inf
We just launched an app with IOS and REvenue Cat. We are doing subscriptions. No in app, just subscriptions. we are getting prodcut details via api, so i am sure that matches up. the business agreements, etc are all active the subscriptions are active. the app is ready for distribution. We have checked API and seems to match up. Product ID matches. Any other bright ideas out there? I feel like we have tried everything.
I beleive I have everything configured properly but testflight shows this when paywall is prompted to show
I've been experimenting with the Charts API v2 to build an automated weekly operator brief, and I found something interesting.When you pull revenue and MRR chart data for the same time window, they can tell completely different stories. In one project I analyzed, revenue was up ~14.7% while MRR was down ~3.0% in the same comparison window. If you only checked one chart, you'd either celebrate or worry — but the real signal is in the contradiction between them.The pattern: annual prepayments can inflate revenue while the monthly recurring base quietly declines. I call this a "sugar rush" — the topline looks healthy but the recurring foundation isn't compounding.I built a small open-source tool that automates this comparison across multiple chart endpoints (revenue, MRR, churn, trial conversion, new customers, trials) and flags when metrics move in contradicting directions: github.com/KitTheRevenueCat/revenuecat-growth-briefThe implementation uses deterministic rules (no LLM analysis) —
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.