Skip to main content
Question

Android purchase fails with “subscription plan not available” despite valid offerings

  • January 19, 2026
  • 2 replies
  • 41 views

Forum|alt.badge.img+3

 

Hello,

I’m having an issue with Android purchases in my app and would appreciate guidance.

Current status:

  • Subscriptions are fully configured in RevenueCat and Google Play.

  • Offerings are fetched successfully on both platforms.

  • Purchases work correctly on:

    • iOS production

    • Test environments both on ios/android

  • On Android production, the app successfully retrieves offerings and packages, but attempting to purchase always fails with:

“subscription plan not available”

What I have already confirmed:

  • Android app is installed directly from Google Play (closed testing track).

  • Tester Google account is properly added and opted into the test track.

  • Correct Android public SDK key is used.

  • Products are published in Google Play:

    • noor_monthly_premium

    • noor_annual_premium

  • These products appear correctly in RevenueCat Android products and offerings.

  • Offerings are returned correctly from Purchases.getOfferings() on Android.

  • The same code path works on iOS without any issues.

Purchase logic used in the app example :

// Find package by product identifier
const targetProductId = selectedPlan === 'monthly'
? PRODUCT_IDS.MONTHLY
: PRODUCT_IDS.YEARLY;

// Try to find by product identifier first
let pkg = packages.find(p => p.product.identifier === targetProductId);

// Fallbacks
if (!pkg) {
pkg = packages.find(
p =>
p.identifier.toLowerCase().includes(selectedPlan) ||
p.product.identifier.toLowerCase().includes(selectedPlan)
);
}

if (!pkg) {
pkg = packages.find(p => {
const id = p.identifier.toLowerCase();
return selectedPlan === 'monthly'
? id.includes('month')
: id.includes('annual') || id.includes('year');
});
}

if (!pkg) {
fireToast.error(t('subscription.errors.packageNotFound'));
return;
}

const result = await purchase(pkg);

Observed behavior:

  • getOfferings() returns the correct production packages on Android.

  • When calling Purchases.purchasePackage(pkg), Google Play rejects with “subscription plan not available”.

  • The exact same flow works on iOS production.

2 replies

guilherme
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • January 23, 2026

Hey ​@salah - would it be possible to share your Internal/Closed testing URL? So we can try and reproduce on our side as part of the testing group.

Feel free to send this through our Support From if you prefer, and mention this thread too for added context.


Forum|alt.badge.img+8
  • RevenueCat Staff
  • January 23, 2026

Hi ​@salah we also responded to your GitHub issue here but can you also check that your products have your country available as a localization and if you create a new product does that one work or does it have the same error?