# App Store Scraper: Search, Lookup & Top Charts (iTunes API) (`ucchiii/app-store-search`) Actor

App Store data from Apple's official iTunes Search API: search by keyword, look up apps by ID, bundle ID or URL, or read top free / paid charts in any country. Ratings, price, version, size, genres, developer. No reviews. Empty input = free demo. $2 per 1,000 apps; failures free.

- **URL**: https://apify.com/ucchiii/app-store-search.md
- **Developed by:** [Actor Factory](https://apify.com/ucchiii) (community)
- **Categories:** E-commerce, Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 app returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## App Store Scraper — search, look up and chart Apple App Store apps (iTunes API)

**Get one flat row per iPhone/iPad app from Apple's official iTunes Search API: rating, price, version, size, genres, developer and more.** Built for ASO and market researchers, app developers watching competitors, investors and analysts, and anyone who needs App Store data in a spreadsheet.

- **Search** the App Store by keyword in any country (up to 200 apps)
- **Look up** specific apps by numeric ID, bundle ID or App Store URL
- **Top charts**: current top free or top paid apps per country (up to 100)

Example output row (shortened, illustrative):

```json
{
  "rank": 1, "trackId": 284882215, "bundleId": "com.facebook.Facebook", "name": "Facebook",
  "seller": "Meta Platforms, Inc.", "primaryGenre": "Social Networking", "price": 0.0, "currency": "USD",
  "ratingAverage": 4.3, "ratingCount": 1234567, "version": "480.0", "currentVersionDate": "2026-10-15T07:00:00Z",
  "sizeBytes": 280000000, "minimumOsVersion": "16.0", "contentRating": "12+",
  "url": "https://apps.apple.com/us/app/facebook/id284882215?uo=4", "country": "us"
}
```

**Price: $2 per 1,000 apps ($0.002 each).** Example: a top-100 chart costs $0.20; 50 search results cost $0.10. Failed requests and searches with no results are free. **Free demo:** leave the input empty to get the top 10 free apps in the US at no charge.

### What you get (one row per app)

| Column | Content |
|---|---|
| `trackId`, `bundleId`, `name`, `url` | app ID, bundle ID, title, App Store link |
| `seller`, `developer`, `developerId` | company name, developer name and ID |
| `primaryGenre`, `genres` | main category and all categories |
| `price`, `formattedPrice`, `currency` | price in the storefront of the chosen country |
| `ratingAverage`, `ratingCount` | average rating and number of ratings in that country (plus current-version values when Apple provides them) |
| `version`, `releaseDate`, `currentVersionDate` | latest version, first release, latest update |
| `sizeBytes`, `minimumOsVersion`, `contentRating`, `languages` | file size, minimum iOS, age rating, ISO language codes |
| `rank` | chart position (top charts mode only) |
| `description`, `screenshotUrls`, `ipadScreenshotUrls` | optional, switched on with the input flags |
| `country` | the storefront the row comes from |

### Input

- `mode`: `search`, `lookup` or `topCharts`
- `term` (search), `appIds` (lookup: IDs, bundle IDs or URLs, mixed is fine), `chart` (`top-free` / `top-paid`)
- `country` (two-letter code, default `us`), `limit` (default 50)
- `includeDescription`, `includeScreenshots` (both default off)

Lookup by URL uses the country in the link, for example `https://apps.apple.com/de/app/.../id284882215` returns the German storefront.

### What is not included

**No user reviews.** Apple's public review feed no longer returns data, so this Actor does not provide reviews or review text. It gives app-level rating averages and counts only.

### How it works

- Data comes from Apple's public **iTunes Search API** (`itunes.apple.com/search` and `/lookup`) and Apple's public **RSS top charts** (`rss.applemarketingtools.com`). No login, no API key, no scraping of app pages.
- Apple documents roughly **20 calls per minute**. The Actor waits at least 3 seconds between calls and retries HTTP 403/429 with a growing pause (10 s, 30 s, 60 s). A top-100 chart needs 3 calls, so runs take seconds to a minute.
- Ratings, prices and rankings differ per country; run once per country you care about.
- Chart and search order follow what Apple returns at the time of the run.

### Price

| Event | Price |
|---|---|
| `app` (one app row written) | $0.002 |

**Not charged:** failed requests, searches or lookups with no result, and the empty-input demo. A row is charged only after it is written to the dataset. If you set a maximum cost per run, the run stops when the limit is reached.

### Notes

App Store data belongs to Apple and the app publishers; check Apple's terms for how you may use it. Only app-level public metadata is returned, no personal data.

### More tools from the same developer

- [Website Technology Detector](https://apify.com/ucchiii/website-technology-detector) — tech stack of websites in bulk: CMS, frameworks, analytics and tag IDs, CDN, consent tools
- [Keyword Research](https://apify.com/ucchiii/keyword-search-volume) — Google Ads search volume, CPC and competition for keyword lists (bring your own DataForSEO key)
- [Dataset Merge & Dedup](https://apify.com/ucchiii/dataset-dedup-merge) — merge Apify datasets and remove duplicates by the fields you choose
- [Google Sheets Export](https://apify.com/ucchiii/google-sheets-export) — export an Apify dataset to Google Sheets
- [RSS Feed Reader & Aggregator](https://apify.com/ucchiii/rss-feed-reader) — many RSS / Atom feeds merged into one clean article list

# Actor input Schema

## `mode` (type: `string`):

search: apps matching a keyword (needs Search term). lookup: specific apps (needs App IDs). topCharts: the current top free or top paid apps of a country. Leave everything empty for a free demo (top 10 free apps in the US).

## `term` (type: `string`):

Keyword for search mode, for example photo editor or budget planner. Ignored in the other modes.

## `appIds` (type: `array`):

For lookup mode, one per line: a numeric app ID (284882215), a bundle ID (com.facebook.Facebook) or an App Store URL (https://apps.apple.com/us/app/facebook/id284882215). The country in a URL is used for that app; otherwise the Country field.

## `chart` (type: `string`):

For topCharts mode: which Apple chart to read (default top-free).

## `country` (type: `string`):

Two-letter App Store country code such as us, gb, de, jp (default us). Prices, ratings and rankings are specific to this storefront.

## `limit` (type: `integer`):

Maximum number of apps for search (up to 200) and topCharts (up to 100). Default 50.

## `includeDescription` (type: `boolean`):

true: add the full store description text in the description field. Default false keeps rows short.

## `includeScreenshots` (type: `boolean`):

true: add screenshotUrls (iPhone) and ipadScreenshotUrls image links. Default false.

## Actor input object example

```json
{
  "mode": "topCharts",
  "chart": "top-free",
  "country": "us",
  "limit": 50,
  "includeDescription": false,
  "includeScreenshots": false
}
```

# Actor output Schema

## `results` (type: `string`):

One row per app: trackId, bundleId, name, seller, developer, primaryGenre, genres, price, currency, ratingAverage, ratingCount, version, releaseDate, currentVersionDate, sizeBytes, minimumOsVersion, contentRating, languages, url, country, rank (top charts), and optionally description and screenshot URLs.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "topCharts"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ucchiii/app-store-search").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "mode": "topCharts" }

# Run the Actor and wait for it to finish
run = client.actor("ucchiii/app-store-search").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "topCharts"
}' |
apify call ucchiii/app-store-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ucchiii/app-store-search"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/3tAknqngvksSdfjHq/builds/YU4uyPPjHp91MdE44/openapi.json
