In-App Purchases Explained: Apple and Google Billing Rules 2026

In-app purchases are one of the most common places where a well-built mobile app runs into trouble that has nothing to do with code quality. A subscription flow can work flawlessly in testing and still get rejected during App Store review, or worse, pass review and then quietly leak revenue because renewal events are not being handled correctly on the backend. Understanding how Apple and Google structure their billing rules is not optional knowledge for teams building a monetized mobile app. It shapes the architecture from the very first sprint.

Why Platform Billing Rules Are Not Optional

Both Apple and Google require apps to use their respective in-app purchase systems, StoreKit and Google Play Billing, for digital goods and services consumed within the app. This includes subscriptions, one-time premium unlocks, virtual currency, and similar digital content. Trying to route around this with an external payment link for these categories is one of the fastest ways to get an app rejected or removed from the store entirely. The rules around external payment links for digital goods have shifted in some regions due to regulatory pressure, but the safe default for most teams is still to build around the platform's native billing system and treat any external payment option as a regional exception to confirm carefully, not a default strategy.

This matters commercially too. Commission structures directly affect unit economics. A subscription-based app pricing its tiers without accounting for platform commission, historically around 30 percent standard and often reduced for smaller developers or longer-tenured subscribers, can end up with much thinner margins than the pricing model assumed. This is a conversation that needs to happen during product planning, not after the app is already live.

There is also a compliance dimension that goes beyond commission and receipt validation. App reviewers actively check that subscription terms, cancellation instructions, and pricing are disclosed clearly before checkout, and both platforms have specific requirements around how free trials, introductory pricing, and auto-renewal must be communicated to users. Getting this disclosure language wrong is a common, easily avoidable source of review delays, and it is worth drafting this copy with the platform's current guidelines open alongside it rather than reusing generic subscription language from a different product, since even small mismatches between advertised and actual terms tend to draw reviewer attention quickly.

A Real-World Example: A Fitness App Adding Subscriptions

For example, a fitness app launching a premium tier might plan a $9.99 monthly subscription and, in early modeling, forget to account for the platform commission when projecting revenue against server and content costs. Building the receipt validation and entitlement logic properly, so that a user's premium access is driven by verified server-to-server notifications rather than just a flag set on first purchase, typically takes meaningfully longer than the checkout UI itself. Teams that treat this backend work as an afterthought are the ones most likely to end up with support tickets from users who cancelled but still have access, or worse, users who paid but do not have access due to a sync issue.

Step-by-Step: Implementing In-App Purchases Correctly

Getting this right the first time avoids a costly rebuild later. Teams working with us on mobile app development typically scope the billing architecture, entitlement backend included, during the technical planning phase, before UI work begins, precisely because retrofitting proper receipt validation into an app that shipped with client-only entitlement logic is a meaningfully larger effort than building it correctly from the start.

Connecting Billing to the Rest of Your Revenue Stack

Apps that also sell through a web dashboard or API often need to reconcile mobile in-app purchase revenue with a web billing system like Stripe. Our guide to Stripe subscription billing integration covers the web side of this problem, and the entitlement logic pattern described there, a single source of truth for subscription status driven by webhook events rather than client state, applies just as directly to mobile billing. Similarly, the dunning and retry strategies in our piece on automating failed payment recovery have a parallel on mobile, where Apple and Google both offer billing retry and grace period mechanisms that reduce involuntary churn if configured correctly.

The apps that lose the least revenue to billing issues are the ones where subscription state lives on the server, driven by verified events, and the client app is simply a reflection of that state rather than the source of truth for it.

Common Pitfalls to Avoid

Teams shipping their first in-app purchase flow tend to run into the same handful of issues, most of which are avoidable with the right architecture from the start.

Key Benefits of Getting In-App Purchase Architecture Right

What to Budget For

Timelines for in-app purchase implementation depend heavily on how many product types are involved and whether the backend entitlement system is being built from scratch. For example, an app adding a single auto-renewable subscription tier, with a backend that already has a solid API layer to extend, could typically add proper receipt validation and webhook-driven entitlement handling within a few weeks. An app supporting multiple subscription tiers, one-time purchases, and promotional offers across both iOS and Android would generally need a longer, more carefully sequenced build, since each product type and each platform introduces its own edge cases to test.

It is also worth budgeting time for App Store and Play Store review cycles into the overall timeline, since first-time submissions with in-app purchases are more likely to receive review feedback than simple app updates. Building in one or two rounds of review buffer, rather than assuming instant approval, keeps a launch date realistic instead of becoming a recurring source of missed deadlines.

Conclusion

In-app purchase implementation is often underestimated because the checkout screen itself is simple to build. The real complexity, and the real risk of lost revenue or App Store rejection, lives in the backend entitlement logic, receipt validation, and event handling that most users never see. Teams that invest in this architecture early save themselves a costly rebuild and a much smoother relationship with both app stores.

Frequently Asked Questions

Can I use Stripe instead of Apple's or Google's payment system in my app?
For digital goods and services consumed inside the app, such as subscriptions, premium features, or virtual currency, both Apple and Google generally require their own in-app purchase systems. Physical goods, services consumed outside the app, and some other categories can often use external payment processors like Stripe, though the exact rules have evolved and vary by region, so this should be confirmed against current store guidelines before development starts.
How much commission do Apple and Google take on in-app purchases?
Standard commission has historically been around 30 percent, with reduced rates, historically closer to 15 percent, available for smaller developers or after a subscriber's first year on a subscription. Exact rates and eligibility criteria change over time, so current developer program documentation should be checked before pricing a product.
Why do App Store reviewers reject in-app purchase implementations?
Common rejection reasons include offering a way to pay outside the required in-app purchase system for digital goods, unclear pricing before purchase, restore-purchase functionality that does not work correctly, and subscription terms that are not clearly disclosed to the user before checkout.
How do I handle subscription renewals and cancellations correctly?
Both platforms send server-to-server notifications for renewal, cancellation, refund, and billing issue events. A backend that listens for these notifications and updates entitlement status accordingly is essential, since relying only on the client app to track subscription state leads to users retaining access after cancellation or losing access after a temporary billing hiccup.
Do I need different in-app purchase implementations for iOS and Android?
Yes, StoreKit on iOS and Google Play Billing on Android are separate systems with different APIs, receipt validation methods, and notification formats, even though the underlying product concepts (consumables, non-consumables, subscriptions) are similar. Cross-platform frameworks like Flutter and React Native offer plugins that unify much of this, but backend receipt validation still needs to handle both platforms distinctly.