Discussion and help from anything related to RevenueCat.
Recently active
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) —
Hi RevenueCat team 👋Love the Paywall Builder — it covers a lot of ground without needing a developer. I wanted to submit a feature request for two animation/visual effect capabilities that I think would have a meaningful impact on conversion:**1. Pulse animation on the CTA button**A subtle, looping pulse effect on the primary purchase button (e.g. a gentle scale or glow pulse) is a well-established pattern for drawing attention to the key action on a paywall. Right now there's no way to add motion to the button component without going fully custom.**2. Shimmer / glow effect on badges**A glimmer or shimmer animation on a badge is a lightweight way to signal which plan to pick and nudge users toward the higher-value option. Again, this isn't currently achievable within the builder.Both effects are small but proven conversion levers — especially on paywalls where users may be hesitating between plans.
I am noticing a difference in key performance metrics when comparing the RevenueCat Web Dashboard (Overview) to the RC’s iOS app’s dashboard. Which one is correct?
The new customer metrics don't match reality.Hello,we recently switched to RevenueCat. After the switch, we started seeing different data. As a mobile app, we usually pay close attention to both the number of downloads and the number of users, meaning the users who are active within the app. However, there is a discrepancy between the new customer metric in RevenueCat and the new customer metrics in our own main dashboard.When I read the explanations, phrases like “active” made me think, “It must be counting them as new users because it can't track those who registered earlier.”Could this be the case?Can a user who registered before switching to RevenueCat be recognized as a new user when they log in for the first time after switching to RevenueCat?Or what could the issue be?
I deleted a development project. it did not seem to work so I deleted it again. after an hour I noticed that I deleted a PRODUCTION Project. some huge bug that I discovered and I cant seem to find a solution to restore it. I need support ASAP I cant wait 2 days for a ticket answer I get a bunch of downloads and this will result in revenue loss and 100% bad ratings since its a hard paywall app!
Hello everyone,I am a non-technical founder and I have a question regarding the integration between RevenueCat and AppsFlyer.In my RevenueCat dashboard, when I check a specific Customer profile, I noticed that the AppsFlyer ID is already populated in the attributes. Since I am not the developer, I am not sure how this ID was collected, but it is there.My questions are: With this AppsFlyer ID available in RevenueCat, is it possible to look up this exact user on the AppsFlyer dashboard to see their original traffic source (e.g., which specific ad campaign or media source they came from)? Where exactly in the AppsFlyer interface (which report or view) should I paste this ID to find the user's attribution data? I've checked the "Activity View" but couldn't find a direct search bar for IDs. Does the presence of this ID in RevenueCat mean the SDK integration is already working correctly? I would appreciate a step-by-step guide for a non-dev person. Thank you!
Environment:SDK: react-native-purchases ^9.8.0 Platform: iOS (Expo SDK 54, React Native 0.81.5) Testing on: TestFlight (physical iPhone + iPad) Bundle ID: com.withim.app API key prefix: appl_Products:com.withim.app.grace_monthly1 (Auto-Renewable, 1 month, 7-day free trial) com.withim.app.grace_annual1 (Auto-Renewable, 1 year, 7-day free trial) com.withim.app.grace_lifetime1 (Non-Consumable) All 3 products are "Waiting for Review" in App Store Connect RevenueCat offerings configured: $rc_monthly, $rc_annual, $rc_lifetimeProblem: When calling purchasePackage(), it immediately throws error code 16 (UNKNOWN_BACKEND_ERROR) with no readableErrorCode or underlyingErrorMessage. The native Apple payment sheet never appears.What works:getOfferings() returns correct products with real prices from Apple (e.g., $3.99/month displays correctly) Purchases.configure() succeeds Purchases.getCustomerInfo() works Purchases work when running via Xcode debug build on physical deviceWhat doesn't work:Any pur
I have added localization through RevenueCat which has updated the text content. I would like to change the main image for each language to help improve conversions by country. Is it possible to “localize” the image in addition to the text copy? I’ve been seeing more requests for this (> 9 months ago)Thanks!
Hi RevenueCat team, I’d like to request a new built-in event (similar to Superwall’s new “Trial Qualified”). The goal is to send a signal to MMPs when, after a short qualification window (e.g., 30 minutes post trial start), a user has either a subscription or an active trial, indicating higher intent/quality than a raw trial start (which often gets cancelled within minutes).Proposed definition:Event name: Qualified Initial Conversion or Qualified Conversion Trigger: 30 minutes after Initial Purchase or Trial Started, if the trial is still active and the user hasn’t opted out/cancelled. Suppression: Do not fire if the user cancels or refunds before the 30-minute mark. Why this is useful:Many MMPs and growth teams use early qualification events to improve campaign optimization signals, reduce noise from very short-lived trials, and better predict conversion likelihood. It provides a more reliable KPI than raw “Trial Started,” especially for ad network optimization windows.Requested des
All subscription prices are correctly configured in App Store Connect for all countries and regions. We are currently testing on devices configured for India, where the device region, App Store region, and Apple ID are all set to India.However, during testing in TestFlight, we are seeing inconsistent currency behavior: In our custom paywall UI / RevenueCat paywall, the prices returned from RevenueCat offerings appear in USD ($). When the Apple in-app purchase sheet opens, the price is displayed correctly in INR (₹). Current flow: Paywall (RevenueCat offerings): $ USD Apple Purchase Sheet: ₹ INR (correct) This creates a confusing experience because users initially see USD on the paywall, but the actual purchase sheet shows INR.We have verified the following: Pricing is correctly configured in App Store Connect for all regions. Device region is set to India. Apple ID region is set to India. The behavior occurs on multiple devices using TestFlight. Since the pricing configuratio
Hi everyone 👋I’m using the new RevenueCat Paywall Builder and I have a question about dynamic text.At the top of my paywall, I currently have a text layer that says “2 Months Free.”I want this text to change automatically when the user selects a different package.For example: If Monthly/Yearly is selected → show “2 Months Free” If Lifetime (Pioneer) is selected → show “Lifetime Access” I couldn’t find any “conditional visibility” or “selected package” logic in the builder.Is it possible to dynamically change text based on the selected package inside the Paywall Builder?Or is this only possible with a fully custom paywall implemented via SDK?
I experienced the “paywall validation error” as some others have mentioned. I checked the network tab in the browser console and still can’t figure it out. It’s related to missing required fields, but can’t make sense of which one from the long field names here: { "code": 7862, "errors": [ { "field": "config.base.sticky_footer.stack.components.0.stack.components.0.package.stack.components.0.stack.components.0.stack.components.1.text.color.dark.hex.value", "message": "Field required", "type": "missing" }, { "field": "config.base.sticky_footer.stack.components.0.stack.components.0.package.stack.components.0.stack.components.0.stack.components.2.text.color.dark.hex.value", "message": "Field required", "type": "missing" }, { "field": "config.base.sticky_footer.stack.components.0.stack.components.1.package.stack.background.color.value.light.hex.value", "message":
Hi, I am using Draftbit (React) with the latest RC SDK (9.11.2) but still get the error specified API Key is not recognized when I am running it on ExpoGo on iOS. What could possibly cause this??? if(uuid) conf['appUserID'] = uuid; if(Constants.executionEnvironment == 'bare') { // check for ExpoGO console.log('Using RevenueCat Test Store'); conf['apiKey'] = APIKeys.revenueCatTestStore; } else if (Platform.OS == 'android') { console.log('Using Android Play Store'); conf['apiKey'] = APIKeys.google; } else { console.log('Using AppStore'); conf['apiKey'] = APIKeys.apple; } await Purchases.configure(conf);The error log:Using RevenueCat Test Store[RevenueCat] 😿‼️ The specified API Key is not recognized. Ensure that you are using the public app-specific API key, which should look like 'appl_1a2b3c4d5e6f7h'. See https://rev.cat/auth for more details.
Hi,I am currently trying to create an Android version of the RevenueCat iOS App. I would like to display the latest transactions in the app, but it seems there isn’t an endpoint for this. The only workaround I could find was to first fetch all customers and then fetch the purchases of each customer individually. However, the list-purchases endpoint always returns an empty list of items, even though the customer has made purchases.Am I missing something, or is there a better way?
Hey RC community 👋I've been building an internal ARR model using data from RC's webhook events and I'm having trouble matching the exact number shown in the RC dashboard.My approach:Use INITIAL_PURCHASE and RENEWAL events as subscription periods Apply expiration overrides from EXPIRATION, BILLING_ISSUE, SUBSCRIPTION_EXTENDED events Normalize price to MRR using the multipliers from the RC MRR chart docs Active subscription = purchased_at <= snapshot_date < effective_expiration_at Filter: production only, no family share, no promotional store, NORMAL/INTRO period typesI'm consistently getting a small but persistent gap vs the RC dashboard for the same date — less than 1% off, but it's blocking us from fully trusting our internal numbers.RC support was kind enough to share a raw export CSV, and comparing row-by-row I can see some specific discrepancies, but haven't been able to fully close the gap.A few things I'm still unsure about:How does RC handle BILLING_ISSUE periods in MRR —
Hey everyone, I was lucky enough to get one of the RevenueCat T-shirts a while ago.Today, ny wife nearly ripped it to pieces, but i begged and pleaded for her to show mercy... I cant hold her off forever... How can i get a new shirt, please?! Desperately seeking help... Michael
I keep getting the error: “Error fetching offerings - The operation couldn’t be completed” after setting up the Test store with products. I have the message “RevenueCat SDK is configured correctly”Does Test Store work at all in the iOS simulator or do I still need to use StoreKit set-up?
I saw several messages about how to setup the fonts. I guess the documentation is deprecated, it still mentions that the user needs to put the font in the app directly… but the error message I’m getting on Android with my Expo app points toward some download/caching process. When I try to display my paywall on my android emulator, the log get “Unable to create cache directory for remote fonts” and the app crashes. The emulator might have a low free memory. Is there anything specific (like a permission to grant) to get this fixed on Android? Or is it only the emulator memory that I should flush? If it’s the memory issue, I think some users with low end devices might get an abrupt crash as well.Edit: I can’t reproduce it every time, so that seems to be a memory issue.
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.