Get help with charts, customer timelines, and anything related to the RevenueCat dashboard.
Recently active
I downloaded the raw RevenueCat CSV exports for 2026 from my Google Cloud Storage bucket and wrote a custom script to parse all unique transactions year-to-date, filtering exactly by ownership_type.I discovered that family sharing might be causing massive distortion in my RevenueCat charts.In 2026, I had 100 unique iOS users register a transaction in RevenueCat. Here is how they break down:Direct Purchasers: 59 users (59%) Family Members: 41 users (41%)A staggering 41% of my iOS "subscribers" are Family Sharing members. These users generate exactly $0.00 in revenue, but if RevenueCat treats them as active subscribers in the charts and if the primary purchaser cancels, then the family members eventually churn out as well, generating multiple "churn" events for what was technically only one real lost customer.What led me to dig into this were the notifications I got on cancelled subs via the Revenuecat app on my phone and pc. I get bombarded with 5 notifications for a single user subscri
Hello,I have checked:1. The Bundle ID in App Store Connect2. Bundle ID given in RevenueCat3. Bundle ID in XcodeAll are same and case sensitivity check is also doneAll my agreements in the App Store Connect are activeThis is my 15th app in RevenueCat and this is the first time I have got this issue.I created the App in the App Store Connect in less than 24 hours ago, is that the case ?
I use AI editor primarly for paywalls, and i already had this active paywall which contained monthly and yearly plan for individual plan type and i added new packages in the offering for family plan type which are also monthly and yearly but the AI editor can’t see them no matter i do.
This is a feature request for Rico.When a user starts a new chat, they often have to repeat the same app details, such as: What the app does Whether it is premium / subscription / freemium / hard paywall When it launched Basic business info like user acquisition cost It would be helpful to have a place to save this as a system instruction or project context for Rico.Rico could then use this saved context in every new chat for that project, so users do not need to repeat it and the answers can be more accurate.
Hello,I have a problem with the Retention Message API. The default message is not displayed to users when they try to cancel their subscription in the device's Settings app.The request to use this API was approved by Apple for our account. After configuring it for the Sandbox environment, everything worked as expected the image and text were displayed to users.Later, I applied the same configuration to the Production environment. I received the Approved status for the message, but after purchasing the subscription from the App Store, although I can see the subscription in Settings, the retention message is not displayed when I attempt to cancel it.I have tried different Apple accounts from different regions (both EU and non-EU) and tested from physical locations without using a VPN.Also, for clarification, we do not use real-time communication only the default retention message. For additional information:I also tried configuring this message from App Store Connect, as shown in WWDC 20
Hi, we’re running an experiment and later realized that we’ve set the wrong primary metric. So I tried editing it, but got his message when I clicked “Save Changes”. I didn’t change anything related to variants, but this error keeps showing up. How do I solve this problem? Thank you.
Hi, we’ve encountered an issue where nothing shows up in the Experiment report, as attached below, even though (1) it’s been 2 days since we started the experiment, and (2) we do see that new customers are properly assigned to each respective variants and (3) nearly 5K new customers signed up in our app in the past 2 days. So apparently the experiment is running properly and there’s enough data to display, but there’s an issue with the report? Thank you.
Hi, we both have a Live Targeting and a running Experiment at the same time. So the expected behavior would be the Experiment to override Live Targeting, since we’ve set the audience of both the Experiment and Targeting as all new users. However, we found out that the new users -- who signed up after the Experiment was set live -- are still seeing offerings assigned in Live Targeting. Their history clearly says they’ve been enrolled to the Experiment. (please see the screenshot below) Two findings in case it helps:According to the details, the ‘offering_id’ of a user enrolled in the new Experiment is “null” According to the details, the ‘experiment_id’ starts with “exp”, while all the past experiments’ started with “prexp”. <Things we can confirm>We’ve already run numerous Experiments in the past and this never happened. We just simply duplicated a past Experiment to start the new one. We’ve tried re-installing the app, restarting the Experiment, but the issue still remains. Ther
Hi RevenueCat team,We are seeing what looks like the same offering_id: null experiment issue reported here, but our setup does not use live targeting rules or placements:https://community.revenuecat.com/dashboard-tools-52/why-does-my-experiment-not-override-live-targeting-7732Setup:React Native / Expo app react-native-purchases: 10.3.0 react-native-purchases-ui: 10.3.0 RevenueCat Paywalls via RevenueCatUI.Paywall App fetches Purchases.getOfferings() and renders offerings.current Design experiment Enrollment: New customers Audience: 100% Criteria: Any audience No placements in the experiment No targeting rules imported or active on the experiment Two variant offerings: - Variant A: PW Basic Weekly + Yearly 2 - Variant B: PW Basic Weekly + YearlyObserved:Customer history shows EXPERIMENT_ENROLLMENT experiment_variant is present offering_id is null The customer profile’s Current Offering still shows the default offering, not an experiment override We know from screen recordings that t
## TL;DROne of the **product-store-state** MCP tools served from `https://mcp.revenuecat.ai/mcp` has a JSON Schemacontaining an integer literal that exceeds the signed 64-bit range (most likely a `maximum` / `default` /`multipleOf` on a price/amount/timestamp field). When an MCP client forwards that tool definition to theAnthropic Messages API, the API rejects the **entire** `tools` array with: API Error: 400 tools.61.custom.input_schema: int too big to convertBecause the failure happens at tool-definition validation time, *every* request that includes that toolfails — so the tools can't be loaded at all, which blocks any workflow that uses them (e.g. creating /submitting products to App Store Connect through the MCP).This is a different bug from the earlier `create-webhook-integration` null-in-string-enum issue(community tid=7623, fixed 2026-04-28) — same class of problem (an illegal schema value served by the MCP),different tool and field.## Affected toolsThe error appears while l
Every paywall I duplicate shows up in the dashboard but not in the RevenueCat mobile app for preview. Then when I go to actually deeplink into the paywall in my app, I get a fallback paywall. When I ask Rico about these duplicated paywalls he doesn’t know they exist (they don’t return in the API).Has anyone had this problem? Is there another way to duplicate easily?
I have`Purchases.shared.attribution.enableAdServicesAttributionTokenCollection()`which according to https://www.revenuecat.com/docs/integrations/attribution/apple-search-ads should give me the following fields:https://cln.sh/41P1JJ7THowever these are the fields that I see:https://cln.sh/dPCvFb77 I have used ASA Basic in the past, but have been using advanced for months.Is there anything else that I’m missing?
Hi there, for context I’ve already sent a support ticket regarding this issue but wanted to get better visibility here as it’s a pressing matter for us to be able to experiment in this manner. Our Setup:SDK: react-native-purchases 9.15.2 (iOS SDK 5.67.1)Platform: iOS (React Native / Expo)Placements: 9 placements defined in-app (e.g., x, x_upsell, y_upsell, etc.)Targeting Rule: One live catch-all rule (no audience conditions) that maps each placement to a specific control offering. The "for all other cases" fallback is set to No Offering, with default set for "when not using Placements."Experiment config: Paywall design experiment with all 9 placements specified (different offering only at the x placement, all others kept the same as the targeting rule). Fallback offerings A/B are set. Targeting by app_version >= X.X.X. Enrollment: 100%. The Problem:Experiments using new_and_existing enrollment mode do not actually apply to users, even when the user clearly matches the targeting cond
A title says, when trying to set height: Fill on Tabs component, it does not work. Seems like it’s not growing as expected. This bug is present on Tab component only, Stack works properly.
Why has there been no progress in adding local time zone to the charts? Im in UTC + 10 so the default timezone is worthless to me.It means I have to export data if I want to actually correlate it with other sources.Why has RevenueCat ignored this issue for over a year? Yet I see adds everyday bragging about how many features they are supposedly shipping...
Hi Together, I really love RevenueCat, but I sometimes run into limitations especially in the RevenueCat Paywall Editor.For example in Google Play Console (Android) I have 2 Subscriptions setup (3 Month and 1 year). For both subscriptions I have setup a Multiphase-Offer like this: 7 days Free-Trial 40% Percent Discount on the first Subscription-Cycle (3 Month, 1 Year) Then after Auto-Renew it is the normal price without discountNow the issue is that, the customer wants to display the Monthly-Price for (3 Month and 1 Year), which is possible with the normal variable without any active offers:Normal:product.price_per_month14.99$ But in the Paywall-Logic section the variable is not working like this:~{{ product.price_per_month }}~ **{{ product.offer_price_per_month }} per Month**which results in this~~14.99$~~ 14.99$ So I read the documentation and found out that you have too use the Secondary Offer for Multiphase-offer setups:https://www.revenuecat.com/docs/tools/paywalls/creating-paywal
Hello,I modified my paywall. I changed the link on the button at the bottom of the paywall and published it.However, when I open the app on my smartphone, the link is still the old one. I waited several hours. I tested it again, but still nothing. Your project ID: proj5223b537 The paywall name / offering it's attached to The button you changed (Terms → https://www.apple.com/legal/internet-services/itunes/dev/stdeula/) That the published version shows the correct link in the editor but the app serves the old one
Hi team,Great work on shipping the new charts for Paywalls 🚀For macOS we use RevenueCat paywalls, but can only see macOS data for chart type “Paywall Encounter”, not Paywall Conversion, Paywall LTV, or Paywall Abandonment.Questions:Is there a timeline for these chart types support macOS? If so, will these charts provide historical data for SDK 5.51.1+ users once they are functional?
2 days ago I could be able to use the paywall logic in the way to change the CTA text based on the chosen package’s intro offer existence. But now I am not able to do it because the UI doesn’t let me do it. I strongly believe this is bug. I am sharing the screen recording of it.
Hi team, filing this here rather than a support ticket so other users hitting the same opaque 400 can find it.TL;DRThe create-webhook-integration tool schema served from https://mcp.revenuecat.ai/mcp contains a null literal inside a type: "string" enum. Anthropic’s own endpoint accepts it silently, but any strict JSON Schema validator (e.g. Volcengine Ark Coding Plan with Kimi/GLM/Doubao models) rejects the entire request with 400 InvalidParameter and an empty param field — which is effectively undebuggable without writing a capture proxy.The Offending Schema"environment": { "anyOf": [ { "type": "string", "enum": ["production", "sandbox", null] }, { "type": "null" } ] } The null in the third enum slot is invalid (parent type is "string") and redundant ({"type":"null"} sibling already handles nullability).Minimal Reprocurl -X POST https://ark.cn-beijing.volces.com/api/coding/v1/messages \ -H 'x-api-key: <ark_key>' \ -H 'anthropic-version: 2023-06-01' \ -H 'content-type: a
Hi,I’ve been exploring RevenueCat Funnels, and the feature looks really promising.However, I’m not sure how to handle branching the flow based on the user’s state.As part of my funnel, I include authentication. I redirect users to my app where they can sign in or sign up, and then I send them back to the funnel.What I’d like to achieve is showing different steps depending on the user type:Newly registered users Existing users who already have an account but haven’t purchased a subscription yetFor each group, I want to display different content. For new users, I’d like to introduce the app in general + show subscription benefits. For existing users without a subscription, I want to focus more on subscription benefits.When redirecting users back to the funnel, I could include a query parameter like ?new_user={true|false}, along with state and app_user_id. However, I don’t see any option in the funnel settings that allows branching based on these parameters.Is there a way to achieve this
Hello RevenueCat Support, I checked the RevenueCat dashboard, but I’m unable to find any option to upload or change the app icon for my projects. I looked in the App Settings and project overview pages, but I do not see any icon/avatar upload setting.Could you please let me know where exactly this option is located, or if this feature is only available for certain account types?I would appreciate any guidance or screenshots showing where to update the app icon.Thank you for your help.
Hi there - I know that some of the charts features are still Beta. But we put a lot of work into a exit paywall cascade and right now I can’t even see if people vsiting the paywalls at all.Firebase doesn’t count events. Our devs say that’s just not working for exit paywalls.So I hoped the paywall charts within RC give me numbers. But when I a look at Paywalls where I have firebase data AND rc paywall chart data I see that the numbers of the rc paywall charts (“paywall encounter”) are way off compared to firebase.Like: Firebase says 90 visits and RC paywall chart says 3.So if numbers that I can doublecheck with a second source are way off I don’t have much trust in the rc numbers for the exit paywalls, for which I don’t have a second source.I just wanted to know: Is that a common issue? Are others experiencing the same: firebase data and rc paywall charts not matching at all?Thanks a lot for any responses. So I can try to figure out if there is a solution for this issue.
Hi RC Community! 👋Today, I was trying to use the RevenueCat dashboard to manually grant users some entitlements. According to the sacred texts (the internet), RC is supposed to fire off a lovely little webhook to my server when this happens. Simple, right?So, I set up my shiny new server sync, granted the entitlement to test it out, and waited. And waited. Nothing happened. The only thing that happend was RevenueCat updating the account itself inside of the dashboard, and that was pretty confusing because no webhook was being fired.Naturally, I did what any rational developer would do: I panicked, assumed everything was fundamentally broken, and started hacking together a completely custom, overly complex implementation. Spoiler alert: That was a terrible idea. 🤦♂️After losing way too much time and sanity, I finally discovered the catch: These specific manual dashboard events are only dispatched as Production events. I have no idea why it’s set up this way, but it cost me a good chu
my dashboard shows that product is linked to an entitlementbut when user goes to purchase a subscription in the API call Purchases.getCustomerInfo()fetches no entitlements corresponding to that order (check below json)"entitlements": {"active": {},"verification": "NOT_REQUESTED","all": {}}Can anyone help me out in this?
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.