Hardcoded price strings like "$9.99/month" display the wrong currency and wrong amount to users in other countries — App Store pricing tiers mean a US $9.99 subscription may be priced at £7.99, €9.99, ¥1,500, or A$14.99 depending on the market. Showing a US price to an Australian user who is actually charged A$14.99 is a misrepresentation of the cost that violates both Apple guideline 3.1.1 and consumer protection laws in many jurisdictions. Apple's and Google's IAP SDKs return a localizedPrice string already formatted in the user's local currency — there is no reason to hardcode prices.
Low because hardcoded prices cause incorrect currency display in non-US markets but are unlikely to trigger rejection on their own — however they do expose the developer to consumer protection complaints.
Replace all hardcoded price strings with the localizedPrice (or equivalent) returned by the platform IAP SDK at runtime. Never define a price constant as a string in src/constants/pricing.ts or equivalent.
// RevenueCat — correct
const price = offering?.monthly?.product.priceString; // "$9.99" or "£7.99" etc.
// react-native-iap — correct
const price = product.localizedPrice;
// Never do this:
const price = '$9.99'; // wrong for non-US markets
// Show a loading state while fetching, not a hardcoded fallback:
const displayPrice = price ?? 'Loading...';
Also avoid using prices fetched from your own backend — your backend does not know the user's App Store region or currency, and its pricing may lag behind changes made in App Store Connect.
app-store-iap-subscriptions.pricing-compliance.price-localizationlow"$9.99", "$49/year", "USD 9.99", "9.99" as string literals. The correct pattern is to fetch the price from the platform's IAP SDK at runtime — this returns a localized, currency-correct price string in the user's local currency. For react-native-iap: product.localizedPrice (e.g., "£7.99" for UK users). For RevenueCat: package.product.priceString. For StoreKit 2: product.displayPrice (a formatted string) or product.price (a Decimal) formatted via product.priceFormatStyle. For Flutter in_app_purchase: productDetails.price. For Adapty: product.localizedPrice. Failure patterns: <Text>$9.99/month</Text> hardcoded in JSX; a price constant defined as a string in constants/pricing.ts; a price fetched from your own backend rather than from the platform SDK (your backend may not know the user's local currency tier). Also check that the displayed price matches the SDK-fetched price — a common bug is fetching localizedPrice but then displaying a hardcoded fallback if the fetch is slow.localizedPrice fetched but a hardcoded fallback used when the fetch is pending."PaywallScreen.tsx renders hardcoded string '$9.99/month' — prices must come from the platform IAP SDK to reflect correct local currency and pricing tier" or "MONTHLY_PRICE constant in src/constants/pricing.ts is '$9.99' — this will be wrong for non-US App Store users"// RevenueCat — correct
const price = offering?.monthly?.product.priceString; // "$9.99" or "£7.99" etc.
// react-native-iap — correct
const price = product.localizedPrice;
// Never do this:
const price = '$9.99'; // wrong — hardcoded