# Apple App Store Top Charts & Rank Tracker (`mediapro-tools/app-store-charts-tracker`) Actor

Top free, paid and grossing iPhone/iPad charts for any country and genre, with ratings, versions and prices from Apple's Lookup API. Input: countries, charts. Output (JSON/CSV): one row per item with country, chart, chartGenreId, chartGenre, type, rank, appId, bundleId, name, developer.

- **URL**: https://apify.com/mediapro-tools/app-store-charts-tracker.md
- **Developed by:** [Jeremy Yarbrough](https://apify.com/mediapro-tools) (community)
- **Categories:** Developer tools, Marketing, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Apple App Store Top Charts & Rank Tracker

Pull **any Apple App Store chart** (top free, top paid, top grossing, iPhone or iPad, new apps) for **any country and any genre**. Each row adds rating, rating count, current version, price, size, release dates and seller from Apple's Lookup API. Schedule it daily with **monitor mode** to get a rank-change feed: who climbed, who fell, who's new, who dropped out, and who shipped a new version.

Built only on **Apple's official public feeds** (iTunes RSS charts + iTunes Lookup API). No login, no proxies, no page scraping.

### Who it's for

- **App marketers / ASO teams:** daily rank history for your app and competitors in every market.
- **Mobile game studios and publishers:** spot breakout games in top-grossing and top-free by country before they hit the news.
- **Investors and analysts:** new entrants to top-grossing are a strong early revenue signal.
- **Agencies:** country-by-country chart snapshots for client reports.

### Input

| Field | Description |
|---|---|
| `countries` | `["us","gb","de","jp"]`, any App Store storefront |
| `charts` | `top-free`, `top-paid`, `top-grossing`, the `-ipad` versions, `new-apps`, `new-free-apps`, `new-paid-apps` |
| `genreIds` | Optional. 6014 Games, 6015 Finance, 6007 Productivity, 6013 Health & Fitness, 6005 Social, 6024 Shopping, and more (see the input form) |
| `limit` | Apps per chart (Apple returns up to 100) |
| `enrichDetails` | Ratings, version, price, size (default on) |
| `monitorMode` / `onlyChanged` | Diff against the previous run |

### Output

```json
{"country":"us","chart":"top-free","chartGenre":"Games","rank":1,"appId":"6761760135","bundleId":"com.oakever.meowdoku","name":"Meowdoku!",
 "developer":"Oakever Games","rating":4.81,"ratingCount":311950,"version":"1.19.1","currentVersionReleaseDate":"2026-10-01",
 "firstReleaseDate":"2026-05-19","price":0,"sizeMB":367,"contentRating":"12+","url":"https://apps.apple.com/us/app/meowdoku/id6761760135",
 "previousRank":3,"rankChange":2,"isNewEntry":false,"versionChanged":false}
```

In monitor mode each chart also emits one `{"type":"dropped-out","dropped":[{appId,name,previousRank}]}` row.

### Limits

- Apple's charts update several times a day; one run is a snapshot.
- Some small country + genre combinations return an empty chart from Apple. The run logs it and moves on.
- The Lookup API is called once per 100 apps, with a 3 s pause between calls, to stay inside Apple's published guidance of about 20 calls a minute.
- Not affiliated with Apple. App names and icons are Apple/developer trademarks; the data comes from Apple's public promotional feeds.

### Related tools

- [Apple App Store Reviews Scraper & New Review Monitor](https://apify.com/mediapro-tools/apple-app-store-reviews)
- [Steam Game Reviews & Store Data Scraper](https://apify.com/mediapro-tools/steam-game-reviews-store-data)
- [Chrome & Edge Extension Intel + Permission Alerts](https://apify.com/mediapro-tools/chrome-edge-extension-intel)
- [Shopify App Store Scraper: Apps, Pricing, Reviews & Ranks](https://apify.com/mediapro-tools/shopify-app-store-scraper)

# Actor input Schema

## `countries` (type: `array`):

Two-letter App Store country codes (us, gb, de, jp, br...).

## `charts` (type: `array`):

Which Apple charts to pull.

## `genreIds` (type: `array`):

Leave empty for all apps. 6014 Games, 6015 Finance, 6007 Productivity, 6013 Health & Fitness, 6005 Social Networking, 6024 Shopping, 6000 Business, 6017 Education, 6016 Entertainment, 6008 Photo & Video, 6023 Food & Drink, 6003 Travel.

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

Apple currently returns up to 100 per chart.

## `enrichDetails` (type: `boolean`):

One extra request per 100 apps.

## `includeText` (type: `boolean`):

Makes rows much larger.

## `monitorMode` (type: `boolean`):

Adds previousRank, rankChange, isNewEntry, versionChanged, plus a 'dropped-out' row per chart. Schedule it daily.

## `onlyChanged` (type: `boolean`):

Monitor mode only.

## `stateStoreName` (type: `string`):

Named key-value store holding the previous chart snapshot.

## Actor input object example

```json
{
  "countries": [
    "us"
  ],
  "charts": [
    "top-free",
    "top-grossing"
  ],
  "limit": 100,
  "enrichDetails": true,
  "includeText": false,
  "monitorMode": false,
  "onlyChanged": false,
  "stateStoreName": "app-store-charts-monitor"
}
```

# Actor output Schema

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

All result records in the default dataset (table view: overview).

## `files` (type: `string`):

Files saved by this run (download links are also in each result record).

## `summary` (type: `string`):

Counts and stats for this run (JSON).

# 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 = {
    "countries": [
        "us"
    ],
    "charts": [
        "top-free",
        "top-grossing"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mediapro-tools/app-store-charts-tracker").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 = {
    "countries": ["us"],
    "charts": [
        "top-free",
        "top-grossing",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("mediapro-tools/app-store-charts-tracker").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 '{
  "countries": [
    "us"
  ],
  "charts": [
    "top-free",
    "top-grossing"
  ]
}' |
apify call mediapro-tools/app-store-charts-tracker --silent --output-dataset

```

## MCP server setup

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

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/8fLUUDz4tS7UesMOC/builds/3aDb9SgjVzPidIXLe/openapi.json
