# App Store Rank Tracker — Top Charts History (iOS + Android) (`rowsmith/app-rank-tracker`) Actor

Track Apple App Store & Google Play top charts over time. Daily app rankings by country with rank-change deltas — a Sensor Tower alternative at a fraction of the cost. Export to Excel, CSV, or JSON.

- **URL**: https://apify.com/rowsmith/app-rank-tracker.md
- **Developed by:** [Pratyush Sharma](https://apify.com/rowsmith) (community)
- **Categories:** Developer tools, Automation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## App Store Rank Tracker — Top Charts History (iOS + Android)

Track the **Apple App Store and Google Play top charts over time**. One run captures today's rankings; a daily schedule turns it into an **app ranking history** with rank-change deltas — the data core of tools like Sensor Tower, at a fraction of the cost.

- 📈 **Top Free, Top Paid, Top Grossing** (+ Apple's "New") charts
- 🌍 **Any country** (us, in, gb, de, br, jp, ...), several at once
- 🗂 **Category charts** — Games, Finance, Social, Productivity, and more
- 🔁 **Rank deltas built in**: every row carries `prevRank`, `rankChange`, and `isNew` compared to your previous run
- 🗃 **One continuous history table**: optionally append every run to a named dataset in your account
- 📤 **Export to Excel, CSV, JSON, or Parquet** in one click, or pull via API

### Why track app store rankings?

- **ASO & growth teams** — see exactly when your app (or a competitor) enters, climbs, or falls off a chart, per country.
- **Market research** — spot rising apps early: `isNew: true` + a big `rankChange` is the breakout signal.
- **Investors & analysts** — chart positions over time are a public, legal proxy for app momentum.
- **Sensor Tower alternative** — enterprise rank-intelligence suites start around $25k/year. If what you need is *chart positions over time*, this Actor gives you the raw table for pennies per snapshot.

### How it works

1. Pick platforms, countries, and charts (defaults: Apple + Google, US, Top Free 100).
2. Run once — you get today's full ranking table.
3. **Schedule it daily** (Apify → Schedules → this Actor → e.g. `@daily`). From the second run, every row includes rank-change deltas. History compounds from the day you start — it cannot be backfilled later.

Apple charts come from Apple's official public feeds; Google Play charts from the public web store. Rankings are factual, public data — no login, no personal information.

### Output example

```json
{
    "platform": "google",
    "country": "us",
    "collection": "top_free",
    "category": "all",
    "snapshotDate": "2026-08-19",
    "rank": 4,
    "appId": "com.openai.chatgpt",
    "title": "ChatGPT",
    "developer": "OpenAI",
    "url": "https://play.google.com/store/apps/details?id=com.openai.chatgpt",
    "prevRank": 7,
    "rankChange": 3,
    "isNew": false,
    "prevSnapshotDate": "2026-08-18"
}
```

`rankChange` is positive when the app climbed (7 → 4 = +3), negative when it fell. `isNew: true` marks apps that were not on this chart in your previous snapshot.

### Category IDs

**Apple** (`appleCategory`, numeric genre ID): 6014 Games · 6005 Social · 6015 Finance · 6007 Productivity · 6016 Entertainment · 6013 Health & Fitness · 6012 Lifestyle · 6008 Photo & Video · 6003 Travel · 6023 Food & Drink

**Google Play** (`googleCategory`): `GAME`, `SOCIAL`, `FINANCE`, `PRODUCTIVITY`, `ENTERTAINMENT`, `HEALTH_AND_FITNESS`, `LIFESTYLE`, `PHOTOGRAPHY`, `TRAVEL_AND_LOCAL`, `FOOD_AND_DRINK`, `SHOPPING`, `EDUCATION`

### FAQ

**How is this different from a one-shot app scraper?**
Most actors give you app *details* or *reviews* at a point in time. This one is built for *time series*: schedule it and it maintains state between runs, so you get `rankChange` and `isNew` on every row plus an optional ever-growing history dataset.

**Can I download app ranking history as a spreadsheet?**
Yes — every run's dataset (and the named history dataset) exports to Excel, CSV, or JSON from the Apify console or API.

**How many rows will I get?**
`platforms × countries × charts × limit`. Apple + Google, 2 countries, Top Free 100 = 400 rows per run. You are charged per chart row.

**Is this legal?**
Chart rankings are factual, public data. Apple publishes official top-charts feeds; Google Play charts are public pages. The Actor collects no personal data.

***

Built by [rowsmith](https://apify.com/rowsmith). Also see: [App Store & Google Play Reviews Scraper](https://apify.com/rowsmith/app-reviews-scraper) for review exports from the same two stores.

# Actor input Schema

## `platforms` (type: `array`):

Which stores to track.

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

Two-letter country codes, e.g. us, in, gb, de, br, jp.

## `collections` (type: `array`):

Which top charts to track. ("New" is Apple-only; Google Play skips it.)

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

How many ranked apps to fetch per chart (Apple caps at 100). You are charged per chart row returned.

## `appleCategory` (type: `string`):

Numeric Apple genre ID for category charts, e.g. 6014 = Games, 6005 = Social, 6015 = Finance. Leave empty for the overall chart.

## `googleCategory` (type: `string`):

Play category constant for category charts, e.g. GAME, SOCIAL, FINANCE, PRODUCTIVITY. Leave empty for the overall chart.

## `computeDeltas` (type: `boolean`):

Stores the previous snapshot in a small named key-value store in your account and adds prevRank / rankChange / isNew to every row. Schedule the Actor daily to build history.

## `historyDatasetName` (type: `string`):

If set, rows are ALSO appended to this named dataset in your account, building one continuous rank-history table across runs (e.g. "app-rank-history").

## Actor input object example

```json
{
  "platforms": [
    "apple",
    "google"
  ],
  "countries": [
    "us"
  ],
  "collections": [
    "top_free"
  ],
  "limit": 100,
  "computeDeltas": true
}
```

# Actor output Schema

## `rankings` (type: `string`):

The dataset of top-chart rankings with rank-change deltas.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("rowsmith/app-rank-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("rowsmith/app-rank-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 '{}' |
apify call rowsmith/app-rank-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rowsmith/app-rank-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/BTSNKE97MvY7ihyuk/builds/lqiuzZMgviCCDsxWt/openapi.json
