# Apple App Store Scraper (`mina_safwat/apple-app-store-scraper`) Actor

Scrapes the Apple App Store: search, app details, iPhone/iPad/Mac charts, developer catalogues, reviews, and rating histograms.

- **URL**: https://apify.com/mina\_safwat/apple-app-store-scraper.md
- **Developed by:** [Mina](https://apify.com/mina_safwat) (community)
- **Categories:** AI, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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?

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

Scrape the **Apple App Store** — search results, full app listings, iPhone, iPad and Mac charts, developer catalogues, user reviews, and star histograms. No API key, no login.

### What does Apple App Store Scraper do?

This Actor reads app data from the [App Store](https://apps.apple.com) and returns it as structured data. For each app you get the title, developer, rating and review counts, price, category, age rating, supported devices and minimum iOS version, release and update dates, release notes, screenshots, and the full description.

Five modes cover the usual jobs:

- **Search** — find apps by keyword, as a shopper would.
- **App details** — look up exact apps by numeric App Store ID or bundle ID.
- **Top charts** — ranked Top free, Top paid, Top grossing and New charts, for iPhone, iPad, or Mac, optionally per category.
- **Developer apps** — a publisher's whole catalogue.
- **Similar apps** — Apple's own "you might also like" list, for competitor mapping.

### Why use Apple App Store Scraper?

- **App store optimisation** — track how you and your rivals rank for the keywords that matter.
- **Competitor monitoring** — watch ratings, pricing, and release cadence over time.
- **Review mining** — pull reviews to find recurring complaints and feature requests.
- **Market research** — chart a category, or a publisher's catalogue, in one run.
- **Cross-platform comparison** — pair it with a Google Play run to compare the same app on both stores.

Running it on Apify adds scheduling, an API, integrations (Sheets, Slack, Zapier, S3), and run monitoring.

### How to use Apple App Store Scraper

1. Pick **What to scrape** — start with Search.
2. Enter your **Search terms** (or App IDs, or a developer ID, depending on the mode).
3. Set **Country** — charts, prices, and availability differ per store.
4. Turn on any **Extras**: reviews, rating breakdown, similar apps.
5. Click **Start**.

Results appear in the Output tab as they are scraped, and download as JSON, CSV, Excel, or XML.

### Input

| Field | Description |
| --- | --- |
| `mode` | Search, App details, Top charts, Developer apps, or Similar apps. |
| `searchTerms` | Keywords, one per line. Merged and de-duplicated across terms. |
| `appIds` | Numeric App Store IDs (the `id…` number in a store URL) or bundle IDs like `com.spotify.client`. Both work. |
| `developerId` | Numeric developer ID — read it from the `developerId` field of any of that publisher's apps. |
| `collection` + `category` | Which chart to read, and an optional category. |
| `country`, `language` | Store country and locale. |
| `maxApps` | Stops after this many apps. |
| `fullDetails` | Get the complete listing rather than the short chart summary. |

#### Extras

`includeReviews` with `maxReviewsPerApp` and `reviewsSort` · `includeRatings` (the 1–5 star breakdown) · `includeSimilar`

Each extra adds to the cost of every app, so turn on only what you need.

### Output

```json
{
  "id": 324684580,
  "bundleId": "com.spotify.client",
  "title": "Spotify: Music and Podcasts",
  "url": "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
  "developer": "Spotify",
  "developerId": 324684583,
  "primaryGenre": "Music",
  "score": 4.78,
  "reviewCount": 41626714,
  "currentVersionScore": 4.78,
  "price": 0,
  "currency": "USD",
  "free": true,
  "contentRating": "12+",
  "size": 289634304,
  "requiredOsVersion": "15.0",
  "version": "9.0.60",
  "released": "2011-07-14T00:41:32Z",
  "updated": "2026-08-11T09:12:44Z",
  "ratingHistogram": { "1": 886809, "2": 348918, "3": 911987, "4": 2913716, "5": 36568589 },
  "totalRatings": 41630019,
  "country": "us"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Data fields

| Field | Description |
| --- | --- |
| `id`, `bundleId`, `title`, `url`, `icon` | App identity and its store page. |
| `developer`, `developerId`, `developerWebsite` | Publisher details. |
| `score`, `reviewCount`, `currentVersionScore`, `currentVersionReviews` | Ratings overall and for the current version. |
| `ratingHistogram`, `totalRatings` | The 1–5 star breakdown and its sum. |
| `price`, `currency`, `free` | Pricing in the chosen store. |
| `primaryGenre`, `genres`, `contentRating`, `languages` | Classification. |
| `size`, `requiredOsVersion`, `supportedDevices` | Technical requirements. `size` is in bytes. |
| `released`, `updated`, `version`, `releaseNotes` | Release history and the latest changelog. |
| `description`, `screenshots`, `ipadScreenshots` | Store listing content. |
| `reviews`, `similarApps` | Optional extras. |

### How much does it cost to scrape the App Store?

Cost tracks the number of apps you scrape. Reviews add the most on top, so set **Max reviews per app** to what you actually need.

### Tips

- **Bundle IDs work as well as numeric IDs**, so you can paste in `com.example.app` without looking the number up first.
- **Turn off `fullDetails`** when you only need chart positions. It makes a run cheaper and faster.
- **Compare stores** by running the same app list through the Google Play Store Scraper.
- **Country changes everything** — charts, prices, and availability are per-store. Run several to compare markets.

### FAQ and support

**Does it need an Apple account or API key?** No. It reads only publicly visible store data.

**Why did I get fewer reviews than I asked for?** Apple only lets you read about 500 reviews per app. The run log says so when you hit that. It is Apple's limit, not the Actor's.

**Why are privacy labels not included?** Apple's privacy labels cannot currently be read reliably, so the Actor leaves them out rather than offering a field that never works.

**Why did a developer lookup return nothing?** It needs the numeric developer ID, not the publisher's display name. Take it from the `developerId` field of one of their apps.

**Is scraping the App Store legal?** This Actor collects publicly available store data. Reviews carry public user names; if you store them, handle them in line with GDPR and similar laws. You are responsible for how you use the data, including compliance with Apple's terms.

Found a bug or want a field that is missing? Open an issue on the Actor's Issues tab.

### SEO Keywords

apple app store scraper, ios app scraper, app store data api, app store reviews scraper, ios app rankings scraper, app store charts data, itunes app scraper, mobile app market research, app store optimization aso, ios app metadata extractor, app store developer catalogue

# Actor input Schema

## `mode` (type: `string`):

Search finds apps by keyword. App details looks up exact app IDs. Top charts lists the ranked charts. Developer apps lists a publisher’s catalogue. Similar apps returns Apple’s own “you might also like” list.

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

Keywords to search, one per line. Used by the Search mode. Results from several terms are merged and de-duplicated.

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

Numeric App Store IDs (the id… number in an App Store URL) or bundle IDs like "com.spotify.client". Used by App details and Similar apps.

## `developerId` (type: `string`):

Numeric developer ID — read it from the "developerId" field of any of that publisher’s apps. Used by the Developer apps mode.

## `collection` (type: `string`):

Which chart to read, including iPad and Mac charts. Used by the Top charts mode.

## `category` (type: `string`):

Restrict the chart to one category. Used by the Top charts mode.

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

Two-letter App Store country code. Charts, prices, and availability are store-specific.

## `language` (type: `string`):

Locale for titles and descriptions, e.g. "en-us", "de-de".

## `maxApps` (type: `integer`):

Stops after this many apps.

## `fullDetails` (type: `boolean`):

Chart results carry only a summary. Leave this on to fetch the complete record — description, release notes, screenshots, supported devices. Turn it off for a faster run.

## `includeReviews` (type: `boolean`):

Attach user reviews to each app record. Apple caps paging at 10 pages (about 500 reviews per app).

## `maxReviewsPerApp` (type: `integer`):

Reviews arrive 50 per page, so 500 is the practical ceiling Apple allows.

## `reviewsSort` (type: `string`):

Order in which reviews are collected.

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

Attach the 1–5 star histogram and the total number of ratings.

## `includeSimilar` (type: `boolean`):

Attach up to 20 apps Apple considers similar — useful for mapping competitors.

## Actor input object example

```json
{
  "mode": "Search",
  "searchTerms": [
    "meditation"
  ],
  "appIds": [
    "324684580"
  ],
  "collection": "Top free (iPhone)",
  "category": "All categories",
  "country": "us",
  "language": "en-us",
  "maxApps": 50,
  "fullDetails": true,
  "includeReviews": false,
  "maxReviewsPerApp": 100,
  "reviewsSort": "Most helpful",
  "includeRatings": false,
  "includeSimilar": false
}
```

# Actor output Schema

## `dataset` (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 = {
    "searchTerms": [
        "meditation"
    ],
    "appIds": [
        "324684580"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mina_safwat/apple-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"],
    "appIds": ["324684580"],
}

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

```

## MCP server setup

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