# 📈 App Store Rankings Tracker — Top Charts by Country (`nexgenwatch/app-rankings-tracker`) Actor

Track Apple App Store chart rankings (top-free/top-paid) by country and category — position, app, developer. Honest not\_observed/source\_blocked states, never a fake null. Apple charts only.

- **URL**: https://apify.com/nexgenwatch/app-rankings-tracker.md
- **Developed by:** [NexGen Watch](https://apify.com/nexgenwatch) (community)
- **Categories:** Business, Marketing
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.34 / 1,000 ranking snapshots

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/platform/actors/running/actors-in-store#pay-per-event

## 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 Rankings Tracker — Top Charts by Country

Growth and ASO teams pay for stable chart snapshots and position-change alerts by market — a reliable daily read on where apps sit in Apple's top charts.

### What you get

- Deterministic Apple top-chart snapshots by country, chart, and category
- Position, app ID, title, developer, category, and icon per chart entry
- A 12-field record with `previous_status` so you can see movement at a glance
- Source URL and snapshot timestamp on every row
- Optional watch mode that emits only position changes on later runs

### Use cases by team

- **Growth:** Track where you and competitors rank in top-free / top-paid charts each day.
- **ASO teams:** Correlate ranking movement with metadata and keyword changes.
- **Market intel:** Spot new entrants breaking into a category's top chart.
- **Leadership:** Get a clean daily ranking snapshot for the standup without manual checks.

### Example inputs

*US top-free*

```json
{
  "stores": [
    "apple"
  ],
  "countries": [
    "us"
  ],
  "charts": [
    "top-free"
  ],
  "watchMode": false
}
```

*Multiple markets*

```json
{
  "stores": [
    "apple"
  ],
  "countries": [
    "us",
    "gb",
    "de"
  ],
  "charts": [
    "top-free",
    "top-paid"
  ]
}
```

*Watch for rank changes*

```json
{
  "stores": [
    "apple"
  ],
  "countries": [
    "us"
  ],
  "charts": [
    "top-free"
  ],
  "watchMode": true
}
```

### 📊 Sample Output

```json
{
  "store": "apple",
  "country": "us",
  "chart": "top-free",
  "position": 1,
  "previous_status": "up",
  "app_id": "123456789",
  "title": "Example App",
  "developer": "Example Inc.",
  "category": "Productivity",
  "icon_url": "https://.../icon.png",
  "source_url": "https://apps.apple.com/us/charts",
  "snapshot_at": "2026-07-21T00:00:00Z"
}
```

### How it works

Choose stores, countries, charts, and (optionally) categories. It captures deterministic Apple Marketing Tools chart snapshots — the same request yields the same ordered snapshot. Google Play chart requests fail loudly rather than guessing, because no stable official public chart feed has been evidenced. Public surfaces only.

### Pricing

| Event | FREE | BRONZE | SILVER | GOLD+ |
|---|---|---|---|---|
| Actor start (`apify-actor-start`) | $0.02 | $0.02 | $0.02 | $0.02 |
| Ranking snapshot (`ranking-snapshot`) | $0.002 | $0.0018 | $0.0016 | $0.00134 |
| Watch check (`watch-check`) | $0.10 | $0.09 | $0.08 | $0.067 |

Prices are the filed pay-per-event amounts per plan tier (PLATINUM/DIAMOND match GOLD). Worked example (FREE tier): 1,000 × `ranking-snapshot` = $0.02 start + 1,000 × $0.002 = **$2.02**. Blocked or zero-result runs do not intentionally charge; watch runs with no delta charge only the watch check. New to Apify? [Start free](https://apify.com/fpr=2ayu9b).

### Run it — API, CLI, MCP

API:

```bash
curl -X POST "https://api.apify.com/v2/acts/nexgenwatch~app-rankings-tracker/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" -d @input.json
```

CLI:

```bash
apify call nexgenwatch/app-rankings-tracker -i @input.json
```

MCP: expose `nexgenwatch/app-rankings-tracker` through Apify's MCP server, select it as a tool, and pass the same input object.

### Related actors — App Intelligence cluster

| Actor | What it does |
|---|---|
| [Review Sentiment Analyzer](https://apify.com/nexgenwatch/review-sentiment-analyzer?fpr=2ayu9b) | Turn any review set into themes, complaints, sentiment % and trends. |
| [Apple App Store Reviews](https://apify.com/nexgenwatch/ios-app-reviews?fpr=2ayu9b) | Scrape public Apple App Store reviews for any app. |
| [Google Play Reviews](https://apify.com/nexgenwatch/google-play-reviews?fpr=2ayu9b) | Scrape public Google Play reviews for any app. |
| [App Metadata Scraper](https://apify.com/nexgenwatch/app-store-metadata?fpr=2ayu9b) | Pull app metadata from Apple & Google Play in one schema. |
| [ASO Keyword Tracker](https://apify.com/nexgenwatch/aso-keyword-tracker?fpr=2ayu9b) | Track keyword rankings across App Store & Google Play. |

### Compliance & honest limits

- Apple charts only for now — Google Play chart requests fail loudly because no stable public feed has been evidenced (no fabricated data).
- Public chart surfaces only; no login, CAPTCHA, paywall, or access-control defeating.
- A source-confirmed empty result is `SUCCEEDED-0: GENUINE_EMPTY`; exhausted retries fail and truncated runs are `PARTIAL`.

### FAQ

**Which charts are supported?**

Apple top-free, top-paid, and category charts by country. Google Play charts are intentionally not faked — the request fails loudly.

**Why fail loudly on Google Play?**

Because no stable, official, public Google Play chart feed has been evidenced. Returning invented rankings would be worse than an honest error.

**Does zero mean blocked?**

No. A confirmed-empty chart is `GENUINE_EMPTY`; only exhausted retries fail.

**How does watch mode work?**

Set `watchMode: true`. Later runs emit only entries whose position changed, with `previous_status`.

**How is it priced?**

$0.02 per run start plus $0.001 per ranking snapshot; watch checks with no change cost $0.05.

**Can I track several countries at once?**

Yes — pass multiple `countries` and `charts` in one run.

**How stable are snapshots?**

Deterministic — the same request returns the same ordered snapshot, safe for day-over-day comparison.

### Troubleshooting

- **Google Play request failed?** That's intentional — no evidenced public chart feed. Use `apple`.
- **Empty chart?** Check the country/chart combination is valid; GENUINE\_EMPTY means the source was genuinely empty.
- **Watch mode emitting everything?** The first run seeds the baseline; change-only deltas start on the second run.
- **Need category charts?** Pass the category in the charts/category input; default is the overall chart.
- **Want metadata for ranked apps?** Feed the app IDs into the App Store Metadata scraper.

### About

Part of the NexGenData App Intelligence cluster — the daily ranking pulse that pairs with metadata and keyword tracking. Built by NexGenData. Questions or need a custom feed? Open an issue on the Actor page.

# Actor input Schema

## `stores` (type: `array`):

Apple is buildable; Google Play is a fail-loud STOP until a licensed/stable chart source is approved.

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

Two-letter storefront countries.

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

Apple Marketing Tools chart slugs.

## `max_items` (type: `integer`):

Hard cap on records delivered by this run.

## `watchMode` (type: `boolean`):

Seed a named KV baseline on first run, then emit only new or changed records.

## `proxy_configuration` (type: `object`):

Optional Apify proxy settings; a fresh session is requested for every retry.

## Actor input object example

```json
{
  "stores": [
    "apple"
  ],
  "countries": [
    "us"
  ],
  "charts": [
    "top-free"
  ],
  "max_items": 25,
  "watchMode": false,
  "proxy_configuration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# 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("nexgenwatch/app-rankings-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("nexgenwatch/app-rankings-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 nexgenwatch/app-rankings-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgenwatch/app-rankings-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/vp3WahdnVbTb8xF8P/builds/wr1zHu4ANmshfijXr/openapi.json
