# App Store Reviews Scraper (official Apple RSS) (`krasyn-side/app-store-reviews-scraper`) Actor

Get the most recent App Store reviews for any iOS app in any country from Apple's public customer-reviews RSS feed. Rating, title, text, app version, author, date and votes. Monitoring mode with minDate. No HTML scraping, no proxies.

- **URL**: https://apify.com/krasyn-side/app-store-reviews-scraper.md
- **Developed by:** [Krasyn Labs](https://apify.com/krasyn-side) (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

$0.10 / 1,000 review returneds

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 Scraper (official Apple RSS)

Get the **most recent App Store customer reviews** for any iOS / iPadOS app, in **any country storefront**, as clean structured data: star rating, title, review text, app version, author, date and helpfulness votes.

The data comes from **Apple's public customer-reviews RSS feed** (`itunes.apple.com/{country}/rss/customerreviews/...`). This actor does not scrape HTML, does not need a browser or proxies, and does not log in. That makes it fast, cheap and stable.

### What you can use it for

- **App review monitoring**: schedule a daily run with `minDate` set to yesterday and get only new reviews. Pipe them to Slack, email or a sheet with Apify integrations.
- **Sentiment analysis and NLP**: feed review text and ratings into an LLM or classifier to find bugs, feature requests and churn reasons per app version.
- **Competitor research**: compare what users love and hate about competing apps, country by country.
- **Release QA**: watch ratings for a new `version` right after you ship it.
- **Localization insight**: pull the same app across `us`, `gb`, `de`, `jp` and more to see market-specific complaints.

### Input

| Field | Type | Description |
|---|---|---|
| `apps` | array of strings | App Store app IDs (`389801252`) or app URLs (`https://apps.apple.com/us/app/instagram/id389801252`). Required. |
| `countries` | array of strings | Two-letter storefront codes. Default `["us"]`. |
| `maxReviewsPerApp` | integer | Max reviews per app **per country**, 1 to 500. Default 500. |
| `minDate` | string | Optional. Only return reviews on or after this date (`2026-10-01` or a full ISO timestamp). Paging stops as soon as older reviews appear. |

Example:

```json
{
  "apps": [
    "https://apps.apple.com/us/app/instagram/id389801252",
    "284882215"
  ],
  "countries": ["us", "gb"],
  "maxReviewsPerApp": 200,
  "minDate": "2026-10-01"
}
```

### Output

One dataset item per review. Download as JSON, CSV, Excel or via API.

```json
{
  "appId": "389801252",
  "appName": "Instagram",
  "country": "gb",
  "reviewId": "14661815640",
  "title": "Love the new layout",
  "content": "Reels load much faster since the last update...",
  "rating": 4,
  "version": "451.0.0",
  "author": "example_user",
  "authorUrl": "https://itunes.apple.com/gb/reviews/id821156865",
  "updatedAt": "2026-10-13T13:59:29.000Z",
  "voteCount": 0,
  "voteSum": 0,
  "scrapedAt": "2026-10-14T22:10:00.000Z"
}
```

- `rating` is an integer from 1 to 5.
- `version` is the app version the reviewer was using.
- `voteCount` / `voteSum` are Apple's helpfulness votes for the review.
- `appName` comes from Apple's public iTunes Lookup API.
- Reviews are deduplicated by `reviewId` within a run.

### Pricing

Pay per result: **$0.0001 per review returned**, which is about **$0.10 per 1,000 reviews**. You pay only for reviews written to the dataset. If an app has no reviews in a country, that costs nothing. Apify platform usage is billed as normal and is very small, because the actor makes only light JSON requests.

### Limits you should know

- Apple's RSS feed exposes the **~500 most recent reviews per app per country** (10 pages of 50). It is not a full review history. To build history, schedule the actor (for example daily with `minDate`) and keep the results.
- Reviews are per storefront. An app with many reviews in the US may have few in a small country.
- Only written reviews are in the feed. Star-only ratings are not.
- Requests are sequential with a short delay between pages, to be polite to Apple's servers.

### FAQ

**Do I need proxies or an Apple account?** No.

**Does it work for Mac apps or Apple TV apps?** It works for any app ID that Apple's customer-reviews feed serves, which is mainly iOS / iPadOS App Store apps.

**How do I find an app ID?** Open the app in the App Store on the web. The number after `id` in the URL is the ID. You can also just paste the URL.

### About

This actor is built and maintained by an AI agent (Claude, by Anthropic) operated by **Krasyn LLC**. A human at Krasyn LLC oversees it. If something breaks or you need a field added, open an issue on the actor's Issues tab and it will be looked at.

It uses only Apple's publicly offered RSS feed and Lookup API. It is not affiliated with or endorsed by Apple. App Store is a trademark of Apple Inc.

# Actor input Schema

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

App Store app IDs (e.g. 284882215) or app URLs (e.g. https://apps.apple.com/us/app/instagram/id389801252). The numeric ID after 'id' is used.

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

Two-letter App Store country codes, e.g. us, gb, de, fr, jp, in. Reviews are per-country. Default: us.

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

Apple's feed exposes up to 500 most recent reviews (10 pages x 50) per app per country.

## `minDate` (type: `string`):

Optional ISO date (YYYY-MM-DD or full timestamp). Stops paging once reviews get older, so a scheduled daily run with yesterday's date returns only new reviews cheaply.

## Actor input object example

```json
{
  "apps": [
    "https://apps.apple.com/us/app/instagram/id389801252",
    "284882215"
  ],
  "countries": [
    "us"
  ],
  "maxReviewsPerApp": 500
}
```

# 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 = {
    "apps": [
        "https://apps.apple.com/us/app/instagram/id389801252",
        "284882215"
    ],
    "countries": [
        "us"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("krasyn-side/app-store-reviews-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 = {
    "apps": [
        "https://apps.apple.com/us/app/instagram/id389801252",
        "284882215",
    ],
    "countries": ["us"],
}

# Run the Actor and wait for it to finish
run = client.actor("krasyn-side/app-store-reviews-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 '{
  "apps": [
    "https://apps.apple.com/us/app/instagram/id389801252",
    "284882215"
  ],
  "countries": [
    "us"
  ]
}' |
apify call krasyn-side/app-store-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,krasyn-side/app-store-reviews-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/UkDLYmnTEo0RR6RnT/builds/fc0LRWwkl60vBQgPh/openapi.json
