# Apple App Store Apps Scraper (`fetch_cat/apple-app-store-apps-scraper`) Actor

Scrape Apple App Store app search results and app metadata from public App Store data.

- **URL**: https://apify.com/fetch\_cat/apple-app-store-apps-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** SEO tools, Developer tools, E-commerce
- **Stats:** 2 total users, 0 monthly users, 92.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.03 / 1,000 app records

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?

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

## Apple App Store Apps Scraper

Export public Apple App Store app search results and app metadata by keyword or app ID.

Use this actor when you need a repeatable CSV, JSON, Excel, or API export of iOS app details for ASO research, competitor tracking, app-market analysis, product research, or AI-agent workflows.

### At a glance

- **Input:** App Store search terms, direct app IDs or canonical App Store URLs, country, language, and result limit.
- **Output:** Search rank for keyword rows plus app IDs, bundle IDs, app names, developers, genres, pricing, ratings, version data, artwork, screenshots, descriptions, URLs, and scrape time.
- **Country-aware:** Use Apple country and language codes for localized results.
- **Best for:** App Store metadata exports, ASO research, app competitor monitoring, and App Store API alternative workflows.
- **No Apple account required:** Uses public App Store data.

### Ready-to-run examples

Use these saved Store examples as starting points. Open any example to prefill the Actor input, then adjust URLs, keywords, limits, or filters for your own run.

- **[Search Apple App Store apps by country](https://apify.com/fetch_cat/apple-app-store-apps-scraper/examples/apple-app-store-localized-search-uk)**
- **[Map an iOS developer portfolio](https://apify.com/fetch_cat/apple-app-store-apps-scraper/examples/apple-app-store-developer-portfolio)**
- **[Enrich Apple App Store app IDs with metadata](https://apify.com/fetch_cat/apple-app-store-apps-scraper/examples/apple-app-store-app-id-lookup)**
- **[Find iOS apps for an ASO keyword](https://apify.com/fetch_cat/apple-app-store-apps-scraper/examples/apple-app-store-search-aso)**
- **[Apple App Store SaaS Mobile Apps](https://apify.com/fetch_cat/apple-app-store-apps-scraper/examples/apple-app-store-saas-mobile-apps)**
- **[Apple App Store Localized App Research](https://apify.com/fetch_cat/apple-app-store-apps-scraper/examples/apple-app-store-localized-app-research)**
- **[View all ready-to-run examples](https://apify.com/fetch_cat/apple-app-store-apps-scraper/examples)** (39 examples)

### What can it do?

- **Export Apple App Store app metadata:** Save app names, IDs, developers, URLs, descriptions, genres, artwork, screenshots, and release notes.
- **Collect ASO signals:** Capture rating counts, average ratings, current-version ratings, version numbers, and update dates.
- **Research competitors:** Search by category keywords or compare known app IDs.
- **Build app datasets:** Feed clean app records into spreadsheets, dashboards, databases, or enrichment workflows.
- **Use as an App Store API alternative:** Run from the Apify UI, API, schedules, webhooks, or the official Apify MCP server.

### Who is it for?

- **ASO and growth teams** that need repeatable keyword-result positions and localized metadata exports.
- **Product and market researchers** comparing competitors by app ID or canonical App Store URL.
- **Data and automation teams** loading public App Store metadata into a spreadsheet, warehouse, dashboard, or agent workflow.
- **Developers** who need a simple App Store data source behind the Apify API, schedules, webhooks, or MCP.

### Common workflows

- **ASO research:** Export titles, descriptions, genres, ratings, screenshots, and release notes.
- **Competitor monitoring:** Track public metadata for a list of competing app IDs.
- **Market mapping:** Search multiple keywords and compare developers, pricing, and categories.
- **Product research:** Build app lists for niches, features, or target countries.
- **AI-agent analysis:** Let an agent collect app metadata before summarizing positioning or feature patterns.

### Input example

```json
{
  "searchTerms": ["fitness tracker", "habit tracker"],
  "appIds": ["284882215", "https://apps.apple.com/us/app/instagram/id389801252"],
  "country": "us",
  "language": "en",
  "maxItems": 50,
  "includeDeveloperApps": false
}
```

### Output example

```json
{
  "searchTerm": "fitness tracker",
  "searchRank": 1,
  "source": "search",
  "country": "us",
  "language": "en",
  "appId": "1234567890",
  "bundleId": "com.example.app",
  "appName": "Example Fitness Tracker",
  "developer": "Example Developer",
  "developerId": "987654321",
  "primaryGenre": "Health & Fitness",
  "price": 0,
  "formattedPrice": "Free",
  "currency": "USD",
  "averageRating": 4.7,
  "ratingCount": 125000,
  "version": "4.2.1",
  "updatedDate": "2026-06-20T00:00:00.000Z",
  "appStoreUrl": "https://apps.apple.com/us/app/example/id1234567890",
  "scrapedAt": "2026-07-03T10:00:00.000Z"
}
```

### Input configuration

| Setting | JSON key | What to enter |
| --- | --- | --- |
| Search terms | `searchTerms` | App Store keywords or phrases, one per row. |
| App IDs or URLs | `appIds` | Numeric Apple App Store app IDs or canonical `apps.apple.com` listing URLs. URLs are normalized to their numeric `id…` segment. |
| Country | `country` | App Store country code such as `us`, `gb`, `de`, or `fr`. |
| Language | `language` | Language code such as `en`, `de`, `fr`, or `es`. |
| Maximum items | `maxItems` | Maximum app rows to save. |
| Include developer apps | `includeDeveloperApps` | Adds additional apps from matched developers when available. |

### Output fields

| Field group | Fields |
| --- | --- |
| Search context | `searchTerm`, `searchRank`, `inputAppId`, `source`, `country`, `language` |
| App identity | `appId`, `bundleId`, `appName`, `appStoreUrl` |
| Developer | `developer`, `developerId`, `sellerName` |
| Categories | `primaryGenre`, `primaryGenreId`, `genres`, `genreIds` |
| Pricing | `price`, `formattedPrice`, `currency` |
| Ratings | `averageRating`, `ratingCount`, `currentVersionRating`, `currentVersionRatingCount` |
| Version and dates | `version`, `releaseDate`, `updatedDate`, `releaseNotes` |
| Creative assets | `artworkUrl`, `screenshotUrls`, `ipadScreenshotUrls`, `appletvScreenshotUrls` |
| Text and metadata | `description`, `descriptionSnippet`, `minimumOsVersion`, `contentAdvisoryRating`, `languageCodes`, `fileSizeBytes`, `scrapedAt` |

### Pricing

This Actor uses Apify pay-per-event pricing:

- `start` is charged once when a run starts.
- `item` is charged for each app record saved to the dataset.

Rates depend on your Apify plan and any custom agreement. See the live [Apify Pricing tab](https://apify.com/fetch_cat/apple-app-store-apps-scraper/pricing) for the current rates and the cost shown for your account.

### Tips for best results

- Use specific search terms when you need focused app lists.
- Use `appIds` with numeric IDs or canonical App Store URLs when you need stable monitoring of known apps.
- `searchRank` is the one-based position Apple returned for that term; it is `null` for direct lookup and developer portfolio rows.
- Keep country and language consistent if you compare app metadata over time.
- Enable `includeDeveloperApps` only when you want developer portfolio expansion.
- Use the Apple numeric app ID from the App Store URL after `/id`.

### Limits and caveats

- This actor exports public app metadata. It does not scrape App Store reviews; use [Apple App Store Reviews Scraper](https://apify.com/fetch_cat/apple-app-store-reviews-scraper) with the URLs or IDs discovered here when you need review mining.
- Search rank is Apple response order for the selected storefront and term, not a universal or permanent chart ranking.
- Search rankings, app availability, pricing, and metadata can vary by country.
- Some apps may not expose every image, rating, language, or file-size field.
- Apple can change public response fields, so scheduled monitoring should include a small sanity-check run.

### API usage

Set `APIFY_TOKEN` in your environment, then run the Actor with the official client or REST API.

#### Node.js

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/apple-app-store-apps-scraper').call({
  searchTerms: ['fitness tracker'], country: 'us', language: 'en', maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(token=os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/apple-app-store-apps-scraper').call(run_input={
    'appIds': ['https://apps.apple.com/us/app/instagram/id389801252'],
    'country': 'us', 'language': 'en', 'maxItems': 10,
})
for item in client.dataset(run['defaultDatasetId']).list_items().items:
    print(item['appName'], item['appStoreUrl'])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~apple-app-store-apps-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms":["fitness tracker"],"country":"us","language":"en","maxItems":50}'
```

### MCP and AI agents

Add the official Apify MCP server to Claude Code with a focused tool URL:

```bash
claude mcp add --transport http apify-app-store \
  "https://mcp.apify.com/?tools=fetch_cat/apple-app-store-apps-scraper"
```

Equivalent JSON configuration:

```json
{
  "mcpServers": {
    "apify-app-store": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=fetch_cat/apple-app-store-apps-scraper"
    }
  }
}
```

Example prompts: “Search the US App Store for fitness tracker apps and return the first 20 with `searchRank`.” Or: “Look up these App Store URLs and compare their version, ratings, and primary genre.”

Agent-friendly inputs are `searchTerms`, `appIds`, `country`, `language`, `maxItems`, and `includeDeveloperApps`.

### FAQ

**Can I export App Store data to CSV or Excel?**\
Yes. Download the Apify dataset as CSV, Excel, JSON, XML, RSS, or through the Dataset API.

**Can this scrape reviews?**\
No. Use the related Apple App Store Reviews actor for review text.

**Can I scrape multiple countries in one run?**\
This actor accepts one country per run. Create separate runs or tasks for different countries.

**Is this an official Apple API?**\
No. It exports public App Store data through Apify.

### Related actors

- [Apple App Store Reviews Scraper](https://apify.com/fetch_cat/apple-app-store-reviews-scraper)
- [Google Play Apps Scraper](https://apify.com/fetch_cat/google-play-apps-scraper)
- [Google Play Reviews Scraper](https://apify.com/fetch_cat/google-play-reviews-scraper)
- [Shopify App Store Scraper](https://apify.com/fetch_cat/shopify-app-store-scraper)
- [Shopify App Reviews Scraper](https://apify.com/fetch_cat/shopify-app-reviews-scraper)

### Support

If a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.

Please include the Apify run ID or run URL, input JSON, one example public URL, query, or input item, what you expected, and what the dataset returned. Small reproducible inputs make parsing or site-layout issues much faster to fix.

### Changelog

#### 0.2

- Clarified input settings, output fields, pricing, API usage, and App Store metadata limits.

#### 0.1

- Initial public release.

### Privacy and data handling

This Actor runs with Apify limited permissions and only processes data needed for the documented run. It uses the inputs you provide and the public records needed to produce the documented dataset to produce the output dataset and sends requests to public Apple App Store Apps pages/endpoints; results are stored in Apify run storage for your account. FetchCat does not use your inputs or outputs for advertising, does not use them for model training, and does not retain them outside the Apify run except for transient support debugging when you explicitly share run details. You are responsible for using the Actor lawfully, respecting the target site's terms, and avoiding unnecessary personal or sensitive data in inputs.

# Actor input Schema

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

Keywords to search in the Apple App Store, such as competitor names, categories, or product terms.

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

Apple numeric app IDs or canonical apps.apple.com listing URLs to look up directly. URLs are normalized to their id… segment; for example id284882215.

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

Optional numeric iTunes developer IDs to look up directly. These return the developer's public software portfolio.

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

Two-letter App Store country code used for localized availability, price, ratings, and currency.

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

Apple API language code, for example en\_us, de\_de, or fr\_fr.

## `maxItems` (type: `integer`):

Maximum number of app records to save across searches, app ID lookups, and optional developer portfolio enrichment.

## `includeDeveloperApps` (type: `boolean`):

When app IDs are supplied, also fetch other public apps from the same developer portfolios until the maximum is reached.

## `resumeSearchTerms` (type: `array`):

Optional remaining search terms from RUN\_CHECKPOINT. Leave empty for normal runs.

## `resumeAppIds` (type: `array`):

Optional remaining app IDs from RUN\_CHECKPOINT. Leave empty for normal runs.

## Actor input object example

```json
{
  "searchTerms": [
    "todo app",
    "fitness tracker"
  ],
  "appIds": [
    "284882215",
    "310633997"
  ],
  "country": "US",
  "language": "en_us",
  "maxItems": 20,
  "includeDeveloperApps": false
}
```

# Actor output Schema

## `overview` (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": [
        "todo app",
        "fitness tracker"
    ],
    "appIds": [
        "284882215",
        "310633997"
    ],
    "country": "US",
    "language": "en_us",
    "maxItems": 20,
    "includeDeveloperApps": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/apple-app-store-apps-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": [
        "todo app",
        "fitness tracker",
    ],
    "appIds": [
        "284882215",
        "310633997",
    ],
    "country": "US",
    "language": "en_us",
    "maxItems": 20,
    "includeDeveloperApps": False,
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/apple-app-store-apps-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": [
    "todo app",
    "fitness tracker"
  ],
  "appIds": [
    "284882215",
    "310633997"
  ],
  "country": "US",
  "language": "en_us",
  "maxItems": 20,
  "includeDeveloperApps": false
}' |
apify call fetch_cat/apple-app-store-apps-scraper --silent --output-dataset

```

## MCP server setup

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