Discussion and help from anything related to RevenueCat.
Recently active
Hello, I am currently testing my app on Testflight and cannot get past the subscription/paywall stage as I am getting this error when attempting to Start free trial / subscription after signing in with Apple ID.Store unavailable Could not load subscription options.I am using iOS 26. Code snippet of how I am loading offerings/products: https://github.com/nelsonng2002/dump-repo/blob/main/purchases.service.tsI added some debugging to my screen and here it is:RevenueCat Initialized: yes, Configured: yes, Key present: yes, Key preview: appl_f...Last action: offerings:fetch _error Current offering: none Offering IDs: none Package IDs: none Last error code: 23 Last error: There is an issue with your configuration. Check the underlying error for more details. More information: https://rev.cat/sdk- troubleshooting There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect. For info, I have products set up on App
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
I'm having an issue where my monthly and annual products are displayed with weekly attributes in my paywall.I already have other products with annual and monthly types, so I have to use custom type for these.How do I display the proper periods in the paywall?
Hi, google play - I have a subscription called premium, under that 3 base plans, premium7days, premium30days, premium90days. On the app the 3 products all show up as: Premium Access (myapp) $xx.xx. the only difference being the price. I have figured out the value that is shown comes from google play Subscription, Name field. How is this supposed to work, do I just need to manipulate it in code? Or have I missed something somewhere.
Hello,I have 2 subscription options, a monthly and a yearly.I'm running an iOS app with auto-renewable subscriptions managed through RevenueCat (SDK 5.67.1, StoreKit 2, default config — Purchases.configure(withAPIKey:) with no builder options). I have two products in the same subscription group: wingman_yearly and wingman_monthly, both with a 3-day free trial. Yearly trial conversions are debiting users normally and showing as posted charges in Apple's Purchase History. Monthly trial conversions are not — the in-app purchase modal returns success, RevenueCat marks the entitlement Active and emits a RENEWAL event with is_trial_conversion: true, period_type: NORMAL, expiration_at_ms correctly set to +31 days, AUD 19.99 in price_in_purchased_currency, and no expirationIntent / is_in_billing_retry_period / cancellation_reason flags — but Apple's iOS Purchase History (Settings → Media & Purchases → View Account → Purchase History) shows the same transaction as Pending, and no debit has
I’m running into a RevenueCat/App Store setup issue and wanted to see if anyone has seen this before.Scenario:- iOS app using RevenueCat with App Store subscriptions.- Subscriptions are created in App Store Connect and currently in `Ready to Submit`.- RevenueCat dashboard shows a `default` offering with multiple packages configured.- Each package has the correct App Store product attached.- Products are also attached to entitlements.- App Store Connect API key and In-App Purchase key both validate successfully in RevenueCat.- Bundle ID and RevenueCat public SDK key match the app configuration.However, when the app calls `getOfferings`, RevenueCat returns the current offering with **zero packages**.SDK error is essentially:```textOffering 'default' has no packages configuredYou have configured the SDK with an App Store API key, but there are no App Store products registered in the RevenueCat dashboard for your offerings.```I also tested direct StoreKit 2 product lookup from a TestFlight
I’m at the point where I don’t even know what I’m missing anymore.I’ve been trying to get this working for over three weeks now, and I just keep running into the exact same wall. I’ve rebuilt parts of this multiple times, gone through the docs over and over, and I feel like I’m so close — but something is still off and I can’t see it.What I’m trying to do is allow multiple users in my app (each with their own account) to subscribe, even if they’re using the same Apple ID. Basically like how YouTube lets you have different accounts each with their own subscription, but all under one Apple account.So I set things up the way it’s supposed to work. I created multiple subscription groups in App Store Connect (A through H), each with their own products. Everything is approved, live, and has been for weeks. Then in RevenueCat, I created matching offerings for each group and wired them all up properly with entitlements.On the app side, I’m logging users into RevenueCat using their own user ID
We are using RevenueCat SDK with Capacitor on iOS. Our 4 auto-renewable subscription products are in "Waiting for Review" status in App Store Connect (submitted together with the binary).The SDK returns this error: "None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect"StoreKit returns DownloadFailed error and cannot fetch product metadata. RevenueCat logs show WAITING_FOR_REVIEW state for all 4 products.All configuration is correct:Bundle ID matches ✅ Product IDs match ✅ In-App Purchase Key valid ✅ Shared Secret added ✅ StoreKit Configuration: None ✅ Sandbox account configured ✅Is it possible to test purchases while products are in WAITING_FOR_REVIEW status? Or do we need to wait for Apple to approve them first?
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?
``` mcp Error: Error calling create-product: Unknown error. HTTP status: 422 Full response: object: error type: parameter_error message: A duration is required to create a Test Store subscription product retryable: false doc_url: "https://errors.rev.cat/parameter-error" param: simulated_store_durations Expected parameters: project_id (string) *required* - ID of the project store_identifier (string) *required* - The store identifier of the product. - For Apple App Store products this is the product ID of the subscription or in-app product. - For Google's Play Store, it should follow the format 'productId:basePlanId' for subscription products and SKU for one-time purchase products. - For Stripe, the product identifier that always starts with "prod_" - For Amazon, if it's a subscription, the term SKU of the subscription. If it's a one-time purchase, the SKU of the product. - For Roku, this is the product identifier of the subscription or one-time purchase product. Example: com.revenu
Our paywall looks broken if the user has increased the iOS accessibility dynamic type sizes for fonts to the largest values. Adding the .dynamicTypeSize modified to the RevenuCat Paywall SwiftUI view does not seem to have any effect. Any way to set this to specify the allowable ranges of font sizes?
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,I’m using RevenueCat Paywalls with a Flutter app and Google Play subscriptions.I have configured an introductory offer in the Play Console (₹150/month initially, then ₹250/month). This works correctly in the Google Play purchase screen.Revenuecat always displays the base price (₹250/month), not the introductory price.I cannot find any variables for:intro price discounted price offer pricingSo currently my paywall shows ₹250/month, while Google Play shows ₹150/month for eligible users. This creates a mismatch and poor user experience.Questions:Does RevenueCat Paywalls support displaying introductory pricing for Google Play subscriptions? If yes, which variable should be used to show the intro price? If not, is this a known limitation or planned feature?Would appreciate clarification, as this directly impacts conversion and pricing transparency.Thanks.
If I create or modify a paywall to support the new Rules and Custom variables, and publish it, what will users with older versions of the SDK see?In my example Paywall, I have multiple headings that are hidden/shown by some Rules, based on custom variables. What happens then? Will all my layer/components appear at once?Also there seems to be a new ‘Hide this component’ feature in the Layers list. Is that supported by all versions?I’m not sure I understand fully the implication of using new features that require a new SDK, and what will be the outcome. The editor has this mention: SDK version detailsThe minimum SDK version required has increased due to Rules.We've seen this paywall served to users on older SDK versions who may see your default paywall if you publish these changes. But I don’t quite understand what it implies. My ‘default’ paywall will look ok if the ‘hide’ feature is supported. But it will be a mess of duplicated content if not.
Hi RevenueCat Team,We’re currently using RevenueCat to manage subscriptions in our app and had a question regarding real-time updates to CustomerInfo.In our setup, we sometimes grant promotional subscriptions via our backend (outside the client app). While this works correctly on RevenueCat’s side, the updated entitlement is not immediately reflected in the app UI. At the moment, users need to restart the app (or trigger a manual refresh) before the new subscription state is visible.We’re looking for the best practice to ensure the UI updates in real time when CustomerInfo changes(Flutter) due to backend actions.Specifically:What is the recommended way to listen for CustomerInfo updates when changes are made externally (e.g., via backend APIs)?Our goal is to avoid requiring users to restart the app and instead reflect entitlement changes immediately.Any guidance or best practices would be greatly appreciated.Thanks in advance for your help!Best regards,
I’m trying to allow multiple users in my app (each with their own account) to subscribe using the same Apple ID.I’ve set up multiple subscription groups in App Store Connect and matching offerings in RevenueCat. In my app, I’m selecting different offerings depending on what’s already been purchased.But no matter what I do, I keep getting:“You’re currently subscribed to this.”Even when I should be hitting a different subscription group.In RevenueCat I can see the correct entitlement (like a different plan/group), but the app still seems to be using the default offering.Has anyone successfully implemented multiple subscriptions under one Apple ID with RevenueCat? Would anyone be willing to help me? I am more than willing to pay for help at this point 😞
Hey Revenue cat TeamHas the following issue been resolved = What is the solution for this bug ?
Hi,we are implementing the recommended flow for syncing subscription information on our backend with RevenueCat, as described here: https://www.revenuecat.com/docs/integrations/webhooks#syncing-subscription-status.Each time we receive a webhook, we call the RevenueCat API to fetch the current information about the user’s entitlements. Based on that response, we determine whether the user should have premium access.We are using the v2 Get Customer endpoint. After receiving a webhook, we call this endpoint and check the active_entitlements field in the response.I have a question regarding consistency:Does RevenueCat guarantee that, after receiving a webhook, calling the API will always return up-to-date entitlement information?For example, if we receive an expiration webhook and then immediately call the API, is it guaranteed that the active_entitlements field will already be empty because the user’s subscription has expired and the entitlements have been removed?Thank you for your help.
For my customers, I keep running into issues where the customer’s free trial is ending and they are set to convert, but almost all cases where this happens, there is a billing issue, I wonder if its some set up I am not doing properly or its an issue.Please advise as this is affecting my revenue, thanks!
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 can we expect support (react native) for the newly announced monthly subscriptions with a 12-month commitment?
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 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
I see that has no real solution. So I wonder if any guide of “how-to” already exist somewhere?
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.