# App Store Search, Rank and App Details

> App Store rank tracker for many keywords and countries in one run. Or look up apps by ID or URL. Ratings, price and version. No login.

URL: https://cliqtomedia.com/actors/app-store-apps-search/

Category: Reviews & app stores · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/app-store-apps-search?fpr=cliqto

Search the Apple App Store for many keywords in many countries at once. Each app gets a rank per term. Or look up known apps by ID, link or bundle ID.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `pdf scanner` in Search terms. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

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.

- 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.

### Good for

- 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 good fit

- 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.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.003 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| App Store query answered | $0.0003 | One search (term × country) or one lookup batch (up to 100 IDs × country) that Apple answered, even with no apps. Failed or skipped queries are free. |
| App row | $0.0012 (from $0.00075 on paid Apify plans) | One app with full details stored in the dataset. not_found and error rows are free. |

- One app: about $0.0042.
- 1,000 apps: about $1.20.
- Every day 100 apps, for 30 days: about $3.69 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/app-store-apps-search?fpr=cliqto

## Questions

### Why is the rank different on my iPhone?

The App Store app can personalise results and show ads. The API order is close, but not the same.

### Can I get downloads or revenue?

No. Apple does not publish those numbers.

### Do I need an Apple account?

No. It uses Apple's public iTunes Search API.

### Am I charged for missing apps?

No. 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.

## Data fields

- `status` (string): Row result: complete (app data), not_found (search with no apps, or ID/bundle ID not in that country's store) or error (see errorCode). Only complete rows are charged.
- `mode` (string): search or lookup.
- `queryType` (string): What the row answers: term (keyword search), appId or bundleId (lookup).
- `query` (string): Your search term, App ID or bundle ID exactly as processed. A grouped status row lists all IDs or terms it covers, separated by commas (see queryIds).
- `queryIds` (array): Only on grouped status rows: the IDs (or search terms) this one row covers. Used for lookup not_found/error rows (one row per batch of up to 100 IDs in one country) and for the one row that lists queries not sent to a country Apple rejected. null on app rows and normal search rows.
- `term` (string): Search term (search mode); null for lookups.
- `country` (string): Two-letter App Store country (storefront) code, e.g. us, de.
- `entity` (string): App type searched: software (iPhone), iPadSoftware or macSoftware; null for lookups.
- `rank` (integer): 1-based position in the iTunes Search API results for this term and country (deduplicated). Close to, but not guaranteed identical to, the App Store app's own search order. Null for lookups.
- `isTracked` (boolean): True when this app is one of your trackAppIds; null when no apps are tracked.
- `trackId` (integer): Apple App ID (the number in the App Store URL after 'id').
- `bundleId` (string): Bundle identifier, e.g. com.adobe.scan.ios.
- `name` (string): App name in this country's store.
- `kind` (string): Apple kind: software or mac-software.
- `sellerName` (string): Legal seller name shown on the App Store.
- `developerName` (string): Developer (artist) name.
- `developerId` (integer): Apple developer ID.
- `developerUrl` (string): Developer page on the App Store.
- `sellerUrl` (string): Developer website, when the app lists one.
- `price` (number): Upfront price in the store currency; 0 for free apps. In-app purchases are not included.
- `formattedPrice` (string): Price as Apple displays it, e.g. Free or $4.99.
- `currency` (string): ISO currency of the price, e.g. USD.
- `primaryGenre` (string): Primary category, e.g. Productivity.
- `primaryGenreId` (integer): Apple genre ID of the primary category.
- `genres` (array): All categories listed for the app.
- `averageUserRating` (number): Average star rating (0–5) in this country across all versions. Null when the app has no ratings yet (userRatingCount 0) or Apple returns none.
- `userRatingCount` (integer): Number of ratings in this country across all versions.
- `averageUserRatingCurrentVersion` (number): Average rating for the current version, as Apple reports it; null when the current version has no ratings.
- `userRatingCountCurrentVersion` (integer): Number of ratings for the current version, as Apple reports it.
- `version` (string): Current version string.
- `releaseDate` (string): Original release date (ISO 8601).
- `currentVersionReleaseDate` (string): Release date of the current version (ISO 8601).
- `fileSizeBytes` (integer): Download size in bytes.
- `contentRating` (string): Age rating, e.g. 4+ or 12+.
- `minimumOsVersion` (string): Minimum OS version required.
- `languages` (array): Supported languages as Apple lists them (ISO 639-1, upper case; Apple sometimes repeats a code, e.g. ZH for both Chinese variants).
- `supportedDevicesCount` (integer): Number of supported device models Apple lists.
- `url` (string): App Store page URL.
- `iconUrl` (string): App icon (512 px when available).
- `screenshotUrls` (array): iPhone (or Mac) screenshot URLs.

## Input settings

- `mode` (string): search: keyword search, one ranked list per term and country. lookup: exact app details by App ID, App Store URL or bundle ID.
- `terms` (array): Keywords to search, e.g. pdf scanner. Up to 50 terms; terms × countries must be at most 100 searches per run. Each term is searched separately and gets its own rank 1, 2, 3…
- `countries` (array): Two-letter App Store country codes, e.g. us, gb, de, jp. Up to 50. Every term (or ID) is processed in every country. A code Apple does not support returns an error row for that country instead of failing the run.
- `limit` (integer): How many apps to return per search (1–200). Apple sometimes returns fewer apps than asked; the run never pads results.
- `entity` (string): Which apps to search: iPhone apps (software), iPad-only apps (iPadSoftware) or Mac apps (macSoftware).
- `trackAppIds` (array): Optional App IDs or App Store URLs to track. Their rows get isTracked = true, and RUN_SUMMARY reports each tracked app's rank per term and country, or not_in_results when it is outside the returned list.
- `appIds` (array): Numeric App IDs (e.g. 284882215), id284882215, or App Store URLs such as https://apps.apple.com/us/app/facebook/id284882215. Up to 500 IDs and bundle IDs together. An app missing in a country returns a not_found row (not charged).
- `bundleIds` (array): Bundle identifiers such as com.adobe.scan.ios. Matching is case-insensitive.
- `includeDescription` (boolean): Adds the full App Store description and What's New text. Makes rows much larger.

## Step by step on Apify

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`.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Keyword research in many markets | `terms` + `countries` | Ranked app per term and country | `term`, `country`, `rank`, `name`, `userRatingCount` | Export CSV or Google Sheets |
| Track your app's keyword rank | `terms` + `countries` + `trackAppIds` | Rank tracking in `RUN_SUMMARY` | `rankTracking[].rank`, `status` | Schedule daily, compare runs |
| Competitor app monitoring | `mode: lookup` + `appIds` | App details per country | `version`, `currentVersionReleaseDate`, `averageUserRating`, `price` | Schedule weekly, alert on change |
| Availability check by country | `mode: lookup` + `bundleIds` + `countries` | App row or `not_found` row | `status`, `country`, `queryIds` | Filter `status = not_found` |
| AI agent app search | `terms` (MCP) | Ranked app | `name`, `trackId`, `url`, `averageUserRating` | Agent answer or next tool call |

## Tips

- Put many terms and countries in one run to save time.
- Schedule a daily run and compare ranks over time.
- Filter not_found rows to see where an app is missing.

## Limits



- 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.

## Sample result

```json
{
  "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"
}
```

## Use it from code

Actor ID: `cliqtomedia/app-store-apps-search`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/app-store-apps-search").call(run_input={
    "mode": "search",
    "terms": [
        "pdf scanner"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~app-store-apps-search/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "search", "terms": ["pdf scanner"]}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/app-store-apps-search")
result = tool.invoke({"run_input": {"mode": "search", "terms": ["pdf scanner"]}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [Read new reviews, yours and theirs](https://cliqtomedia.com/actors/use-cases/review-monitoring/): Collect reviews from the App Store, Google Play and more. Find what people love and what they hate.

## Similar tools

- [Apple App Store Reviews Scraper](https://cliqtomedia.com/actors/apple-app-store-reviews-scraper/)
- [Google Play Reviews Scraper](https://cliqtomedia.com/actors/google-play-reviews-scraper/)
- [TrustRadius Reviews Scraper](https://cliqtomedia.com/actors/trustradius-reviews-scraper/)
- [Google Play Search, Rank & App Details — No Login](https://cliqtomedia.com/actors/google-play-apps-search/)
- [OpenTable Reviews & Restaurants Scraper, No Login](https://cliqtomedia.com/actors/opentable-reviews-scraper/)
- [Trustpilot Reviews Scraper - Ratings & Replies, No Login](https://cliqtomedia.com/actors/trustpilot-reviews-scraper/)
