# Apple App Store Review Intelligence (`moving_beacon-owner1/apple-app-store-review-intelligence`) Actor

Collect Apple App Store reviews and turn them into clearly labelled sentiment, topic, complaint, and feature-request insights while keeping source reviews separate from derived analysis.

- **URL**: https://apify.com/moving\_beacon-owner1/apple-app-store-review-intelligence.md
- **Developed by:** [Jamshaid Arif](https://apify.com/moving_beacon-owner1) (community)
- **Categories:** AI, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.99 / 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

## Review Intelligence

Collect reviews from supported, keyless sources and turn them into a
**clearly-labelled analysis** — while keeping the *source reviews* and the
*derived analysis* strictly separate. The Actor never rewrites a review, and
never presents its analysis as if it were something a customer actually wrote.

### What does this Actor do?

1. **Collect** reviews from:
   - **Apple App Store** — the keyless iTunes customer-reviews RSS JSON feed, optionally across several countries.
   - **Generic JSON-LD** — any page URL that embeds schema.org `Review` markup (`reviewUrls`).
2. **Label** every output record with an explicit `recordType`:
   - `review` — one record per collected source review, with its verbatim fields.
   - `product` — app metadata from the iTunes lookup endpoint (when `appId` is given).
   - `analysis` — **one** derived analysis record.
3. **Analyse** (optional) — derive topics, complaints, feature requests and an
   overall sentiment tendency from the collected review text. Every figure
   carries its **sample size** and the **`analysisMethod`** used, so the
   analysis can never be mistaken for the reviews themselves.

### Why the source/analysis split matters

Review content and *conclusions about* review content are different things.
This Actor keeps them in separate records so you can always trace an analysis
figure back to the reviews it was computed from — and never accidentally treat
a derived sentiment label as a real customer quote.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `appId` | string | Apple App Store numeric app ID (optional if `reviewUrls` given). |
| `countries` | array | App Store country codes (default `["us"]`). |
| `maxPagesPerCountry` | integer | Review pages to fetch per country (default 5). |
| `reviewUrls` | array | Page URLs that embed schema.org `Review` JSON-LD (optional). |
| `analyze` | boolean | Produce the labelled analysis record (default `true`). |
| `proxyConfiguration` | object | Proxy settings (iTunes RSS is keyless). |

#### Input example

```json
{
  "appId": "284882215",
  "countries": ["us", "gb"],
  "maxPagesPerCountry": 5,
  "reviewUrls": [],
  "analyze": true
}
```

### Output

A dataset of labelled records. Source reviews first, then an optional product
record, then a single analysis record.

#### Source review (`recordType: "review"`)

```json
{
  "recordType": "review",
  "rating": 1.0,
  "title": "Crashes constantly",
  "text": "App keeps crashing and is buggy…",
  "author": "Bob",
  "date": "2026-01-02T00:00:00-07:00",
  "url": "https://itunes.apple.com/us/reviews/id2",
  "source": "apple_app_store",
  "productName": "Cool App",
  "country": "us",
  "appId": "12345",
  "appVersion": "2.0"
}
```

#### Derived analysis (`recordType: "analysis"`)

```json
{
  "recordType": "analysis",
  "note": "Derived analysis of the collected reviews — NOT source review text…",
  "analysisMethod": "lexicon+keyword-frequency",
  "sampleSize": 3,
  "ratingSummary": { "sampleSize": 3, "mean": 3.33, "median": 4.0 },
  "positiveTopics": [ { "keyword": "reliable", "reviewsMentioning": 2 } ],
  "negativeTopics": [ { "keyword": "crashing", "reviewsMentioning": 2 } ],
  "commonKeywords": [ … ],
  "complaints": [ { "category": "reliability", "reviewsMentioning": 1, "pctOfReviews": 33.3 } ],
  "featureRequests": [ "…wish they would add dark mode" ],
  "overallSentiment": { "label": "negative", "score": -0.2, "analysisMethod": "lexicon" }
}
```

You can download the dataset in JSON, CSV, Excel or HTML.

````

# Actor input Schema

## `appId` (type: `string`):

Numeric Apple App Store application ID (e.g. '284882215' for Facebook). Reviews are collected from the keyless iTunes RSS feed. Optional if you provide reviewUrls.
## `countries` (type: `array`):

Two-letter App Store country codes to collect reviews from.
## `maxPagesPerCountry` (type: `integer`):

How many pages of App Store reviews to fetch per country (each page returns up to ~50 reviews).
## `reviewUrls` (type: `array`):

Optional list of page URLs that embed schema.org Review markup (JSON-LD). Each page is fetched and its reviews are extracted. Only use pages whose Terms of Service permit access.
## `analyze` (type: `boolean`):

Compute a clearly-labelled analysis record (topics, complaints, feature requests, sentiment) derived from the collected reviews. Analysis is kept separate from source review text.
## `proxyConfiguration` (type: `object`):

Proxy settings. The iTunes RSS endpoint is keyless and works without a proxy for light use.
## `cookies` (type: `string`):

Optional Cookie header string to replay on every request (for JSON-LD review pages behind a light challenge).

## Actor input object example

```json
{
  "appId": "284882215",
  "countries": [
    "us"
  ],
  "maxPagesPerCountry": 5,
  "analyze": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

# 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 = {
    "appId": "284882215"
};

// Run the Actor and wait for it to finish
const run = await client.actor("moving_beacon-owner1/apple-app-store-review-intelligence").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 = { "appId": "284882215" }

# Run the Actor and wait for it to finish
run = client.actor("moving_beacon-owner1/apple-app-store-review-intelligence").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 '{
  "appId": "284882215"
}' |
apify call moving_beacon-owner1/apple-app-store-review-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,moving_beacon-owner1/apple-app-store-review-intelligence"
        }
    }
}

```

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/MgDDXqEniVHV9DZ75/builds/3Bymn9ehmcXMxWPBb/openapi.json
