How to create a subscription in App Store Connect
To create a subscription in App Store Connect, open your app, click Subscriptions under Monetization, create a subscription group, then add a subscription with a reference name, product ID and duration. Before it can go to review it needs a price, availability, a display name and description, a group display name and an App Review screenshot.
Your first subscription has to go to review with a new app version: add the version, the group and the subscription to the same submission. Once one is approved, later subscriptions can be submitted on their own, as long as the app has an approved version.
Choose product IDs carefully. An ID can never be reused in that app, even after you delete the product, so settle on a scheme like com.example.app.pro.monthly before you click Create.
By Redjan Hysa, founder of MetaRun · Facts checked October 12, 2026
- subscriptions per group
- 100
- the six available durations
- 1 week to 1 year
- characters in a subscription description
- 55
- characters max in a product ID, never reusable
- 100
- Family Sharing can't be turned off once on
- One-way
Free App Store pricing calculator
See what a subscription price becomes in every storefront under PPP, Big Mac or Spotify-index pricing before you set it.
Reference tables
| Field | Required? | Notes |
|---|---|---|
| Reference name | Yes, at creation | Internal only, up to 64 characters, editable any time |
| Product ID | Yes, at creation | Letters, numbers, hyphens, periods, underscores; can't be edited or reused |
| Duration | Yes | Locked once you submit for review |
| Price | Yes | A starting price; Apple fills in comparable prices for all 175 storefronts |
| Availability | Yes, to sell | On a 1-year plan, 1 Year Upfront availability comes before the monthly option |
| Display name and description | Yes, one language minimum | Description up to 55 characters; each language is reviewed separately |
| Group display name | Yes | Set on the group; it's what customers see in their subscription settings |
| App Review screenshot | Yes | Any App Store screenshot size your app supports; can be replaced, never removed |
| Review notes | No | Up to 4,000 characters; include a demo login if the paywall needs one |
| Tax category | No | Defaults to the App Store software category |
| Promotional image | No | 1024 x 1024; only for App Store promotion and win-back offers |
| Offer | Who gets it | How it reaches them | Limits |
|---|---|---|---|
| Introductory offer | Customers who haven't used an intro offer in the group | Your paywall through StoreKit, and the product page | One per customer per group; one current and one future offer per storefront |
| Promotional offer | Current and lapsed subscribers you choose | Your app, with a signed offer through StoreKit | 10 active per subscription; applies to every storefront it's sold in |
| Offer code | New, active or expired subscribers, as you set it | A code or redemption link you distribute | 10 active offers per subscription; 1 million codes per app per quarter |
| Win-back offer | Lapsed subscribers who match your rules | App Store, the in-app sheet on iOS 18 or later, subscription settings, a link | Subscription must be approved first; 5 live per storefront |
How to create a subscription in App Store Connect
The Paid Apps Agreement must be Active (Business, Agreements), and setting prices and availability needs the Account Holder, Admin or App Manager role.
- 01
Create the subscription group
In your app, under Monetization, click Subscriptions, then the add button (+). Enter a reference name (internal only) and click Create.
- 02
Add the subscription
Click the group, click Create, enter a reference name and product ID, and click Create. On the subscription's page, choose the duration and click Save.
- 03
Set availability
In Availability, click Set Up Availability and pick storefronts. For a 1-year subscription, set up 1 Year Upfront first; Monthly with 12-Month Commitment can only be offered where upfront is available.
- 04
Add the price
In Subscription Prices, click Add Subscription Price, choose a country or region and a price, adjust any storefront you want to price by hand, and confirm.
- 05
Localize the subscription and the group
In the subscription's Display Name and Description section, click Add and enter copy per language. Then open the group and do the same for its display name.
- 06
Fill in Review Information
Upload a screenshot of your paywall with the plan and price visible, and add notes telling App Review where to find it.
- 07
Set levels if the group has several plans
On the group, click Edit Order and drag the plan that offers the most to level 1. Plans with the same content and different durations can share a level.
- 08
Add for Review with an app version
On the subscription, click Add for Review and Create New Submission. Pick the platform and app version, add the group, then click Submit for Review.
Subscription groups and levels
A subscription group holds every variation of one product: monthly and annual plans, or basic and premium tiers. Customers can hold one active subscription per group, and Apple bills each group separately, so one group is right for most apps. App Store Connect warns you before you create a second.
Levels rank the plans inside a group, with level 1 offering the most. An upgrade starts immediately and refunds the unused part of the old plan, prorated; a downgrade starts at the next renewal. A crossgrade between plans on the same level is immediate when the durations match and waits for renewal when they don't. The group also caps introductory offers at one per customer, whichever plan they start on.
Durations and billing plans
The durations are 1 week, 1, 2, 3 or 6 months, and 1 year. Renewals land on the same calendar day, so a subscription started on January 30 renews on February 28 (29 in a leap year), then March 30. App Review also expects an auto-renewable period of at least seven days (guideline 3.1.2(a)).
A 1-year subscription can also be sold as Monthly with 12-Month Commitment in every storefront except the United States. The customer pays monthly but commits to 12 payments, which must total between 1 and 1.5 times the upfront price. It needs devices on OS 26.4 or later and an app built with the 26.5 SDK or later.
That plan split changes the order of setup. Since App Store Connect API 4.4 every subscription price belongs to a plan type (UPFRONT or MONTHLY), and Apple documents availability for the plan first, then its prices. MetaRun learned this in production: the first price on a subscription created after the 4.4 change failed with "An error occurred while processing the pricing information" until the plan's availability was declared, while older subscriptions repriced fine. In App Store Connect the same order shows up as Set Up Availability under 1 Year Upfront before Add Subscription Price.
Family Sharing can't be undone
Family Sharing lets a subscriber share the subscription with up to five family members. Once you turn it on in App Store Connect, you can't turn it off. Existing subscribers have to opt in from their subscription settings, and if multiseat purchases are on, only the group purchaser can share.
Submitting the first subscription
Your first auto-renewable subscription and your first group must go to review with a new app version, all in the same draft submission. Since July 2026 you start from the subscription itself with Add for Review, and one submission holds up to 200 items. After the first approval, new subscriptions can be submitted without a version, as long as the app has an approved one.
Subscription and group localizations are reviewed separately from the product and carry their own status (Prepare for Submission, Waiting for Review, Approved, Rejected), so a rejected translation can hold things up while the product looks fine. Rejection reasons appear in the App Review section of the sidebar, under the submission's Messages.
How to change a subscription price in App Store Connect
Open the subscription, click the add button (+) in Subscription Prices, choose Plan Subscription Price Change, then pick storefronts, a start date and a price. App Store Connect works out the earliest date, generally 1 to 2 days ahead. You get one future change per storefront per billing plan; scheduling a second overwrites the first.
A decrease applies to existing subscribers at renewal and can't be reversed once live. For an increase you choose between keeping the current price for existing subscribers (they can even resubscribe at it within 60 days of expiring) and applying the change to them.
App Store subscription price increases: notice or consent
If you apply an increase to existing subscribers, Apple notifies them or asks for consent. Consent is required when their storefront requires it for any increase (Apple's threshold list marks Austria, Germany, Poland and South Korea), when the increase is over 50% and more than about US$5 a period (US$50 a year for annual plans), or when they already had an increase in the past 12 months. Anyone who doesn't consent expires at the end of their last period at the old price.
Consent requests start 60 days before renewal for 2-month to annual plans, 27 days for monthly and 7 days for weekly. Subscribers on an introductory or promotional price renew at least once more at the price they signed up for. If you've kept several cohorts on older prices, raise the cohort closest to the current price first, so nobody gets two increases.
Common problems and how to fix them
Subscription or in-app purchase stuck in Missing Metadata
Why: A required field is empty. Apple's developer support names price, localization, the review screenshot and the subscription group's localization; the group display name and the screenshot are the easiest to miss. Apple's current status reference calls this stage Prepare for Submission, and the API still reports MISSING_METADATA.
Fix: Work through the checklist above: a price, availability, one display name and description, the group's display name and a screenshot. If the screenshot shows as uploaded but the status won't move, upload it again.
Developer Action Needed on a subscription
Why: A red status: Apple needs a change from you before the product can be reviewed again, typically after App Review rejected the product or part of its metadata. Apple's current status page no longer describes it; the API value is DEVELOPER_ACTION_NEEDED.
Fix: Open App Review in the sidebar, read the submission's Messages, edit the item, click Update Review and Resubmit to App Review. If nothing is listed and it won't clear, contact Apple Developer Support before creating a replacement product, because that product ID is gone for good.
Review screenshot rejected or won't upload
Why: The file must match an App Store screenshot size your app supports, as JPEG or PNG without transparency, and it has to show the item or service being sold. A home screen, or a paywall cropped so the price is missing, doesn't.
Fix: Capture the paywall on a supported size (for example 1320 x 2868 or 1290 x 2796 portrait on large iPhones) with the plan name and price on screen, and upload it under Review Information.
Product not returned by StoreKit in sandbox (empty products list)
Why: Common causes: the Paid Apps Agreement isn't Active (sandbox requires it), the bundle ID or product ID in Xcode doesn't match App Store Connect, the app isn't signed with the In-App Purchase capability, or the product changed less than an hour ago.
Fix: Check that Business, Agreements shows Active, with tax and banking complete. Compare IDs character by character, confirm the profile includes In-App Purchase, test with a Sandbox Apple Account on a development build, and allow an hour after edits.
Subscription localization rejected
Why: Each language is reviewed on its own and can be rejected while the product is fine. Display names can't contain control characters, markup or emoji.
Fix: Read the reason under the submission's Messages, edit that localization, click Update Review and resubmit.
Do it from Claude Code, Codex, Cursor or Xcode with MetaRun
Setting up a subscription by hand takes a group, a reference name, a product id you can never reuse, a duration, a display name and description per language, a price schedule, availability, and a review screenshot. In-app purchases need most of the same.
Your agent can do the whole chain through MetaRun. Creates return the new product's id, so the next preview (copy, price, availability) can name it immediately.
Before you start
- Product ids you're happy to keep forever: Apple never frees one.
- Durations and prices for each plan.
- A screenshot of your paywall for App Review.
How the agent runs it
- 01
Plan the products
Your agent reads what exists, then proposes groups, product ids and durations. Product ids are permanent, so it's worth getting them right before the first apply.
- 02
Create, then chain
Each create returns the new id. Copy, prices and availability are staged against it in the same session.
- 03
Price it
Prices can come from the pricing engine (PPP, Big Mac, Spotify) or a single base price that Apple equalizes.
- 04
Ready it for review
The review screenshot is uploaded from an https URL, like app screenshots, so the subscription can go out with the next version.
An example session
Create a 'Pro' subscription group with monthly and yearly plans: com.example.app.pro.monthly at $4.99 and .yearly at $39.99, PPP for other storefronts.
- apple_list_subscription_groupsNo subscription groups yet.
- apple_preview_create_subscription_groupPreview: group Pro.
- Your agent asks before running apple_apply_create_subscription_group. You read the preview above and approve.
- apple_apply_create_subscription_groupCreated. The group id comes back for the next step.
- apple_preview_create_subscriptionPreview: com.example.app.pro.yearly, one year. Product id not used before.
- Your agent asks before running apple_apply_create_subscription. You read the preview above and approve.
- apple_apply_create_subscriptionCreated. The subscription id comes back.
- apple_preview_set_subscription_localizationPreview: English display name and a 48-character description.
Illustrative: your apps, versions and numbers will differ. The tool names and their order are real.
The MetaRun tools involved
| Tool | What it does |
|---|---|
| apple_list_subscription_groupsread | Existing groups and their subscriptions. |
| apple_preview_create_subscription_grouppreview + apply | A new group with its reference name. |
| apple_preview_create_subscriptionpreview + apply | A subscription in a group, with product id and duration. Checks for duplicate product ids first. |
| apple_preview_set_subscription_localizationpreview + apply | Display name and description per language. |
| apple_preview_set_subscription_pricepreview + apply | Prices for every storefront. |
| apple_preview_set_subscription_availabilitypreview + apply | Which storefronts sell it. |
| apple_preview_upload_subscription_review_screenshotpreview + apply | The screenshot App Review needs before the first submission. |
| apple_preview_create_iappreview + apply | A consumable, non-consumable or non-renewing subscription purchase. Product ids are checked for duplicates. |
| apple_preview_set_iap_localizationpreview + apply | Display name and description per language for an IAP. |
Each preview has an apply twin that only runs with the confirm token from a fresh preview, and refuses if App Store Connect changed in between.
What Apple enforces along the way
Product ids can never be reused
Once a product id exists, Apple won't accept it again, even after the product is deleted. The create preview checks the app's products for a duplicate before anything is sent.
Short descriptions
A subscription's description is capped at 55 characters, an in-app purchase's at 45. MetaRun checks before staging.
Copy belongs to a version since API 4.4.1
Subscription, IAP and group copy now belongs to a metadata version. MetaRun writes to the editable one and never opens a new version on its own.
Family Sharing is a one-way switch
Turning Family Sharing on for a product is permanent. The preview says so, and turning it off is blocked.
Set up your agent
Connect once, then ask in plain words. Pick your agent:
Claude Code Anthropic
Run claude mcp add --transport http --scope user metarun https://metarun.dev/api/mcp, then run /mcp in Claude Code and sign in to MetaRun in your browser.
01 · Add the server
Run it in any terminal. --scope user makes MetaRun available in every project; leave it out to limit it to the current one.
claude mcp add --transport http --scope user metarun https://metarun.dev/api/mcp02 · Sign in
In a Claude Code session, run /mcp, choose metarun and authenticate. MetaRun opens in your browser, where you pick read-only or read and change. From a plain shell, claude mcp login metarun does the same.
/mcp03 · Optional: add the skills too
The MetaRun plug-in bundles the same server with six mission skills (release handoff, worldwide pricing, localization, review inbox, ASO audit, store media).
claude plugin marketplace add metarun/metarun-skills
claude plugin install metarun-skills@metarunThen ask Claude Code
- Ask Claude Code: Create a 'Pro' subscription group with monthly and yearly plans: com.example.app.pro.monthly at $4.99 and .yearly at $39.99, PPP for other storefronts.
- Ask Claude Code: Read the product ids in StoreKit/Products.storekit and create anything that's missing in App Store Connect.
- Ask Claude Code: Add English, German and Japanese display names and descriptions for both plans.
claude -p runs one request with no interactive session. The browser sign-in can't complete inside -p, so sign in once interactively first, or configure the server with a personal access token in CI. Tools missing from --allowedTools are refused in -p mode.
Read-only check, safe to schedule
claude -p "List every subscription group, subscription and in-app purchase for com.example.app with its state and price in the US. Read only." \
--allowedTools "mcp__metarun__apple_list_subscription_groups,mcp__metarun__apple_preview_create_subscription_group,mcp__metarun__apple_preview_create_subscription,mcp__metarun__apple_preview_set_subscription_localization,mcp__metarun__apple_preview_set_subscription_price,mcp__metarun__apple_preview_set_subscription_availability,mcp__metarun__apple_preview_upload_subscription_review_screenshot,mcp__metarun__apple_preview_create_iap,mcp__metarun__apple_preview_set_iap_localization"Only reads and previews are on that list, so nothing can reach App Store Connect unattended. Run applies in an interactive session where Claude Code can ask you.
Codex OpenAI
Run codex mcp add metarun --url https://metarun.dev/api/mcp; Codex detects MetaRun's sign-in and opens it in your browser.
01 · Add the server
Codex sees that MetaRun offers sign-in and starts it straight away, in your browser. Pick read-only or read and change.
codex mcp add metarun --url https://metarun.dev/api/mcp02 · Sign in again later
If the sign-in expires or you disconnected it in MetaRun's settings. --no-browser prints the link instead, for SSH sessions.
codex mcp login metarun03 · Or edit ~/.codex/config.toml
The Codex CLI, the IDE extension and Codex in the ChatGPT desktop app read the same file, so one entry covers all three.
[mcp_servers.metarun]
url = "https://metarun.dev/api/mcp"Then ask Codex
- Ask Codex: Create a 'Pro' subscription group with monthly and yearly plans: com.example.app.pro.monthly at $4.99 and .yearly at $39.99, PPP for other storefronts.
- Ask Codex: Read the product ids in StoreKit/Products.storekit and create anything that's missing in App Store Connect.
- Ask Codex: Add English, German and Japanese display names and descriptions for both plans.
codex exec runs one request without an interactive session and with its approval policy set to never. MetaRun's reads and previews still run, because they're marked read-only; anything that would ask is refused.
Read-only check, safe to schedule
codex exec "List every subscription group, subscription and in-app purchase for com.example.app with its state and price in the US. Read only."Applies are refused in codex exec by design. Don't set MetaRun's approval mode to approve just to make them pass; keep App Store changes in an interactive session.
Cursor Anysphere
Add https://metarun.dev/api/mcp to ~/.cursor/mcp.json (or use the install link) and sign in to MetaRun when Cursor opens your browser.
01 · Add to ~/.cursor/mcp.json (or .cursor/mcp.json for one project)
{
"mcpServers": {
"metarun": {
"url": "https://metarun.dev/api/mcp"
}
}
}02 · Or use the install link
Opens Cursor with the server filled in.
https://cursor.com/link/mcp/install?name=metarun&config=eyJ1cmwiOiJodHRwczovL21ldGFydW4uZGV2L2FwaS9tY3AifQ%3D%3D03 · Sign in
When Cursor connects, MetaRun opens in your browser. Pick read-only or read and change, and you're back in the editor with the tools listed under MCP.
Then ask Cursor
- Ask Cursor: Create the products defined in @Configuration.storekit.
- Ask Cursor: Add a non-consumable 'Lifetime' IAP at $79.99.
- Ask Cursor: Upload ./review/paywall.png as the review screenshot for the yearly plan.
The Cursor CLI runs one request without the editor with agent -p. Allow only the read tools the request needs in ~/.cursor/cli-config.json (Mcp(metarun:tool_name) rules), and keep MetaRun's apply tools out of that list.
Read-only check, safe to schedule
agent -p "List every subscription group, subscription and in-app purchase for com.example.app with its state and price in the US. Read only." --output-format jsonDon't run it with --force for MetaRun: that approves every tool, applies included.
Xcode Apple
In Xcode 27, add the plug-in from https://github.com/metarun/metarun-skills (Settings, Intelligence, Plug-ins, Add from URL) and click Sign in next to MetaRun.
01 · Add the MetaRun plug-in
In Xcode 27, open Settings, Intelligence, Plug-ins. Choose Add Plug-in, then Add from URL, and paste:
https://github.com/metarun/metarun-skills02 · Or with one click
Opens Xcode's plug-in sheet with the repository filled in.
xcode://agent-plugin-clone?repo=https%3A%2F%2Fgithub.com%2Fmetarun%2Fmetarun-skills03 · Sign in
Install MetaRun from the list, then click Sign in next to it. MetaRun opens in your browser; pick read-only or read and change.
04 · Ask the coding assistant
Claude Agent, Codex and Gemini in Xcode all get MetaRun's tools and its six workflow skills.
Attach build 312 to version 2.4 and tell me what blocks submission.Then ask Xcode
- Ask Xcode: Compare our StoreKit configuration file with App Store Connect and list the differences.
- Ask Xcode: Create the subscriptions from the StoreKit file, with the same durations.
- Ask Xcode: Make the yearly plan available everywhere except the storefronts we exclude in the app.
Claude Anthropic
In Claude, open Customize, Connectors, Add custom connector, paste https://metarun.dev/api/mcp and click Connect to sign in to MetaRun.
01 · Add a custom connector
In Claude, open Customize, then Connectors, and choose Add custom connector. Name it MetaRun and paste the server URL:
https://metarun.dev/api/mcp02 · Connect
Click Connect. Claude opens MetaRun in your browser to sign in; pick read-only or read and change.
03 · Team and Enterprise
An Owner adds the connector once under Organization settings, Connectors. Each member then clicks Connect and signs in to their own MetaRun account.
Then ask Claude
- Ask Claude: Set up a monthly and a yearly subscription for my app.
- Ask Claude: Write descriptions for both plans in English and Spanish, under 55 characters.
- Ask Claude: What subscriptions does my app have?
Frequently asked questions
What does Ready to Submit mean for a subscription?
Nothing required is missing and the subscription can be added to a submission. It isn't in review yet: click Add for Review, include an app version if it's your first subscription, and submit.
Why is my in-app purchase showing Missing Metadata?
Same cause as a subscription: a required field is empty. For a consumable or non-consumable that's usually the price, a localization (display name of 2 to 30 characters, description up to 45) or the review screenshot.
Will existing subscribers pay more after a price increase?
Only if you apply the increase to them. Choose to keep the current price for existing subscribers and only new subscribers pay more. If you apply it, Apple notifies them or asks for consent, and those who don't consent expire.
Do I need a new app version for every subscription?
No. Only your first auto-renewable subscription and first group need one. After that, new subscriptions can be submitted alone, as long as the app has an approved version.
Can I change a product ID or duration later?
Never the product ID: it can't be edited, and it can't be reused even after you delete the product. The duration can be changed until you submit the subscription for review.
Can I turn off Family Sharing for a subscription?
No. Once Family Sharing is on for a subscription or in-app purchase, App Store Connect won't let you turn it off.
Can your agent read my StoreKit configuration file?
If it can read your project, yes. Your agent reads the file; MetaRun creates and prices the products in App Store Connect. That keeps the two in sync without copying ids by hand.
What if I pick a product id I've used before?
The create preview checks the app's existing products and blocks a duplicate. Apple never frees a product id, even after deletion.
Can it set up free trials too?
Yes, as introductory offers. See the offers page for intro offers, offer codes and win-back offers.
Does the subscription go live immediately?
No. New subscriptions go out with a version submission, like in App Store Connect. MetaRun's readiness sweep checks they have what review needs.
Sources
- Apple: Offer auto-renewable subscriptions (App Store Connect Help)
- Apple: Auto-renewable subscription information
- Apple: In-App Purchase information
- Apple: In-App Purchase statuses
- Apple: In-App Purchase localization statuses
- Apple: Set availability for an auto-renewable subscription
- Apple: Manage pricing for auto-renewable subscriptions
- Apple: Auto-renewable subscription price increase thresholds
- Apple: Submit an In-App Purchase
- Apple: Turn on Family Sharing for In-App Purchases
- Apple: Set up introductory offers
- Apple: Set up promotional offers
- Apple: Set up subscription offer codes
- Apple: Set up win-back offers
- Apple: Overview for configuring In-App Purchases
- Apple: Overview of testing in sandbox
- Apple: Screenshot specifications
- Apple: Configuring subscription prices across territories (App Store Connect API)
- Apple: App Store Connect release notes
- Apple: App Review Guidelines, 3.1.2 Subscriptions
- Apple Developer Forums: Subscription status Missing Metadata (DTS answer, April 2026)
Related guides
Guide
How Apple equalizes one base price into 175 storefronts, how to override them, and PPP vs flat pricing.
Guide
One-time use vs custom codes, limits, redemption links, setup by hand or by API, and why a code says it isn't valid.
Guide
The pre-submission checklist, every review status, export compliance, rejections and expedites.
Guide
Every iPhone and iPad screenshot size in pixels, which ones are required, app preview specs and upload errors.
All guides
Releases, TestFlight, pricing, subscriptions, localization, screenshots and more.
With MetaRun: Price subscriptions in every storefront
MetaRun
Do this from your AI agent or MetaRun's dashboard, with a preview before every change. 14-day free trial, no card.