# App Store Scraper \[FAST] | iOS Apps, Charts & Details (`apizy/apple-app-store-scraper`) Actor

Search iOS apps by keyword, explore Top Free, Paid & Grossing charts, or get full details by app ID or URL. Ratings, prices, screenshots, versions & developer data. Transparent pay-per-success pricing: $0.001/listing or $0.003/detail; no result charge for unavailable apps.

- **URL**: https://apify.com/apizy/apple-app-store-scraper.md
- **Developed by:** [Apizy](https://apify.com/apizy) (community)
- **Security:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 app listing scrapeds

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 Scraper

Find iPhone and iPad apps by keyword, explore App Store Top Charts, or collect full app details from IDs and URLs. Get names, icons, ratings, prices, descriptions, screenshots, release notes, and publisher information as structured data. Search up to 10 keywords or look up to 100 apps in one batch run. Call the Standby HTTP API when you need a direct JSON response.

Use it for app market research, ASO, competitor discovery, product planning, and automated monitoring. **Pay per app delivered:** $0.001 for a quick listing or $0.003 for full details. Apps that are not delivered have no result-event charge.

### What does App Store Scraper do?

| Mode | What you provide | What you get |
| --- | --- | --- |
| **Search** | One keyword or up to 10 keywords | Search results with each matching keyword and position |
| **Charts** | Top Free, Top Paid, or Top Grossing plus a category | Ranked apps from a country's overall or category chart |
| **Details** | One app or up to 100 numeric IDs/App Store URLs | Full public metadata for each available app |

Search and Charts return quick listings by default. Enable **Fetch full app details** to add descriptions, screenshots, version, release notes, and publisher links. Details mode always returns full details. A batch Search saves each unique app once, even when several keywords find it; `searchMatches` keeps every matching keyword and position.

#### What can you use it for?

- **Research competitors:** Compare positioning, ratings, pricing, visuals, and publishers in your niche.
- **Discover market leaders:** Explore Top Free, Top Paid, and Top Grossing charts by country and category.
- **Improve ASO:** Study the names, descriptions, categories, and screenshots of apps ranking for your keywords.
- **Validate an app idea:** See what already exists before building an MVP or a competitor to a popular app.
- **Plan features for a vibe-coded app:** Give an AI coding assistant structured competitor details to draft a product brief or feature comparison.
- **Track releases:** Collect versions and release notes from apps you follow.
- **Automate research:** Send results to a spreadsheet, dashboard, Make, n8n, Zapier, or your own workflow.
- **Connect listings with feedback:** Pair app details with [App Store Reviews Scraper](https://apify.com/apizy/apple-app-store-reviews-scraper) to learn what users praise and request.

### How to use

1. Choose **Search**, **Top Charts**, or **App details** in the input form.
2. Enter keywords, select a chart and category, or provide App Store IDs/URLs.
3. Set a store country. For Search or Charts, enable **Fetch full app details** if needed.
4. Click **Run**. Open the **Dataset** for app rows and **Output** for counts and status.

The form offers chart and category dropdowns. `country: "us"` is the default; choose another two-letter country code such as `gb`, `au`, or `sg` for a different storefront. Country selection does not translate text.

#### Which inputs should you use?

| Goal | Mode | Main fields | Result event |
| --- | --- | --- | --- |
| Find competitors for one phrase | Search | `keyword`, `maxResults`; leave `fullDetail` off | Listing: $0.001 per app |
| Compare keywords with full metadata | Search | `keywords`, `maxResults`, `fullDetail: true` | Detail: $0.003 per app |
| Browse an overall Top Free chart | Charts | `chart: "top-free"`, `category: "all"` | Listing: $0.001 per app |
| Study Top Grossing games in depth | Charts | `chart: "top-grossing"`, `category: "games"`, `fullDetail: true` | Detail: $0.003 per app |
| Inspect one known app | Details | `app: "310633997"` | Detail: $0.003 per app |
| Compare several known apps | Details | `apps` with IDs or URLs | Detail: $0.003 per app |

Only fields for the chosen mode are used. In Details mode, `fullDetail` and `maxResults` do not apply. Use either `keyword` or `keywords` for Search and either `app` or `apps` for Details. Each delivered app triggers **one** result event: Listing or Detail.

### Input examples

#### Find apps across two keywords

```json
{
  "mode": "search",
  "keywords": ["budget planner", "expense tracker"],
  "maxResults": 20,
  "fullDetail": false,
  "country": "us"
}
```

This requests up to **20 apps per keyword**. An app matching both phrases is saved once with both entries in `searchMatches` and charged once. Set `fullDetail` to `true` for descriptions, screenshots, and release notes.

#### Explore the Top Free Finance chart

```json
{
  "mode": "charts",
  "chart": "top-free",
  "category": "finance",
  "maxResults": 25,
  "fullDetail": true,
  "country": "us"
}
```

Choose `top-free`, `top-paid`, or `top-grossing`. Use `category: "all"` for the overall chart or select a category in the form. With `fullDetail: true`, the Actor looks up each chart app's details. A missing app is omitted and its ID is reported in `OUTPUT.summary.missingAppIds`.

#### Get details for multiple apps

```json
{
  "mode": "details",
  "apps": [
    "310633997",
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
  ],
  "country": "us"
}
```

Use `app` for one ID/URL or `apps` for up to 100. Repeated IDs are processed once. Unavailable IDs appear in `OUTPUT.summary.missingAppIds`; found apps are still delivered.

#### Input fields

| Field | Mode | Default | Description |
| --- | --- | --- | --- |
| `mode` | All | `search` | `search`, `charts`, or `details` |
| `keyword` / `keywords` | Search | None | One phrase or up to 10 phrases; use either field |
| `chart` | Charts | `top-free` | `top-free`, `top-paid`, or `top-grossing` |
| `category` | Charts | `all` | Overall chart or a category from the dropdown |
| `app` / `apps` | Details | None | One or up to 100 numeric IDs/App Store URLs; use either field |
| `maxResults` | Search, Charts | `25` | Maximum per keyword or chart: 1–200 for Search, 1–100 for Charts |
| `fullDetail` | Search, Charts | `false` | Add complete metadata; Details mode is always full detail |
| `country` | All | `us` | Two-letter App Store country; does not translate content |

`maxResults` is a ceiling. Apple may return fewer apps, and some chart/category combinations may be empty.

### HTTP API (Standby)

Call the Actor as a live HTTP service when you need JSON directly. Find your authenticated URL and API instructions in the Actor's **Server** tab. Standby returns results in `items` and does not save Dataset rows. The **Run** form remains available for batch jobs.

| Endpoint | Example path | Result |
| --- | --- | --- |
| Search | `GET /search?keyword=budget%20planner&limit=10&country=us` | Up to 10 listings |
| Search with detail | `GET /search?keyword=habit%20tracker&limit=10&fullDetail=true` | Up to 10 full details |
| Charts | `GET /charts?chart=top-free&category=finance&limit=10` | Ranked listings |
| Chart with detail | `GET /charts?chart=top-grossing&category=games&limit=10&fullDetail=true` | Ranked full details |
| One app | `GET /details?app=310633997&country=us` | Full detail or an empty result |

Standby accepts one keyword or app per request. Search and Charts allow `limit` from 1 to 100; the default is 10. `country` defaults to `us`, and `fullDetail` defaults to `false`. Use a batch run for multiple keywords or IDs. A response includes `mode`, `country`, `detailLevel`, `count`, `durationMs`, `missingAppIds`, and `items`. The same per-app Listing or Detail event applies to delivered Standby items; Apify Standby platform usage is additional.

### Output

Each unique app in a batch run is **one row in the default Dataset**. The default Key-Value Store contains an `OUTPUT` summary; app rows are in the Dataset. Standby returns them directly in HTTP JSON.

**Example Dataset row** (shortened, illustrative listing):

```json
{
  "source": "search",
  "country": "us",
  "position": 1,
  "searchTerm": "budget planner",
  "searchMatches": [
    { "keyword": "budget planner", "position": 1 },
    { "keyword": "expense tracker", "position": 3 }
  ],
  "chart": null,
  "chartCategory": null,
  "detailLevel": "listing",
  "appId": "123456789",
  "name": "Example Budget App",
  "developer": "Example Studio",
  "iconUrl": "https://example.com/icon.jpg",
  "rating": 4.5,
  "ratingCount": 1200,
  "price": 0,
  "currency": "USD",
  "category": "Finance",
  "appUrl": "https://apps.apple.com/us/app/example/id123456789",
  "lookupFound": null
}
```

| Field group | Dataset fields | Notes |
| --- | --- | --- |
| Identity and ranking | `source`, `country`, `position`, `searchTerm`, `searchMatches`, `chart`, `chartCategory`, `detailLevel`, `appId`, `appUrl` | Shows how the app was found |
| Listing | `name`, `developer`, `iconUrl`, `rating`, `ratingCount`, `price`, `currency`, `category` | Fields may be `null`, especially in chart listings |
| Description and media | `description`, `releaseNotes`, `screenshotUrls`, `ipadScreenshotUrls` | Full details only |
| Publisher and updates | `bundleId`, `developerId`, `developerUrl`, `developerWebsite`, `genres`, `version`, `releaseDate`, `updatedAt` | Full details only; individual fields can be missing |
| Pricing and lookup | `formattedPrice`, `lookupFound` | Apple supplies these when available |

`OUTPUT.summary` includes `requestedCount`, `fetchedCount`, `resultCount`, `chargedCount`, `resultEvent`, `missingAppIds`, `duplicateCount`, `stopReason`, and duration. `requestedCount` is an input ceiling, while `resultCount` counts delivered rows. A run can end with `completed`, `no_results`, or `spending_limit`.

### Pricing

| Delivered apps | Quick listings | Full details |
| ---: | ---: | ---: |
| 10 | $0.01 | $0.03 |
| 100 | $0.10 | $0.30 |
| 1,000 | $1.00 | $3.00 |

The result events are **`app-listing-scraped` at $0.001 per delivered app** and **`app-detail-scraped` at $0.003 per delivered app**. An empty or unavailable app has no result-event charge. The standard Actor Start event is $0.00005 per run; Apify platform usage is additional for Standby. The table shows result charges only. Check the [Pricing tab](https://apify.com/apizy/apple-app-store-scraper/pricing) for the current complete price.

### Notes

- Data comes from Apple's public Search, Lookup, and chart feeds. Rankings, availability, and returned fields can change.
- Search and chart results are snapshots for the selected country and time. Apple may return fewer apps than requested.
- Chart listings may lack ratings and prices. Enable full details when those fields matter; Apple can still omit individual fields.
- `country` selects an App Store storefront. It does not translate names, descriptions, or reviews.
- Apple's public endpoints do not provide exact download totals or app revenue estimates. This Actor does not invent them.
- A request with no delivered apps has no Listing or Detail result-event charge. Other applicable Apify charges can still apply.

### More Actors You Might Like

Built by the same Apizy team and backed by our transparent pricing philosophy: you can see which results were delivered, duplicate apps are charged once per batch run, and failed or empty apps have no result charge.

| Actor | What it helps you collect |
| --- | --- |
| [App Store Reviews Scraper](https://apify.com/apizy/apple-app-store-reviews-scraper) | iOS ratings, written reviews, dates, and review text |
| [Google Play Store Scraper](https://apify.com/apizy/google-play-store-scraper) | Android app search results, charts, and full details |
| [Google Play Reviews Scraper](https://apify.com/apizy/google-play-reviews-scraper) | Android reviews and developer replies |
| [YouTube Channel Scraper \[FAST\]](https://apify.com/apizy/youtube-channel-scraper-v2) | Channel stats, engagement, and contact information |

### Get in Touch

Have a question or need a custom scraping workflow? Email **apizy.studio@gmail.com**.

# Actor input Schema

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

Choose Search for keywords, Top Charts for chart/category, or App details for app IDs. Each mode needs its own input fields.

## `keyword` (type: `string`):

One search phrase. Use either Keyword or Keywords.

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

Choose Top Free, Top Paid, or Top Grossing for the selected country and category.

## `app` (type: `string`):

One numeric App Store ID or app URL. Use this or Apps.

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

Up to 100 App Store IDs or URLs. Use this or App Store URL or ID.

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

Two-letter App Store country code such as us, gb, au, or sg. Text is not translated.

## `maxResults` (type: `integer`):

Upper limit per Search keyword or Chart. Search supports up to 200 per keyword, Charts up to 100. Apple may return fewer.

## `keywords` (type: `array`):

Up to 10 search phrases. Duplicate apps are saved once with every keyword and rank retained. Use either this or Keyword.

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

Choose All apps or an App Store category. Category charts use Apple’s genre feed and may return fewer results.

## `fullDetail` (type: `boolean`):

Off: save a compact listing. On: include description, screenshots, version, release notes, and publisher links. Charts also perform an app lookup. Details mode always returns full details.

## Actor input object example

```json
{
  "mode": "search",
  "keyword": "budget planner",
  "chart": "top-free",
  "country": "us",
  "maxResults": 5,
  "category": "all",
  "fullDetail": false
}
```

# Actor output Schema

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

One Dataset item per app.

## `output` (type: `string`):

Requested and actual counts, missing app IDs, and duration.

# 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 = {
    "keyword": "budget planner",
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("apizy/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 = {
    "keyword": "budget planner",
    "maxResults": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("apizy/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 '{
  "keyword": "budget planner",
  "maxResults": 5
}' |
apify call apizy/apple-app-store-scraper --silent --output-dataset

```

## MCP server setup

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