Empty offerings, but the Products were found & imported by Revenue Cat

  • 25 October 2023
  • 11 replies

Badge +5

When I try to query Purchases.getOfferings it results in an error

const getPackages = async () => {
try {
const offerings = await Purchases.getOfferings();
if (
offerings.current !== null &&
offerings.current.availablePackages.length !== 0
) {
} catch (e) {
Alert.alert('Error getting offers', e.message);


What have I done so far?

  1. I have my EAS local device & simulator build with bundleIdentifier:
    1. this includes installing the RevenueCat SDK
  2. I have TestFlight App setup with my bundleIdentifier : com.myapp.production
  3. Following the Product setup Guide, inside TestFlight App, I have my subscription group "Core" setup
  4. Inside Core subscription group, I have my "Subscriptions" added: Monthly & Annual which show in "Ready to Submit" status
  5. I setup my Revenue Cat API
  6. Inside Revenue Cat, I added Product. I was able to use the automated Import from the Subscription items I set in test flight
  7. Then I created an Offering which includes my 2 subscriptions
  8. Then I created an Entitlement which includes the 2 products

It seems like if my products were automatically imported from TestFlight into RevenueCat, then the configuration appears correct?

Products added, from Automated Import
Entitlements added
Offering added

I also tried adding a Sandbox Tester inside test flight, but I dont think has made any difference.

This is the official response from Revenue Cat about how to handle this error, which I have triple checked:

Any ideas?


what about the bundle identity between dev & TestFlight prod?

11 replies

Badge +5

I also tried Purchases.getProducts(['core_annual', 'core_annual']);  but it returns `[ ]` unfortunately.  

Badge +1

Hey! Im struggling with this error in expo also. I imported my products directly from the App Store and i still get this error. Crazy but I also tried calling getProducts() - all failed.

I have signed the agreements and done literally everything, please help

Badge +1

I also tried Purchases.getProducts(['core_annual', 'core_annual']);  but it returns `[ ]` unfortunately.  

Struggling with the same problem. Please did you find a solution?

Badge +5

@kc3f0337 are you testing on simulator or physical device?

Badge +1

thanks for your reply. yes, i’m testing on a real device, always have 

Badge +5

On load of my paywall I do:


function offerings() {
async function getOfferings() {
try {
if (!Device.isDevice) return;

const offerings = await Purchases.getOfferings();
if (offerings.current?.availablePackages.length) {
} catch (e) {
setMessage(['error', 'Error retrieving products.']);
} finally {

if (!isReady) return;
[setMessage, isReady]


Badge +1

thanks very much for the code, currently i’m just console logging the offerings. using the code from the documentation. I would try this also.


Was there any point where you deleted the produts you had on app connect and restarted?

Badge +5

I don’t think I deleted anything….if the products are showing up with the snippet I posted above, then your store is connected to Revenue Cat.  


I am thinking the `getProducts` API is for something else, but I didn’t look any deeper.

Badge +1

Here is what I have. Product imported from the app store connect

Badge +1

Im not using subscription products, im using consumable products

Badge +1

I might actually kill myself over this cause I’ve become extremely frustrated. I am extremely serious now. This is a monopoly with a poor functioning product. I’ve been stuck on this for days and its really frustrating.


What the actual fuck man? Ive done literally everything