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

Scrape public Apple App Store app data, reviews, search results, and top charts. Export ratings, prices, developers, genres, versions, screenshots, and review text.

- **URL**: https://apify.com/maximedupre/apple-app-store-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Marketing, Business, Developer tools
- **Features:** Limited permissions
- **Stats:** 12 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.10 / 1,000 scraped apps

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 for iOS app data

Apple App Store Scraper collects public iOS app data, search results, top chart apps, and App Store reviews. Use it when you need app metadata, ratings, prices, developers, genres, versions, screenshots, storefront context, and public review text in one Apify dataset.

- [Find iOS apps from App Store keywords](https://apify.com/maximedupre/apple-app-store-scraper/examples/ios-app-store-keyword-search) such as `photo editor`, `habit tracker`, or `budget planner`.
- Build [Apple App Store datasets for ASO research](https://apify.com/maximedupre/apple-app-store-scraper/examples/apple-app-store-dataset-aso-research), category research, and mobile market maps.
- [Track competitor app metadata](https://apify.com/maximedupre/apple-app-store-scraper/examples/competitor-app-metadata-tracking), ratings, pricing, versions, genres, and storefront availability.
- [Collect public App Store reviews](https://apify.com/maximedupre/apple-app-store-scraper/examples/app-store-reviews-product-feedback) for product feedback, support triage, voice-of-customer research, and feature request research.
- [Pull top free and top paid App Store chart data](https://apify.com/maximedupre/apple-app-store-scraper/examples/top-app-store-charts-monitoring) for market monitoring.

#### 📦 Data you can extract

App results can include:

- `appId`, `bundleId`, and `appStoreUrl`
- `appName`
- `developerName`, `developerUrl`, `sellerName`, and `sellerUrl`
- `searchQuery`, `chartCollection`, and `sourceRank`
- `primaryGenre`, `primaryGenreId`, `genres`, and `genreIds`
- `price`, `currency`, and `formattedPrice`
- `rating`, `ratingCount`, `ratingCurrentVersion`, and `ratingCountCurrentVersion`
- `version`, `releaseDate`, `currentVersionDate`, and `releaseNotes`
- `iconUrl`, `screenshotUrls`, and `ipadScreenshotUrls`
- `minimumOsVersion`, `fileSizeBytes`, `languages`, `supportedDevices`, and `features`
- `country`
- `reviews` when review enrichment is enabled

Each public review can include `reviewId`, `title`, `text`, `rating`, `authorName`, `authorUrl`, `appVersion`, `date`, `voteSum`, and `voteCount`.

Some fields can be empty when Apple does not expose them for a specific app, country storefront, chart, search result, or public review surface.

#### ▶️ How to run it

1. Choose an **App source**: app IDs or URLs, search keywords, or top charts.
2. Add App Store targets when the selected source needs them.
3. Pick the Apple App Store **Country** storefront.
4. Keep app and review limits low for a preview run.
5. Start the Actor and open the dataset.

You do not need an Apple Developer account, App Store Connect access, cookies, or an API key. For a small first run, keep the prefilled Spotify App Store URL and use **App IDs or URLs** to preview the app row shape before adding more app IDs, URLs, search terms, or chart settings.

Use App Store URLs or numeric app IDs for known app lookups:

```json
{
  "mode": "lookup",
  "targets": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "570060128"
  ],
  "country": "us",
  "maxAppsPerTarget": 10,
  "includeReviews": false,
  "reviewLimit": 25,
  "reviewSort": "mostRecent",
  "chartCollection": "top-free"
}
```

Use keywords for search mode:

```json
{
  "mode": "search",
  "targets": ["photo editor", "fitness tracker"],
  "country": "us",
  "maxAppsPerTarget": 25,
  "includeReviews": true,
  "reviewLimit": 10,
  "reviewSort": "mostRecent",
  "chartCollection": "top-free"
}
```

Use top charts mode when you want Apple chart feeds. In this mode, the Actor uses the selected chart and country; the `targets` field is ignored.

#### ⚙️ Input options

| Field | What it does |
| --- | --- |
| `mode` | Selects app lookup, app search, or top charts. |
| `targets` | App Store URLs or numeric IDs for lookup; keyword strings for search. Ignored in top charts mode. |
| `maxAppsPerTarget` | Caps apps for each lookup target, search term, or chart run. |
| `reviewLimit` | Caps public reviews for each app. |
| `includeReviews` | Adds public review data for matched apps. |
| `reviewSort` | Requests most recent or most helpful public reviews from Apple. |
| `country` | Chooses the two-letter Apple storefront country. |
| `chartCollection` | Chooses the Apple top chart feed for top charts mode. |
| `categoryIds` | Optional App Store genre IDs. Search uses the first ID; top charts filter fetched app details after lookup. |

#### 🧾 Output example

```json
{
  "appId": "123456789",
  "appName": "Example Photo Editor",
  "bundleId": "com.example.photo",
  "appStoreUrl": "https://apps.apple.com/us/app/example-photo-editor/id123456789",
  "country": "us",
  "searchQuery": "photo editor",
  "chartCollection": null,
  "sourceRank": 1,
  "developerName": "Example Developer",
  "developerUrl": "https://apps.apple.com/us/developer/example/id987654321",
  "sellerName": "Example Developer LLC",
  "sellerUrl": "https://example.com",
  "description": "Edit photos with filters, crop tools, and templates.",
  "releaseNotes": "Bug fixes and performance improvements.",
  "version": "1.2.3",
  "releaseDate": "2024-01-15T10:00:00Z",
  "currentVersionDate": "2026-05-28T12:00:00Z",
  "price": 0,
  "currency": "USD",
  "formattedPrice": "Free",
  "isFree": true,
  "hasInAppPurchases": true,
  "rating": 4.7,
  "ratingCount": 12345,
  "ratingCurrentVersion": 4.7,
  "ratingCountCurrentVersion": 12345,
  "contentRating": "4+",
  "primaryGenre": "Photo & Video",
  "primaryGenreId": "6008",
  "genres": ["Photo & Video", "Graphics & Design"],
  "genreIds": ["6008", "6027"],
  "iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/example/512x512bb.jpg",
  "screenshotUrls": ["https://is1-ssl.mzstatic.com/image/thumb/example/392x696bb.jpg"],
  "ipadScreenshotUrls": [],
  "minimumOsVersion": "16.0",
  "fileSizeBytes": 185000000,
  "languages": ["EN"],
  "supportedDevices": ["iPhone13,2"],
  "features": ["iosUniversal"],
  "reviews": [
    {
      "reviewId": "13851595728",
      "title": "Useful editor",
      "text": "The templates save me a lot of time.",
      "rating": 5,
      "authorName": "PhotoFan",
      "authorUrl": "https://itunes.apple.com/us/reviews/id123456789",
      "appVersion": "1.2.3",
      "date": "2026-05-28T08:30:00-07:00",
      "voteSum": 4,
      "voteCount": 5
    }
  ]
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. App results and review enrichment are charged separately, so a run with **Add reviews** turned on can create both app charges and review charges.

Keep the default limits for a small preview, then raise `maxAppsPerTarget` or `reviewLimit` when the output matches your workflow.

#### ⚠️ Limits and caveats

- Apple data can vary by country storefront.
- App search and top chart order follow the public Apple source for the selected storefront and settings.
- Public review availability depends on the app, country, and Apple public review surfaces.
- Top chart category filtering is applied after app details are fetched, so a filtered chart can return fewer rows than the requested app limit.
- The Actor only returns data Apple exposes publicly. It does not access private developer, user, or analytics data.

#### 🔌 Integrations

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

- Run the Actor through the Apify API for app intelligence, ASO, or competitor monitoring workflows.
- Schedule repeat runs to watch public app metadata, reviews, ratings, and chart positions over time.
- Export datasets as JSON, CSV, Excel, XML, RSS, or HTML.
- Send finished runs to webhooks, spreadsheets, BI tools, or internal apps.

#### ❓ FAQ

##### 🔐 Do I need an Apple account?

No. The Actor uses public Apple App Store surfaces and does not require an Apple Developer account, App Store Connect access, cookies, or an API key.

##### ⭐ Can I scrape App Store reviews?

Yes. Turn on **Add reviews** to include public reviews for matched apps. Reviews are saved inside each app result.

##### 📊 Can I collect top App Store charts?

Yes. Use top charts mode to collect the public top free or top paid app chart for a selected country storefront.

##### 🔌 Why not use the Apple App Store API?

Apple's public lookup and search APIs are useful, but they do not give you the full Apify workflow around datasets, schedules, exports, webhooks, run monitoring, and saved inputs. This Actor packages public app lookup, keyword search, top charts, and review enrichment in one run.

##### 🧭 What are Apple App Store alternatives?

For Android app data, use a Google Play Store scraper. For cross-platform app tracking, combine Apple App Store data with Google Play app metadata, reviews, ratings, and category data.

##### 📉 Why did a run return fewer apps than my limit?

Apple may return fewer public results for a keyword, country, chart, or category filter than the limit you requested. Top chart category filtering can also reduce the final row count after app details are checked.

### 📝 Changelog

- 1.0: App results now use one app-centered row shape with optional nested public reviews. Top charts now include the Apple public chart feeds that currently return app rows: top free and top paid.
- 0.0: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~apple-app-store-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [Google Play Store Scraper ↗](https://apify.com/maximedupre/google-play-store-scraper) - Scrape Android app metadata, search results, categories, developer pages, and public Google Play reviews.
- [App Store Ratings Scraper ↗](https://apify.com/maximedupre/app-store-ratings-scraper) - Compare Apple App Store and Google Play ratings, metadata, prices, and review counts in one dataset.
- [Social Media Stats Checker ↗](https://apify.com/maximedupre/social-media-stats-checker) - Check public profile stats across major social platforms for creator, brand, and competitor research.
- [TikTok Keywords Discovery Tool ↗](https://apify.com/maximedupre/tiktok-keywords-discovery-tool) - Collect TikTok autocomplete suggestions for social search, content planning, and keyword research.
- [Pinterest Keyword Scraper ↗](https://apify.com/maximedupre/pinterest-keyword-scraper) - Export Pinterest autocomplete keyword suggestions for SEO, content planning, and niche research.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

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

Choose how to find Apple App Store apps for this run.

## `targets` (type: `array`):

Use App Store URLs or numeric IDs for App IDs or URLs. Use keyword phrases for Search keywords.

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

Choose the Apple App Store country for localized app data and reviews.

## `maxAppsPerTarget` (type: `integer`):

Maximum apps to collect for each lookup target, search keyword, or chart run.

## `chartCollection` (type: `string`):

Choose the Apple top chart feed for top charts mode.

## `categoryIds` (type: `array`):

Optional App Store genre IDs for search or chart app rows.

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

Also collect public reviews for each matched app.

## `reviewLimit` (type: `integer`):

Maximum public reviews to collect for each matched app.

## `reviewSort` (type: `string`):

Choose the public review order returned by Apple.

## Actor input object example

```json
{
  "mode": "lookup",
  "targets": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "https://apps.apple.com/us/app/chatgpt/id6448311069",
    "https://apps.apple.com/us/app/google-maps/id585027354",
    "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
    "https://apps.apple.com/us/app/uber-request-a-ride/id368677368"
  ],
  "country": "us",
  "maxAppsPerTarget": 25,
  "chartCollection": "top-free",
  "includeReviews": false,
  "reviewLimit": 50,
  "reviewSort": "mostRecent"
}
```

# Actor output Schema

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

Public Apple App Store app results, with review data included when requested.

# 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 = {
    "mode": "lookup",
    "targets": [
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
        "https://apps.apple.com/us/app/chatgpt/id6448311069",
        "https://apps.apple.com/us/app/google-maps/id585027354",
        "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
        "https://apps.apple.com/us/app/uber-request-a-ride/id368677368"
    ],
    "maxAppsPerTarget": 25,
    "reviewLimit": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/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 = {
    "mode": "lookup",
    "targets": [
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
        "https://apps.apple.com/us/app/chatgpt/id6448311069",
        "https://apps.apple.com/us/app/google-maps/id585027354",
        "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
        "https://apps.apple.com/us/app/uber-request-a-ride/id368677368",
    ],
    "maxAppsPerTarget": 25,
    "reviewLimit": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/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 '{
  "mode": "lookup",
  "targets": [
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "https://apps.apple.com/us/app/chatgpt/id6448311069",
    "https://apps.apple.com/us/app/google-maps/id585027354",
    "https://apps.apple.com/us/app/whatsapp-messenger/id310633997",
    "https://apps.apple.com/us/app/uber-request-a-ride/id368677368"
  ],
  "maxAppsPerTarget": 25,
  "reviewLimit": 50
}' |
apify call maximedupre/apple-app-store-scraper --silent --output-dataset

```

## MCP server setup

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