# App Store App Scraper (`maged120/app-store-app-scraper`) Actor

Scrape Apple App Store app details in bulk: ratings with star breakdown, price, version history, privacy labels, developer website and more, by app, developer or keyword search.

- **URL**: https://apify.com/maged120/app-store-app-scraper.md
- **Developed by:** [Maged](https://apify.com/maged120) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.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?

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 App Scraper** extracts **full app details from the Apple App Store** in bulk: rating, rating count and the **1–5 star breakdown**, price, **in-app purchase prices**, version and release notes, **privacy labels**, **developer website**, languages, file size and more. Look apps up by link, app ID or bundle ID, get **every app from a developer**, or **search by keyword** with rankings.

### What does App Store App Scraper do?

Give it [App Store](https://apps.apple.com) links, app IDs, bundle IDs, developer pages or keywords. It returns one clean row per app with:

- **Store metrics**: average rating, total ratings, ratings for the current version, and the full 5★–1★ breakdown.
- **Monetization**: price, whether the app sells in-app purchases, and the list of in-app purchases with prices.
- **Release data**: current version, release notes, last update date, original release date.
- **Privacy labels**: data used to track you, data linked to you, and data not linked to you.
- **Developer info**: developer name and ID, seller, developer website and privacy policy link.
- **Listing content**: description, icon, iPhone and iPad screenshots, category, age rating, languages, compatibility and file size.

Keyword searches also record each app's **rank** for that keyword, in the country you choose.

On the Apify platform you also get API access, scheduling, integrations (Google Sheets, Zapier, Make, webhooks) and run monitoring, so app tracking can run on autopilot.

### Why scrape the App Store?

- **App Store Optimization (ASO)**: track keyword rankings, ratings and release frequency for your app and competitors.
- **Market research**: compare every app in a niche by rating, rating volume, price and monetization.
- **Monetization research**: see exactly which in-app purchases competitors sell and at what price.
- **Privacy & compliance audits**: collect privacy labels across hundreds of apps.
- **Lead generation**: list all apps by a developer or in a category, with developer websites.
- **Reputation monitoring**: schedule runs to catch rating drops after an update.

### How to scrape App Store app data

1. Open the Actor and go to the **Input** tab.
2. Add app links, IDs, bundle IDs or developer links to **Apps or developers**, and/or keywords to **Search keywords**.
3. Set the **Country** (default: US).
4. Click **Start**.
5. Open the **Output** tab and switch between the **Apps** and **Developers & privacy** views, or download as JSON, CSV, Excel or HTML.

### Input

| Field | Type | Description |
|---|---|---|
| `apps` | array | App links, app IDs (`324684580`), bundle IDs (`com.spotify.client`) or developer links (all their apps). |
| `searchTerms` | array | Keywords to search. Each result includes its rank. |
| `maxAppsPerSearch` | integer | Top apps per keyword (1–200). Default `50`. |
| `country` | string | App Store country code, e.g. `us`, `gb`, `de`, `jp`. Default `us`. |
| `includeStorePageDetails` | boolean | Add star breakdown, privacy labels, links, languages and in-app purchases. Default `true`. |

```json
{
    "apps": [
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
        "com.burbn.instagram",
        "https://apps.apple.com/us/developer/spotify/id324684583"
    ],
    "searchTerms": ["habit tracker"],
    "maxAppsPerSearch": 50,
    "country": "us"
}
```

### Output

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

```json
{
    "appId": "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",
    "developerUrl": "https://apps.apple.com/us/developer/spotify/id324684583",
    "seller": "Spotify",
    "price": 0.0,
    "currency": "USD",
    "formattedPrice": "Free",
    "rating": 4.77,
    "ratingCount": 42263069,
    "ratingHistogram": { "5": 37083973, "4": 2961777, "3": 934887, "2": 363245, "1": 919187 },
    "genre": "Music",
    "genres": ["Music", "Entertainment"],
    "contentRating": "12+",
    "version": "9.1.86",
    "currentVersionReleasedAt": "2026-09-23T17:49:27Z",
    "releasedAt": "2011-07-14T11:22:37Z",
    "fileSizeBytes": 311322624,
    "minimumOsVersion": "16.1",
    "developerWebsite": "https://www.spotify.com/",
    "privacyPolicyUrl": "http://www.spotify.com/legal/privacy-policy/",
    "privacyDataUsedToTrackYou": ["Contact Info", "Identifiers", "Usage Data"],
    "privacyDataLinkedToYou": ["Health & Fitness", "Purchases", "Financial Info", "Location", "Contact Info", "…"],
    "offersInAppPurchases": false,
    "inAppPurchases": [],
    "copyright": "© 2008–2026 Spotify Ltd.",
    "searchTerm": null,
    "searchRank": null,
    "country": "us"
}
```

For an app that sells in-app purchases (for example, a game), `inAppPurchases` lists them:

```json
"offersInAppPurchases": true,
"inAppPurchases": [
    { "name": "10 Gold Bars", "price": "$1.99" },
    { "name": "Extra Moves", "price": "$0.99" }
]
```

Rows also include `description`, `releaseNotes`, `iconUrl`, `screenshotUrls`, `ipadScreenshotUrls`, `languages`, `languageCodes`, `compatibility`, `ratingCurrentVersion` and `ratingCountCurrentVersion`.

### Output data fields

| Field | Description |
|---|---|
| `rating` / `ratingCount` / `ratingHistogram` | Average rating, total ratings, and number of ratings per star. |
| `ratingCurrentVersion` / `ratingCountCurrentVersion` | The same, for the current version only. |
| `price` / `formattedPrice` / `currency` | App price in the chosen country. |
| `offersInAppPurchases` / `inAppPurchases` | Whether the app sells in-app purchases, and the list with prices. |
| `version` / `releaseNotes` / `currentVersionReleasedAt` / `releasedAt` | Release history. |
| `privacyDataUsedToTrackYou` / `privacyDataLinkedToYou` / `privacyDataNotLinkedToYou` | The app's privacy label categories. |
| `developer` / `developerId` / `developerUrl` / `developerWebsite` / `seller` | Who makes and sells the app. |
| `searchTerm` / `searchRank` | The keyword that found the app and its position (search results only). |
| `error` | Why an app couldn't be loaded (or which extra details were missing), otherwise `null`. |

### How many results will I get?

One row per app. Keyword searches add up to **Max apps per keyword** rows each, and developer links add one row per app the developer publishes. An app requested twice (for example by link and by bundle ID) appears once; an app found by a keyword search keeps its own row with its rank.

### Tips

- **Faster runs**: turn off **Include rating breakdown, privacy labels & links** if you only need core metrics. Core data comes back in seconds even for hundreds of apps.
- **Compare countries**: run the same list with different **Country** codes to compare prices, ratings and rankings.
- **Rank tracking**: schedule a keyword run daily and compare `searchRank` over time.

### FAQ

**Why is an app "not found"?** Apps can be region-locked or removed. Try the country where the app is published.

**Can I get reviews?** This Actor focuses on app details. Use a dedicated App Store reviews scraper alongside it and join on `appId`.

**Is scraping the App Store legal?** The Actor only collects publicly available store listings. You're responsible for how you use the data.

**Found a bug or need a custom feature?** Open an issue in the **Issues** tab. Custom solutions are available on request.

# Actor input Schema

## `apps` (type: `array`):

App Store links (https://apps.apple.com/us/app/spotify/id324684580), app IDs (324684580), bundle IDs (com.spotify.client), or developer links (https://apps.apple.com/us/developer/spotify/id324684583) to get every app by that developer.

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

Optional. Keywords to search the App Store for (e.g. 'habit tracker'). Every app found is returned with its rank for that keyword.

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

How many top apps to return for each keyword (1-200).

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

Two-letter App Store country code (e.g. us, gb, de, jp). Affects availability, prices, ratings and search ranking.

## `includeStorePageDetails` (type: `boolean`):

Adds the 1-5 star rating breakdown, privacy labels, developer website and privacy policy links, languages and in-app purchases. Turn off for faster runs.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "com.burbn.instagram"
  ],
  "searchTerms": [
    "habit tracker"
  ],
  "maxAppsPerSearch": 20,
  "country": "us",
  "includeStorePageDetails": true
}
```

# 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 = {
    "apps": [
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
        "com.burbn.instagram"
    ],
    "searchTerms": [
        "habit tracker"
    ],
    "maxAppsPerSearch": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("maged120/app-store-app-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 = {
    "apps": [
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
        "com.burbn.instagram",
    ],
    "searchTerms": ["habit tracker"],
    "maxAppsPerSearch": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("maged120/app-store-app-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 '{
  "apps": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "com.burbn.instagram"
  ],
  "searchTerms": [
    "habit tracker"
  ],
  "maxAppsPerSearch": 20
}' |
apify call maged120/app-store-app-scraper --silent --output-dataset

```

## MCP server setup

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