# App Store Top Charts (Official Apple Feeds) (`slanlabs/app-store-top-charts`) Actor

Live App Store and Apple media top charts for any country via Apple's official RSS feeds. Top free/paid/grossing apps, books, podcasts, music. Agent-ready pay-per-event pricing.

- **URL**: https://apify.com/slanlabs/app-store-top-charts.md
- **Developed by:** [SlanLabs](https://apify.com/slanlabs) (community)
- **Categories:** Business, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 chart entries

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

## App Store Top Charts (Official Apple Feeds)

Live App Store, Apple Books, Apple Podcasts and Apple Music top charts for any country storefront, from Apple's official marketing-tools RSS feeds - the same feeds Apple publishes for partners and press. No scraping, no login, no breakage when Apple changes the App Store website.

### Why monitor the charts

Chart position is the single best public proxy for app traction. Investors watch for breakout apps before they make news. Marketers benchmark category leaders. Mobile teams track their own rank after every release and every ad campaign. And because Apple serves a separate chart per country, a worldwide launch can be tracked storefront by storefront with one scheduled Actor run per market.

This Actor turns those charts into clean JSON rows: one row per chart entry, with rank, Apple ID, developer, genres, release date and store URL - ready for a spreadsheet, a database, or an agent.

### What you get per entry

- `rank` - position in the chart at fetch time
- `id` - Apple ID, ready to feed into the [App Store Reviews Actor](https://apify.com/slanlabs/app-store-reviews)
- `name`, `artist` (developer), `kind`, `releaseDate`
- `genres`, `url`, `artwork`
- `country`, `mediaType`, `chart` echoed back for multi-market pipelines

### Inputs

| Field | Required | Description |
| --- | --- | --- |
| `country` | no | Two-letter storefront code (default `us`): gb, de, fr, jp, au, br, in, ... |
| `mediaType` | no | `apps` (default), `books`, `podcasts` or `music` |
| `chart` | no | apps: `top-free` (default), `top-paid`, `top-grossing`; books: `top-free`/`top-paid`; podcasts: `top`; music: `most-played` |
| `genre` | no | Apple genre ID for app charts, e.g. `6014` Games, `6000` Business, `6007` Productivity |
| `limit` | no | Entries to return (default 50, max 200) |

### Examples

Top 50 free iPhone apps in Germany:

```json
{ "country": "de", "mediaType": "apps", "chart": "top-free", "limit": 50 }
```

Top 100 grossing games in the US:

```json
{ "country": "us", "mediaType": "apps", "chart": "top-grossing", "genre": "6014", "limit": 100 }
```

Most-played songs in Japan:

```json
{ "country": "jp", "mediaType": "music", "chart": "most-played" }
```

### FAQ

**Is this an official Apple source?** Yes - Apple's public marketing-tools RSS feeds (with the legacy Apple feed for the grossing-apps chart, which the newer feed set no longer publishes).

**How fresh are the charts?** Apple updates them continuously; every run reflects the chart as of that minute.

**Do I need an Apple account or API key?** No.

**Which countries are supported?** Every Apple storefront - use the two-letter country code.

**What does it cost?** Pay-per-event: $2 per 1,000 chart entries plus minimal platform compute.

**Can I track rank over time?** Yes - schedule daily runs and store the dataset rows; each row carries its fetch-time rank.

### Pipeline patterns

**Daily rank archive.** Schedule one run per market and chart you care about. Every row carries its fetch-time `rank`, so appending daily datasets builds a complete rank-history table - the raw material for momentum charts and breakout alerts.

**Breakout detection.** Compare today's ranks to a 7-day rolling average; an app jumping 30+ positions in a category chart is usually news, a feature, or an ad campaign. Pipe the deltas to an agent to investigate.

**Category deep dives.** Pair `genre` with `chart=top-grossing` to map who actually monetizes in a niche - Games (`6014`), Business (`6000`), Medical (`6020`) - then feed the Apple IDs into the [App Store Reviews Actor](https://apify.com/slanlabs/app-store-reviews) for the why behind the numbers.

**Launch tracking.** A new app's first chart appearance, day by day, country by country: `releaseDate` in the row tells you exactly which entrants are new.

### Field notes

`id` is the numeric Apple ID and joins directly to the Reviews Actor and to App Store URLs (`https://apps.apple.com/app/id<value>`). `kind` distinguishes apps from games in some storefronts. `genres` lists Apple's own category labels, with the primary genre first. Charts are storefront-specific: the same app can be #1 in Brazil and unranked in the US, so always record `country` alongside `rank`.

### More FAQ

**Why did my chart/mediaType combination return an error?** Not every chart exists for every media type. Valid pairs: apps = top-free/top-paid/top-grossing, books = top-free/top-paid, podcasts = top, music = most-played.

**Are iPad charts available?** Apple's feeds publish the combined iPhone charts; use `genre` to narrow by category instead.

**How often does Apple update the charts?** Continuously; ranking movements are visible within the hour.

**Do paid-only or free-only splits matter?** Yes - `top-free` and `top-paid` are separate charts with separate ranks; grossing blends revenue across both.

**What happens for an invalid country code?** Apple's feed returns an error and the run fails fast with a clear message - fix the code and rerun.

**Can I get more than 200 entries?** Apple caps each chart feed at 200; that is the full published chart.

### More official-API Actors from SlanLabs

- [App Store Reviews (Official Apple Feeds)](https://apify.com/slanlabs/app-store-reviews) - every public review for any iOS app, any country
- [Bluesky Scraper - Posts, Profiles, Search](https://apify.com/slanlabs/bluesky-scraper) - posts, profiles, search and threads via the open AT Protocol
- [SEC EDGAR Filings Search & Monitor](https://apify.com/slanlabs/sec-edgar-filings) - full-text search and company feeds from the SEC's official APIs
- [GDELT Global News Monitor](https://apify.com/slanlabs/gdelt-news-monitor) - worldwide news coverage in 65+ languages, updated every 15 minutes
- [Hacker News Search & Monitor](https://apify.com/slanlabs/hackernews-monitor) - every story and comment since 2006, plus the live front page
- [US Government Spending & Contracts (USASpending)](https://apify.com/slanlabs/usaspending-contracts) - federal contracts, grants and loans by keyword, agency, NAICS or recipient

# Actor input Schema

## `country` (type: `string`):

Two-letter Apple storefront country code: us, gb, de, fr, jp, au, br, in, ...

## `mediaType` (type: `string`):

apps: App Store charts. books: Apple Books. podcasts: Apple Podcasts. music: Apple Music most-played songs.

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

apps: top-free, top-paid or top-grossing. books: top-free or top-paid. podcasts: top. music: most-played.

## `genre` (type: `string`):

Optional Apple genre ID to narrow app charts, e.g. 6014 Games, 6000 Business, 6007 Productivity, 6016 Entertainment, 6020 Medical.

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

How many chart entries to return (max 200).

## Actor input object example

```json
{
  "country": "us",
  "mediaType": "apps",
  "chart": "top-free",
  "genre": "6014",
  "limit": 50
}
```

# Actor output Schema

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

Apple chart entries dataset

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

Run summary (counts)

# 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 = {
    "country": "us",
    "genre": "6014"
};

// Run the Actor and wait for it to finish
const run = await client.actor("slanlabs/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 = {
    "country": "us",
    "genre": "6014",
}

# Run the Actor and wait for it to finish
run = client.actor("slanlabs/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 '{
  "country": "us",
  "genre": "6014"
}' |
apify call slanlabs/app-store-top-charts --silent --output-dataset

```

## MCP server setup

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