Skip to content

Selling digital products in your app

Your app’s shop can check out two different ways, and the product decides which.

A physical product — something you post to a customer — goes into the cart and checks out on your WordPress site: tapping Checkout opens your WooCommerce checkout in a webview, already signed in. That is how it has always worked, and it is completely fine.

A digital product cannot. Apple’s App Store Review Guideline 3.1.1 requires digital content and services used inside an app to be sold through in-app purchase, and taking the customer to your own checkout instead is one of the most reliably-caught reasons a community app is rejected. Google Play’s Payments policy says materially the same thing. So a digital product is bought through the App Store or Google Play instead — one tap, the platform’s own purchase sheet, and your site grants the role when the receipt checks out.

Your website and the builder preview are never affected — only the built app.

In the builder, open Global settings → Store:

SettingWhat the app does with digital products
Hide them in the app (default)Left out of the shop entirely. A cart holding one cannot check out.
Show them, without a price or a way to buyThey appear in the shop with no price and no Add to Cart.
Sell them through the App Store and Google PlaySold, at the store’s price, through the store’s purchase sheet. Physical products keep the cart and your checkout.
Sell them anywayNothing changes — everything checks out on your site.

The default is to hide, because the safe default is the compliant one.

Show them without a price is allowed because both stores permit displaying content you cannot buy in the app. What neither permits is showing the price, or pointing the customer at somewhere else to pay — so your app does neither. There is deliberately no “finish on our website” link anywhere: adding one is itself the violation.

Sell them anyway is correct only if your shop sells exclusively physical, shipped goods.

Neither store can put a t-shirt and a membership through one transaction — they transact one product at a time, outside your cart. So this is routing rather than a mixed basket:

  • Physical products keep Add to Cart, the cart, and your WooCommerce checkout.
  • Digital products get Buy or Subscribe instead, which opens the platform’s purchase sheet. They never enter the cart.

Prices for digital products come from the store, not from WooCommerce. That is not a preference — the store is where the customer is charged, in their currency, after their region’s tax, and a price from anywhere else is a price they will not pay. Your WooCommerce price is still used for the order record on your site.

When a purchase succeeds, your site verifies the receipt with Apple or Google and then does whatever you mapped that product to: place a WooCommerce order (so your reporting, your emails and your um-woocommerce role plumbing all fire exactly as they do for a card payment), or grant a role directly. Renewals, cancellations, refunds and billing failures arrive from the store afterwards and move the member without anyone doing anything.

A digital product you have not mapped to a store product is hidden, not shown unbuyable. An unmapped product is a configuration mistake, and hiding is the failure that stays compliant.

Apple and Google take a commission on in-app purchases — typically 15% or 30% depending on your revenue and how long the subscriber has been subscribed. That is between you and them; Memberside takes nothing from it. It is worth knowing before you price a membership, because you are not able to charge a different price in the app to cover it.

If your app was built before this covered Android

Section titled “If your app was built before this covered Android”

Apps created while the setting was iOS-only keep that narrower behaviour until you open Global settings → Store and save. That is deliberate: widening the rule silently would stop an Android shop selling on the next rebuild, with nothing to connect it to. The Store tab tells you when your app is still in that state — saving any value applies your choice to both platforms.

This is decided on your WordPress site, not in the builder. A product is treated as digital when any of these is true:

  • it is marked Virtual in WooCommerce
  • it is marked Downloadable
  • it is a Subscription product
  • it grants an Ultimate Member role when purchased (the um-woocommerce setting)

That last one is the important one, and it is the reason this cannot be worked out from WooCommerce alone. A product that moves the buyer into a paid role is a membership even if it is not flagged virtual — and a membership is exactly what Apple expects to see sold through in-app purchase.

Detection is right almost always and occasionally wrong — a virtual product that is really an in-person class, say. On any product’s edit screen there is a Memberside — App sales box with three options: detect automatically, Physical, or Digital. It also shows you what the automatic answer currently is and why.

To review the whole catalogue at once, the products list has an App sales column.

Your WooCommerce cart lives on the customer’s account, not on their phone. Something added on your website — or on their Android tablet — is already in the cart when they open the iPhone app.

So keeping digital products out of the shop is not enough on its own, and your app does not rely on it. A cart line the app may not sell through your checkout is marked Not available in app, its price is hidden, and checkout is blocked until it is removed. Remove stays available on that line: it is how the customer gets to check out the rest of their basket.

This holds under Sell them through the App Store and Google Play too. A membership bought on your website is still in that cart, and it still cannot go through your checkout inside the app — the customer buys it from the shop’s Buy button instead.

  • Billing (the um-stripe Customer Portal tab under My Account) is hidden unless you chose Sell them anyway. It manages a paid membership through an outside payment provider, which is the same guideline. When you sell through the stores, a Purchases tab takes its place: Restore purchases, which Apple requires any app selling non-consumables to have, and a link out to the customer’s subscriptions on the App Store or Google Play, which is the only place they can be cancelled.
  • Payment methods is left alone. Saved cards are legitimate for the physical goods your app can still sell. If your shop is digital-only, do not place that feature.

A webview tab you point at your own shop or checkout page is not something the app can detect. If you have one, it is your responsibility to check before you submit.

Selling a membership on your website and letting members sign in to the app with what they bought there is explicitly allowed, and stays allowed. It is selling it inside the app through your own checkout that is not. Many sites run both: the website for people who find you on the web, in-app purchase for people who find you in a store.