Discussion and help from anything related to RevenueCat.
Recently active
TL;DR: For 3rd party integrations, please update proceeds to take into account VAT so that it matches Apple’s proceeds and what the developer actually gets. --We've been using our RevenueCat integration with AppsFlyer and Amplitude to calculate LTV and track marketing campaign profitability, however I just realized that proceeds reported by RevenueCat does not match Apple’s. If you choose 'report proceeds' in RevenueCat, it doesn't take into account VAT when sending the revenue which results in RevenueCat over reporting proceeds by up to 20% , which throws off marketing campaigns and LTV calculations. 😔 Here's an example of a sale in the UK: I've converted everything to US dollars for convenience. Price of product: $4.11Proceeds reported by RevenueCat to Amplitude: $2.88ACTUAL proceeds reported by Apple: $2.36Difference = ~20% FORMULAS: It looks like RevenueCat is using this formula: proceeds = price * 0.7 Please update this to what Apple is using: proceeds = price * (1-{VAT Rat
I would like to report a possible bug found on RevenueCat dashboard, like I wrote recently on another thread which is marked as resolved, even though the bug still persists:I am using this code to update user name and email, but the changes don’t show up on Customer Profile page for this user on RevenueCat dashboard.Purchases.setDisplayName(“John Doe”);Purchases.setEmail(“john@doe.com”); @goleary confirmed the bug also occurs in his project, and gave more information:Same here, I’m setting attributes via the REST API, and they show up when I hit the subscriber status endpoint, but they do not show up in the RevenueCat dashboard. Here’s a link to the other, related discussion:
For what I could understand from reading the docs, RevenueCat has two different methods by which we can identify the user.One method is by calling Purchases.login(). The other method is by calling Purchases.setup().What are the differences between these two methods of identifying the user?At first I thought I should call Purchases.setup() in my app initialization, and the login() method should be user right after I authenticate my user in my application, but it looks like I misundersdood it, because I am having some weird errors of unexpected transfers between anonymous and authenticated UIDs.The correct way then is to use both of these two methods but only after I know which UID to apply to the user? And the setup() method should be called only once, and after it has been called then I should only call the login method?
I’m exporting data to try and measure revenue performance of ASA campaigns to work out overall ROAS but the revenue export is unusable and just shows my ad groups as 357 columns. These can’t be added to a pivot table and can’t be aggregated without manually going through and manipulating the data.Is there a way to export only totals, or export it in a usable format, or does anyone have a ‘fix’ to allow the data to be used in Excel please?Ideally we’d have campaign/ad group name as column A, revenue total(s) as column B/C/D. This would allow us to easily aggregate the data, instead of having separate revenue columns for every single ad group or campaign.Thanks in advance!
Hi everyone,I create a Webhook URL but when I try to receive real events but I don't see them in the “Webhook Events” list - is empty and also in my web hook server I didn't receive anything, but in “Recent Transactions” I see it why? “Refresh” - don't do anything.
Hi, I’ve configured Free Trial offer on both Monthly and Yearly Plans in Google Play Store.The free trial (14 days) shows up in payment sheet incase of Yearly plans, but not incase of Monthly plans.The configuration is exactly the same in both monthly and yearly subscriptions and when I fetch the product info I get the following object - {…,freeTrialPeriod:”P2W”,...} in Logcat. Following the eligibility criteria - I fetch all entitlements and allPurchasedProductIdentifiers to make sure that user has not subscribed to the plan beforehand So, I’m not sure why its not reflecting in pay sheet only in case of monthly plans.Any help regarding this topic will be appreciated.
Hi,If Ive an auto-renewable subscription and uninstall the app. after reinstalling again the sheet to subscribe pops up. Is that correct? And if you assumed again click on subscribe that the money isnt debited?And when Im testing, the subscription of my app isnt displayed in the Apple ID under Subscription. Is this all correct and is this only due to testing?
I have a customer that converted from a trial for $0, and it’s renewing at $0, and just got a billing error but still the subscription will renew next month? what is going on here?
Goal: I’d set up a monthly/yearly subscription plan for App Store users, and now would like to increase the price for new users. However, I’d like to grandfather the old users’ price (i.e. their subscription prices ideally wouldn’t change).Setup: I originally created 2 new products in Apple/RevenueCat, created a new RevenueCat offering pointing to those products, and then made the new offering the default. Within my app, the new price is as expected! However, if a user goes to their payment settings, they can see ALL of the pricing. I have paying users across all 4 subscription products. Question: As I understand it, if I untick “Cleared for Sale” on the old products, old users’ subscriptions will stop. Is there a way to do this without disrupting the user? Thank you!
I have added multiple subscription prices to App Store Connect so I can switch between them using the RevenueCat current offering to do some A/B testing on prices.But this got me thinking...When a user views their subscriptions in their App Store account, they can make changes like cancel or upgrade/downgrade a subscription.Will this list offer the user all the available subscription prices? Can a user go to this page then select the lowest priced subscription to change to before a free trial expires then get it for the lower price?There doesn’t seem to be a way to tell ASC which subscriptions to show as not/available.
Hello,I have an app that is live on the App Store and the Google Play Store. We have a paywall where users can subscribe to access our app, either subscribing to a monthly plan or a semi-annual plan. We are now wanting to raise our prices, but want to keep the existing prices for those who are currently subscribed. I read online in the RevenueCat docs that you recommend creating new products as opposed to increasing prices of existing products. That makes sense because we want our revenue data on RC to be accurate, and our product names have the price in them. I know how to create new products, but my main concern is that on iOS, users will be able to change their subscription to the old "grandfathered" pricing through the Subscriptions section of the settings app. Will that be the case? Or is there a way to stop users from moving to a cheaper subscription within the same entitlement/subscription group. Thanks in advance for your help! I have attached a screenshot below to show what I
Want object structure and demo values for return object of Purchases.getOfferings(). It returns an object of “current” and “all” keys. And don’t return demo values with which we can test in debug mode.
I see the option to override an offering on the customer page. I’m assuming this doesn’t change the offering the customer has with Apple/Google? The user case I'm tried to cater for is the following: Existing subscriber completes a challenge in app. We reward them with a promotion on their subscription (e.g. 30 days free).From what I've read you can use iOS offer codes, but its messy. Wondering if anyway to setup a promo in RevCat then target specific user IDs by overriding their offering. Likely not but thought I would ask anyway. Thanks all
Hello,We noticed when testing the RevenueCat subscription, the expiration window is very short. Here's an example of a webhook payload registering a successfully initial purchase. Note that the event time is "Thu Jun 16 2022 10:45:08 GMT-0700 " and expiration time is "Thu Jun 16 2022 11:45:02 GMT-0700". What seems to happen is that after that window, we are forced to go through the subscription user journey again. Is there any to not have the subscription auto-expire in such a short window?{ "api_version": "1.0", "event": { "aliases": [ "$RCAnonymousID:7a56d17ff84b4c0bbd29054eeb2422fa", "$RCAnonymousID:1d4d14da64ed4fc8beed542a1b330b54", "$RCAnonymousID:8b49f5f9b29948ba99fd7efc58c37793", "d8d53812-6c9f-46a5-9502-bbb25e37bfe6" ], "app_id": "app858c963db5", "app_user_id": "d8d53812-6c9f-46a5-9502-bbb25e37bfe6", "country_code": "US", "currency": "USD", "entitlement_id": null, "entitlement_ids": [ "allaccess" ], "environment": "SANDBO
Hi,I am able to buy some consumable (on iOS Sim & Device) using my Sandbox account. I see : [Purchases] - INFO: 😻💰 Purchased product - 'xxxxxx' 15:33:28 DEBUG Purchase succeeded. Optional({ "bundleId" : "xxx", "deviceVerification" : "w97BiaZOSrXxTrvrR6wTZuT44AL39rFO+V0gTIoE45eIjLCz6d4KmmemegmqFect", "deviceVerificationNonce" : "39520f62-1cba-4ef9-a348-6523a7baeb17", "inAppOwnershipType" : "PURCHASED", "originalPurchaseDate" : 1655494381866.502, "originalTransactionId" : "11", "productId" : "xxxxxx", "purchaseDate" : 1655494381866.502, "quantity" : 1, "signedDate" : 1655494381867.5581, "transactionId" : "11", "type" : "Consumable"}) But Dashboard is still empty & [5 - Make a test purchase] is still unchecked.I configured the sandbox endoint in the AppStore.So I am stuck.Do you have an idea?
Imagine that my app crashes just after a successful payment. I want to know purchase to finish when my app restarts.I don’t see in the docs how to do it using RevenueCat. I was using this code: SwiftyStoreKit.completeTransactions(atomically: true) { purchases in for purchase in purchases { switch purchase.transaction.transactionState { case .purchased, .restored: if purchase.needsFinishTransaction { // Deliver content from server, then: SwiftyStoreKit.finishTransaction(purchase.transaction) } // Unlock content case .failed, .purchasing, .deferred: break // do nothing } }} Thanks
I am currently building an app in Flutter using RevenueCat for the in-app-purchases.I now want to know for each user, if he has already made an in-app-purchase, since I have trial subscriptions activated. I need this information, because I want to adjust the UI in case a user registers with a new account that I haven't seen in RevenueCat so far. In this case, he won't be able to use the trial subscription again, since Google/Apple prevent this.I am using a custom ID for every user in my app and I use this ID for RevenueCat aswell, one could just create a new account and get a different user id. Ass far as I understand, in this case, this looks like a "new" user to RevenueCat which has no subscriptions. I think the solution would have to check the GooglePlay-Account for an already purchased subscriptionSo far I have not found a way to find out, if a user has already made an in-app-purchase. Any ideas on how to achieve this?Thanks.
The App Store account deletion rule references “guest accounts” as also requiring deletion. Should I assume that “guest” would be analogous to RevenueCat’s “anonymous users” that are automatically generated in RevenueCat? And therefore that these anonymous accounts would be subject to the same deletion rule even though there is no personal user information linked to that id?If so, and I wanted to manually delete the account upon user request, what would be the best practice method of obtaining the anonymous user id so that they could be manually deleted? (I have no server for the app). Thank you!
We’ve got an issue where the PurchaserInfo is empty when using same appUserID but different device/platform. We’re using the Legacy (Alias) mode because we want the user to share the entitlements across multiple devices.This scenario is: Android (paying Subscriber) -> iOS (new device)Is what we’re trying to do possible? Is there a reason why the PurchaserInfo would be empty on the iOS device.We checked to see if RC is throwing any errors when restore purchases is pressed, which it isn’t. Obviously, we don’t expect Restore Purchases to actually restore a purchase, but we do expect it to send the entitlements for the appUserID. Is our understanding correct?
I am using the flutter SDK to integrate IAP to my app and i am using the non renewable subscription model. I want to get a unique transaction ID issued by apple to send to my server to store it if the user wants to refund his purchase in the future.
HiI have set up the stripe webhook using the docs and have tried to add test subscriptions on Stripe manually and using Stripe Checkout. The Stripe webhook page shows me that the events did go through as shown here: but on Revenue Cat my dashboard is still empty completely. I am not sure where the issue is and would appreciate any help!
I have implemented consumable in-app purchases with revenue cat and wanted to use the anonymous ID (“$RCAnonymousID:…) to keep track of the purchases a user has made. This seems to work fine until a user reinstalls the app or I upload a new version of the app. I call the restore function to get previous purchases but if I check the ID with the originalRevenueCatID method I get a different ID if I reinstall the appI tested this with TestFlight (iOs) and reinstalled the same version of the app after I purchased something but the purchase is gone and also the ID is something else. Is this because of TestFlight maybe and it should work if I publish the app? Or is this generally not possible?I basically wanted to not force the user to create an account and still be able to keep track of in-app purchases across multiple versions of the same app and of course re installationsHope this is the right place to ask. Would appreciate any kind of advice!
There is another question out there marked as solved (see below) however I believe there is a need to re-open this as per recent changes to Google policy. Google is now requiring apps to allow for cancelling a subscription from within an app. An email was sent to app developers about a policy change: We’re updating our Subscriptions policy to state that users must be able to easily cancel their subscriptions from within the app. You’ll have at least 30 days from the date of this notification to update your app to comply with the following policy changes.As this is not currently possible via RevenuCat it means that apps are in danger of being in violation of Google policies and banned from the Play Store. We urgently need a way to cancel a subscription so that it does not renew but without refunding for purchases already made.
Through the Google Play API you can revoke, refund, and cancel a subscription. Through the RevenueCat API you can revoke and refund, not cancel. Is there going to be added support for canceling a subscription?
Hi,I am making an app where users can purchase the same subscription multiple times. Is this possible?
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.