# Introductory offer in App Store Connect: iOS free trial

> An introductory offer is the free trial or discounted start of an iOS subscription, once per group per Apple Account. How to create and display it.

Original page: [Introductory offer in App Store Connect: iOS free trial](https://devoria.fr/en/blog/introductory-offer-app-store-connect-ios-free-trial)
Author: [Mehdi Azizi](https://devoria.fr/en/mehdi-azizi)
Published: 2026-11-04
Content last revised: 2026-11-04


An introductory offer is the starting price of an auto-renewable subscription: a free trial, pay up front, or pay as you go. **Each customer only gets it once per subscription group**, so your app has to check eligibility before it says "free trial." You create it on the subscription's pricing page, and your paywall has to clearly show how long the offer lasts and the price charged afterward.

On Solys and TradaZen, the 7-day free trial is on the yearly subscription. The weekly plan doesn't have one. Here are the three offer types, who's eligible, how to create one, and then two display mistakes I made. The term "launch offer" often means the same thing, including in my guide on [paywall mistakes](https://devoria.fr/en/blog/ios-paywall-beginner-mistakes).

## What is an introductory offer?

[App Store Connect Help](https://developer.apple.com/help/app-store-connect/manage-subscriptions/set-up-introductory-offers-for-auto-renewable-subscriptions/) defines it as a time-limited discounted price or free trial for the first period of a subscription. It only applies to auto-renewable subscriptions. When the offer ends, the subscription renews at the regular price, unless the person cancels first.

The offer shows up on your App Store page for eligible people. At purchase, **Apple applies it automatically if the person is eligible**. Your job is to not promise an offer on screen that Apple won't grant.

## The three types of introductory offers

The [StoreKit documentation](https://developer.apple.com/documentation/storekit/implementing-introductory-offers-in-your-app) describes three payment modes. Here's each one with a made-up example: a yearly plan at €39.99 and a monthly plan at €6.99, which aren't the prices of any of my apps.

| Type          | Made-up example       | Paid at start   | Then        |
| ------------- | --------------------- | --------------- | ----------- |
| Free trial    | 7 days free           | €0              | €39.99/year |
| Pay up front  | 3 months for €9.99    | €9.99 once      | €39.99/year |
| Pay as you go | €2.99/month, 3 months | €2.99 per month | €6.99/month |

And here's what the screen should say for each one, still with these made-up prices:

- **Free trial**: "7 days free, then €39.99 per year." During the trial, the subscription has already started, but nothing is charged until the end.
- **Pay up front**: "€9.99 for the first 3 months, then €39.99 per year." The person pays once for the whole discounted period.
- **Pay as you go**: "€2.99 per month for 3 months, then €6.99 per month." The discounted price recurs every period.

**In all three cases, the sentence includes the price charged after the offer.**

## Who's eligible for the introductory offer?

Apple's help is clear: one possible offer per subscription, but only one introductory offer per person per subscription group. The StoreKit documentation spells out the three cases:

- **a new subscriber** is always eligible;
- **a returning former subscriber** is eligible if they've never used an introductory offer in that group;
- **a current subscriber** isn't eligible, even if they switch plans within the same group.

Eligibility follows the paying Apple Account, not the iPhone or the account created in your app. Someone who did the trial, canceled, then reinstalled the app is no longer eligible. Yet the product keeps advertising its offer: that's where misleading displays come from.

Direct consequence: **a trial on the weekly plan would use up the trial eligibility for the yearly plan**, since both are in the same group. That's why my trials are on the yearly plan only.

Another limit: you can have one current introductory offer and one future offer per country. If two offers overlap, the most recently created one replaces the other. In July 2026, on TradaZen, I wanted both a discounted price and a free trial on the yearly plan. One offer at a time: it was one or the other. I ended up creating a second, cheaper yearly subscription that carries the trial.

## Create the offer in App Store Connect

You need the Account Holder, Admin, App Manager, or Marketing role. The labels are the ones from Apple's help:

1. In Apps, open your app, then Subscriptions in the sidebar.
2. Pick the group, then the subscription.
3. In the Subscription Prices section, click View all Subscription Pricing, then Set up Introductory Offer.
4. Choose the countries or regions, then the start and end dates. If you start today, the offer begins right away.
5. Choose Free, Pay up front, or Pay as you go, then the duration and price.
6. App Store Connect suggests equivalent prices for all 175 countries. Adjust them if needed, then confirm.

**Once created, an offer can't be edited**: to change its duration or price, delete it in the Introductory Offers tab and create it again. A change can take up to an hour to reach sandbox. [RevenueCat's documentation](https://www.revenuecat.com/docs/subscription-guidance/subscription-offers) also recommends waiting up to 24 hours before concluding an offer isn't being applied.

## Available durations

A free trial lasts 3 days, 1 or 2 weeks, 1, 2, 3 or 6 months, or 1 year, whatever the subscription length. Pay up front covers 1, 2, 3 or 6 months, or 1 year. Pay as you go depends on the subscription length:

| Subscription | Pay as you go        |
| ------------ | -------------------- |
| 1 week       | 1 to 12 weeks        |
| 1 month      | 1 to 12 months       |
| 2 months     | 2 to 12 months, by 2 |
| 3 months     | 3, 6, 9 or 12 months |
| 6 months     | 6 or 12 months       |
| 1 year       | 1 year               |

On my apps, I went with 7 days, on the yearly plan. That's not an Apple rule, it's a product choice, to revisit with your own numbers.

## Show the trial only to people who are eligible

Apple says it on the same help page: if you show the offer in your app, make sure the person can actually get it. **Ask your code two questions**: does the product carry a free trial, and is this person still eligible for it?

The first one you read from the product. Careful, an introductory offer isn't necessarily free. On TradaZen, the standard yearly plan had a pay up front offer, a cheaper first year, and the trial lived on the other yearly plan. Both come back as an "introductory offer." So my code reads the offer price: zero means a trial; above zero means a paid offer.

The second one you ask the store. In Swift, StoreKit 2 provides [isEligibleForIntroOffer](https://developer.apple.com/documentation/storekit/product/subscriptioninfo/iseligibleforintrooffer), starting with iOS 15. Apple notes this value can be true even when no offer is configured: hence the first question. With RevenueCat in an Expo app, it's `checkTrialOrIntroductoryPriceEligibility`, which returns eligible, ineligible, no offer, or unknown. Here's the idea in TypeScript:

```ts
import Purchases, {
  INTRO_ELIGIBILITY_STATUS as S,
  type PurchasesStoreProduct,
} from "react-native-purchases";

type Essai = "oui" | "non" | "doute";

export async function essaiGratuit(p: PurchasesStoreProduct): Promise<Essai> {
  if (!p.introPrice || p.introPrice.price > 0) return "non";
  try {
    const r = await Purchases.checkTrialOrIntroductoryPriceEligibility([
      p.identifier,
    ]);
    const statut = r[p.identifier]?.status;
    if (statut === S.INTRO_ELIGIBILITY_STATUS_ELIGIBLE) return "oui";
    if (statut === S.INTRO_ELIGIBILITY_STATUS_INELIGIBLE) return "non";
    if (statut === S.INTRO_ELIGIBILITY_STATUS_NO_INTRO_OFFER_EXISTS)
      return "non";
    return "doute";
  } catch {
    return "doute";
  }
}
```

The "doute" (unsure) case is the real issue. RevenueCat describes its check as a best-effort estimate, and Apple's payment sheet shows the real terms before confirmation anyway. For an unknown status, RevenueCat recommends showing the regular price, so nobody gets misled.

I learned the other side of the problem on TradaZen. The first version treated a read error as a no: people who were eligible for the trial didn't see it. Today, my apps only remove the trial on a clear no from the store, ineligible or no offer. When unsure, the product's display stays. **That's a trade-off, not RevenueCat's recommendation**: if you'd rather play it safe, follow theirs. Either way, never confuse "I don't know" with "no."

If you use RevenueCat paywalls, each text can have a version for people eligible for the offer, according to their [page on offers](https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/supporting-offers). The rest of the setup is in my guide on [RevenueCat for an iOS subscription](https://devoria.fr/en/blog/revenuecat-ios-in-app-subscription-setup).

## What 3.1.2 requires on screen

[Guideline 3.1.2(a)](https://developer.apple.com/app-store/review/guidelines/#3.1.2a) allows a free trial on a subscription, as long as you provide the information App Store Connect calls for. [Apple's page on subscriptions](https://developer.apple.com/app-store/subscriptions/) adds: in a trial's purchase flow, clearly state its duration and the price charged when it ends. The billed amount also has to be the most prominent pricing element on the screen.

The rejection Solys got on October 10, 2026 said it: the free trial, the introductory price, and calculated prices must stay subordinate to the billed amount. **You can advertise the trial, but the price charged afterward has to stay the most readable price on the screen.** Both rejections and their fix are in my guide on [guideline 3.1.2](https://devoria.fr/en/blog/guideline-3-1-2-app-rejected-subscription).

The opposite mistake exists too: offering a trial without saying so. At one point, my paywall buttons said "Continue." On Solys, "7 days free" only existed in the VoiceOver label, not as visible text.

## Test the offer in sandbox

Buy the subscription with a sandbox account: the trial should appear on Apple's payment sheet. To replay a new subscriber's flow, choose Clear Purchase History in the sandbox account settings on the iPhone. According to [Apple's sandbox documentation](https://developer.apple.com/documentation/storekit/testing-in-app-purchases-with-sandbox), the account then becomes eligible for introductory offers again.

Also test an account that has already done the trial: your paywall shouldn't advertise anything free anymore. If the product doesn't load at all, read my guide on the [Missing Metadata](https://devoria.fr/en/blog/missing-metadata-app-store-connect-subscription) status.

## Set up your free trial without mistakes

The [iOS & Android Kit](https://devoria.fr/en/kits/ios) 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 up products and the trial. The whole chain is described on the [iOS in-app subscription](https://devoria.fr/en/expertise/ios-in-app-subscription) page. If you're still unsure about the model, start with [subscription or one-time purchase](https://devoria.fr/en/blog/subscription-vs-one-time-purchase-ios-app).

If you're preparing your first release, [take the free diagnostic](https://devoria.fr/en/diagnostic): it puts the steps in order and sends you my Apple anti-rejection checklist. To give away a month or win back a former subscriber, the next step is in my guide on [offer codes](https://devoria.fr/en/blog/app-store-connect-offer-codes-promo-code).

## Frequently asked questions

### What is an introductory offer on the App Store?

It's the starting price of an auto-renewable subscription: a free trial, pay up front, or pay as you go. You create it in App Store Connect, and Apple applies it automatically at purchase for eligible people. After that, the subscription moves to the regular price.

### Can a user get two free trials?

Not in the same subscription group: one introductory offer per group per Apple Account. Reinstalling the app doesn't restore eligibility. If they subscribe in another group in your app, though, they can get that group's offer.

### Can you combine a free trial and a discount?

Not on the same subscription at the same time: one current introductory offer per country. You can create a second subscription that carries the other offer, or use an offer code, which can follow the introductory offer depending on your settings.

### Do you need a new app version to add a trial?

Not for the offer itself: it's set in App Store Connect and applies at purchase. But if your paywall hardcodes "7 days," you'll need to update it. Read the duration from the product returned by the store, and the screen will follow.

### Is a former subscriber eligible for the free trial?

Yes, if they've never used an introductory offer in that subscription group. If they already have, they're no longer eligible, even months later. To win them back, Apple offers win-back offers and promotional offers.


## Your project

[iOS & Android Kit](https://devoria.fr/en/kits/ios): Build your iPhone and Android app with Claude Code: the starter code from my apps, the path all the way to the stores, and every kit. $109.

[Diagnostic: what's between you and your iPhone app](https://devoria.fr/en/diagnostic): 7 questions, 60 seconds: find out what's really stopping you from publishing your iPhone app, get your 4-step path and the kit that fits you.
