Discussion and help from anything related to RevenueCat.
Recently active
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.
Is there a way to show a discounted paywall when user cancels just before purchasing a subscription (not on dismissing it)?Similar to what there is transaction abandon paywall in superwall
Hi,I was testing the offering override feature in the dashboard for my android app.First, I changed the current offering from the default to “offering_a” for a sandbox user, and it worked as expected.However, about an hour later, I tried to change the offering back to the default, but the change didn’t take effect. I checked the offerings JSON response on the android sdk. (it might be cached, but i’m not certain).Is there any caching behavior on either the server-side or sdk-side that could affect updates to the current offering? Or once a non-default offering is assigned to a user, is it possible to change it again? Thanks!
editing price, i used a pre made template and i can't find where to edit the price, can anybody help?
Hello everyone,I have a mobile only app in the Google and Apple stores. I have subscriptions set up for Google, but not yet for Apple. Before I finish this, and turn on subscriptions, I’d like to double-check my assumptions.My plan is to turn on subscriptions so that we gain some income, and to then build out the web back end so that our customers can log into the web version and see their data their too. This also provides a back up of their data so that it doesn’t just live on their mobiles.I’m assuming that I can capture unique IDs for each customer as they subscribe, and then use that to create web accounts for them, and then email them details. Does this make sense? I’m not expecting this to be straight forward, but would like to confirm it’s possible. I’d rather start to get revenue in sooner rather than later if possible. I’m hoping this works. But maybe I’ve missed something, or someone’s done this before and can point out ‘gotcha’ points to beware.Thanks in advance.Bruce
Please delete
When i launch paywall as in example - the paywall does not close when the user clicks restore purchase button inside the paywall. @OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class)class MainActivity : AppCompatActivity(), PaywallResultHandler { private lateinit var paywallActivityLauncher: PaywallActivityLauncher private lateinit var root: View override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) paywallActivityLauncher = PaywallActivityLauncher(this, this) } private fun launchPaywallActivity() { paywallActivityLauncher.launch(offering = offering) } override fun onActivityResult(result: PaywallResult) {}}I also tried to use launchIfNeeded() function:paywallActivityLauncher.launchIfNeeded(offering = offering) { customerInfo -> customerInfo.entitlements.active.isEmpty()}This does not close the paywall either. The paywall doesn’t close regardless of the restore result.Is there an option for android
Hello, I’m using react native (react-native-purchases and react-native-purchases-ui both at 9.7.0) for my iOS-only app. I’m displaying a paywall to my users via const result = await RevenueCatUI.presentPaywall({ offering });The paywall renders correctly. I have a restore button that restore the purchase correctly, but it does not dismiss the paywall. The user is often left confused as to whether the restore worked or not. How can I get the paywall to dismiss automatically after a restore? There’s no `dismiss()` method on `RevenueCatUI` either, and I would like to not use `<RevenueCatUI.Paywall />` component as that has several scroll issues when used in a bottom sheet to mimic similar behavior of `RevenueCatUI.presentPaywall()`
I have tried to integrate to integrate RevenueCat and AppsFlyer in my iOS. I followed the instruction. Configure AppsFlyer SDK frist, then RevenueCat and set required attributes. In Sandbox env, I see the transaction with AppsFlyerID attributes. Status of AppsFlyer integration is “Active”.However it doesn’t show any event. Also there is no log which can help to identify the issue. I perform the testing on simulator and also on real device. Please let me know if there is any step I missed.
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.