# Apple App Store Scraper: iOS Top Charts, Search & App Details (`charitable_trousseau/app-store-scraper`) Actor

Apple App Store (iOS) app data from Apple's official endpoints, so no proxies and no blocking: search results in ranking order (up to 200 per term), top free, paid and grossing charts for any country, and app details by ID or URL, with ratings, price, version and release notes. $1 per 1,000 apps.

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

## Pricing

from $0.70 / 1,000 results

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/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

## Apple App Store Scraper: iOS Top Charts, Search & App Details

App data from Apple's official public endpoints, so runs do not get blocked and do not need proxies.

### What you can do with it

- Track the top free, top paid or top grossing chart for a country or category every day and see which apps move (`rank`).
- Keyword rank tracking: search a term and read each app's `rank` in App Store order, up to 200 apps per term.
- Watch competitors: `version`, `updatedDate`, `releaseNotes`, `rating` and `ratingCount` for a list of app IDs.
- Build a dataset of apps in a category with price, size, languages and content rating.

### What it does

- **Search** — apps for any search term, in App Store ranking order (up to 200 per term).
- **Top charts** — top free, top paid or top grossing for any country, optionally for one category (up to 100 apps).
- **App details** — look up apps by ID or App Store URL.

### What you get

One record per app: `appId`, `name`, `developer`, `developerId`, `bundleId`, `url`, `price`, `currency`, `free`, `rating`, `ratingCount`, `version`, `releaseDate`, `updatedDate`, `releaseNotes`, `description`, `primaryGenre`, `genres`, `contentRating`, `sizeBytes`, `minimumOsVersion`, `languages`, `iconUrl`, `screenshotUrls`, `developerWebsite`, `country`, plus `source` (which search, chart or ID lookup produced it), `rank` (position in the search or chart) and `scrapedAt`.

#### Sample output

One record from a run on 2026-10-07, as saved (long text and lists shortened):

```json
{
    "appId": "337472899",
    "name": "Insight Timer: Meditate, Sleep",
    "developer": "Insight Network Inc",
    "developerId": "983080487",
    "bundleId": "com.spotlightsix.zentimer",
    "url": "https://apps.apple.com/us/app/insight-timer-meditate-sleep/id337472899",
    "price": 0,
    "currency": "USD",
    "free": true,
    "rating": 4.9,
    "ratingCount": 447383,
    "version": "20.37.0",
    "releaseDate": "2009-11-05T18:55:12Z",
    "updatedDate": "2026-10-04T09:13:22Z",
    "releaseNotes": "The world's largest free mental health app just got even bigger! In the last week we've added 968 new free meditations for you to enjoy, plus 509 new free sleep…",
    "description": "* Apps of the Year Winner - TIME magazine and Womens Health *\n* More time is spent meditating on Insight Timer than all other meditation apps *\n* Happiest App i…",
    "primaryGenre": "Health & Fitness",
    "genres": [
        "Health & Fitness",
        "Lifestyle"
    ],
    "contentRating": "12+",
    "sizeBytes": 243749888,
    "minimumOsVersion": "15.0",
    "languages": [
        "NL",
        "EN",
        "FR"
    ],
    "iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/db/ee/75/dbee75cd-e6c1-4330-6c3c-f648fc7de66e/AppIcon-0-0-1x_U007epad-0-1-85-220.png/512x512bb.jpg",
    "screenshotUrls": [
        "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/9f/89/d3/9f89d364-4d66-e14f-7cff-5be7e3a6445a/0_APP_IPHONE_55_0.png/392x696bb.png",
        "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/79/de/a5/79dea510-d411-3746-a506-82794b4fcd37/1_APP_IPHONE_55_1.png/392x696bb.png",
        "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/65/6c/ed/656ced75-55dc-c799-5b51-8464285e82e3/2_APP_IPHONE_55_2.png/392x696bb.png"
    ],
    "developerWebsite": "http://www.insighttimer.com",
    "country": "us",
    "source": "search: meditation",
    "rank": 1,
    "scrapedAt": "2026-10-07T19:14:02.774Z"
}
```

### Input

```json
{
    "searchTerms": ["meditation"],
    "appIds": ["284882215", "https://apps.apple.com/us/app/instagram/id389801252"],
    "chart": "top-free",
    "chartGenreId": "6014",
    "country": "us",
    "maxAppsPerSearch": 50,
    "maxChartApps": 100
}
```

Use any combination of search terms, app IDs and a chart. `country` is a two-letter App Store code and applies to all three. If you give none of the three (for example an API call with an empty input), the example search `meditation` runs.

### FAQ

#### How do I get the App Store top charts for a country?

Set **chart** to `top-free`, `top-paid` or `top-grossing` and **country** to a two-letter App Store code such as `us`, `gb` or `jp`. Add a `chartGenreId` for one category (for example `6014` for Games). A chart returns up to 100 apps.

#### Is there an App Store search API that keeps the ranking order?

Yes, in the sense that you can call it like one. Start a run through the Apify API or one of Apify's clients with the input described here, then read the results as JSON, CSV or Excel. Search results come from Apple's official public endpoints in App Store ranking order, up to 200 apps per term, with `rank` on every record.

#### Does it scrape App Store reviews?

No. Each app has its average `rating` and `ratingCount`, not review texts or reviewer names.

#### Do I need proxies, and how fast is it?

No proxies. Apple limits these endpoints to roughly 20 calls a minute, so the scraper paces itself: each search term or batch of 100 app IDs takes about three seconds. An app ID that is not available in the chosen country's store is skipped.

#### How much does it cost?

$1.00 per 1,000 apps on Apify's Free plan, plus a start fee of $0.00005 per run. Paid Apify plans pay less: Bronze 10%, Silver 20% and Gold 30% less. Runs that fail or return nothing cost nothing.

### Pricing

You pay per app saved. Runs that fail or return nothing cost nothing.

### Notes

Apple limits these endpoints to roughly 20 calls a minute, so the scraper paces itself: each search term or batch of 100 app IDs takes about three seconds. An app ID that is not available in the chosen country's store is skipped.

### Related scrapers

- [Coles Australia Grocery Price Scraper](https://apify.com/charitable_trousseau/coles-au-product-scraper): products, prices and specials from coles.com.au
- [AliExpress Product Search Scraper](https://apify.com/charitable_trousseau/aliexpress-search-scraper): search results by keyword with prices, discounts and units sold
- [eBay Active Listings & Auctions Search Scraper](https://apify.com/charitable_trousseau/ebay-search-scraper): active listings and auctions on five eBay sites
- [Zillow ZIP Code Search Scraper](https://apify.com/charitable_trousseau/zillow-search-scraper): homes for sale, rentals and recently sold homes
- [Tripadvisor Places Scraper](https://apify.com/charitable_trousseau/tripadvisor-listings-scraper): hotels, restaurants and things to do for any place
- [Google Maps Places Scraper](https://apify.com/charitable_trousseau/google-maps-places-scraper): business listings across a whole city, postcode or radius
- [Indeed Jobs Scraper](https://apify.com/charitable_trousseau/indeed-jobs-scraper): job listings on 12 Indeed country sites, descriptions optional
- [Glassdoor Jobs Scraper](https://apify.com/charitable_trousseau/glassdoor-jobs-scraper): job listings with salary ranges and employer ratings
- [LinkedIn Jobs Scraper](https://apify.com/charitable_trousseau/linkedin-jobs-scraper): job postings past LinkedIn's 1,000-per-search limit, no login
- [Google Trends Scraper](https://apify.com/charitable_trousseau/google-trends-scraper): interest over time, interest by region, rising queries and trending searches

# Actor input Schema

## `searchTerms` (type: `array`):

App Store searches, one per line. Results come back in App Store ranking order. If no search term, app ID or chart is given, the example search meditation runs.

## `appIds` (type: `array`):

Numeric app IDs (e.g. 284882215) or App Store URLs.

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

Fetch a top chart for the chosen country.

## `chartGenreId` (type: `string`):

Optional App Store genre ID to limit the chart to one category, e.g. 6014 for Games or 6013 for Health & Fitness.

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

Two-letter App Store country code, e.g. us, gb, de, au.

## `maxAppsPerSearch` (type: `integer`):

Apple returns at most 200 results per search.

## `maxChartApps` (type: `integer`):

Apple's charts list at most 100 apps.

## Actor input object example

```json
{
  "searchTerms": [
    "meditation"
  ],
  "chart": "none",
  "country": "us",
  "maxAppsPerSearch": 50,
  "maxChartApps": 100
}
```

# Actor output Schema

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

All apps saved by the run.

# 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 = {
    "searchTerms": [
        "meditation"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("charitable_trousseau/app-store-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 = { "searchTerms": ["meditation"] }

# Run the Actor and wait for it to finish
run = client.actor("charitable_trousseau/app-store-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 '{
  "searchTerms": [
    "meditation"
  ]
}' |
apify call charitable_trousseau/app-store-scraper --silent --output-dataset

```

## MCP server setup

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