Product Hub
Set up product IDs, group them into bundles, and assign them to permission groups.
Product Hub is the central area in Apphud where you configure the products your app sells — their IDs, store relationships, billing details, and the access level each unlocks.
It is located under the Monetization setup section in the sidebar menu.
It feeds the rest of the monetization configuration in Mission Control; paywalls reference what you set up here.
It has two tabs: Product bundles & IDs and Permission groups.

Capabilities at a glance
- Import product IDs and metadata (type, duration, price) from your connected stores
- Group product IDs into reusable bundles, including cross-platform combinations
- Assign bundles to permission groups for access control
- View localized prices per country
- Auto-bundle product IDs that arrive before manual configuration
When to use Product Hub
Configure Product Hub first, before setting up paywalls in Mission Control. Paywalls reference product bundles, not raw product IDs — without bundles in place, you can't compose a paywall.
Come back to Product Hub when:
- You add new in-app products to the store and need them in Apphud
- You reorganize how products map to access tiers (permission groups)
- You combine cross-platform variants of the same subscription into a single bundle
Prerequisites
Before configuring products, your store integration must be connected:
- App Store Connect for iOS apps — see App Store Connect Setup
- Google Play for Android apps — see Google Play Setup
- Stripe or Paddle for Web subscriptions — see Web Products
Important NoteWithout a store integration, Apphud cannot import product IDs, pricing, or subscription metadata.
Key concepts
Product ID
Product is a cross-platform in-app purchase that represents App Store and Google Play non-renewing purchases and subscriptions.
A product ID is its identifier from one of your connected stores (App Store, Google Play, Stripe, Paddle, Xiaomi). Each product ID carries its own type, duration, and price — fetched from the store. Apphud does not create product IDs; they originate in the store and are imported.
Base Plan ID
For Google Play subscriptions, Apphud requires both the Product ID and the Base plan ID (for example, monthly, annual, etc.). A single Google Play subscription product can have multiple base plans, each representing a different billing period — both fields together identify the exact billing option.
Product bundle
A group of one or more product IDs representing the same logical offering. For example, an "Annual" bundle might contain an iOS subscription, an Android subscription, and a Stripe subscription — all unlocking the same content for the user.
Paywalls reference bundles, not raw product IDs. This lets you:
- Swap or update underlying store products without changing paywall configurations
- Serve cross-platform users with one paywall definition
A bundle can also contain a single product ID, for cases without cross-platform mapping.
Permission group
The access tier products in this group unlock. Buying any product in a permission group grants the same set of features, so your app code can check whether the user is in a specific permission group instead of hard-coding product IDs.
For most apps, one permission group is enough. Use multiple only when your app has genuinely separate access tiers — for example, Basic vs Premium vs Lifetime.
Do not create separate permission groups for:
- Monthly vs annual billing periods — these belong in one group, as separate bundles
- Introductory or promotional offers
- A/B test variants
- Localization or platform differences
Permission groups
The Permission groups tab manages access tiers.
Default permission group
The Default permission group - Premium - cannot be deleted. It is the destination for auto-generated bundles when new product IDs arrive without explicit configuration.
You can rename Premium to better describe your app's access tier, e.g., "Gold".
For this, click on the pencil icon near the group name, enter the new name, and save it.
Create a new permission group
- Open the Permission groups tab.
- Click + New permission group.
- Enter the group name. Mind that special characters are not allowed in permission group names.
- Save.
The new group becomes available when assigning bundles in the Product bundles & IDs tab.
Delete a permission group
The default group cannot be deleted.
Only a permission group with no associated products can be deleted. To delete a group with products, move product bundles to a different group.
Once zero products remain, the delete function will be enabled.
Click the trash icon on a permission group row.
Product bundles & IDs
The Product bundles & IDs tab opens in Product Hub by default. It lists every bundle and the product IDs inside.
For each bundle row you see:
| Column | What it shows |
|---|---|
| Product bundle & ID(s) | Bundle name with its product IDs nested below; each ID shows a store icon (App Store / Google Play / Stripe) |
| Permission group | Which permission group is the bundle assigned to |
| Type | Product type as reported by the store. App Store: Subscription, Consumable, or Non-consumable. Google Play: Subscription or In-app |
| Duration | Weekly, Monthly, Annual, Daily, Lifetime, etc. |
| Price | Localized price for the country selected in Display prices for |
Why Google Play products show only "In-app"The App Store declares each product's type — Consumable, Non-consumable, or Subscription — as metadata you set at creation, so Apphud displays the exact type.
Google Play has no consumable/non-consumable product setting: for one-time products it only distinguishes "subscription" from "in-app product". Whether a Google Play product behaves as consumable or non-consumable is decided by your app's code (calling consumeAsync() vs acknowledgePurchase()), not by store metadata.
Since that distinction isn't available from the store, Apphud labels every non-subscription Google Play product as In-app.
Create a product bundle

To create a bundle manually:
- Click + New product bundle in the top right of the Product bundles & IDs tab.
- Enter the Bundle name (required) and select the Permission group (required).
- Add one or more product IDs from your connected stores.
Expand each store you want to include and fill in its identifiers:- iOS — Product ID
- Android — Product ID and Base plan ID (for subscriptions)
- Stripe, Paddle, Xiaomi — store-specific identifiers
- Save.
Note that only stores you've manually added in Settings appear enabled in the bundle editor. To add another store, follow the link at the top of the dialog ("To add more, go to Settings").
The bundle becomes available for use in paywalls.
Find a bundle
The Product bundles & IDs tab supports search, sort, and expand/collapse:
- Search — use the search field at the top to find a bundle by name, product ID, or permission group.

- Sort alphabetically — click the Product bundle & ID(s) column header to sort A→Z or Z→A.
- Expand or collapse all — click the toggle arrow in the top-left of the column header to expand every bundle (showing all product IDs nested below) or collapse them to a bundle-only view.
- Expand or collapse one bundle — click the arrow on a single bundle row to toggle just that row.
Edit a bundle
Use the bundle edit dialog to rename a bundle, change its permission group, or add or update product IDs for any store.
To edit a bundle:
- In the Product bundles & IDs tab, find the bundle. Search by name or sort alphabetically if the list is long.
- Click the ⋯ menu on the bundle row and choose Edit.
- In the Edit product bundle dialog:
- Change the Bundle name if needed.
- Change the Permission group assignment via the dropdown.
- Expand any store section to view, add, or update its product IDs.
A green checkmark next to a store name indicates a product ID is already configured for that store.
- Click Save.

Bundle Editing - Common Use CasesTo move a bundle to a different permission group - just change the Permission group in the dropdown and save. Existing product IDs and store mappings will be preserved.
The bundle products now appear under the new permission group wherever it's referenced.To add a product ID from another store to an existing bundle. - expand the relevant store section, fill in the Product ID (and the Base plan ID for Android subscriptions), save.
The bundle now contains products from multiple stores; cross-platform users see the right product on their platform.
Sync products from store (iOS only)
Use Sync iOS products to import the latest product list and metadata from App Store Connect.
Please note that you must upload App Store Connect key in App Store settings in order to sync products automatically.
Syncing updates metadata only. Existing analytics and user access are not affected.
Auto-generated bundles
When new product IDs reach Apphud before you've configured them — for example, through Server notifications — Apphud automatically creates a one-product bundle for each new ID and assigns it to the default Premium permission group.
A banner above the bundle list announces this. Click Accept & hide markers to dismiss the banner.
Auto-generated bundles behave like any other bundle — rename, regroup, or reassign them as needed.
Coming from the previous version of Apphud?In the previous version, unassigned products appeared in a special
undefinedpermission group.
The group's existence was not obvious to users and generated support tickets. The auto-bundle behavior in 2.0 replaces this: unassigned product IDs now land in Default, surfaced via the banner above.
Display prices for a specific region
Use the Display prices for [country] selector at the top of the tab to see localized product prices. The displayed values depend on store configuration and may vary because of:
- Currency conversion
- Regional pricing rules set in the store
Changing the selector affects only what's shown in this view — store prices are not modified.
Product Prices - Important NotePrices will appear after the first transaction in the selected territory has been recorded in Apphud.
Deleting a bundle
If you delete a bundle, all product IDs in it will be deleted as well. Bundles cannot be restored.
Those bundles that are used in Targeting's paywalls cannot be deleted.
Where products are used
Once configured in Product Hub, products feed into:
- Paywalls — reference bundles to compose paywall product lists
- Targetings — bind paywalls (which use bundles) to audiences via Mission Control
- A/B tests — vary paywalls in targetings
- Rules — trigger paywalls or screens based on events
- Flows — multi-step purchase flows
Product configuration is the foundation; the rest of monetization in Apphud builds on it.
FAQ
Why is "Prices missing?" showing up?
This is just a reminder that prices for products will be shown only if Apphud has received a purchase of that product.
Where did the undefined permission group go, I had many products there?
undefined permission group go, I had many products there?It's gone in 2.0. Unassigned product IDs now auto-bundle into the default permission group, which is Premium.
Can a product ID belong to multiple bundles?
No, one product ID can not appear in more than one bundle. If you try to add a product to additional bundle you'll get a notification that the product ID already exists.
Can a bundle belong to multiple permission groups?
No. Each bundle is assigned to exactly one permission group. If two products should unlock different access tiers, place them in separate bundles.
What's the difference between a product bundle and a permission group?
A bundle groups product IDs that represent the same offering across platforms or pricing variants (for example, iOS, Android, and Stripe versions of the Annual subscription). A permission group is the access tier — what the user unlocks by buying any product in any bundle assigned to that group. Many bundles can share one permission group; one bundle has exactly one permission group.
What if I add a new product in the store after my app is live?
When the product first reaches Apphud — typically via a purchase event, SDK call, or server notification — an auto-generated bundle is created and placed in Default. The bundle list shows a banner. Rename or reassign the bundle as needed.
Can I delete a bundle that's used in a paywall?
Deleting a bundle is not blocked, unless the paywall is currently in a running experiment (the deletion errors out in that case).
If the paywall isn't in a running experiment, the bundle and its products are soft-deleted; any paywall_items referencing the bundle are removed, so the paywall simply loses those products. There's no automatic revert to the Default paywall — the paywall stays attached to its placement / targeting with fewer items.
Where can I set the commitment plan preference for the product?
While the commitment plan eligibility is configured on product-level in App Store, in Apphud, the preference toggle(Prefers commitment plan) is defined per product, per paywall: each paywall using the product can independently decide whether to prefer the commitment variant.
If the same product appears in multiple paywalls and you want consistent commitment behavior, enable the preference in each paywall. See Apple Commitment Plans.
