In-app products - App Center Docs
In-app types

In-app products

MonetizationLast updated: Jan 14, 2025

In-app products extend the app functionality with extra features.

If a user has a demo version of the app, they must purchase the full version or take the trial before adding in-app products.

In-app types

There are two types of in-app products: expandable and non-expandable.

Expandable

Expandable products allow a user to buy a number of extra units to be used in the app. For example, an additional set of keywords, reports, Telegram channels for viewing, and so on. Users can buy limit extensions more than once.

Non-expandable

Non-expandable products make available some features of the app that are defined by the developer. For example, a Pro plan, access to some pages of the app, unlocking a feed with updates, and so on. Users can buy these kinds of products just once.

A non-expandable product can have a trial version, which shows a user the functionality of the product, but for a limited time. Users can take a trial in-app product even using the trial version of the app. If you want to make your in-app feature available with the trial, connect with your account manager.

Payment and subscription

All in-app products work on a subscription basis in the same way that Semrush and any app in the App Center does. When a user adds keywords for your app or gets the Pro plan, we automatically begin charging them monthly for in-app subscription in addition to the Semrush subscription.

Note that if a user purchases an in-app product before the Semrush subscription recurring billing date, they will be charged only for the days left before renewal. Next month the user will be charged for the in-app along with their Semrush subscription.

A user gets a seven-day money-back guarantee on all in-apps as well as the Semrush subscription. To refund the payment, a user makes a request to app-center@semrush.com, and we refund the payment if the request is made within seven days after the purchase.

A user can downgrade or upgrade their plan at any time. If they decide to cancel or downgrade their subscription within the first seven days, they get a full refund.

Keeping in-app purchases on track

Each in-app product has a unique permanent ID, even for the same app in Production and testing environments. You will receive those IDs from us right after the app registration.

To find out what in-app products a user has purchased or taken a trial of, use the GET parameter and get the encoded JWT string. You can decode it and check the active_products parameter in the payload. To learn more about the JWT content, refer to JWT reference.

The active_products parameter contains product IDs and value, which is always 1 for non-expandable in-app products purchase. It's increased with every expandable in-app product purchase.

If a user doesn't have any in-app purchases:

... "lang": "en",

If a user purchased one expandable in-app product once:

... "active_products": [ {"id": "6f9f9120-8933-4cfa-8f4b-44e370fd8828", value: 1} ], "lang": "en",

If a user purchased one expandable in-app product twice:

... "active_products": [ {"id": "6f9f9120-8933-4cfa-8f4b-44e370fd8828", value: 2} ], "lang": "en",

If a user purchased a non-expandable in-app product:

... "active_products": [ {"id": "7f9f9120-8933-4cfa-8f4b-44e370fd8828", value: 1} ], "lang": "en",

If a user purchased one expandable in-app product twice and one non-expandable in-app product:

... "active_products": [ {"id": "6f9f9120-8933-4cfa-8f4b-44e370fd8828", value: 2}, {"id": "7f9f9120-8933-4cfa-8f4b-44e370fd8828", value: 1} ], "lang": "en",

To learn more about managing active_products, refer to SM.client('requestInAppPurchase').