# 🏆 App Store Charts Scraper | Top iOS Apps (`antique_sundew/appstore-charts-scraper`) Actor

Track Apple App Store top free, top paid, and top grossing app rankings across countries and categories. Historical app market intelligence API.

- **URL**: https://apify.com/antique\_sundew/appstore-charts-scraper.md
- **Developed by:** [Alexandru Afanasiuc](https://apify.com/antique_sundew) (community)
- **Categories:** Developer tools, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 chart entry 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/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 Charts Scraper — Top Free, Paid & Grossing Rankings

Fetch **Apple App Store top charts** as structured data: top free, top paid and top grossing apps, for any storefront country and any genre. Get clean JSON/CSV with rank, app, developer, price and store links — **zero personal data**.

### Why use this scraper

- **All three chart types** — `topfreeapplications`, `toppaidapplications`, `topgrossingapplications`, in one run if you want.
- **Per-country storefronts** — compare the US, UK, German and Japanese charts side by side; each row is stamped with its storefront.
- **Genre drill-down** — pass Apple `genreIds` (6014 = Games, 6007 = Productivity...) or leave empty for the overall chart.
- **Verified filters** — an unrecognised genre or country returns **zero rows**, never a silently wrong chart. The genre you asked for is the genre you get.
- **No personal data at all** — charts are app metadata only; nothing GDPR-relevant is collected.
- **Pure HTTP** — fast, cheap, no browser.

### What data you get

```json
{
  "rank": 1,
  "feed": "topfreeapplications",
  "country": "us",
  "genreId": 6014,
  "genre": "Games",
  "appId": "1234567890",
  "appName": "Example Game",
  "developer": "Example Studio Inc.",
  "price": 0,
  "currency": "USD",
  "releaseDate": "2026-07-15T00:00:00-07:00",
  "iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/...",
  "appUrl": "https://apps.apple.com/us/app/example-game/id1234567890",
  "scrapedAt": "2026-08-11T10:00:00.000Z"
}
```

### How to run it

1. Pick `countries` (e.g. `["us", "gb", "de"]`).
2. Pick `feeds` (any of the three chart types).
3. Optionally add `genreIds` and set `limit` (up to 200 per chart).
4. Click **Start** and export the dataset as JSON, CSV or Excel.

Works out of the box: the default input (US top free, 100 apps) runs successfully with no changes.

### Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `countries` | array | `["us"]` | Storefront country codes. |
| `feeds` | array | `["topfreeapplications"]` | Chart types to fetch. |
| `genreIds` | array | `[]` | Apple genre IDs; empty = overall chart. |
| `limit` | integer | `100` | Apps per chart (max 200). |

### Pricing

**$1.00 per 1,000 rows** (pay per event, no subscription). Examples:

- One 100-app chart → **$0.10**
- 3 countries × 3 feeds × 100 apps = 900 rows → **$0.90**
- Zero results (bad genre/country) → **$0.00**.

### Use cases

- **Market intelligence** — track which apps enter and leave the top 100, daily, per country.
- **Competitor watch** — alert when a rival app's rank moves.
- **ASO research** — compare genre charts across storefronts to find underserved markets.
- **Trend datasets** — historical chart snapshots for analysis (schedule daily runs).
- **AI agents** — call this Actor as a tool through the [Apify MCP server](https://mcp.apify.com/?actors=antique_sundew/appstore-charts-scraper).

### Limitations

- Charts are what Apple publishes: up to 200 apps per feed/country/genre.
- Rank is a snapshot at scrape time; schedule runs to build history.
- Grossing charts show rank order only — Apple publishes no revenue numbers, so none are claimed.

### FAQ

**How do I get the top apps in a specific country?**
Add its storefront code to `countries` — every row is stamped with the storefront it came from.

**Which genre IDs exist?**
Apple's public genre IDs, e.g. 6014 Games, 6007 Productivity, 6015 Finance. An invalid ID returns zero rows rather than the wrong chart.

**Can I track chart movement over time?**
Yes — run it on an Apify Schedule; each run's `scrapedAt` timestamps the snapshot.

**Does it collect any user data?**
No. Charts contain app metadata only — zero personal data by construction.

### Related Actors

- [App Store Reviews Scraper](https://apify.com/antique_sundew/appstore-reviews-scraper) — the reviews behind these rankings
- [Google Play Reviews Scraper](https://apify.com/antique_sundew/google-play-reviews-scraper) — the Android side

***

If this Actor saved you time, a short review on its Store page helps other people find it. If something looks wrong, open an issue on the **Issues** tab — issues get answered.

# Actor input Schema

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

Two-letter store country codes (e.g. us, gb, de, fr, jp)

## `feeds` (type: `array`):

Chart feed types to scrape

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

Apple category IDs (e.g. 6014 for Games, 6015 for Finance, 6002 for Utilities). Leave empty for overall charts.

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

Number of items to fetch per country per feed per genre (max 200)

## Actor input object example

```json
{
  "countries": [
    "us"
  ],
  "feeds": [
    "topfreeapplications"
  ],
  "genreIds": [],
  "limit": 100
}
```

# 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("antique_sundew/appstore-charts-scraper").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("antique_sundew/appstore-charts-scraper").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 antique_sundew/appstore-charts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,antique_sundew/appstore-charts-scraper"
        }
    }
}

```

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/nhFQw2xpWWFwPNsqa/builds/xZ47HuzPjmJsFmE6H/openapi.json
