Create iOS Subscription Introductory Offer
Este contenido aún no está disponible en tu idioma.
Introductory offers allow you to provide eligible users with free trials or discounted introductory pricing to reduce barriers to entry and increase subscription conversions.
Overview
Introductory offers are one of the most effective tools for growing your subscriber base. They allow users to:
- Try your premium features risk-free
- Experience value before committing
- Start at a lower price point
- Build confidence in your product
Offer Types
iOS supports three types of introductory offers:
1. Free Trial
Customers get complimentary access for a specified duration. After the trial, they’re charged at standard rates if they don’t cancel.
Examples:
- 7 days free
- 14 days free
- 1 month free
Best for:
- High-value subscriptions
- Feature-rich apps
- Building user habit
2. Pay Up Front
Customers pay a single discounted price that covers the introductory period.
Examples:
- $1.99 for 2 months (then $9.99/month)
- $9.99 for 3 months (then $19.99/month)
Best for:
- Commitment signals
- Cash flow needs
- Testing price sensitivity
3. Pay As You Go
Customers pay a reduced price for multiple billing cycles.
Examples:
- $1.99/month for 3 months (then $9.99/month)
- $4.99/month for 6 months (then $14.99/month)
Best for:
- Gradual commitment
- Long-term value demonstration
- Reducing perceived risk
Eligibility Requirements
Users can only receive introductory offers if they:
- Haven’t previously received an introductory offer for the product
- Haven’t received an introductory offer for any product in the same subscription group
- Haven’t had an active subscription to the product
Prerequisites
You must first create an auto-renewable subscription before adding an introductory offer.
Creating an Introductory Offer
-
Navigate to Subscription
In App Store Connect, go to your app’s Monetize > Subscriptions section and select the subscription you want to add an offer to.
-
Add Subscription Price
Click the + icon next to “Subscription Prices” to open the pricing modal.
-
Create Introductory Offer
Select “Create introductory offer” from the options.

-
Configure Countries and Start Date
Countries and Regions: Select where the offer will be available
- Choose all countries for maximum reach
- Or limit to specific markets for testing
Start Date: When the offer becomes available
- Can be immediate or scheduled for the future
- Useful for coordinating with marketing campaigns
End Date (Optional): When the offer expires
- Leave blank for ongoing availability
- Set a date for limited-time promotions
-
Select Offer Type
Choose one of the three offer types:
Free (Free Trial)
- Select duration (days, weeks, months)
- Examples: 7 days, 2 weeks, 1 month
Pay Up Front
- Set single payment price
- Set duration covered by payment
- Example: $1.99 for 2 months
Pay As You Go
- Set discounted price per period
- Set number of periods
- Example: $2.99/month for 3 months
-
Review and Confirm
Review the summary showing:
- Offer type and duration
- Pricing details
- Regular price after intro period
- Availability dates and countries
-
Save
Click Save to create the introductory offer. It will be available for testing immediately in sandbox mode.
Offer Configuration Examples
Example 1: Standard Free Trial
Type: FreeDuration: 7 daysThen: $9.99/monthUser Journey:
- Day 1-7: Free access
- Day 8: First charge of $9.99
- Monthly charges continue
Example 2: Upfront Discounted Period
Type: Pay Up FrontPrice: $4.99Duration: 3 monthsThen: $9.99/monthUser Journey:
- Day 1: Charged $4.99
- 90 days access
- Day 91: Charged $9.99/month
Example 3: Gradual Introduction
Type: Pay As You GoPrice: $2.99/monthPeriods: 6 monthsThen: $9.99/monthUser Journey:
- Months 1-6: $2.99/month
- Month 7+: $9.99/month
Using in Your App
The native-purchases plugin automatically handles introductory offer presentation and eligibility:
import { NativePurchases } from '@capgo/native-purchases';
// Check eligibility for intro offersconst { eligible } = await NativePurchases.checkTrialOrIntroductoryPriceEligibility({ productIdentifiers: [ 'com.yourapp.premium_monthly', 'com.yourapp.premium_annual' ]});
console.log('Eligible for intro offer:', eligible);
// Fetch products with intro offer informationconst { products } = await NativePurchases.getProducts({ productIdentifiers: ['com.yourapp.premium_monthly']});
const product = products[0];
// Display intro offer detailsif (product.introductoryPrice) { console.log('Intro price:', product.introductoryPriceString); console.log('Intro period:', product.introductoryPricePeriod); console.log('Intro cycles:', product.introductoryPriceCycles); console.log('Regular price:', product.priceString);}
// Purchase (intro offer applied automatically if eligible)try { const { customerInfo } = await NativePurchases.purchaseProduct({ productIdentifier: 'com.yourapp.premium_monthly' });
console.log('Subscription active:', customerInfo.entitlements.active);} catch (error) { console.error('Purchase failed:', error);}Displaying Intro Offers to Users
Best Practices for UI
Clear Value Proposition:
Try Premium Free for 7 DaysThen $9.99/month. Cancel anytime.Emphasize Savings:
Start at Just $1.99Get 3 months of Premium for only $1.99Then $9.99/monthTransparent Communication:
Your Free Trial• Access all premium features• No charge for 7 days• $9.99/month after trial• Cancel anytime, even during trialExample Implementation
function formatIntroOffer(product: any): string { if (!product.introductoryPrice) { return `${product.priceString} per ${product.subscriptionPeriod}`; }
const intro = product.introductoryPrice; const regular = product.priceString;
if (intro.price === 0) { // Free trial return `Try free for ${intro.periodString}, then ${regular}`; } else if (intro.cycles === 1) { // Pay up front return `${intro.priceString} for ${intro.periodString}, then ${regular}`; } else { // Pay as you go return `${intro.priceString} for ${intro.cycles} ${intro.periodString}s, then ${regular}`; }}Marketing Best Practices
Trial Length Strategy
- 3-7 days: Quick decision apps, games
- 7-14 days: Standard for most apps
- 14-30 days: Complex tools, professional apps
- 30+ days: High-value B2B or enterprise
Pricing Psychology
- $0.99-$1.99: Very low barrier, good for testing
- 50% off: Strong perceived value
- First month free: Common, familiar pattern
Communication Timing
- Before trial ends: Remind users of upcoming charge
- Highlight value: Show usage stats, achievements
- Easy cancellation: Build trust with transparent process
Testing Intro Offers
Use sandbox testing to verify behavior:
// In sandbox mode, accelerated subscription durations apply:// - 3 days free trial = 3 minutes// - 1 week free trial = 3 minutes// - 1 month free trial = 5 minutes
await NativePurchases.configure({ apiKey: 'your_sandbox_api_key'});
// Purchase with intro offerconst { customerInfo } = await NativePurchases.purchaseProduct({ productIdentifier: 'premium_monthly'});
// Verify intro offer was appliedconsole.log('Intro activated:', customerInfo.entitlements.active);
// Wait for accelerated renewalsetTimeout(async () => { const { customerInfo: updated } = await NativePurchases.getCustomerInfo(); console.log('After trial:', updated.entitlements.active);}, 180000); // 3 minutes for weekly trialImportant Notes
Eligibility Rules
- One intro offer per user per subscription group (lifetime)
- Applies to new subscribers only
- Cannot be used again after cancellation
- Not available for subscription upgrades/crossgrades
StoreKit API
introductoryPriceshows intro offer detailseligibilitymethod checks if user qualifies- Automatically applied at purchase time
- No special purchase method needed
Limitations
- Only one intro offer active per subscription at a time
- Cannot combine with other discount types
- Cannot change eligibility rules
- Apple controls eligibility checking
Troubleshooting
Intro offer not showing:
- Check if offer is activated in App Store Connect
- Verify user hasn’t used an intro offer before
- Ensure user hasn’t subscribed to anything in the group
- Test with new sandbox account
Eligibility check failing:
- Wait for App Store sync (can take 2-3 hours)
- Verify product ID is correct
- Check subscription group configuration
- Test in sandbox with fresh test account
Wrong price displaying:
- Check regional pricing settings
- Verify currency conversion
- Ensure offer dates are current
- Refresh product information
Sandbox testing issues:
- Use accelerated durations (3 min = 1 week)
- Create new test accounts for each test
- Wait for trial to complete naturally
- Check renewal count (max 6 in sandbox)
Analytics and Optimization
Track These Metrics
- Intro offer acceptance rate
- Trial-to-paid conversion rate
- Cancellation during trial
- Retention after first charge
- Revenue impact
A/B Testing Ideas
- Free trial vs. paid intro
- Trial length variations
- Discount percentage
- Single payment vs. recurring discount
Optimization Strategy
// Track offer performanceanalytics.track('intro_offer_displayed', { product_id: product.identifier, offer_type: product.introductoryPriceType, offer_duration: product.introductoryPricePeriod});
analytics.track('intro_offer_accepted', { product_id: product.identifier});
// Monitor conversionNativePurchases.addListener('customerInfoUpdate', (info) => { if (info.customerInfo.entitlements.active['premium']) { analytics.track('trial_converted', { customer_id: info.customerInfo.originalAppUserId }); }});Next Steps
- Configure sandbox testing to test your intro offers
- Set up promotional offers for win-back campaigns
- Implement subscription analytics
- Create targeted marketing campaigns
Additional Resources
For more details, refer to the official Apple documentation on introductory offers.