# App Store Scraper — App Data, Search & Developer Catalogs (`actorworks/app-store-scraper`) Actor

Scrape Apple App Store app metadata via Apple's official public APIs: search by keyword, look up by app ID, or pull a developer's full catalog. Ratings, pricing, versions, screenshots, and descriptions as clean JSON.

- **URL**: https://apify.com/actorworks/app-store-scraper.md
- **Developed by:** [Adam C](https://apify.com/actorworks) (community)
- **Categories:** E-commerce, Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## App Store Scraper — App Data, Search & Developer Catalogs

**Turn App Store searches, app IDs, or developer catalogs into clean structured JSON.** Ratings, review counts, pricing, categories, version history, screenshots, supported devices, and full descriptions — pulled from Apple's own official public APIs across any country storefront.

| App | Developer | Category | Price | Rating | Ratings | Updated |
|---|---|---|---|---|---|---|
| Notion: Notes, Tasks, AI | Notion Labs | Productivity | Free | 4.78 | 89,887 | 2026-08-19 |

### Why this scraper

- ✅ **Apple's official public APIs** — the iTunes Search and Lookup services, not scraped HTML: complete, fast, and stable
- ✅ **Three ways in** — keyword search, direct app-ID lookup (up to 100 per call), or a developer's entire catalog
- ✅ **Any storefront** — ratings, prices, and availability differ by country; pass `us`, `gb`, `de`, `jp`, and so on
- ✅ **No proxies, no keys, no rate-limit pain** — clean public endpoints
- ✅ **Automated health tests** — the pipeline is exercised continuously; reported issues are treated as top priority

### What you get

```json
{
  "id": "1232780281",
  "appId": 1232780281,
  "bundleId": "notion.id",
  "name": "Notion: Notes, Tasks, AI",
  "sellerName": "Notion Labs, Incorporated",
  "country": "US",
  "url": "https://apps.apple.com/us/app/notion-notes-tasks-ai/id1232780281",
  "formattedPrice": "Free",
  "primaryGenre": "Productivity",
  "genres": ["Productivity", "Business"],
  "averageUserRating": 4.77675,
  "userRatingCount": 89887,
  "version": "3.24.0",
  "currentVersionReleaseDate": "2026-08-19T10:12:04Z",
  "releaseNotes": "…",
  "description": "…",
  "minimumOsVersion": "16.0",
  "fileSizeBytes": 184320000,
  "languages": ["EN", "FR", "DE", "JA"],
  "icon": "https://is1-ssl.mzstatic.com/…/512x512bb.jpg",
  "screenshots": ["…"]
}
```

### Input

```json
{
  "searchTerms": ["habit tracker", "invoicing"],
  "appIds": ["1232780281"],
  "developerIds": ["281956209"],
  "country": "us",
  "maxAppsPerTerm": 100
}
```

Provide any combination — results are deduplicated across sources.

### Use cases

- **App market research** — map a category's competitors with ratings, pricing, and update cadence
- **ASO & keyword analysis** — see exactly which apps rank for the terms you care about, per storefront
- **Competitor monitoring** — schedule runs and diff version numbers, prices, and rating counts over time
- **Portfolio & investment research** — track a developer's entire catalog and its traction
- **AI agents & datasets** — clean JSON via API and MCP

### Pricing

Pay per result: **about $1 per 1,000 apps** ($0.001 per app + a fractional start fee), cheaper on paid Apify plans. No subscription.

### Scope & data ethics

App and developer-level metadata only, from Apple's official public endpoints. **User reviews are deliberately out of scope** — they are user-generated personal content, and this actor is built to stay on the company-data side of that line.

### FAQ

**Which country storefront should I use?** Ratings and prices are storefront-specific; `us` is the default and largest. Run several countries to compare.

**Can I get an app's full update history?** Apple exposes the current version, its release date, and release notes — plus the original release date.

**How many apps can one run return?** Up to 1,000 per search term (Apple pages 200 at a time), any number of terms, and 100 app IDs per lookup batch.

**Google Play too?** On the roadmap — open an issue to help prioritise it.

### More data actors from ActorWorks

- [ATS Jobs Scraper — Greenhouse, Lever, Ashby, Workday & More](https://apify.com/actorworks/ats-jobs-scraper)
- [Google Ads Transparency Scraper](https://apify.com/actorworks/google-ads-transparency-scraper)
- [ATS Detector — Find Any Company's Job Board](https://apify.com/actorworks/ats-detector)

*Apple, App Store, and all app names are trademarks of their respective owners; this is an independent tool, not affiliated with Apple.*

# Actor input Schema

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

Keywords to search the App Store for (e.g. "habit tracker", "invoicing").

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

Specific App Store numeric IDs to look up (the digits in an app's App Store URL).

## `developerIds` (type: `array`):

Developer/artist IDs — returns that developer's full app catalog.

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

Two-letter storefront code (us, gb, de, fr, jp…). Ratings and pricing are storefront-specific.

## `maxAppsPerTerm` (type: `integer`):

Cap on apps returned per search term or developer.

## Actor input object example

```json
{
  "searchTerms": [
    "habit tracker"
  ],
  "appIds": [],
  "developerIds": [],
  "country": "us",
  "maxAppsPerTerm": 100
}
```

# Actor output Schema

## `apps` (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": [
        "habit tracker"
    ],
    "appIds": [],
    "developerIds": []
};

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

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

```

## MCP server setup

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