All posts
PRICING

What to do when Apple rejects your price change

Apple's price-change failures are terse and hard to diagnose. This guide maps every common rejection scenario — grandfathering blocks, API error codes, agreement issues — to its root cause and the fastest fix.

By the AppsOps team · · 9 min read

You've decided to raise your subscription price — sensible, given rising server costs, added features, or the simple realization that your app is underpriced relative to comparable tools. You open App Store Connect, navigate to your in-app purchase, enter the new figure, and hit save. Nothing happens. Or worse: a red error banner appears with a message so terse it tells you almost nothing useful.

Apple's pricing machinery is robust, but it is not transparent. When a price change is blocked, the error language is typically brief, and the documentation explaining why the block occurred is scattered across developer guides, support threads, and the App Store Connect help centre. This post consolidates the most common failure modes and their fixes — so you spend less time guessing and more time shipping.

Why Apple Blocks Price Changes in the First Place

Apple's pricing pipeline runs checks at multiple points: when you save a price in App Store Connect manually, when a scheduled price change activates, and when the App Store Connect API is used to push price updates programmatically. A rejection at any one of these points has different symptoms and different remedies.

Broadly, rejections fall into four categories:

Rule of thumb: if your app has active subscribers, budget at least 48–72 hours for a price change to propagate fully across Apple's systems. Price updates are eventually consistent across storefronts, and a change that appears blocked may simply be queued rather than rejected outright.

The Most Common Rejection Scenarios

The table below maps failure scenarios to their likely root cause and the most productive first step toward resolution. Note that App Store Connect's UI error messages often don't map cleanly to these categories — you'll need to cross-reference against what changed in your account recently.

Scenario / Error Root cause First fix to try
"Price point not available in this territory" The entered price doesn't correspond to a valid price point in that storefront's currency Use App Store Connect's price point picker rather than typing a raw number; Apple's generated-price system requires selecting from a pre-approved set
Save button grayed out or spinner that never resolves A pending scheduled change already exists for this IAP Cancel the existing scheduled change first, then re-enter your new target price
API error: PRICE_POINT_NOT_FOUND The pricePoint ID in your API request doesn't exist for that territory-currency combination Re-fetch available price points from the API before every write; never cache price-point IDs across sessions
Grandfathering block on a subscription price increase Apple requires a notification window before billing existing subscribers at a new, higher price; a second increase during that window is blocked Confirm the current notification period has fully elapsed before scheduling a follow-on increase
"Agreements, tax, or banking information needs to be updated" Expired or unsigned Paid Apps Agreement, missing tax form, or unverified bank account Navigate to App Store Connect → Agreements, Tax, and Banking and resolve all Action Required items
Price change reverts silently overnight Automation or a second team member's scheduled change overwrote the update Audit App Store Connect activity logs and review any CI/CD pipelines that call the pricing API
API error: STATE_ERROR The IAP is currently under App Review (for example, as part of a new submission that includes a new in-app purchase) Wait for the review to complete; pricing endpoints are locked while the IAP is in review state

The Grandfathering Case: Apple's Most Misunderstood Rule

The single largest source of confusion around subscription price changes is Apple's grandfathering mechanism — a consumer protection system that prevents subscribers from being silently billed more without prior notice. If you've attempted a second price increase within weeks of a first one and hit a wall, this is almost certainly the culprit.

When you raise the price of an auto-renewable subscription, Apple splits your subscriber base into two cohorts:

  1. New subscribers — anyone who subscribes after your change takes effect pays the new price immediately and automatically.
  2. Existing subscribers — anyone subscribed before the change receives an Apple-generated email and push notification. They are given a window — approximately 30 days — to accept the new price; if they don't, their subscription lapses rather than being silently upgraded.
30 days Apple notifies existing subscribers before billing them at a higher subscription price

The complication arises when you try to make a second price change before the notification window for the first change has fully closed. Apple's system treats this as an attempt to modify an in-progress notification cycle, and it blocks or queues the second change. The UI rarely offers a clear explanation — you typically see a generic error or a save that doesn't stick.

The fix requires patience: wait for the first notification cycle to fully complete before scheduling a follow-on increase. To verify whether the window is still open, check your Subscription Reports in App Store Connect under Sales and Trends — the "Subscribers" section will show when existing-subscriber transitions have stabilised. For a thorough treatment of this mechanism, including what happens when you reduce a price (no window required) and how Apple handles international grandfathering, see our post on Apple's grandfathering rules for subscription price changes.

One practical note: price reductions are not subject to the grandfathering window. You can lower a subscription price at any time and existing subscribers are moved to the lower price at their next renewal cycle without any notification requirement. This asymmetry is intentional — Apple's rules are designed to protect subscribers from surprise increases, not from surprise discounts.

Diagnosing API-Specific Rejections

If you're pushing price changes via the App Store Connect API — as part of an automation script or a multi-territory update workflow — the failure mode looks different from a UI rejection. Rather than a banner, you receive a JSON error response. The most actionable fields are code, detail, and source within the errors array.

Common error codes in the pricing domain:

If your API call returns FORBIDDEN and your JWT looks syntactically correct, check whether the API key itself has been revoked in App Store Connect. Revoked keys return HTTP 403 — the same status as an insufficient-scope error — not 401. It's an easy misdiagnosis that sends developers down the wrong debugging path.

A reliable debugging sequence for API pricing failures:

  1. Re-fetch valid price-point IDs for your target territory via GET /v1/inAppPurchasePriceSchedules/{id}/manualPrices immediately before your write call. Never use cached price-point IDs from a previous session.
  2. Confirm your API key carries either the Finance or Admin role. Developer and Marketing roles cannot write pricing data.
  3. Log the full response body — not just the HTTP status code. The errors array typically contains the specific detail string that tells you exactly what the system rejected.
  4. If you're updating prices across multiple territories in a single script, process them sequentially rather than in parallel. Concurrent writes to the same IAP's price schedule can produce race conditions that trigger STATE_ERROR.

Account and Agreement Blockers

A price change that works for some apps in your account but fails for a specific app is often a contract issue rather than a system-wide problem. Apple requires that the Paid Apps Agreement be active and accepted for every app that sells in-app purchases. If that agreement has expired, or if Apple has issued an updated version that you haven't countersigned, pricing changes for affected apps will be blocked — sometimes with a clear message, sometimes silently.

To check:

  1. In App Store Connect, navigate to the account-level view (not a specific app), then go to Agreements, Tax, and Banking.
  2. Look for any agreements marked Action Required or Expired.
  3. Complete the required action, then wait 24 hours before retrying your price change. Agreement updates can take time to propagate through Apple's entitlement systems.

Similarly, if your banking details have changed — a new routing number, a new account — Apple may hold financial changes until the new details are verified. This verification can take several business days through Apple's internal team, and during that window, new price changes may be queued rather than processed.

For teams with multiple Apple accounts or developer programs (for example, a company that has both an individual and an organisation account), confirm that the price change is being made from the account that owns the relevant app — pricing permissions don't cross account boundaries, and an Admin role on one account gives you no access to another account's apps.

A Pre-Flight Checklist Before Your Next Price Change

Running through the following before any price update will catch the majority of rejection scenarios before they occur:

Keeping a lightweight log of every price change — territory, IAP ID, timestamp, old price, new price, and whether the change succeeded — pays dividends quickly. When a change silently reverts or an unexpected error appears, a simple log makes it possible to isolate the window of failure rather than investigating blindly. For apps operating across many storefronts, visit the pricing overview to understand how Apple's territory-level price generation interacts with your base price selections.

Sources and Further Reading

Share this post

Ready to put this into practice?

appsops.store gives you PPP-adjusted pricing across all 175+ App Store territories, App Store Connect API automation, and 39-language localization — all from one dashboard.

Start free →

Related reading