App Store Search, Rank & App Details — No Login avatar

App Store Search, Rank & App Details — No Login

Pricing

from $0.75 / 1,000 app rows

Go to Apify Store
App Store Search, Rank & App Details — No Login

App Store Search, Rank & App Details — No Login

Search the Apple App Store for many keywords in many countries in one run, with exact rank per term, or look up apps by App ID, bundle ID or URL. Ratings, price, version, developer and genres from Apple's official API. No login, no API key.

Pricing

from $0.75 / 1,000 app rows

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Search the Apple App Store for many keywords in many countries in one run and get a ranked list of apps with rating, price, version and developer — or look up exact apps by App ID, App Store URL or bundle ID. The data comes from Apple's official iTunes Search & Lookup API. No login, no API key, no browser.

It is for ASO specialists, mobile marketers, app developers and AI agents. The smallest run is one keyword in one country: pdf scanner in us returns about 20 ranked apps in a few seconds and costs about $0.025 on the Apify Free plan.

App Store Search & App Details: search terms in many countries, ranked apps with ratings, and app details by App ID or bundle ID, with clear not_found rows

Table of contents

What it does

The Actor has two modes.

  • Search mode (mode: search). Each term is searched in each country. Every term × country pair becomes its own ranked list: rank 1, 2, 3… Every row also carries its term and country, so you can put many keywords and markets in one table.
  • Lookup mode (mode: lookup). You give App IDs, App Store URLs or bundle IDs. The Actor returns the app details for each ID in each country you choose. An ID that is not in a country's store gets a clear not_found row. It is never silently dropped.

Both modes return the same app fields: App ID, bundle ID, name, seller, developer, price and currency, genres, star rating and number of ratings, version, release dates, size, age rating, store URL and icon.

You can also add rank tracking. Put your own App IDs in trackAppIds. Their rows get isTracked: true, and the run summary shows where each one ranks for every term and country. It also says when an app is outside the returned list.

Good fit

  • Check which apps rank for a keyword in several countries in one run.
  • Watch where your app and your competitors rank for your main keywords.
  • Get fresh details (rating, version, price, size) for a list of known apps.
  • Check in which countries an app is available. Missing countries get not_found rows.

Not a fit / limits

  • No downloads, installs, revenue or keyword search volume. Apple does not publish them, and this Actor does not estimate them.
  • No reviews and no top charts. For reviews, use Apple App Store Reviews Scraper.
  • rank is the position in Apple's Search API results. It is close to the search order in the App Store app, but not always the same.
  • Up to 200 apps per term and country. This is Apple's maximum, and Apple often returns a few fewer.

Quick start

  1. Open the Input tab. It is prefilled with terms: ["pdf scanner"], countries: ["us"] and limit: 20.
  2. Add more terms or countries if you want, for example de and jp.
  3. Click Start.
  4. Open the Output tab, choose the Search results view, and sort by term, country and rank.

Expected result: about 20 rows for pdf scanner in the US, from rank 1 to about 20. Each row has the app name, rating, number of ratings, price, version and store URL. This run usually takes under 10 seconds.

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Keyword research in many marketsterms + countriesRanked app per term and countryterm, country, rank, name, userRatingCountExport CSV or Google Sheets
Track your app's keyword rankterms + countries + trackAppIdsRank tracking in RUN_SUMMARYrankTracking[].rank, statusSchedule daily, compare runs
Competitor app monitoringmode: lookup + appIdsApp details per countryversion, currentVersionReleaseDate, averageUserRating, priceSchedule weekly, alert on change
Availability check by countrymode: lookup + bundleIds + countriesApp row or not_found rowstatus, country, queryIdsFilter status = not_found
AI agent app searchterms (MCP)Ranked appname, trackId, url, averageUserRatingAgent answer or next tool call

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
modeModestringnodefault searchsearch, lookupKeyword search or exact lookup by ID"lookup"Use lookup when you already know the apps
termsSearch termsarray of stringsyes in search modeprefill ["pdf scanner"]up to 50 terms, 100 characters eachEach term is searched on its own and gets its own ranks["pdf scanner", "budget"]Use real user phrases, one per line
countriesCountriesarray of stringsnodefault and prefill ["us"]up to 50 two-letter App Store country codesEach term or ID is processed in each country["us", "de", "jp"]Use lower-case codes like gb, not uk. Over the API, a single country string also works
limitResults per searchintegernodefault 50, prefill 201–200How many apps per term and country100200 for full keyword research, 20 for a quick check
entityApp typestringnodefault softwaresoftware (iPhone), iPadSoftware, macSoftwareWhich store section to search (search mode only)"macSoftware"Keep software for most iPhone apps
trackAppIdsApps to trackarray of stringsnoemptyup to 50 App IDs or App Store URLsMarks rows with isTracked and adds rank tracking to RUN_SUMMARY["1199564834"]Add your app and 2–5 competitors
appIdsApp IDsarray of stringsyes in lookup mode (or bundleIds)emptynumbers like 284882215, id284882215 or App Store URLs; leading zeros are removedLookup by Apple App ID["284882215"]Paste App Store URLs as they are
bundleIdsBundle IDsarray of stringsyes in lookup mode (or appIds)emptybundle IDs, case-insensitive; up to 500 IDs and bundle IDs togetherLookup by bundle identifier["com.adobe.scan.ios"]Use when you have bundle IDs from your own data
includeDescriptionInclude descriptionbooleannofalsetrue, falseAdds description and releaseNotestrueKeep off unless you need the text. Rows get much larger

Empty and duplicate input:

  • In search mode, an empty terms list stops the run with a clear input error. In lookup mode, appIds and bundleIds must not both be empty.
  • Duplicate terms are removed, ignoring upper and lower case. Duplicate IDs and countries are also removed.
  • If a value is not a valid App ID, App Store URL or bundle ID, it is not sent to Apple. All such values are listed together in one INVALID_IDENTIFIER error row (its queryType is appId), and the valid IDs are still processed.
  • If you give the same app twice, once by App ID and once by bundle ID, you get two rows for it, and both are charged.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Search modetermscountriesOne search per term × country; at most 100 per run10 terms × 5 countries = 50 searchesOne query charge per answered search
Search modetermslimitUp to limit apps per term and country2 terms × limit 200Up to 400 charged app rows
Lookup modeappIds / bundleIdscountriesEach ID is looked up in each country. IDs are sent in batches of up to 100500 IDs × 3 countries = 15 requestsOne query charge per answered batch, one app charge per app found
Lookup modeentity, limit, terms, trackAppIds—Ignored, not checked—None
Any modetrackAppIdstermsTracked apps are found only inside the returned limitlimit 20 → apps ranked 21+ show not_in_resultsNo extra charge

Input examples

Keyword research in three countries

{
"terms": ["habit tracker", "budget planner"],
"countries": ["us", "de", "jp"],
"limit": 200
}

Expected behavior: 6 searches (2 terms × 3 countries), each with its own ranks. Expected output: up to 1,200 app rows with term, country, rank, name, averageUserRating. Limit or cost note: 6 query events, plus one app event per returned app.

Track your app's rank

{
"terms": ["pdf scanner", "document scanner"],
"countries": ["us", "gb"],
"limit": 200,
"trackAppIds": ["1199564834"]
}

Expected behavior: 4 searches. The tracked app's rows have isTracked: true. Expected output: RUN_SUMMARY.rankTracking has one entry per term × country × tracked app, with rank or not_in_results, in the order of your terms, countries and tracked apps.

Lookup by App ID, URL and bundle ID

{
"mode": "lookup",
"appIds": ["284882215", "https://apps.apple.com/us/app/adobe-scan-pdf-doc-scanner/id1199564834"],
"bundleIds": ["com.google.chrome.ios"],
"countries": ["us", "gb"]
}

Expected behavior: each ID is looked up in the US and in the UK store. Expected output: one app row per found app per country, and one not_found row per request batch, listing the missing IDs in queryIds.

Output

Results go to the default Dataset. There are two views: Search results (search mode) and App details (lookup mode). The Key-value store has a RUN_SUMMARY record with the run status, counts, every query's outcome, rank tracking and request statistics.

Output example

One row from the prefill run (pdf scanner, us, limit 20). The languages and screenshot lists are shortened:

{
"status": "complete",
"mode": "search",
"queryType": "term",
"query": "pdf scanner",
"queryIds": null,
"term": "pdf scanner",
"country": "us",
"entity": "software",
"rank": 1,
"isTracked": null,
"trackId": 1199564834,
"bundleId": "com.adobe.scan.ios",
"name": "Adobe Scan: PDF & Doc Scanner",
"kind": "software",
"sellerName": "Adobe Inc.",
"developerName": "Adobe Inc.",
"developerId": 331646274,
"developerUrl": "https://apps.apple.com/us/developer/adobe-inc/id331646274",
"sellerUrl": null,
"price": 0,
"formattedPrice": "Free",
"currency": "USD",
"primaryGenre": "Business",
"primaryGenreId": 6000,
"genres": ["Business", "Productivity"],
"averageUserRating": 4.87591,
"userRatingCount": 1598867,
"averageUserRatingCurrentVersion": 4.87591,
"userRatingCountCurrentVersion": 1598867,
"version": "26.09.29",
"releaseDate": "2017-05-31T14:12:55Z",
"currentVersionReleaseDate": "2026-09-29T18:04:04Z",
"fileSizeBytes": 418327552,
"contentRating": "4+",
"minimumOsVersion": "18.0",
"languages": ["EN", "DE", "FR", "JA"],
"supportedDevicesCount": 130,
"url": "https://apps.apple.com/us/app/adobe-scan-pdf-doc-scanner/id1199564834",
"iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/33/ce/2e/33ce2ed1-047b-9bf5-452b-f1a2f54e4d39/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/512x512bb.jpg",
"screenshotUrls": ["https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/30/ec/ab/30ecab7d-94c6-d7f6-7e0e-084b2b443837/01_Scan_iOS_6.7_1284x2778_en-US.jpg/320x480bb.jpg"],
"ipadScreenshotUrls": ["https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/84/93/92/8493921b-bd41-eee2-f782-7ce6425545e2/01_Scan_iOS_iPad_2048x2732_en-US.jpg/360x480bb.jpg"],
"description": null,
"releaseNotes": null,
"errorCode": null,
"errorMessage": null,
"source": "apple-itunes-search-api",
"sourceUrl": "https://itunes.apple.com/search?term=pdf+scanner&country=us&media=software&entity=software&limit=20",
"fetchedAt": "2026-10-13T04:59:45.285Z"
}

A lookup not_found row for an App ID that does not exist:

{
"status": "not_found",
"mode": "lookup",
"queryType": "appId",
"query": "1234567890123",
"queryIds": ["1234567890123"],
"country": "us",
"trackId": null,
"name": null,
"errorCode": null
}

null means Apple did not return the value (or it does not apply to this row). 0 is used only when Apple returns 0. For example, price: 0 means a free app. If an app has no ratings yet, averageUserRating is null, not 0.

Output fields

FieldMeaningTypeCan be empty?Example / enumSource / notes
statusRow resultstringnocomplete, not_found, errorOnly complete rows are charged
modeRun modestringnosearch, lookupFrom input
queryTypeWhat the row answersstringnoterm, appId, bundleId
queryYour term or ID as processedstringnopdf scannerA grouped status row lists all its IDs or terms, comma-separated
queryIdsIDs or terms covered by one grouped status rowarray or nullyes["1234567890123"]Lookup not_found/error rows (one per batch of up to 100 IDs per country) and the row for queries skipped after a rejected country. null on app rows
termSearch termstring or nulllookups: nullpdf scanner
countryApp Store country codestringnous
entityApp type searchedstring or nulllookups: nullsoftware
rankPosition in the results for this term and countryinteger or nulllookups: null1Duplicates removed; based on the Search API order
isTrackedApp is in your trackAppIdsboolean or nullnull if nothing is trackedtrue
trackIdApple App IDinteger or nullstatus rows: null1199564834The number after id in the store URL
bundleIdBundle identifierstring or nullyescom.adobe.scan.ios
nameApp name in this countrystring or nullyesAdobe Scan: PDF & Doc Scanner
kindApple kindstring or nullyessoftware, mac-software
sellerNameLegal sellerstring or nullyesAdobe Inc.
developerNameDeveloper namestring or nullyesAdobe Inc.
developerIdApple developer IDinteger or nullyes331646274
developerUrlDeveloper page on the App Storestring or nullyes
sellerUrlDeveloper websitestring or nulloften nullOnly if the app lists one
priceUpfront pricenumber or nullyes0, 4.990 = free; in-app purchases not included
formattedPricePrice as Apple shows itstring or nullyesFree, $4.99
currencyPrice currencystring or nullyesUSD
primaryGenreMain categorystring or nullyesProductivity
primaryGenreIdApple genre IDinteger or nullyes6007
genresAll categoriesarray or nullyes["Business", "Productivity"]
averageUserRatingAverage stars (0–5) in this countrynumber or nullnull without ratings4.87591All versions
userRatingCountNumber of ratings in this countryinteger or nullyes1598867
averageUserRatingCurrentVersionAverage stars for the current versionnumber or nullyesAs Apple reports it
userRatingCountCurrentVersionRatings for the current versioninteger or nullyesAs Apple reports it
versionCurrent versionstring or nullyes26.09.29
releaseDateFirst release datestring or nullyes2017-05-31T14:12:55ZISO 8601
currentVersionReleaseDateCurrent version datestring or nullyes2026-09-29T18:04:04ZISO 8601
fileSizeBytesDownload size in bytesinteger or nullyes418327552
contentRatingAge ratingstring or nullyes4+, 12+
minimumOsVersionMinimum OS versionstring or nullyes18.0
languagesSupported languagesarray or nullyes["EN", "DE"]ISO 639-1, upper case, as Apple lists them (a code can repeat, e.g. ZH)
supportedDevicesCountNumber of supported device modelsinteger or nullyes130
urlApp Store pagestring or nullyes
iconUrlApp iconstring or nullyes512 px when available
screenshotUrlsiPhone or Mac screenshotsarray or nullyes
ipadScreenshotUrlsiPad screenshotsarray or nullyes
descriptionFull store descriptionstring or nullnull unless includeDescription
releaseNotesWhat's New textstring or nullnull unless includeDescription
errorCodeMachine reason for an error rowstring or nullnull on other rowsINVALID_IDENTIFIER, SOURCE_BAD_REQUEST, RATE_LIMITED, SOURCE_UNAVAILABLE, SOURCE_TIMEOUT, SOURCE_SCHEMA_CHANGED, NOT_PROCESSED
errorMessagePlain-English reasonstring or nullnull on other rows
sourceData sourcestringnoapple-itunes-search-api
sourceUrlExact Apple API request behind the rowstringempty for rows not sent to Apple
fetchedAtWhen the row was fetchedstringnoISO 8601 UTC

Output entities and surfaces

SituationDataset/API/KVSResult shapeUser action
Normal itemDatasetOne complete row per app per term and country (search) or per ID and country (lookup)Filter, sort, export
No apps for a searchDatasetOne not_found row for that term and countryTry another term or country
ID missing in a countryDatasetOne not_found row per batch, IDs in queryIdsThe app is not sold in that country, or the ID is wrong
Some queries failedDataset + RUN_SUMMARYerror rows with errorCode; run status PARTIALRe-run only the failed terms or countries
All queries failedRUN_SUMMARY + error rowsRun fails with a clear status messageSee Troubleshooting

The run status in RUN_SUMMARY.status is one of COMPLETE, PARTIAL, NO_RESULTS, CAPPED (stopped at your maximum charge), ERROR, INVALID_INPUT, RESOURCE_ERROR (run timeout under 60 seconds; nothing is sent to Apple) or CANCELLED. NO_RESULTS means Apple answered but found nothing. It is not the same as ERROR.

Moving from another App Store scraper

If you used a scraper with fields like appId, appName, developer, rating, ratingCount and currentVersionDate, use this map:

Other fieldField here
appIdtrackId
appNamename
developerdeveloperName
ratingaverageUserRating
ratingCountuserRatingCount
currentVersionDatecurrentVersionReleaseDate
scrapedAtfetchedAt

bundleId, price, currency, genres, version, releaseDate, fileSizeBytes, contentRating, iconUrl and description keep the same names. New here: rank, term, country, isTracked, status, errorCode and sourceUrl. Many terms and many countries go in one run.

Pricing and limits

Pricing unit

This Actor uses pay-per-event pricing. You pay for:

EventWhenPrice
Actor startOnce per run$0.003
QueryEach search (term × country) or lookup batch that Apple answered$0.0003
AppEach complete app row$0.0012 on the Free plan, $0.001 on Bronze, $0.0009 on Silver, $0.00075 on Gold and higher

not_found and error rows are free. A search with no apps costs only its query charge, $0.0003. A query that Apple rejects or that fails is not charged. A run with invalid input pays only the start charge. Platform usage is included in the price. You can set a maximum total charge for a run. The Actor stops at that limit and marks the run CAPPED.

Cost examples

Prices on the Free plan. On higher plans the app price is lower.

ScenarioInput scopeApp rowsStart + queriesApp chargeTotal
10 apps1 term, 1 country, limit 1010$0.0033$0.012$0.0153
100 apps1 term, 1 country, limit 100100$0.0033$0.12$0.1233
1,000 apps5 terms, 1 country, limit 2001,000$0.0045$1.20$1.2045
No results1 term, 1 country, nothing found0$0.0033$0$0.0033

On Gold and higher plans, the 1,000-app example costs $0.0045 + $0.75 = $0.7545.

API, export and integrations

  • API: start a run with POST https://api.apify.com/v2/acts/cliqtomedia~app-store-apps-search/runs and the input JSON, then read the default Dataset. The API tab has ready code. See the Apify API docs.
  • Export: download the Dataset as CSV, Excel, JSON or XML from the Output tab.
  • Scheduling: create an Apify schedule to run the same terms daily or weekly. Each run stores rows with fetchedAt, so you can compare ranks and versions over time.
  • No-code: connect the Actor in Make, Zapier or n8n with the Apify integration.

Use with AI agents (MCP)

  • MCP server with only this Actor: https://mcp.apify.com?tools=cliqtomedia/app-store-apps-search (see Apify MCP server).
  • Smallest useful input: {"terms": ["pdf scanner"], "countries": ["us"], "limit": 20}
  • Key output fields: rank (position for the term and country), name, trackId (Apple App ID), averageUserRating and userRatingCount, status (complete / not_found / error).
  • A one-term run usually finishes in under 10 seconds and costs about $0.003 + $0.0003 + $0.0012 per app. At most 100 searches or lookup batches per run; a 100-search run takes about one minute.

Limits and partial results

  • Up to 50 terms and 50 countries, and at most 100 term × country searches per run.
  • Up to 500 App IDs and bundle IDs together. At most 100 lookup batches per run (up to 100 IDs per batch, per country).
  • Up to 200 apps per search. Apple often returns a few fewer, and the Actor never pads results.
  • Give the run a timeout of at least 60 seconds (the default is 300).
  • The Actor waits at least half a second between requests to Apple, with at most 3 requests at a time. A run stops calling Apple after about 4 minutes, even with a longer timeout. Unfinished queries are listed as NOT_PROCESSED rows.
  • If Apple slows the Actor down (HTTP 429 or 403), it waits and slows its pace. After 8 such answers in one run it stops calling Apple. It also stops after 2 failed requests in a row or 4 failed requests in total. The rows already stored stay, and the rest are listed as NOT_PROCESSED.
  • If Apple rejects a country code, the Actor does not send other queries for that country. They are listed together in one error row per country, with the terms or IDs in queryIds.
  • Data comes from Apple's public iTunes Search API. Apple's terms apply to its use. App names, icons and screenshots belong to their owners.

Troubleshooting

Error rows with SOURCE_BAD_REQUEST

Symptom: a country has error rows with errorCode: SOURCE_BAD_REQUEST. Likely reason: the country code is not an App Store storefront. A common mistake is uk instead of gb. Check: the country value of the error row. Action: fix the code and run again for that country only.

Run stopped with RATE_LIMITED

Symptom: the run ends PARTIAL or ERROR, with RATE_LIMITED or NOT_PROCESSED rows. Likely reason: Apple limited requests from the shared IP for a short time. Check: RUN_SUMMARY.http.rateLimited. Action: wait a few minutes, then run again with fewer terms or countries. You are not charged for queries that Apple did not answer.

A search returns fewer apps than the limit

Symptom: limit is 200, but a term has only 150 rows. Likely reason: Apple returned fewer apps. This is normal for narrow terms and small countries. Action: nothing to fix. The run never pads results.

My app is not found in a country

Symptom: a lookup gives a not_found row for your App ID in some countries. Likely reason: the app is not sold in that country's store, or the ID is wrong. Check: open https://apps.apple.com/<country>/app/id<App ID> in a browser.

FAQ

Do I need an Apple account or API key?

No. The Actor uses Apple's public iTunes Search API. It needs no login, cookies or API key.

Why is the rank different from what I see on my iPhone?

rank is the order of Apple's Search API results. The App Store app can personalise results and show ads. The two orders are usually close, but not always identical.

Am I charged for empty results?

You pay $0.003 per run and $0.0003 for each search or lookup batch that Apple answered, even with no apps. App charges apply only to complete app rows. not_found and error rows are free.

How fresh is the data?

Each row is fetched live from Apple during the run (fetchedAt). Apple may cache its own answers for up to a day, so a rating or version can lag slightly behind the App Store page.

Can I get downloads or revenue?

No. Apple does not publish them, and this Actor does not estimate them.

Support

For bugs, questions or feature requests, open an issue in the Issues tab. Include the run ID, the mode, and the terms or IDs that look wrong. Do not send tokens or private data.