# App Store Top Charts Scraper - Rankings by Country (`appdata-labs/app-store-top-charts`) Actor

Ranked Apple App Store charts for any country and any category: top free, top paid, top grossing and new releases, each position enriched with star ratings and rating counts. Track your own rank daily or find which apps in a category actually make money. Official Apple endpoints.

- **URL**: https://apify.com/appdata-labs/app-store-top-charts.md
- **Developed by:** [Kobkoon Janngam](https://apify.com/appdata-labs) (community)
- **Categories:** Agents, MCP servers, SEO tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 chart position scrapeds

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?

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 Top Charts Scraper — Rankings by Country and Category

**Get the ranked Apple App Store charts for any country and any category** — top free, top paid, top grossing and new releases — with star ratings and rating counts attached to every position.

**Quick start:** press **Start** with no configuration at all. The Actor ships with a working default and returns the US top 50 free apps immediately. Then pick your country, chart and category.

### Sample output

| rank | title | developer | rating | ratingCount | formattedPrice | category | chart | country |
|---|---|---|---|---|---|---|---|---|
| 1 | ChatGPT | OpenAI | 4.9 | 2,104,553 | Free | Productivity | topfreeapplications | us |
| 2 | Threads | Instagram, Inc. | 4.6 | 1,388,201 | Free | Social Networking | topfreeapplications | us |

Every row also carries `appId`, `bundleId`, `url`, `developerUrl`, `price`, `currency`, `categoryId`, `releaseDate`, `icon`, `version`, `currentVersionReleaseDate`, `minimumOsVersion` and `contentRating`.

### Why this one and not a plain chart dump

Apple's chart feed gives you rank, title, developer and price — **no ratings**. That makes a raw chart nearly useless for comparison, because you cannot tell a beloved app at rank 20 from a burned-out one at rank 12.

This Actor makes one extra batched request per country and attaches **rating, rating count, current version and release date** to every position. It is a single additional call per 200 apps, and it is the reason to pick this over the alternatives. Turn it off with `includeRatings: false` if you want the fastest possible run.

### What you can do with it

- **Track your rank daily.** Schedule it, filter for your app, and you have a rank history nobody has to maintain.
- **Find what is actually working.** `topGrossingApps` ranks by revenue, not downloads. It is the single best public signal for which apps in a category make money.
- **Spot launches early.** The `newApps`, `newFreeApps` and `newPaidApps` charts surface recent releases before they are widely covered.
- **Compare markets.** Run `us`, `jp`, `de`, `br` and `th` in one go and see how differently a category ranks by country.
- **Feed an AI agent.** Rows are small, consistently shaped and already ranked, so an LLM can reason over a whole chart in one pass.

### Input

| Field | Default | Notes |
|---|---|---|
| `countries` | `["us"]` | Two-letter storefront codes. Charts are ranked per country. |
| `chart` | `topFreeApps` | Also `topPaidApps`, `topGrossingApps`, `newApps`, `newFreeApps`, `newPaidApps`. |
| `categoryId` | empty | Apple genre ID, e.g. `6014` Games, `6007` Productivity, `6015` Finance. Empty means the overall chart. |
| `limit` | `50` | Positions per country, starting at rank 1. Apple publishes at most 200. |
| `includeRatings` | `true` | Adds rating, rating count, version and release date. |

Common category IDs: 6014 Games · 6007 Productivity · 6015 Finance · 6016 Entertainment · 6005 Social Networking · 6013 Health & Fitness · 6023 Food & Drink · 6024 Shopping · 6017 Education · 6008 Photo & Video · 6012 Lifestyle · 6002 Utilities · 6000 Business · 6003 Travel · 6004 Sports · 6009 News · 6011 Music · 6018 Books · 6020 Medical.

### How it works, and why it keeps working

This Actor reads Apple's **official public chart and lookup feeds**. No HTML parsing, no login, no proxy. Apple can redesign the App Store and this Actor keeps returning the same fields — which is why it is not on the maintenance treadmill that breaks most scrapers.

### Limits worth knowing before you buy

Apple publishes at most 200 chart positions per country per chart. Not every country publishes every category chart; when one is empty the run still succeeds and tells you which country returned nothing.

### Pricing

Pay per chart position delivered. A run that finds nothing charges you nothing.

### Disclaimer

This is an **unofficial** tool. It is not affiliated with, authorised by, endorsed by, or in
any way officially connected to Apple Inc. "Apple", "App Store", "iOS", "iPadOS" and "macOS"
are trademarks of Apple Inc.

It reads only Apple's **public, unauthenticated** endpoints — the iTunes Search and Lookup
APIs and the public RSS feeds. It signs into nothing, stores no credentials, and parses no
HTML. Nothing it returns is behind a login or a paywall, and every field it returns is data
the App Store already shows to anyone.

Apple can change or withdraw those endpoints at any time. When a feed returns nothing, this
Actor says so in the log rather than handing you an empty result that looks like an answer.

# Actor input Schema

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

Two-letter country codes of the App Store storefronts to read. Charts are ranked per country, so add more countries to compare markets. Examples: us, gb, de, jp, th, br.

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

topFreeApps and topPaidApps are the download charts. topGrossingApps ranks by revenue and is the best proxy for which apps actually make money. The new\* charts show recent releases.

## `categoryId` (type: `string`):

Apple genre ID to restrict the chart to one category. Leave empty for the overall chart. Common IDs: 6014 Games, 6007 Productivity, 6015 Finance, 6016 Entertainment, 6005 Social Networking, 6013 Health & Fitness, 6023 Food & Drink, 6024 Shopping, 6017 Education, 6008 Photo & Video, 6012 Lifestyle, 6002 Utilities, 6000 Business, 6003 Travel, 6004 Sports, 6009 News, 6011 Music, 6018 Books, 6020 Medical.

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

How many ranked positions to return per country, starting at rank 1. Apple publishes at most 200. Keep this small for fast, cheap runs.

## `includeRatings` (type: `boolean`):

Adds star rating, rating count, current version, release date and description to every chart entry. Apple's chart feed does not include these, so this makes one extra batched request per country. Turn off for the fastest possible run.

## Actor input object example

```json
{
  "countries": [
    "us",
    "gb",
    "jp"
  ],
  "chart": "topGrossingApps",
  "categoryId": "6014",
  "limit": 50,
  "includeRatings": true
}
```

# Actor output Schema

## `rows` (type: `string`):

One row per chart position: rank, app, developer, price and category.

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

What was requested, what was delivered, and per-app counts — useful for checking a run without reading every row.

# 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"
    ],
    "chart": "topFreeApps",
    "limit": 50,
    "includeRatings": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("appdata-labs/app-store-top-charts").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"],
    "chart": "topFreeApps",
    "limit": 50,
    "includeRatings": True,
}

# Run the Actor and wait for it to finish
run = client.actor("appdata-labs/app-store-top-charts").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"
  ],
  "chart": "topFreeApps",
  "limit": 50,
  "includeRatings": true
}' |
apify call appdata-labs/app-store-top-charts --silent --output-dataset

```

## MCP server setup

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

```

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/Mopif9OHplaSji3Rw/builds/6mobapidba97ct7O6/openapi.json
