title: ""Apple Approved My App But It Was Invisible on the App Store for 36 Hours""
subtitle: "The appAvailabilities POST nobody tells you about"
publication_date: 2026-05-21
devto_id: 104
tags: [ios, asc, api, appstore, apple-review, indie]
status: paste-ready
platform: dev.to
account: snake_sun
canonical_url: https://dev.to/snake_sun/apple-approved-my-app-but-it-was-invisible-on-the-app-store-for-36-hours-2lgf
Apple approved my app. The ASC dashboard said ""Ready for Sale."" But for 36 hours -- zero visibility. No search results. No direct links. Nothing.
Here's what caused it, and the 3-minute fix.
The symptom
Build submitted via ASC API -- Apple approves -- \READY_FOR_SALE\ status -- yet the app does not appear in App Store search, direct links, or anywhere a customer would look.
You check App Store Connect. Everything looks fine. You check the public App Store. Empty.
This isn't an App Review delay. Review was done. This was a distribution problem.
The actual cause
When you submit via the ASC API (build upload -- \POST /v1/builds\, then \POST /v1/appStoreVersions), Apple handles review. But there's a separate step the API doesn't automate:
Territory availability assignment.
The \ppAvailabilities\ endpoint controls which regional App Stores your app appears in. If you never POST to it, your app gets zero territories assigned -- even after Apple approves it.
Apple's side shows green. Customers see nothing.
The fix (3 minutes)
\\python
import requests
TOKEN = ""YOUR_JWT_FROM_ASC_KEY""
APP_ID = ""YOUR_APP_ID"" # e.g. 6478901234
VERSION_ID = ""YOUR_VERSION_ID"" # e.g. ""6478901234:v=1,b=1234""
Territories you want to be LIVE in
TERRITORIES = [""USA"", ""GBR"", ""JPN"", ""AUS"", ""CAN""]
url = f""https://api.appstoreconnect.apple.com/v2/appAvailabilities""
headers = {
""Authorization"": f""Bearer {TOKEN}"",
""Content-Type"": ""application/json"",
}
payload = {
""data"": [{
""relationships"": {
""app"": {""data"": {""id"": APP_ID, ""type"": ""apps""}},
""appStoreVersion"": {""data"": {""id"": VERSION_ID, ""type"": ""appStoreVersions""}},
},
""territories"": TERRITORIES,
}]
}
r = requests.post(url, json=payload, headers=headers)
print(r.status_code, r.json())
\\
\201\ means territories assigned. Your app goes live in those storefronts within minutes to hours (sometimes up to 2h for App Store indexing).
Why this isn't documented well
Apple's documentation frames \ppAvailabilities\ as an optional configuration step. That's technically true -- but only if you use App Store Connect's web UI to submit.
When you use the ASC API for the full pipeline (upload build -- create appStoreVersion -- submit for review -- approve), the territory step is skipped if you never explicitly POST to it.
The UI workflow handles it automatically when you click ""Automatically release"" in App Store Connect. The API workflow does not.
How to check if you're missing territories
\\python
GET current availabilities for your app
r = requests.get(
f""https://api.appstoreconnect.apple.com/v2/appAvailabilities"",
headers={""Authorization"": f""Bearer {TOKEN}""},
params={""filter[app]"": APP_ID, ""limit"": 200}
)
avails = r.json()
print(f""Territories assigned: {len(avails.get('data', []))}"")
\\
If \data\ is empty -- you have the bug.
The sequence that causes it
- \POST /v1/builds\ -- upload to TestFlight
- \POST /v1/appStoreVersions\ -- create version (no territory data)
- \POST /v1/appStoreVersionSubmissions\ -- submit for review
- Apple approves -- status \READY_FOR_SALE\
- No \POST /v2/appAvailabilities\ called -- zero territories -- invisible
Checklist before you go live
- [ ] Build approved by Apple
- [ ] \READY_FOR_SALE\ in ASC dashboard
- [ ] \POST /v2/appAvailabilities\ sent with your target territories
- [ ] Wait 2h, then search your app name on an App Store in each territory
That last step sounds obvious but it's the one that catches you when you're automating the full pipeline. You don't see a button to click, so you assume there's nothing to do.
There is.
The 36 hours this cost me? Mostly debugging whether Apple's review queue was slow or whether I'd broken something in the submission flow. I hadn't. The submission was fine. The distribution step was missing.
Three-minute fix once you know what to look for.
Filed under: iOS, Apple App Store Connect, API, indie dev, debugging
Submitting iOS apps via ASC API? The territory assignment step is the one
that catches you when you automate the full pipeline.
The $29 TestFlight Debug Bible
covers this bug plus 9 other ASC API traps that kill launches.
Or book a free 15-min call to audit your submission pipeline.
iOS Audit Sprint: 60-min Zoom + written report + 14-day refund.
Top comments (0)