# Apple App Store Reviews Scraper & App Details (No Login) (`steadyline/app-store-reviews`) Actor

Scrape Apple App Store reviews and app details by app ID, URL or bundle ID in any country storefront: rating, rating histogram, version, release notes, price, developer and screenshots, plus up to ~500 recent reviews per country. Public Apple endpoints only. By Steadyline Data.

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

## Pricing

from $1.00 / 1,000 app details

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 Reviews & App Details (Apple, no login)

Get **Apple App Store app details** and **customer reviews** for any app, in any country storefront. No Apple ID, no login and no private APIs: the Actor uses only Apple's public endpoints.

- **iTunes Lookup API**: name, developer, price, genre, average rating and count (overall and current version), version, release notes, release dates, description, content rating, size, languages, screenshots and icon.
- **Public App Store product page**: the **star histogram** (5★…1★ counts) and the featured reviews shown on the page, including developer responses when present.
- **Public customer-reviews RSS feed**: recent and most-helpful reviews (title, text, stars, user, app version, date, votes).

Input apps as App Store URLs, numeric IDs or bundle IDs, and pick one or more country codes.

### Use cases

- **Review monitoring:** pull new reviews for your app (or competitors') on a schedule, filtered by rating and date.
- **Product research:** feed low-star reviews to an LLM to cluster complaints and feature requests.
- **ASO and market research:** ratings, histograms, versions and release notes across countries.
- **Agency prospecting:** find apps with falling ratings, then profile the publisher's website.
- **Dashboards:** push reviews to Google Sheets, Slack or a BI tool via Zapier/Make/n8n.

### About review coverage (please read)

Through public endpoints, Apple exposes at most about **500 recent plus 500 most-helpful reviews per app per storefront**. The RSS feed also has **holes**: some pages come back empty at random. The Actor handles this. It never stops at an empty page, retries several URL spellings and formats (JSON and XML), reads both sort orders to fill up to your limit, adds the product-page reviews, and de-duplicates by review ID. The run log shows coverage per app (for example `rss pages with data 7/10`). **In our tests in October 2026, Apple's feed returned only about 50–60 reviews per app per storefront in a single run (one or two of 20 pages answered).** If you need volume, run it on a daily schedule across several storefronts; reviews accumulate and stay de-duplicated by ID on your side. You only pay for the reviews you actually get.

To track reviews over time, schedule the Actor daily with `reviewsSince` set.

### Input

```json
{
  "apps": ["https://apps.apple.com/us/app/snapchat/id447188370", "389801252"],
  "countries": ["us", "gb"],
  "maxReviewsPerApp": 200,
  "sort": "mostRecent",
  "minRating": 1, "maxRating": 2
}
```

### Output sample

Each row has `type: "app"` or `type: "review"`.

```json
{ "type": "app", "appId": "447188370", "name": "Snapchat", "country": "us", "developer": "Snap, Inc.",
  "averageRating": 4.67, "ratingCount": 6056134, "ratingHistogram": { "5": 4922281, "4": 409725, "3": 134487, "2": 61378, "1": 528263 },
  "version": "13.62.0.38", "currentVersionReleaseDate": "2026-10-27T…", "formattedPrice": "Free", "primaryGenre": "Photo & Video", "url": "https://apps.apple.com/us/app/snapchat/id447188370" }
```

```json
{ "type": "review", "appId": "447188370", "appName": "Snapchat", "country": "us", "reviewId": "14722545090",
  "rating": 5, "title": "Love it", "text": "…", "userName": "…", "appVersion": "13.62.0", "date": "2026-10-28T17:31:46.000Z",
  "voteSum": 0, "voteCount": 0, "source": "rss" }
```

The dataset has two views: **Reviews** and **App details**.

### Pricing (pay per event)

| Event | Price | When |
|---|---|---|
| `app-details` | **$0.001** per app and country | App metadata row (turn off with `includeAppDetails: false`). |
| `review` | **$0.0003** per review | Each unique review returned after your filters. |

Apps not found in a storefront, duplicates and filtered-out reviews are **never charged**. Platform usage is extra and small (no browser).

**Cost example:** 10 apps × 1 country × 500 reviews = 10 × $0.001 + 5,000 × $0.0003 = **$1.51**.

### Use it from AI agents (MCP), Zapier, Make, n8n or the API

**AI agents (Claude, Cursor, VS Code, ChatGPT and other MCP clients).** Add Apify's hosted MCP server with just this Actor as a tool:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=steadyline/app-store-reviews"
    }
  }
}
```

Sign in with Apify (OAuth) on first connect, or add an `Authorization: Bearer <APIFY_TOKEN>` header. Then ask your agent, for example:

> Use steadyline/app-store-reviews to pull the last 200 US reviews of the Duolingo iOS app with 1-2 stars and summarize the top complaints.

The agent sees this Actor's input schema and output fields, so it can call it without extra prompting. Agents that use the general Apify MCP server can also find it with `search-actors`.

This Actor uses pay-per-event pricing with limited permissions, so it can also be run through Apify's agentic payments (no Apify account needed for the agent). See the [Apify docs](https://docs.apify.com/platform/integrations/mcp#agentic-payments).

**Zapier, Make and n8n.** Use the official Apify app: Zapier "Run Actor" action, Make "Run an Actor" module, or the n8n Apify node. Choose `steadyline/app-store-reviews`, paste the input below, then use "Get dataset items" (or the run's dataset) to send results to Google Sheets, Slack, a CRM or a database.

**API (any language).** Run it and get the results in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/steadyline~app-store-reviews/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"apps": ["https://apps.apple.com/us/app/snapchat/id447188370"], "maxReviewsPerApp": 50}'
```

Or with the Python client (`pip install apify-client`):

```python
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("steadyline/app-store-reviews").call(run_input={"apps": ["https://apps.apple.com/us/app/snapchat/id447188370"], "maxReviewsPerApp": 50})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### Works well with other Steadyline Data tools

- **App publisher research:** take `developerWebsite` from the app details and run [Tech Stack Detector](https://apify.com/steadyline/tech-stack-detector), [Domain Intel](https://apify.com/steadyline/domain-intel) or [Website Contact Extractor](https://apify.com/steadyline/website-contact-extractor) on it.
- Related: [Tech Stack Detector](https://apify.com/steadyline/tech-stack-detector), [Website Contact Scraper](https://apify.com/steadyline/website-contact-extractor), [Domain Intel (WHOIS/RDAP, DNS, SSL)](https://apify.com/steadyline/domain-intel).

### FAQ

**How many reviews can I get?**
Apple's public feed exposes roughly the 500 most recent reviews per app per country storefront. Add more `countries` to get more. See 'About review coverage' above.

**Do I need an Apple account?**
No. It uses Apple's public lookup API and customer-review feed.

**What does it cost?**
$0.001 per app details record and $0.0003 per review, so $0.30 per 1,000 reviews.

**Can I run it on a schedule?** Yes. Create an Apify Schedule (or a saved Task with a schedule) and connect a webhook or integration to receive results.

**Need a feature or found a bug?** Open an issue on the Issues tab of this page or email steadylinedata@proton.me. Built and maintained by **Steadyline Data**.

### Acceptable use

Reviews are public, but reviewer nicknames are personal data in some jurisdictions. Use the data for product research, sentiment analysis and competitive intelligence. Don't use it to profile or contact individual reviewers. You're responsible for complying with GDPR/CCPA and Apple's terms. The Actor isn't affiliated with or endorsed by Apple. App Store is a trademark of Apple Inc.

***

Built and maintained by **Steadyline Data**.

# Actor input Schema

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

App Store URLs (https://apps.apple.com/us/app/…/id123), numeric IDs (447188370) or bundle IDs (com.toyopagroup.picaboo).

## `countries` (type: `array`):

Two-letter storefront codes (us, gb, de …). Each app is fetched once per country.

## `includeAppDetails` (type: `boolean`):

One "app" row per app and country (charged as app-details).

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

Customer reviews (charged per review).

## `maxReviewsPerApp` (type: `integer`):

Apple exposes at most ~500 recent and ~500 most-helpful reviews per storefront through public endpoints.

## `sort` (type: `string`):

Which public review list to read first (the other is used to fill up to the limit).

## `minRating` (type: `integer`):

Only return reviews with at least this rating.

## `maxRating` (type: `integer`):

Only return reviews with at most this rating.

## `reviewsSince` (type: `string`):

Optional. Only reviews on/after this date (YYYY-MM-DD).

## `maxConcurrency` (type: `integer`):

App/country pairs processed in parallel. Keep low to stay polite.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/snapchat/id447188370"
  ],
  "countries": [
    "us"
  ],
  "includeAppDetails": true,
  "includeReviews": true,
  "maxReviewsPerApp": 500,
  "sort": "mostRecent",
  "minRating": 1,
  "maxRating": 5,
  "maxConcurrency": 3
}
```

# Actor output Schema

## `reviews` (type: `string`):

Review rows (type = review).

## `apps` (type: `string`):

App rows (type = app).

# 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 = {
    "apps": [
        "https://apps.apple.com/us/app/snapchat/id447188370"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("steadyline/app-store-reviews").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 = { "apps": ["https://apps.apple.com/us/app/snapchat/id447188370"] }

# Run the Actor and wait for it to finish
run = client.actor("steadyline/app-store-reviews").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 '{
  "apps": [
    "https://apps.apple.com/us/app/snapchat/id447188370"
  ]
}' |
apify call steadyline/app-store-reviews --silent --output-dataset

```

## MCP server setup

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

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/cM2HOQqKSWbXHhc2M/builds/75VqCSCu0UUVaaS2L/openapi.json
