# App Store Scraper - Apple iOS Apps, Reviews & Ratings (`flash_scraper/app-store-scraper`) Actor

Search the Apple App Store by keyword and country storefront and export clean rows: app name, developer, category, price, average rating, rating count, version, release date, icon, description — plus optional recent reviews. For ASO, competitor tracking & market research. No API key.

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

## Pricing

from $2.00 / 1,000 results

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/platform/actors/running/actors-in-store#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 — Apps, Ratings & Reviews by keyword

**This App Store scraper turns Apple's App Store into clean, spreadsheet-ready app data** — search by **keyword** in any **country storefront** and get one flat row per app: name, developer, bundle id, category, price, average rating, rating count, content rating, version, release date, App Store URL, icon, and a trimmed description. Optionally attach the **most-recent customer reviews** to every app. Straight from the official Apple **iTunes Search API**, no API key, no anti-bot, no proxies.

Built for **ASO specialists, indie & studio developers, product managers, and market researchers** who need App Store catalog data and review signals as rows they can sort, filter, and export to CSV, JSON, or Excel.

***

### What does it do?

You give it one or more **search terms** (e.g. `photo editor`, `habit tracker`, `budget`) and a **country** storefront. It queries Apple's public iTunes Search API for each term, merges and **dedupes** the results by app, and flattens every record into a clean row. Turn **Include reviews** on and it also pulls each app's most-recent reviews (rating, title, body, author, app version) from Apple's public RSS review feed and attaches them as a `reviews` array on the app row — so one dataset gives you both the catalog and the voice-of-customer signal.

Search either the **iPhone / universal** catalog (`software`) or the **iPad** catalog (`iPadSoftware`).

***

### Why use it / who's it for

- **ASO & keyword research** — see exactly which apps rank for a keyword in a storefront, with their ratings and rating volume, to size the competition and find gaps.
- **Competitor tracking** — monitor a rival's version, release cadence, price, rating trajectory, and what users are actually saying in fresh reviews.
- **Market & category research** — pull a whole keyword's worth of apps to map pricing models (free vs paid), category mix, and rating distribution.
- **Indie & studio developers** — benchmark your app against the top results for your keywords, storefront by storefront.
- **Review mining** — collect recent reviews across a set of apps for sentiment, feature requests, and complaint themes.
- **No API key, no anti-bot, no proxies** — public Apple data, runs fine on datacenter IPs.

***

### How to use it

1. Enter one or more **search terms**.
2. Set the **country** storefront (default `us`) and the **device / app type** (iPhone/universal or iPad).
3. Set **Max apps** (up to 500 across all terms).
4. Optionally turn on **Include reviews** and set **Reviews per app**.
5. Run → get a clean, deduped app list, then export to CSV, JSON, or Excel.

#### Input

| Field | Type | Description |
|---|---|---|
| `searchTerms` | array | One or more keywords; results are merged and deduped. |
| `chart` | select | **Niche research:** `top_free`, `top_paid` or `top_grossing` — pull a ranked App Store chart instead of (or alongside) a keyword search. Adds `chart_rank` to each row. |
| `genre` | select | Which category the chart is read from — `finance`, `business`, `health_fitness`, `games`, `shopping`, … or `all`. Default `all`. |
| `country` | string | Two-letter storefront code (e.g. `us`, `gb`, `de`). Default `us`. |
| `entity` | string | `software` (iPhone/universal) or `iPadSoftware` (iPad). |
| `maxItems` | integer | Max apps across all terms (1–500). Default `100`. |
| `includeReviews` | boolean | Attach a `reviews` array to each app. Default `false`. |
| `reviewsPerApp` | integer | Max recent reviews per app (1–50). Default `20`. |

##### Niche research: read a category's top chart

No keywords needed — pick a chart and a category, and you get the ranked leaders with
price, rating, rating count and publisher, so you can size up a niche before you build for it:

```json
{ "chart": "top_grossing", "genre": "finance", "country": "us", "maxItems": 50 }
```

`top_grossing` is the interesting one for revenue research — it ranks by money made, not downloads.

When you pass **both** a chart and `searchTerms`, the two sources are round-robined so
neither can eat your whole `maxItems` budget.

Only `searchTerms` is required — every other field has a sensible default.

**Example input:**

```json
{
  "searchTerms": ["photo editor", "video editor"],
  "country": "us",
  "entity": "software",
  "maxItems": 100,
  "includeReviews": true,
  "reviewsPerApp": 20
}
```

#### Output fields

`chart_rank` is the app's position in the requested chart (`1` = top), and is `null` for rows
that came from a keyword search.

`app_name`, `developer`, `bundle_id`, `category`, `categories`, `price`, `formatted_price`, `currency`, `is_free`, `avg_rating`, `rating_count`, `content_rating`, `version`, `release_date`, `current_version_release_date`, `min_os_version`, `app_url`, `developer_url`, `icon_url`, `description` (trimmed to ~500 chars), and `track_id`. When reviews are on, each row also has a `reviews` array (`rating`, `title`, `body`, `author`, `version`, `updated`) and `review_count_fetched`.

#### JSON output sample

```json
{
  "track_id": 587366035,
  "app_name": "Picsart AI Photo Editor, Video",
  "developer": "PicsArt, Inc.",
  "bundle_id": "com.picsart.studio",
  "category": "Photo & Video",
  "categories": ["Photo & Video", "Graphics & Design"],
  "price": 0.0,
  "formatted_price": "Free",
  "currency": "USD",
  "is_free": true,
  "avg_rating": 4.67,
  "rating_count": 1192940,
  "content_rating": "12+",
  "version": "30.2.3",
  "release_date": "2013-01-02T22:14:40Z",
  "current_version_release_date": "2026-07-03T04:32:53Z",
  "min_os_version": "15.0",
  "app_url": "https://apps.apple.com/us/app/picsart-ai-photo-editor-video/id587366035",
  "developer_url": "https://apps.apple.com/us/developer/picsart-inc/id587366038",
  "icon_url": "https://is1-ssl.mzstatic.com/image/thumb/…/512x512bb.jpg",
  "description": "Ignite your creative potential with Picsart — the all-in-one AI photo editor…",
  "reviews": [
    { "rating": 5, "title": "Love it", "body": "Best editor on iOS.", "author": "creator99", "version": "30.2.3", "updated": "2026-07-01T06:53:19-07:00" }
  ],
  "review_count_fetched": 20
}
```

Results render as a clean, sortable table on the Output tab and export to CSV, JSON, or Excel.

#### Example output

A real sample from a live run (`photo editor`, `us`):

| App | Developer | Category | Price | Rating | # Ratings |
|---|---|---|---|---|---|
| Picsart AI Photo Editor, Video | PicsArt, Inc. | Photo & Video | Free | 4.67 | 1,192,940 |
| Facetune: AI Photo & Video Edit | Lightricks Ltd. | Photo & Video | Free | 4.77 | 1,120,000 |
| PhotoRoom AI Photo Editor | PhotoRoom | Photo & Video | Free | 4.80 | 380,000 |

***

### Use with AI agents & automation

Run from the Apify **MCP** server so AI agents (Claude, ChatGPT, Cursor) can pull App Store data as a tool call, schedule runs via **Make**, **n8n**, or **Zapier** to track competitors over time, or sync the dataset to **Google Sheets**. Clean flat JSON drops into research pipelines with no glue code.

***

### Pricing

**Pay-per-event — charged per app row delivered.** The source is Apple's free public iTunes Search API (no proxy or third-party cost), so you're charged only for apps actually returned — no subscription, no charge for empty or failed runs. See the Apify Store page for the current per-result price.

***

### FAQ

**Where does the data come from?** The official **Apple iTunes Search API** and Apple's public **customer-reviews RSS feed** — the same endpoints that power App Store search. Public data, no API key.

**How fresh is it?** Live at run time. Ratings, versions, and prices reflect the App Store storefront at the moment of the run. Re-run periodically to track changes.

**Why do rating counts / prices differ by country?** They're storefront-specific. Set `country` to the market you care about, and run per-country for a global picture.

**How many apps can I get per keyword?** Apple's search returns up to ~200 results per term. Add more `searchTerms` (and long-tail variants) to widen coverage, up to your `maxItems`.

**Why do some apps have no reviews?** Apple's public review feed only exposes recent reviews per storefront, and some apps (or storefronts) have none — those rows come back with an empty `reviews` array. Review fetching never fails the run.

**Is this legal?** It reads **publicly available Apple App Store data** via Apple's own public endpoints — no login, no paywall bypass. Follow Apple's terms and applicable laws when you use the data.

**Can I export to CSV or Google Sheets?** Yes — CSV, JSON, or Excel from the Output tab, or sync to Google Sheets via Make, n8n, or Zapier.

***

### Other Flash Scrape scrapers

- [Shopify Store Scraper](https://apify.com/flash_scraper/shopify-store-scraper) — products & store data from any Shopify shop
- [Google SERP Scraper](https://apify.com/flash_scraper/google-serp-scraper) — Google search results as structured rows

Questions or a field you need added? Open an issue on the Actor's **Issues** tab — happy to help.

# Actor input Schema

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

One or more keywords to search the App Store for, e.g. 'photo editor', 'habit tracker', 'budget'. Each term is searched separately and results are merged & deduped.

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

Pull a ranked App Store top chart instead of (or alongside) a keyword search — the fastest way to see who is winning a niche and what they charge. Combine with 'Chart category' below.

## `genre` (type: `string`):

Which App Store category the top chart is read from. Only applies when a chart is selected above.

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

Two-letter country code for the App Store storefront to search, e.g. 'us', 'gb', 'de', 'fr', 'ma'. Prices and availability are storefront-specific.

## `entity` (type: `string`):

Which App Store catalog to search: iPhone/universal apps (software) or iPad apps (iPadSoftware).

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

Maximum number of apps to return across all search terms (the iTunes Search API returns up to 200 per term).

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

Also fetch recent customer reviews for each app (adds a 'reviews' array to every app row). Slower, and reviews are only available for apps that have them in the selected storefront.

## `reviewsPerApp` (type: `integer`):

Maximum recent reviews to attach to each app when 'Include reviews' is on (Apple's public review feed returns up to ~50 most-recent per storefront).

## Actor input object example

```json
{
  "searchTerms": [
    "photo editor"
  ],
  "chart": "none",
  "genre": "all",
  "country": "us",
  "entity": "software",
  "maxItems": 50,
  "includeReviews": false,
  "reviewsPerApp": 20
}
```

# 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 = {
    "searchTerms": [
        "photo editor"
    ],
    "country": "us",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("flash_scraper/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": ["photo editor"],
    "country": "us",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("flash_scraper/app-store-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "photo editor"
  ],
  "country": "us",
  "maxItems": 50
}' |
apify call flash_scraper/app-store-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=flash_scraper/app-store-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/D3ASOmCfbuUetjJny/builds/e7hHO3dWSurGHW7Ho/openapi.json
