Subscription offer codes can help you acquire, retain, and win back subscribers as you grow your business. Learn about configuration options, creating a great experience, and measuring redemptions. We'll explore how to set up customer eligibility, territory, price, and expiration in App Store Connect. And we'll take you through managing your offers, integrating them into your application and backend systems, and measuring performance.
Thank you all for joining today's session. We're excited to introduce you to subscription offer codes, which add new subscriber growth opportunities for your auto-renewable subscriptions on the App Store.
First, let's introduce ourselves. I'm Bryan Eisenstadt, and I'm on the App Store Monetization team. Hi, I'm David Wendland, a global technical advocate with the App Store Commerce team. I'm Kenny Elmore, and I'm on the App Store Operations team.
Today, I'll briefly introduce you to offer codes. Then David will discuss engineering of the feature, and Kenny will walk through setting up your code campaigns in App Store Connect and measuring offer code performance.
Let's begin with our first session. I'll introduce you to subscription offer codes, explain how they work, and describe the ways you can start using them to grow and retain your business.
We're excited to share that offer codes are now available, and you can begin generating codes in App Store Connect.
Offer codes are complementary to our other offer types that you may already be familiar with but provide even more flexibility, giving you the ability to merchandise subscription offers outside of your app.
Offer codes can help you acquire, retain, and win back subscribers.
They are unique, one-time use alphanumeric codes that you can choose to distribute across both your online and offline channels.
Once distributed, your customers can seamlessly redeem offer codes in the App Store or directly in your app when using the StoreKit API, which David is going to talk about more shortly. At the end of the offer period, the subscription auto-renews at the standard price, unless a subscriber cancels or turns off auto-renewal.
There are a number of different ways offer codes can be used, and you have the flexibility to distribute them however you like.
Codes can be distributed in your digital marketing channels, such as email, to acquire or win back subscribers. For example, a sports league might email an offer code for an extended free trial to season ticket holders. As an add-on where a subscription service complements a physical good or service. For example, an exercise bike company could include an extended trial for virtual classes with the purchase of a bike.
In physical retail or at events, including industry conferences. For example, a music service could hand out flyers with offer codes at concerts or festivals.
Distributed via third-party partners as part of co-marketing campaigns and partner-marketing initiatives.
A mobile phone carrier might distribute offer codes for a video streaming service to its customers via email.
Codes can also be distributed by customer support teams who might give a customer with a service issue a free or discounted period in lieu of sending the customer to AppleCare for a refund.
You will create codes in App Store Connect and have the ability to configure your offer code campaigns for new, existing, and/or lapsed subscribers.
You can create up to 10 active offers per subscription SKU and have the ability to create batches of between 500 to 25,000 codes, up to a maximum of 150,000 per app, per quarter.
You'll be able to choose each batch's expiration date, up to a maximum of six months from the date of creation.
After you've configured and distributed your codes, customers can redeem directly on the App Store through the Redeem Gift Card flow found in the account page or within your app by using Apple's provided UI.
The Apple UI handles the full redemption experience, and if an app isn't already installed, the user will first be prompted to download the app. Let's look at that customer journey in more detail.
If you're distributing your offer codes offline, such as at an event or with a physical product, the customer can seamlessly redeem the code from within your app when you use the presentCodeRedemptionSheet.
You might consider adding a Redeem Code button to your app's paywall, like the example here.
After a customer taps your custom Redeem button, the system automatically provides a series of code-redemption screens, the first being the code input page.
Once a customer types in the code and that code is valid, the offer details page is shown.
If for any reason the code isn't valid, the customer will see a clear error message explaining why the offer is unavailable to them.
Now, if you're distributing on digital marketing channels, such as email, each code will have an associated deep link URL for distribution on these channels.
You'll be able to use a unique URL to seamlessly deep link the customer from your email to the redemption flow. So, in this example, Ocean Journal is offering a one-month free trial via email, and once the customer taps Try It Now, they're deep linked into the redemption flow.
If the app isn't already installed, the customer will first be prompted to download the app.
Once the app has downloaded, the offer details sheet will appear and the customer can then redeem and subscribe.
You'll notice the code input step isn't required here, as the code is part of the URL.
However you decide to distribute your offer codes, we recommend communicating the code expiration date alongside other eligibility or availability limits in your marketing communications.
Offer codes can also be utilized to cross-promote subscription apps.
In this example, offer codes are used to assist with migrating customers from an app that's being sunset to a new app.
ZenWell clearly communicates that it is closing and the customer's current subscription will expire.
ZenWell then uses an offer code deep link to give those customers a special offer to a new app, Serenely, and since they're using a deep link URL associated with each code, the customer can seamlessly download the new app and then redeem and subscribe.
Additionally, offer codes can be used offline at events or industry conferences. In this example, the unique offer code is printed on flyers which are handed out at a music festival, giving attendees a three-month free subscription to a music streaming service.
Later, the same app sends lapsed subscribers an offer code via email for an additional one month free to retry the service.
Offer codes are complementary to our other offer types but now give you much more flexibility. Each offer type has a distinct use case.
So let's quickly summarize the three different offer types.
Offer codes can be used for acquiring new, retaining, and winning back subscribers.
Offer codes give you the unique ability to merchandise your subscription offers outside of your app, online and offline, but with a seamless customer experience.
You can configure 10 active offers per subscription, with a limit of 150,000 codes per app, per quarter.
And customers can redeem one code per active offer.
Offer codes are available now, and we can't wait to see how you use this new feature to acquire and retain subscribers.
Next, my colleagues David and Kenny will cover some of the finer details around implementing an offer code redemption flow and how to set up offer codes in App Store Connect. So I'll hand it over to my colleague David to talk about engineering offer codes.
Thank you, Bryan. Hello, everyone. I'm David Wendland, a global technical advocate for the App Store Commerce team based in Cupertino. Today, I'm going to discuss offer codes and give you things to consider when planning and implementing offer codes into your products, application, and back-end systems.
I'm going cover this in three sections: configuring your offer codes, then dive into the redemption experience and things to consider, and lastly, the updates to subscriber status with offer codes.
Let's begin with configuring your offers.
So, to get started, the first thing to review are the different configurations available. You can see the product durations listed in the far left column, and then the corresponding offer durations to choose from on the far right: pay as you go, pay up front, and free trial.
These options should be familiar, as these are the same choices available for introductory or promotional offers. For example, if you have a monthly subscription, then you can configure a pay-as-you-go offer from 1 to 12 months long. Or you can choose a pay-up-front or free-trial offer with any of the durations listed.
Now, a configuration that is unique to offer codes is that you can restrict redemptions by customer cohort: new, existing, or expired. The important thing to know here is that each cohort only applies per subscription group, meaning it is only checking if the customer is new, existing, or expired to that subscription group that the offer code is for.
With that, it's a best practice to use your existing products and groups. This will have long-term benefits by leveraging what you already have.
Lastly, when configuring your offers, you will be asked if you want to allow customers to receive the introductory offer along with the redeemed offer code.
If allowed, the intro offer goes into effect immediately, followed by the offer code.
Or if you choose to not allow, then subscribers will begin their offer code period immediately, as you would expect. But they will retain their eligibility for an introductory offer. I will illustrate this behavior a little bit later so you have a more thorough understanding on this choice.
Now, note that this configuration only applies to subscribers that are eligible for the introductory offer in the first place. Subscribers that have already received an introductory offer for a product in the same subscription group will not receive another.
They must be coming from an inactive state, so only new or an expired subscriber can receive an introductory offer in any manner.
And I wanted to note that this configuration cannot be changed or reverted.
And remember, this does not change the customer's eligibility. It only determines the behavior at the time of redemption. So, a subscriber could be eligible to receive the introductory offer in the future.
Now, let's discuss implementation. I've broken it down into four pieces. To start, in App Store Connect, you will create your offer campaigns per SKU and then generate the codes and download them to distribute to your subscribers.
Next is code management. Ideally, you have a system to manage these codes. It is important that you keep track when your codes are distributed, digitally or in print, as once they are out of your control, you should treat them as used.
Also consider a real-time distribution method, where codes are only given to customers once you have verified their subscriber status or eligibility criteria. Next is your client application. Ideally, you optimize your app to support the in-app redemption sheet for the best customer experience and ensuring your app handles external transactions gracefully and offers onboarding. Because offer codes can be redeemed outside of your app, initializing the TransactionObserver on app launch ensures no transaction is missed.
Now, if you have eligibility logic, that will be client and server.
And this logic can take into account any info you have on your customer's journey, such as their offer-type consumption history or current status. This can be used to determine which SKUs and subscription offers to merchandise to customers for the best experience.
Lastly, there is the offer code consumption history available in the subscriber's App Receipts, and this data can be used when determining eligibility for future campaigns.
Now let's discuss some redemption topics. I will cover some restrictions and limits to be aware of and then discuss the redemption experience and how those work with your app. And then illustrate customer experience with the intro and offer code configuration choices.
Some restrictions to be aware of is that subscribers are limited to one redemption per configured offer code and are uniquely identifiable by the name added when set up in App Store Connect.
Also be aware that subscribers cannot redeem an offer code that will result in a downgrade from their current level of service. It must be for a higher-tiered SKU or the same SKU that they are currently subscribed to.
Ideally, this is taken into account with your eligibility logic when targeting subscribers with an offer.
Now let's discuss some specifics on code redemption, as there are three primary methods for customers to use. As noted, right out of the box, subscribers can just go to the App Store directly to redeem their offer code. Now, this will be an external transaction. So when your app launches, you will need to be monitoring the payment queue in order to initiate your onboarding experience for an optimal experience.
Another way is through the in-app redemption sheet that you saw earlier. This is the ideal experience, where subscribers will have the ability to redeem an offer directly in your app using the presentCodeRedemptionSheet. This will be the only scenario where the redemption occurs with your app actively running in the foreground, as the sheet will open right on top of your app.
Note, if you are displaying codes within your app, it may be beneficial to make it easy for subscribers to copy and paste.
And here's that flow. That Redeem button can be put anywhere in your app. Here, ours is just below the Sign In button. Once tapped, the sheet opens up on top of your application, and the subscriber will enter their code and tap Enter.
The customer can review the terms and proceed through. Once completed, you will find a new transaction in the payment queue.
The third redemption option is the redeem URL, where you will pre-populate it with the subscriber's unique offer code. It is comprised of two values to be aware of.
The ID represents your application's ID, so it will be a static value for each of your applications.
The second value is the code, where you will dynamically populate the URL with the subscriber's unique alphanumeric value.
If that URL was embedded in an email, then tapping it would take the user into the app store to complete the transaction.
Some things to note: The subscriber here never sees the code during this flow, and when it is completed, it would be another external transaction that your app will need to fulfill when the customer launches your app.
As noted, redemptions can occur outside your app, so it's important you initialize the TransactionObserver at launch. This is a best practice and important for Ask to Buy, PSD2, and offer codes. So, with proper initialization, it ensures no transactions are missed.
On the other side, finishTransaction removes the transactions from the queue and tells us the customer has received their items or service. Between these two, when implemented correctly, you will provide an optimal customer experience.
Let's move back to the intro offer and offer code configuration. As mentioned, I wanted to visualize the subscriber experience with either setting.
So let's take a simple scenario. We have a standard monthly subscription, and we've configured it with a one-week free introductory offer and also created an offer code for one week free.
So let's show what happens if we do not allow the redemption of both.
When the subscriber redeems their offer code, the offer code goes into effect immediately.
After the offer period, the subscription renews at the regular price.
Now, at some point, the subscriber may expire in the future. If they resubscribe, since they are eligible for the introductory offer, they would then receive their one-week free trial.
So, this configuration just determines at what point they will receive their introductory offer.
This experience is just something to keep in mind when creating offers for a given group that you are targeting.
But what if you choose to allow? Let's use that same example scenario.
But this time, when subscriber redeems their offer code, the intro offer goes into effect first, followed by the offer code period, and then the subscription renews at the regular price.
I hope this helps illustrate and provides more clarity on what the configuration means from a subscriber's experience and helps you determine when you want to allow or not allow this redemption behavior.
To finish up, here are the updates to subscriber status in respect to offer codes.
There are two ways to get a subscriber's current status: from the App Receipt or real-time server notifications.
Let's start with App Receipt.
In the App Receipt, you will find the new field, offer_code_reference_name. This is the unique string you added in App Store Connect and will be unique for all your offer codes. This data is only available when validating an App Receipt with our verifyReceipt service.
Now let's discuss server notifications.
In case you are not familiar with our server notifications, these are real-time updates sent from our servers directly to yours when a subscriber event has changed their status. You can find all the supported subscriber events in our developer documentation.
The field name in our notifications is the same, offer_code_reference_name, and it is available in a unified_receipt.Latest_receipt_info object.
The notification types that you would receive when a subscriber redeems an offer code are INITIAL_BUY. This is sent when subscribing to a subscription group for the first time. So if a subscriber redeems an offer code that results in a new subscription, then the INITIAL_BUY notification type is sent.
Next, is a notification type specific for existing subscribers. If they redeem an offer code that results in them resubscribing or upgrading, then an INTERACTIVE_BUY notification will be sent.
And lastly, subscribers that are redeeming an offer code after they have canceled, that will generate a DID_CHANGE_RENEWAL_STATUS notification, as this redemption re-enables the subscriber's auto-renew status.
Now I'll hand it off to Kenny to share more insights on setting up offer codes in App Store Connect.
Thanks, David. Hi, I'm Kenny Elmore, and I'm on the App Store Operations team.
Subscription setup has two parts. There's the setup in App Store Connect as well as the work that needs to be done on the back end.
This includes the things David went over earlier, such as server-to-server notifications, receipt validation, and implementation using the correct StoreKit APIs.
What we will focus on today is the App Store Connect portion of this setup. Required roles are: Account Holder, Admin, App Manager, Developer, or Marketing.
Offer code configuration has three parts.
First, you'll need to set customer eligibility, territory availability, pricing, and intro offer eligibility in App Store Connect. You'll do this by creating an offer.
Then you'll need to generate batches of codes attached to that offer to share with your users.
Finally, you'll need to download those codes and either distribute them to users directly or create unique redemption URLs to share with users.
From My Apps, select your app.
In the sidebar, under In-App Purchases, click Manage.
Select your auto-renewable subscription from the list.
In the Subscription Prices section, click the "plus" icon.
From the drop-down menu, click Create Offer Codes.
Enter a reference name for your offer. You'll use this reference name to manage the offer in App Store Connect and to identify sales associated with offers in Sales and Trends reports.
First, select the customer eligibility for your offer.
You can choose any combination of new, existing, or expired users.
New users are users who have never subscribed to any subscription product within the group.
Existing users are users who are currently subscribed to a product within the group.
Expired users are users who were previously subscribed to a product within the group but whose subscription has expired.
Here is where you'll choose your introductory offer if your subscription has an introductory call.
If your subscription has an introductory offer, determine whether users redeeming your codes should be eligible to redeem both a code and an introductory offer by choosing from the following options: If "Yes," new users will redeem your app's introductory offer first, then automatically renew to the offer they redeemed with your code.
If "No," new users will redeem the offer code first, then automatically renew to the standard subscription price without using the introductory offer.
If the customer cancels at any point and then resubscribes, they'll still be eligible to redeem an introductory offer.
Choose the appropriate territories for your offer, then click Next.
Choose either pay as you go, pay up front, or free, then choose the appropriate duration, currency, and price.
Apple automatically calculates the prices for all territories based on your chosen price point.
But you also have the option to set a different price for specific territories. In this example, we're creating a free offer.
Once you've configured your offers, you'll need to create codes for your users to redeem.
You can create up to 150,000 new codes every quarter per app.
In order for users to redeem codes, your app must be in the "ready for sale" state.
Next to your offer, click Create Codes.
In the pop-up window, select the number of codes you wish to create. You must select a minimum of 500 and a maximum of 25,000 at a time.
Choose an expiration date. The expiration date determines how long the codes are valid. You must select a minimum of one day and a maximum of six months.
If you need more than 25,000 codes, you can create multiple batches of codes on the same offer.
Once your codes are created, you'll need to download them from App Store Connect so you can share them with your users. You can utilize your own channels, such as email or offline marketing campaigns.
On the right-hand side, next to the batch you want to download, click Download. The file downloads automatically.
Open the file with a spreadsheet application.
You can give codes to users directly.
Codes can be shared through on- or offline channels. For example, print the codes on a card and hand out the cards at an event.
Users can redeem the codes by entering them in the Redeem Gift Card or Code page in their App Store account settings, or within your app if you've implemented the presentCodeRedemptionSheet API.
Codes can be used to create unique redemption URLs that you can share directly with users.
When the user taps on the URL, they'll be taken to a page where they can redeem your code.
Customers who do not yet have your app installed will first be prompted to download the app before redeeming the code. To create these URLs, copy the link on your offer page and then add each code to the end of the URL.
You can deactivate codes at any time in App Store Connect. Users will no longer be able to redeem them and will be shown an error message stating the offer is no longer available.
Locate the codes you wish to deactivate and click Deactivate Codes. The codes will expire immediately. Subscribers who have already redeemed the codes won't be affected.
The deactivated codes appear in your expired codes list. You can have up to 10 active offers per subscription SKU at a time in App Store Connect. If you need more than 10, consider deactivating offers whose codes have expired or that you no longer need.
In the upper right-hand corner, click Deactivate.
Deactivated offers will move to your inactive offers list. You can view your deactivated offers at any time as well as download expired codes associated with deactivated offers.
You can have up to 10 active offers, each with their own customer eligibility, territories, prices, and intro offer stacking behavior.
Click to view pricing and duration for each offer.
Just a quick review of offer codes.
Primary use: Acquiring, retaining, and winning back subscribers.
Customer redemption limits: One per customer per active offer.
App Store Connect limits: 10 active offers per subscription. You can create a maximum of 150,000 codes per app, per quarter.
Offer configuration: You select customer eligibility rules, timing, territories, pricing, and expiration in App Store Connect.
Compatibility: iOS 14 and later, macOS not supported.
Measuring offer performance.
To measure the success of your offer code campaigns, you will be able to view reporting in Sales and Trends, including updates to the subscription dashboards and reports.
This reporting will help you understand the number of paid subscribers acquired by offer codes, the offer-code-to-standard-price conversion rate, and what are the most redeemed offer code campaigns.
The subscription retention dashboard will be updated to include your offer code conversion rate, which shows the conversion rate of all your offers for the past 30 days.
This is the number of subscriptions with an offer code enabled that converted to the standard price divided by the total number of subscriptions with an offer code enabled eligible to convert to standard price in the past 30 days.
Additionally, we will be adding a top offer codes table to the bottom of the Sales and Trends overview page. Easily identify which offers have the most redeemed codes.
We'll be adding the offer code reference name to transactions associated with codes in your summary sales report.
This can help you track the total number of codes redeemed as well as gain insights such as redemptions by device type, region, and more.
We've also added the offer code reference name to your subscription report, subscription events report, and the subscriber report, which can help you calculate your offer code conversion rates and cancellation rates. Now back to Bryan to conclude today's session.
Thanks, Kenny. In summary of today's session, consider implementing a redemption flow within your app for the best customer experience. Only generate the number of codes that you plan to use, as you can't recover unredeemed codes, and remember that codes expire six months after the date they were created.
Clearly communicate offer details, eligibility requirements, and how to redeem in your communications, including that customers can only redeem in iOS 14 or later.
Thanks for watching. We can't wait to see how you use offer codes to grow your business. For more information about offer codes, please visit the Apple developer site.
Looking for something specific? Enter a topic above and jump straight to the good stuff.
An error occurred when submitting your query. Please check your Internet connection and try again.