# App Store App Data API (`norespi/app-store-apps`) Actor

Gets Apple App Store app data by app id, bundle id, developer or top chart: rating, rating count, price, version, release dates, genre, size, languages, icon. Any country. Apple's official lookup API, no login. $1.50 per 1,000 apps.

- **URL**: https://apify.com/norespi/app-store-apps.md
- **Developed by:** [Gabriel Jossic](https://apify.com/norespi) (community)
- **Categories:** Marketing, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 apps

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 App Data API** that returns the public store facts of any iPhone, iPad or Mac app: **rating, rating count, price, version, release and update dates, genre, age rating, size, languages, icon and screenshots**, one clean row per app. Give it **App Store ids**, **bundle ids**, **App Store URLs**, a **developer**, or a **top chart** (top free / top paid), pick a **country**, and get the data back in seconds.

Export to **JSON, CSV, Excel or Google Sheets**, call it from the **Apify API**, **schedule** it daily to track ratings, prices and updates, or let an **AI agent** use it through MCP.

No login, no Apple account, no API key, no browser. The Actor calls Apple's documented **iTunes Lookup API** (`itunes.apple.com/lookup`) and Apple's **RSS marketing feeds** for top charts (`rss.marketingtools.apple.com`), both allowed by their robots.txt. Up to 100 apps are fetched per call. The prefilled input (6 apps) finishes in about 4 seconds.

### What data does the App Store App Data API return?

| Field | Example |
|---|---|
| `appId`, `bundleId`, `title` | `553834731`, `com.midasplayer.apps.candycrushsaga`, Candy Crush Saga |
| `appStoreUrl` | App Store link for the country you chose |
| `developer`, `sellerName`, `developerId`, `developerUrl` | King / King.com Limited, Apple's developer id and App Store developer page |
| `kind` | `software` (iPhone/iPad) or `mac-software` |
| `primaryGenre`, `genres` | Games / Games, Entertainment, Puzzle, Casual |
| `free`, `price`, `currency`, `formattedPrice` | `false`, `6.99`, `USD`, `$6.99` (local price and currency per country) |
| `averageUserRating`, `userRatingCount` | 4.704 / 4,023,753 ratings |
| `averageUserRatingForCurrentVersion`, `userRatingCountForCurrentVersion` | Same for the current version, when Apple publishes it |
| `version`, `releaseDate`, `currentVersionReleaseDate` | `1.338.0.2`, first release and last update (ISO 8601) |
| `releaseNotesExcerpt` | First 300 characters of "What's New", contact details removed |
| `descriptionExcerpt` | First 300 characters of the description, contact details removed |
| `contentAdvisoryRating`, `advisories` | `12+`, e.g. Infrequent/Mild Cartoon or Fantasy Violence |
| `minimumOsVersion`, `fileSizeBytes` | `15.0`, `316569600` |
| `languages` | Language codes the app supports (`EN`, `FR`, `JA`…) |
| `supportedDevicesCount` | Number of Apple device models supported |
| `iconUrl`, `screenshotUrls` | 512 px icon, first 3 screenshot links |
| `chart`, `chartPosition` | `top-free`, `3` for apps that came from a top chart, else `null` |
| `country`, `scrapedAt` | Store country used and time of the read |

Fields Apple does not publish for an app are `null`. Nothing is guessed.

### How to use the App Store App Data API

1. Click **Try for free**.
2. Paste **App Store ids**, **bundle ids** or **App Store URLs** into **Apps**, and/or a developer id or URL into **Developers**, and/or a chart into **Top charts**. Set the **country**.
3. Click **Start**. Download the rows from the **Output** tab as JSON, CSV or Excel, or fetch them through the API.

Input example:

```json
{
  "appIds": ["310633997", "com.duolingo.DuolingoMobile", "https://apps.apple.com/us/app/chatgpt/id6448311069"],
  "developerIds": ["https://apps.apple.com/us/developer/meta-platforms-inc/id284882218"],
  "topCharts": [{ "country": "gb", "chart": "top-paid", "limit": 25 }, "us/top-free/10"],
  "country": "us",
  "maxItems": 200
}
```

#### Input fields

| Field | Default | What it does |
|---|---|---|
| `appIds` | 6 popular apps (prefilled) | Numeric ids (`310633997` or `id310633997`), bundle ids (`net.whatsapp.WhatsApp`) or App Store URLs, one per line. A developer URL pasted here is treated as a developer. |
| `developerIds` | none | Numeric developer id (`284882218`) or App Store developer URL. Returns all of that developer's apps in the chosen country (up to 200). |
| `topCharts` | none | `{"country": "us", "chart": "top-free", "limit": 25}` or `"us/top-free/25"`. `chart` is `top-free` or `top-paid`, `limit` 1 to 100. Each charted app is then looked up for full details and gets its `chartPosition`. |
| `country` | `us` | App Store country: changes price, currency, ratings, text language and availability. The country inside pasted URLs is ignored. |
| `maxItems` | `100` (prefill 10) | Maximum apps saved. You pay per app saved. |

### Output example

```json
{
  "appId": "553834731",
  "bundleId": "com.midasplayer.apps.candycrushsaga",
  "title": "Candy Crush Saga",
  "developer": "King",
  "sellerName": "King.com Limited",
  "developerId": "526656015",
  "developerUrl": "https://apps.apple.com/us/developer/king/id526656015",
  "kind": "software",
  "primaryGenre": "Games",
  "genres": ["Games", "Entertainment", "Puzzle", "Casual"],
  "free": true,
  "price": 0,
  "currency": "USD",
  "formattedPrice": "Free",
  "averageUserRating": 4.704,
  "userRatingCount": 4023753,
  "averageUserRatingForCurrentVersion": 4.704,
  "userRatingCountForCurrentVersion": 4023753,
  "version": "1.338.0.2",
  "releaseDate": "2012-11-14T14:41:32Z",
  "currentVersionReleaseDate": "2026-10-06T05:22:54Z",
  "releaseNotesExcerpt": "We hope you’re having fun playing Candy Crush Saga! We update the game every week with sweet new features, exciting levels, and important bug fixes to keep everything running smoothly. Don't forget to download the latest version for the best experience! New to the game? Don’t be shy, join the fun!",
  "descriptionExcerpt": "Explore a world full of delicious match-3 puzzles and endless fun! Blast through thousands of challenging levels in this timeless puzzle game from King. Match candies, conquer jelly, toffees, and jam, and uncover sweet surprises in every puzzle. Classic Match-3 Gameplay with Fresh Twists…",
  "contentAdvisoryRating": "12+",
  "advisories": [],
  "minimumOsVersion": "15.0",
  "fileSizeBytes": 316569600,
  "languages": ["AR", "CA", "HR", "CS", "DA", "NL", "EN", "FI", "FR", "DE", "HU", "ID", "IT", "JA", "KO", "MS", "NB", "PL", "PT", "RO", "RU", "ZH", "SK", "ES", "SV", "TH", "TR", "VI"],
  "supportedDevicesCount": 130,
  "iconUrl": "https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/72/83/04/728304ea-32e2-1979-e845-e5f25dd731f6/AppIcon-0-0-1x_U007emarketing-0-8-0-85-220.png/512x512bb.jpg",
  "screenshotUrls": [
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/ed/54/54/ed5454a8-609c-2299-3f70-71266afcd62c/e6a5aa2d-db24-4004-b409-d0ca33f961f0_v4-candies_478284_423160_CCS_Creative_Results_First_Screenshots_Nov_23_sta_ios-6.7_1290x2796_4.jpg/320x480bb.jpg",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/1b/42/bd/1b42bd4f-d144-246a-3a4b-91e3316c51c0/26184b20-fd91-4296-8a58-d32d7134e1b4_563552_CCS_Taglines_Banner_Route_4_Resize_Screenshots_June_24_sta_ios-6.7_1290x2796_1.jpg/320x480bb.jpg",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/c2/7d/fe/c27dfe08-476f-d179-b763-3e82e9c174ae/97738c29-af03-4b0e-8790-db5b9fbdc62b_563552_CCS_Taglines_Banner_Route_4_Resize_Screenshots_June_24_sta_ios-6.7_1290x2796_2.jpg/320x480bb.jpg"
  ],
  "appStoreUrl": "https://apps.apple.com/us/app/candy-crush-saga/id553834731",
  "chart": null,
  "chartPosition": null,
  "country": "us",
  "scrapedAt": "2026-10-13T03:40:00.976Z"
}
```

A real record from a run on 2026-10-13. A `RUN_SUMMARY` record in the key-value store lists apps saved, ids and bundle ids not found in that country, inputs that were not valid, each developer and chart read, and any URL skipped because of robots.txt.

### How much does it cost to get App Store app data?

**$1.50 per 1,000 apps.** You pay only for apps saved to the dataset. Apps that are not found cost nothing, and there is no start fee.

| You get | You pay |
|---|---|
| 6 apps (prefilled input) | $0.009 |
| 100 apps (e.g. the US top 100 free) | $0.15 |
| 1,000 apps | $1.50 |
| 10,000 apps | $15 |

Set `maxItems` to cap a run. Apify's free plan credit covers a few thousand apps a month.

### How to track App Store apps every day

Create a **schedule** in Apify (e.g. every morning) with your competitor apps, or with `{"chart": "top-free", "limit": 100}` for your market. Each run gives today's rating, rating count, price, version and last update, plus chart positions; compare runs to see who shipped an update, changed price or climbed the chart. Send the rows to **Google Sheets, Slack, Zapier, Make, n8n** or a **webhook** with Apify integrations.

### Use the App Store App Data API with AI agents (MCP)

Claude, Cursor and other MCP clients can call this Actor through the official Apify MCP server. Add `NORESPI/app-store-apps` to your Apify MCP configuration, then ask things like "compare the rating, price and last update of Duolingo, Babbel and Busuu on the French App Store" or "what are today's top 25 paid apps in the UK and what do they cost?".

### Use cases

- **Competitor tracking (ASO)**: rating, rating count, version and update dates of your competitors, every day.
- **Chart monitoring**: who is in the top free / top paid 100 of each country today, with full details.
- **Pricing research**: local price and currency of paid apps across countries.
- **App directories and comparison sites**: fresh title, icon, genre, rating, price and screenshots per country.
- **Publisher research**: a developer's whole App Store catalogue in one call.
- **Market and investor screening**: rating volume as a proxy for an app's user base.

### Limits (stated up front)

- **No keyword search.** Apple's robots.txt disallows `itunes.apple.com/search`, so you must give ids, bundle ids, URLs, developers or charts.
- **No user reviews.** Apple's customer review feed (`itunes.apple.com/<country>/rss/customerreviews/…`) is disallowed by robots.txt. You get rating averages and counts, not review text.
- **No download counts and no in-app purchase list.** Apple does not publish them in the lookup API.
- **Two charts only**: `top-free` and `top-paid`, up to 100 apps each, as published by Apple's RSS marketing feed. No top-grossing, no per-genre charts.
- **One country per run** for `appIds` and `developerIds` (the `country` field). Each top chart uses its own country. An app not sold in that country is reported as not found.
- **Developer lookups return up to 200 apps** per developer.
- Apple caps its lookup API at roughly 20 calls a minute. The Actor makes one call at a time, at least 3 seconds apart, with 100 apps per call, so 1,000 app ids take about 30 seconds. On a 403 or repeated 429 it stops instead of pushing harder. It does not use proxies to get around limits.

### Privacy

App-level store facts only. The **seller website** that Apple's API returns is **not output**. The description and release-notes excerpts have **e-mails, phone numbers, links and @handles removed**. No user reviews and no reviewer names. `developer` and `sellerName` are the publisher names exactly as Apple displays them on the App Store; for apps published by an individual, that is the name the individual chose to publish under.

### FAQ

#### Do I need an Apple account or API key?

No. Apple's lookup API and RSS feeds are public.

#### Can I search the App Store by keyword?

No. Apple's robots.txt disallows the search endpoint and this Actor respects it. Give ids, bundle ids, URLs, developers or a top chart.

#### How do I find an app's id?

It is the number after `id` in the App Store URL: `https://apps.apple.com/us/app/whatsapp-messenger/id310633997` → `310633997`. You can paste the whole URL.

#### Can I get prices in another currency?

Yes. Set `country` (e.g. `gb`, `de`, `jp`): Apple returns the local price, currency and store text for that country.

#### Does it return Mac apps?

Yes, when you give a Mac app's id or bundle id, or a developer that publishes Mac apps (`kind` is `mac-software`).

#### Can I export App Store data to CSV, Excel or Google Sheets?

Yes, from the Output tab, the API, or the Google Sheets integration.

#### Is this Actor affiliated with Apple or the App Store?

No, not affiliated with Apple Inc. It is an independent tool that reads Apple's public lookup API and RSS feeds. App Store is a trademark of Apple Inc.

Questions, bugs or a feature you need: open an issue in the **Issues** tab.

# Actor input Schema

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

Numeric App Store ids (310633997 or id310633997), bundle ids (com.duolingo.DuolingoMobile) or App Store URLs (https://apps.apple.com/us/app/whatsapp-messenger/id310633997). One app per line.

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

Numeric developer (artist) ids such as 284882218, or App Store developer URLs such as https://apps.apple.com/us/developer/meta-platforms-inc/id284882218. Returns every app of that developer in the chosen country (up to 200 per developer).

## `topCharts` (type: `array`):

Apple top charts to list, then enrich with full app details. Each entry is an object {"country": "us", "chart": "top-free", "limit": 25} or a short string like "us/top-paid/50". chart is top-free or top-paid, limit 1 to 100 (default 25), country defaults to the Country field. Each app gets its chart position.

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

Two-letter App Store country code, e.g. us, gb, fr, de, jp, br. Changes price, currency, rating, text language and availability. The country part of pasted URLs is ignored: this field decides.

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

Maximum number of apps saved to the dataset (you pay per app saved).

## Actor input object example

```json
{
  "appIds": [
    "310633997",
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "com.duolingo.DuolingoMobile",
    "479516143",
    "6448311069",
    "553834731"
  ],
  "country": "us",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (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 = {
    "appIds": [
        "310633997",
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
        "com.duolingo.DuolingoMobile",
        "479516143",
        "6448311069",
        "553834731"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("norespi/app-store-apps").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 = {
    "appIds": [
        "310633997",
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
        "com.duolingo.DuolingoMobile",
        "479516143",
        "6448311069",
        "553834731",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("norespi/app-store-apps").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 '{
  "appIds": [
    "310633997",
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    "com.duolingo.DuolingoMobile",
    "479516143",
    "6448311069",
    "553834731"
  ],
  "maxItems": 10
}' |
apify call norespi/app-store-apps --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,norespi/app-store-apps"
        }
    }
}
```

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/DLEJtX2dVJY60Klm1/builds/8VIXPJpO9yoxlCaqJ/openapi.json
