App Store Connect offer codes: how to create a promo code
By Mehdi Azizi
Published , 8 min
Since March 2026, offer codes replace promo codes for in-app purchases: one-time or custom codes, redeemed by link, in the App Store or in your app.
In App Store Connect, a promo code for a subscription or an in-app purchase is now called an offer code. Since March 26, 2026, Apple no longer lets you create promo codes for in-app purchases. Promo codes now only give away the download of a paid app. You create an offer on your product, then one-time codes or a custom code. People redeem it through a link, in the App Store or right inside your app.
My apps are free to download and sell subscriptions, so app promo codes do nothing for me. That's why, in the TradaZen code, the referral program rewards people with an offer code, and the app opens the code redemption itself. Here's what changed, Apple's table of offers, how to create codes, how they get redeemed, and what guideline 3.1.1 forbids.
Promo codes vs. offer codes: what changed in 2026
Apple announced it on October 29, 2025 in its developer news: offer codes now cover all in-app purchases. Consumables, non-consumables and non-renewing subscriptions join auto-renewable subscriptions. As a result, since March 26, 2026, you can't create a promo code for an in-app purchase anymore. Codes created before that date still work until they expire.
App promo codes still exist, though. According to App Store Connect Help, they give away a free copy of a paid app. Each code works once and stays valid for four weeks. You can request up to 100 per version and per platform, from Promo Codes in your app's sidebar. Whoever uses one can't rate or review the app.
For a free app that sells a subscription, an app promo code gives away nothing. It's the subscription you need to give away, with an offer code.
Apple's offers: who they're for and how people get them
Here are Apple's subscription offers, plus the app promo code, in the table I keep handy when choosing:
| Offer type | Who it's for | How people get it |
|---|---|---|
| Introductory offer | New subscribers to the group | Automatic at purchase |
| One-time offer code | One specific person | Link, App Store or app |
| Custom code | A campaign, an audience | Link or entry in the app |
| Promotional offer | Current or former subscribers | Shown by your app |
| Win-back offer | Former subscribers | Settings, App Store, app |
| App promo code | Paid apps only | Entry in the App Store |
Offer codes are meant for you to hand out outside the app: by email, on your website, at an event, to a content creator. The other offers mostly show up on their own or inside your app, based on the rules you set. The introductory offer, the one behind free trials, has its own guide: introductory offer and free trial.
Creating offer codes for a subscription
The process in the help page on subscription offer codes has two parts: the offer, then the codes. The labels are the ones from Apple's help.
1. The offer. In Subscriptions, open the group, then the subscription. In Subscription Prices, click the plus button, then Create Offer Codes. Then:
- give it a reference name, which you'll see in your sales reports;
- choose whether the subscription renews when the offer ends; without renewal, only a free offer is possible;
- check who's eligible: new subscribers, current subscribers, former subscribers of the group;
- if the subscription has an introductory offer, choose whether people get it first, before the code's offer, or only the code;
- choose the countries, then free, pay up front or pay as you go, with the duration and price.
Once created, an offer can't be edited. To change eligibility, create a new offer.
2. The codes. Two types, generated from the offer's page:
- One-time codes: one code per person, created in batches of 500 to 25,000. They expire no later than six months after creation. You download a file with the codes and their links.
- Custom codes: a word you pick, up to 64 characters with no special characters, for example BACKTOSCHOOL (made-up example). You set how many people can use it, up to 25,000 per batch, and an optional end date.
The shared limits: one million codes per app per quarter, ten active offers per subscription, one code per offer per person. A code can take up to an hour to become usable. And most importantly, your app has to be on sale for codes to be redeemed: you can't give away a subscription before launch.
For testing, Apple provides sandbox codes, 10 to 10,000 per batch, redeemed from the sandbox account settings on iOS 16.3 or later.
Offer codes for a one-time purchase or credits
The page on offer codes for in-app purchases follows the same logic. In In-App Purchases, open the purchase, then Create Offer in the Offer Codes section. Eligibility is based on purchase history in your app: never purchased, purchased in the last 30 days, or more than 30 days ago. The offer is free or paid.
To generate codes, the app has to be on sale and the purchase approved. An app can have at most ten active offers at a time. Redeeming in the app requires iOS 16.3 or later.
How users redeem a code
The StoreKit documentation describes three paths:
- The redemption link. App Store Connect gives you a sample link on the offer's page, and you add the code to it. If the app isn't installed, the person is first asked to download it.
- The App Store. A one-time code is entered on the account's Redeem Gift Card or Code page. A custom code goes through the link or your app.
- Your app. In Swift, it's
offerCodeRedemptionwith SwiftUI orpresentOfferCodeRedeemSheetwith UIKit. With RevenueCat in an Expo app, it'spresentCodeRedemptionSheet.
The RevenueCat documentation gives the link format: https://apps.apple.com/redeem?ctx=offercodes&id={apple_app_id}&code={code}. It also warns that Apple's redemption sheet has been very unreliable since launch, and suggests the link as a fallback. Here's the idea, in TypeScript:
import { Linking } from "react-native";
import Purchases from "react-native-purchases";
const PAGE_ECHANGE = "https://apps.apple.com/redeem";
export async function echangerUnCode(): Promise<void> {
try {
await Purchases.presentCodeRedemptionSheet();
} catch {
await Linking.openURL(PAGE_ECHANGE); // fallback if the sheet fails
}
}
The sheet doesn't return any result. The entitlement then arrives just like after a purchase, through the addCustomerInfoUpdateListener listener your app already has. For RevenueCat to count revenue from these codes correctly, it needs your In-App Purchase key.
That's the setup built into the TradaZen code. To use a referral reward, the app opens the link with the code already filled in: it's more reliable than the sheet, where you'd have to retype the code. To enter a code someone received, it opens the native sheet, with the App Store redemption page as a fallback. A code people don't know where to enter is useless: the App Store account page is buried, and nothing points to it. An "I have a code" button in your app fixes that.
Promotional and win-back offers, in short
These two offers don't use codes you hand out, but they meet the same need: winning back or keeping a subscriber.
The promotional offer targets current or former subscribers. You decide in your app when to show it, for example to someone about to cancel. According to the help page on promotional offers, you can have ten active per subscription. They apply in every country of the subscription, and people qualify even if they already had an introductory offer. You need an In-App Purchase key to sign the offer.
The win-back offer targets former subscribers. The help page on win-back offers details the criteria: minimum paid subscription duration, time since it ended, wait between two offers. Apple shows it on its own in the subscription management page, and in your app on iOS 18 or later. It also generates a shareable link, to send only to eligible people. For it to appear on the App Store, you have to promote it with an approved subscription image that doesn't reuse your icon or your screenshots. I cover this in the guide on a subscription's promotional image.
What guideline 3.1.1 forbids
Guideline 3.1.1 requires in-app purchase to unlock a feature or content. It forbids homemade mechanisms like license keys or QR codes. A code you made up yourself, entered in a field in your app to unlock premium, puts you at risk of a 3.1.1 rejection, even if it's free. Apple's offer codes go through in-app purchase, so they're fine. The full rule is in my guide on guideline 3.1.1.
One more thing, for referrals: guideline 5.1.2 forbids requiring people to turn on notifications, location or tracking to get a reward, codes included. So a reward can't depend on those permissions. The details are in the guide on guideline 5.1.2.
Giving away your subscription with the right tool
Before launch, to let people try the app for free, use TestFlight: purchases there go through the test environment, with no charge. After launch, use offer codes. Setting up the subscription itself is covered in RevenueCat for an iOS subscription.
The iOS & Android Kit starts from my apps' starter code: onboarding, paywall and subscriptions are already coded, and its third step, "plug in the money," walks you through setting them up. The whole chain is on the iOS in-app subscription page. If you're preparing your first launch, take the free diagnostic: it puts the steps in order and sends you my Apple anti-rejection checklist.
Frequently asked questions
How do I generate a promo code in App Store Connect?
For a paid app, open Promo Codes in the app's sidebar: up to 100 codes per version, valid for four weeks. For a subscription or an in-app purchase, create an offer on the product, with Create Offer Codes or Create Offer, then generate one-time codes or a custom code.
What's the difference between a promo code and an offer code?
A promo code gives away the download of a paid app. An offer code gives a subscription or an in-app purchase, free or discounted, for a duration you choose. Since March 26, 2026, only offer codes can be created for an in-app purchase.
How many offer codes can I create?
Up to one million per app per quarter, across all products. One-time codes are created in batches of 500 to 25,000, and a custom code allows up to 25,000 uses per batch. A subscription can have at most ten active offers at a time.
Can I use an offer code before the app launches?
No: the app has to be on sale for codes to be redeemed. Before launch, use TestFlight for your testers, and sandbox codes to test redemption in your app.
Can a current subscriber use an offer code?
Yes, if you checked current subscribers in the offer's eligibility. Apple's page on subscriptions specifies that they can only redeem a code for the same level as their subscription or higher.
Where does the user enter an offer code?
Through the redemption link, on the Redeem Gift Card or Code page of their App Store account for a one-time code, or in your app if you added the redemption sheet. A custom code goes through the link or the app.

