Give your simulator superpowers

RocketSim: An Essential Developer Tool
as recommended by Apple

Win a copy of The macOS App Icon Book with thisfree giveaway

Promotional offers: Increase App Revenue using discounts

Promotional offers allow you to increase the revenue for your app by promoting a user’s subscription to a new offer. You can use this technique to win back users who canceled their subscription or to upsell users from a monthly to a yearly plan.

Implementing promotional offers differs per project depending on whether you use StoreKit directly or 3rd party tools like RevenueCat. I won’t go into the details of code implementations, but I will inspire you on how your app’s revenue can grow by promoting users to new offers.

What is a Promotional Offer?

Promotional offers allow you to present discounted pricing for auto-renewable subscription products. They can be effective in winning back lapsed subscribers or retaining current subscribers.

For example, RocketSim users of a monthly plan will get a promotional offer to switch to a yearly plan and save about 50% on their monthly costs:

A Promotional Offer example as present inside the RocketSim Developer Tool.
A Promotional Offer example as present inside the RocketSim Developer Tool.

Discounts like the above are often a win-win in case the app comes with a discounted annual plan (more about that later).

Configuring a Promotional Offer in App Store Connect

You can configure a promotional offer directly inside App Store Connect. Start by navigating to the subscription product for which you want to create a discounted offer. and press the plus button behind the “Subscription Prices” header:

You can create a new Promotional Offer inside App Store Connect.
You can create a new Promotional Offer inside App Store Connect.

For further instructions, I’d like to forward you to Apple’s up-to-date documentation: Setting up promotional offers.

Stay updated with the latest in Swift & SwiftUI

The 2nd largest newsletter in the Apple development community with 19,200 developers. Don't miss out – Join today:

You can always unsubscribe, no hard feelings.

Implementing Discounted Offers in your app

The implementation consists of two parts: fetching the Promotional Offer and writing business logic to determine whether the user should see a discounted offer. For the first part, I recommend reading through Apple’s up-to-date documentation: Implementing promotional offers in your app. Depending on whether you use StoreKit directly or not, you might want to look into the documentation for the 3rd party tool you’re using. For example, here’s RevenueCat’s documentation.

The business logic has to be implemented by yourself. For RocketSim, I decided to create a UpsellProvider which will provide a UpsellMenuItemViewModel if the user can be promoted:

final class UpsellProvider: ObservableObject {

    static let standard = UpsellProvider()

    @Published var upsellMenuItemViewModel: UpsellMenuItemViewModel?

    var hasUpsell: Bool {
        upsellMenuItemViewModel != nil

    private let purchaseInfoFetcher: PurchaseInfoFetching
    private let activeProductFetcher: ActiveProductFetching
    private let licenseKeyStore: LicenseKeyStoring

    // ...

Since it’s an observable object, I can use this instance anywhere in the UI to show the Promotional Offer. Anytime the app becomes active, I’m reevaluating whether a discounted offer should be displayed. The business logic depends on the offers you like to display but generally looks as follows:

  1. Fetch the user’s current subscription details
  2. Use the subscription details to determine whether the user becomes eligible for a discounted offer
  3. If your business logic determines eligibility, you need to fetch and see whether there’s a promotional offer available for the user’s subscription product.
  4. Display the discounted offer in the UI

Different techniques for displaying promotional offers have varying goals per technique. Let’s go over a few examples.

Common Techniques to Increase App Revenue

Win-back campaigns and discounted offers are not unique to mobile applications. It’s a common technique used by all kinds of digital products. You could even say it’s similar to real-life examples like the upsells near the supermarket checkout.

Promotional Offers aim to increase your app’s revenue and prevent users from churning. Many think discounted offers will cost you money, but the opposite is true. If done right, you’ll only show offers to users that are likely to churn. You can use analytics tools to predict these patterns based on other users, or you can think smartly ahead.

Promoting monthly subscribers to a yearly plan

The best example to explain this principle is the scenario of promoting monthly subscriptions to yearly subscriptions. Imagine an app with the following two products:

  • A yearly plan of €30 (€2,50 per month)
  • A monthly plan of €6

The yearly plan looks more attractive, but there will still be users who decide to go for a monthly plan to see if they like the product. Your analytics tool can show the average number of renewals for a monthly plan. For example, 36% of RocketSim’s monthly subscription users renew at least 2 times. In other words, I should show the discounted offer before the end of the 3rd month to ensure I’ve got enough users to see the discount.

It’s important to understand these users would likely stop their monthly subscription (based on the statistics). Therefore, it’s either losing monthly revenue or trying to retain those users by showing a discount.

The trick is to create a Promotional Offer that feels like a win-win. In the above example, there’s quite a gap between the monthly and yearly plans. We could offer a 50% discount on the monthly price and still make more than the yearly plan: €6 * 50% = €3 (€36 per year). Yet, your users will be happy as they’ll spend 50% less than if they continue their monthly subscription.

Targeting non-renewing subscriptions

Inside your app, you should be able to determine whether a user already canceled their subscription. It’s a familiar pattern: users purchase a subscription and cancel it immediately to avoid accidentally renewing.

If users are still active in their last month, it’s likely they formed a habit, and they will renew themselves. However, you can increase the chances of renewing by making it easier for them to perform the renewal. This is where your Promotional Offer comes into place: provide a discounted renewal for their current plan. Depending on how often your users return to your app, you want to show the offer within the last weeks or days before the subscription ends.

Win back previous subscribers

It might be that you’ve not been able to promote users before their subscription ended. Those users paid for a subscription before but still need to renew themselves. Maybe they only sometimes use your premium offering but return to use the free product regularly. In this scenario, you can show a Promotional Offer to win back those users. You’ll have to experiment with pricing to determine whether the user didn’t renew due to the current subscription price or because they’ve got other reasons. Using analytics and experiments will be helpful in these cases for optimal results.


Promotional Offers are an excellent way for you to increase the revenue of your app by showing discounted offers to your users. If done right, you’ll make more money than you lose. The implementation differs depending on your tech stack, but you’ll always have to write the business logic for determining eligibility yourself.

If you like to prepare and optimize, even more, check out the optimization category page. Feel free to contact me or tweet me on Twitter if you have any additional tips or feedback.