Apphud – integrate, analyze and improve in-app purchases and subscriptions in your iOS/Android apps


Introductory offers in iOS

Introductory offers is a great way to attract new customers to your cool app. Everybody loves discounts – so why not to offer people what are they waiting for? A discount! Apple designed introductory offers specially for this.

Kinds of introductory offers

We already talk about introductory offers in our previous article. If you already read it, you may skip this block.

There was only one kind of introductory offers till iOS 10 – free trial. Now this list was expanded to three options: Free trial, Pay as you go, Pay up front.

Pay as you go

Using this model you offer one-time discount for one or several subscription periods. Apple will withdraw regular subscription’s price at the end of these periods. For example, a user can subscribe to your service worth $3.99 per month. This price is valid for 2 weeks, after which a user can continue using your service at a regular price $9.99 per month.

Pay as you go
Pay as you go

The price of Pay as you go offer must be less than a regular price. For example, you can not offer a user to pay $19.99/month during the first 2 months and $9.99/month after. This issue is partially solved by using of Pay up front model.

Here are available begin durations depending on subscription duration:

Pay as you go durations

Pay up front

Here you offer users to pay immediately for several months (1, 2, 3, 6 or 12) in advance. At the end of this period user will pay for subscription at a regular price. For example, you can offer 3 months of cloud storage with a one-time payment of $14.99. And after these 3 months a user will pay $9.99 per month. There are 2 main differences from Pay as you go offer:

  1. The price of Pay up front offer does not have to be less than the cost of the regular subscription.
  2. The number of periods where the offer is valid is always 1. In other words, the offer is valid for only one period of 1, 2, 3, 6 or 12 months.
Pay up front
Pay up front

Free trial

And, of course, our good old friend – free trial. We can notice that free trial is a kind of pay up front model, where starting price is 0.

Several notices

  • Every subscription can only have one introductory offer per territory (country). Thus you can create a separate offer for each territory. But only one per territory. It’s enough to create one introductory offer for all territories in most cases.
  • A user can use only one introductory offer per products group.
  • Introductory offers are available for iOS 10, macOS 10.12.6, tvOS 10 and later.

How to create Introductory offer?

Now when we know what are introductory offers, let’s create them.

Go to App Store Connect, open “Features” section and choose your subscription:

In app purchases

Click at “+” near “Subscription Prices” and choose “Create Introductory Offer”:

Subscription settings

Select all territories where this offer will be available:

Select countries

As we previously noticed, you may have only one introductory offer per subscription and per territory.

Enter start date and end date:

Enter start and end dates

Choose one of 3 kinds of subscription offers:

Select type of promotional offer

Enter the following info depending on your previous selection:

  • Pay as you go, pay up front: the number of periods and a price
  • Free trial: a duration of free trial

If you chose Pay as you go or Pay up front, you will be offered to set up a price at every territory:

Introductory offer prices

Click “Done”. Good job! You created an introductory offer.

Introductory offers API

There is a special class for introductory offers called SKProductDiscount. This class is a part of StoreKit library which handles your app’s In-app purchases. Every product (an object of SKProduct class) contains an optional IntroductoryPrice property of type SKProductDiscount.

SKProductDiscount contains information about introductory offer:

  • paymentMode is an introductory offer kind. The possible values are: payAsYouGopayUpFrontfreeTrial.
  • price and priceLocale are price and locale of introductory offer.
  • numberOfPeriods is a number of introductory offer periods. For pay up front and free trial it will be always 1.
  • subscriptionPeriod is a duration of introductory offer period. It can be a day, a week, a month or a year.

You can use this API to correctly show subscription terms to a user, including subscription duration and price.

Do not show a subscription offer to a user if he is not eligible for it. It’s very important to check this beforehand.

User eligibility determination

You must check user eligibility before showing him an introductory offer. The fact is that user can use an introductory offer just once per subscriptions group. For example, if there are 3 plans in your app: Bronze, Silver and Gold, which are in one subscription group, and every plan offers a free weekly trial, a user can activate only one of these free trials. And he can activate a trial just once (in this subscriptions group). If he has done it once previously, we can not show him a “Try the app for free” screen. Instead of this we should redirect a user to a screen where he can buy a paid subscription.

It’s your responsibility to check this.

And here are the funny things begin ?. There are no functions in StoreKit to check if user already used introductory price or not. The only way is to keep all subscriptions receipts for all subscriptions groups somewhere (e.g. on your server). When it’s time to check user eligibility, you should find all transactions of every receipt from necessary subscriptions group. When you find it, look through their is_trial_period и is_in_intro_offer_periodfields. If these values are equal to 1 somewhere, a user has already used free trial/introductory offer.

Too hard, huh? You will need your own server to store all transactions. You just wanted to know if user can activate introductory price or not…

We faced this problem long time ago and decided to solve it. So the idea of Apphud revealed. Apphud is convenient analytics for iOS auto-renewable subscriptions. One of it’s features is a sending subscriptions-based events (e.g. subscriptions renewals, cancellations or refunds) to your favorite analytics service (like Amplitude, Flurry or Mixpanel) for further analysis. The project is currently in Beta and you can participate in testing! All you need it to visit Apphud and enter your email.

Thus, new users can always activate introductory offers. Among current subscribers – only those who have never used an introductory offer in this subscription group before.

Some notes

  • Always check user eligibility before showing him an introductory offer.
  • It’s better to check user eligibility as soon as possible: every delay at showing purchase screen may lead to a conversion decrease.
  • Introductory prices are being shown on App Store, so you can use this for a marketing purposes. These users can start a trial or activate an introductory offer right on the App Store:
You may advertise offers right on the App Store
You may advertise offers right on the App Store
  • Always display introductory offers in a clear way to users. You may use StoreKit API for this. Follow App Review guidelines to avoid app rejection.
  • Show a subscription offer to a user as soon as possible. You may increase a conversion to purchases using this approach.
  • You can (but it’s not mandatory) to add the following link to your app so users may changes their subscription just in couple of taps:


Introductory offer is an amazing instrument to attract new customers. In addition to reduced to 15% Apple’s commission for a loyal customers it may help you to earn much more. But unfortunately there are lots of stumbling blocks here, like your own server setup just to check user’s eligibility.