What’s new in Apphud: SplitMetrics Acquire Integration, Experiments Improvements, SDK UpdatesLet’s see
Why Apphud?PricingContact
September 11, 2019
10 min read

How to increase the subscription revenue using subscription offers

Since iOS 12.2 Apple added new cool feature called Subscription offers. Apps with auto-renewable subscriptions can offer a discounted price for a specific duration for existing or previously subscribed customers.

How to increase the subscription revenue using subscription offers

These offers provide the flexibility to create unique promotions to grow and retain your customer base. They can help win back subscribers who have canceled their subscriptions or promote an upgrade to another subscription at a special price. Once the promotional period ends, the subscription automatically renews at the standard price. However, to implement this nice feature you have to generate a signature on your server. Apphud does the dirty job for you, so you don't have to write a code.

Set up Subscription Offers in App Store Connect

To create a new subscription offer go to App Store Connect, then go to your app's subscription product page. Click on the "+" option under "Subscription Prices" and click on "Create Promotional Offer".

Set up promotional offers 1Set up promotional offers 1

You will need to specify Reference Name, which is just a title, and Promotional Offer Product Code, which is actually your offer's identifier.

Set up promotional offers 2Set up promotional offers 2

Then you will need to specify pricing and promotional offer type. Offer types are the same as in introductory offers:

  • pay as you go;
  • pay up front;
  • free.

Don't forget to save changes.

Subscription Key

As being said above, a special signature must be generated before purchasing subscription offer.

Go to "Users and Access" section, then select "Keys" tab. If you don't have any subscription keys, click on "Generate Subscription Key". You will be prompted to enter its name.

Set up promotional offersSet up promotional offers

Once created, click on "Download API Key" and keep downloaded file in the safe place.

Set up promotional offers 4Set up promotional offers 4

Subscription Key file name has the following format: SubscriptionKey_[KEY_ID].p8, where KEY_ID is your Key Identifier.

Generating a signature

Here comes the most difficult and, probably, unneeded part. Apple decided to play the flow safe by adding a signature generating to avoid possible StoreKit jailbreaks in order to get discount. As we said previously, these offers are available only for lapsed customers. But we think that paying users will not try to break the system for a discount.

You will have to create SKPaymentDiscount object and add it to your SKMutablePayment.

Let's take a closer look.


Objects with this class are stored in discounts array of your SKProduct object. All your subscription offers are instances of SKProductDiscount. Like introductory offers, you can get duration, price and number of discount periods. This class is mostly used for displaying information to a user.


This object is created using data from your server's signature API method. If we open header file will see a single `init` method:

public init(identifier: String, keyIdentifier: String, nonce: UUID, signature: String, timestamp: NSNumber)

  • identifier is your subscription offer identifier from SKProductDiscount.
  • keyIdentifier is your subscription key identifier.
  • nonce is a unique UUID value that your server defines. This value is cached for 24 hours. The string representation of the `nonce` used in the signature must be in lowercase.
  • signature is your base-64 encoded signature string.
  • timestamp is a timestamp that your server generates in UNIX epoch time format, in milliseconds; the timestamp keeps the offer active for 24 hours.

Before generating a signature, you should upload subscription key to your server. You should use it to sign a special string combined from following parameters: appBundleID, keyIdentifier, productIdentifier, offerIdentifier, applicationUsername, nonce, timestamp. Apple has an example code on Node.js.

More details could be found here.

Redeeming offer

To make a purchase with a discount you should add the SKPaymentDiscount object to your payment.

let payment = SKMutablePayment(product: product)
payment.paymentDiscount = discount

What's next?

You generated a signature and successfully purchased a subscription offer. That is awesome! But subscription offers won't increase your revenue without additional tools. You should show subscription offer at the right moment. When? For example, when a user cancels a subscription. You can detect this moment using Apple Status Notifications.

Win back lapsed subscribers

With subscription offers you can win back your subscribers. But you will still have to write a lot of code: implement subscription offers and push notifications, track users subscriptions, store App Store receipts and find users by their transaction identifier from Apple's status notification. That's not easy. Adding some flexibility will require much more time.

Ask customers why did they cancel a subscription

Attracting new users is much more expensive than keeping current subscribers. That is why it's important to know why your customers lapse, why they cancel trial or paid subscription. Many users cancel subscription, because they don't need the app anymore, and your offer just won't work. In this case, instead of trying to win back such users, you should better ask them, why they lapsed and what's wrong with the app. Maybe your customer didn't see the full power of premium service. Or you should change the way you describe premium features?

Show discounts for incentive actions

For example, you can implement a referral system and give user a discount or additional free trial. This could work, but requires many hours of work.

How it works in Apphud

UPDATE. Since the publication of the article Rules has been significantly improved in Apphud. Now we support scheduled and manual push campaigns, allowing you to run campaigns whenever you want to your custom audience.

Apphud tracks subscriptions, automatically asks lapsed customers and offers a discounts if applicable without writing a code. You can do everything in dashboard. You also don't have to implement offer's purchase screen controller. Screens are created in our dashboard as well.

We call these mechanics of winning back subscribers as Rules. You can find more details about creating the rules here.


Keeping current subscribers and winning them back has become more important in iOS 13, because Apple has simplified the path to the list of active subscriptions. Now they appear at the screen with your apps updates:

Manage subscriptions in iOS 13Manage subscriptions in iOS 13

You can manage subscriptions much easier in iOS 13.

This means, you will probably lose plenty of subscribers, because now users will more likely don't forget to cancel their subscription. And you will probably need a solution to increase revenue from existing subscribers. Apphud will help you will that. Try it for free.

Co-founder at Apphud
Ex iOS app and game developer. 11 years in the industry since iOS 3. More than 50 apps are in the background with 4 exits. Entrepreneur and traveler.