Quick answer
Apple's itunes.apple.com/search endpoint is keyless, public, and returns rich app metadata โ but it never tells you the rank. The position is implicit: it is the index of each result in the array Apple hands back. Nobody stores it, so nobody can trend it. We measured the Apify Store cluster before building: 255 rivals for "app store scraper", 85 with real users, led by one with 1,928 users and 24,794 runs in 30 days โ and all five leaders scrape reviews. The App Store Keyword Ranking Scraper does the other thing: keywords ร country storefronts in, rank position out.
Why is rank the missing field? ๐
Because it isn't a field. Apple returns:
{ "resultCount": 9, "results": [ {...}, {...}, ... ] }
The app at results[0] ranks 1 for that keyword in that storefront. The app at results[4] ranks 5. That's it โ the signal exists only as array order, and it evaporates the moment anything reshuffles the list or stores results in an unordered structure.
So the interesting product isn't the metadata dump every other scraper produces. It's the 1-based position, stamped per keyword and per storefront, at a point in time โ because that is the series an ASO consultant needs to answer "did our metadata change move us, or did a competitor just outspend us?"
We derive it explicitly and write it as rank, alongside the timestamp in scrapedAt.
The competitive read, stated plainly ๐ฏ
We ran cluster depth before writing code, because in a clone cluster traction is the tiebreak and a brand-new listing has none:
| Term | Rivals | With real users | Leader |
|---|---|---|---|
| app store scraper | 255 | 85 | 1,928 users / 24,794 runs (30d) |
That is enormous proven demand and a brutal place to launch another reviews scraper. Which is exactly why this one doesn't. The five apps at the top of that cluster are appstore-reviews-scraper, appstore-reviews, app-store-reviews-scraper and friends. Reviews are well served. Keyword rank is not.
We would rather tell you that openly than pretend we invented a category.
What we handle ๐ก๏ธ
Apple's Search API is public, so this is not an anti-bot fight โ it is a rate-limit and correctness fight, which is a different discipline:
- Pacing. Apple throttles roughly per-IP. There's a minimum interval between calls rather than a burst-and-pray loop.
-
Retries on
403 / 408 / 429 / 503and network errors, up to 5 attempts, honouringRetry-Afterwhen Apple sends one. -
Session rotation. One
curl-cffisession per browser impersonation profile, round-robined, so consecutive requests don't present an identical fingerprint. - Fault isolation per pair. A keyword ร country pair that fails is skipped; the rest of the matrix still returns. A 40-pair run doesn't die because one storefront hiccupped.
-
Zero results is an answer. A keyword nobody ranks for finishes SUCCEEDED with a status message, not a failed run.
resultCount: 0is real data โ we captured a genuine one as a test fixture.
The limit=200 ceiling, and why it matters for ASO ๐งข
Apple caps limit at 200 results per query. For rank tracking that is rarely a constraint โ if your app is past position 200 for a keyword, the actionable number is "not ranking", and precision at 214 buys you nothing.
It is a constraint if you were hoping to enumerate a whole category. This is not the tool for that, and we'd rather say so up front than have you discover it on run three.
What you get per row
Verified against a live query โ ranks 1โ3 for crm on the US storefront came back as DealerSocket, HubSpot, Zoho, matching Apple's own ordering by trackId:
| Field | Example |
|---|---|
keyword / country / entity
|
crm / us / software
|
rank |
1 |
trackName / trackId / bundleId
|
CRM by DealerSocket / 1453920054 / com.dealersocket.crm
|
sellerName |
SOLERA HOLDINGS, INC |
averageUserRating / userRatingCount
|
4.64 / 2818
|
price / formattedPrice
|
0 / Free
|
version / currentVersionReleaseDate
|
1.35.0 / 2026-08-18
|
primaryGenreName / genres
|
Business / [Business, Utilities]
|
description / releaseNotes
|
full text โ useful for keyword-density work |
trackViewUrl / artworkUrl512
|
canonical links |
releaseNotes is quietly one of the most useful columns: it's how you spot a competitor shipping an ASO metadata change in the same week your rank moved.
FAQ
What does it cost?
$0.05 per run start plus $0.003 per ranked app โ $3.05 per 1,000 rows. Pay per result.
Do I need an API key or account?
No. Apple's Search API is keyless and public.
Does it scrape reviews?
No, deliberately. That cluster is crowded and well served. This is rank tracking.
Can I track several countries at once?
Yes โ keywords ร countries is the input shape, and it fans out across the matrix. Each row carries its own country, so ranks never get mixed between storefronts.
iPad and Mac apps too?
Yes, via entity (software, iPadSoftware, macSoftware).
How often should I run it?
Daily or weekly on a fixed keyword set. Rank is only meaningful as a series โ one snapshot tells you position, several tell you direction.
Is this Google Play too?
No. Apple only. Play has no comparable keyless search endpoint, and pretending otherwise would mean quietly shipping a scraper that breaks.
Built by Devil Scrapes. We do the dirty work so your dataset stays clean. ๐
Top comments (0)