# App Store Reviews Scraper: iOS Reviews from 174 Countries (`themineworks/app-store-reviews-scraper`) Actor

Scrape Apple App Store reviews for iPhone and iPad apps in any of 174 countries: stars, title, text, app version, helpful votes, date and the developer's response, with app name and country on every row. Up to 1,000 reviews per app per country, newest or most helpful first. No login.

- **URL**: https://apify.com/themineworks/app-store-reviews-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Business, Marketing, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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: iOS Reviews from 174 Countries

[![3,342 WhatsApp reviews from 173 App Store countries in 170 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/app-store-reviews-scraper-hero.png)](https://console.apify.com/actors/hcx07f7uAyUSiJ6Oh/input)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder), with over 140,000 runs across 170+ public actors.

### Why choose this actor?

- **Every App Store country in one run.** Each country's App Store holds its own reviews, so the actor reads as many countries as you list, or all 174 with one switch. Our proof run read WhatsApp in all 174 countries and returned **3,342 reviews from 173 of them in 170 seconds** (WhatsApp is not sold in China, which was skipped and not charged). No Apple account, no API key, no cookies of yours.
- **Up to 1,000 reviews per app in each country.** Apple's public review feed holds 500 reviews per country for each sort order. Choose "both" and the actor reads the most recent 500 and the most helpful 500 and drops the overlap: our second proof run returned 997 and 993 reviews for Spotify and Uber in the UK, from September 2017 to October 2026, in 74 seconds.
- **You pay only for reviews you receive.** One charge per review row saved to your dataset, plus a flat start fee per run. Countries where the app is not sold, countries with no reviews, repeated reviews and reviews an earlier run already gave you (when you switch that on) are never charged.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/hcx07f7uAyUSiJ6Oh/input)

**Part of The Mine Works Marketing, SEO and reviews family:** [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper), [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency), [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper), [Google News Scraper](https://apify.com/themineworks/google-news), [Trustpilot Reviews Scraper](https://apify.com/themineworks/trustpilot-reviews), [Google Trends Scraper](https://apify.com/themineworks/google-trends-pro).

### Try it in one minute

Paste this input and press Start. It returns the 20 most recent UK reviews of WhatsApp in a few seconds:

```json
{
  "apps": ["310633997"],
  "countries": ["gb"],
  "maxReviewsPerCountry": 20
}
```

You can name an app in three ways, and mix them in one list:

- **Numeric App Store id**: `310633997`, or `id310633997`. It is the number at the end of the app's App Store link.
- **App Store link**: `https://apps.apple.com/us/app/whatsapp-messenger/id310633997`. The country in the link is ignored; the countries come from the `countries` list.
- **Older iTunes links**: `https://itunes.apple.com/us/app/uber/id368677368?mt=8`.

Countries are two letter codes such as `us`, `gb`, `in`, `de`, `jp`, `br` (`uk` is read as `gb`), or `all`.

On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result: https://apify.com/pricing?fpr=ymnoit

#### Copy to your AI assistant

```text
themineworks/app-store-reviews-scraper on Apify. Returns Apple App Store reviews of iPhone and iPad apps, one row per review with country, stars, title, text, app version, helpful votes, date, and the developer's response when Apple shows it, plus the app name, developer, average rating and rating count in that country. Call ApifyClient("TOKEN").actor("themineworks/app-store-reviews-scraper").call(run_input={"apps": ["310633997"], "countries": ["us", "gb", "in"], "maxReviewsPerCountry": 200, "sort": "mostRecent"}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: apps (numeric App Store ids or App Store links). Optional: countries (two letter codes, default ["us"]), allCountries (default false; all 174 countries), maxReviewsPerCountry (default 100, 20 to 1,000), sort (mostRecent, mostHelpful or both; default mostRecent), includeDeveloperResponses (default true), onlyNewReviews (default false). Skip rows that have "_type": "info". Full spec: GET https://api.apify.com/v2/acts/themineworks~app-store-reviews-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations
```

### Key features

- **22 fields per review**: review id, country, reviewer nickname, stars, title, text, app version, helpful votes (net and total), date, developer response and its date, then the app's name, developer, average rating and rating count in that country, and the list and position the review was read from.
- **174 App Store countries**: list the ones you want, or switch on every country. Each row says which country it came from, and the app name is the one shown in that country.
- **Up to 1,000 reviews per app per country**: 10 pages of 50 for each of the two sort orders Apple's feed offers, most recent and most helpful. The most helpful list reaches back years.
- **Developer responses** from the App Store page, where Apple shows them on its 10 featured reviews per country.
- **Only new reviews on repeat runs**: switch it on for a schedule and each run returns, and charges, only reviews no earlier run in your account delivered.
- **Plain HTTP, no browser**, 256 MB of memory, six app and country pairs at a time. A run report (status per app and country, pages, retries, charges) is saved as the `OUTPUT` record.

### How to use it

#### Basic: the most recent reviews of one app in one country

```json
{
  "apps": ["https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"],
  "countries": ["us"],
  "maxReviewsPerCountry": 500
}
```

Most recent first is the default. 500 is the whole most recent list Apple's feed offers for one country.

#### Several apps and countries at once

```json
{
  "apps": ["368677368", "324684580"],
  "countries": ["gb"],
  "maxReviewsPerCountry": 1000,
  "sort": "both"
}
```

This is the input of our second proof run: 1,990 reviews in 74 seconds. Every app is read in every country you list; up to 200 apps per run, and an app given twice is read once.

#### Job: one app in every country

```json
{
  "apps": ["310633997"],
  "allCountries": true,
  "maxReviewsPerCountry": 20
}
```

This is our first proof run: 3,342 reviews from 173 countries in 170 seconds. Use it to see where an app is reviewed most, how its rating differs by country (`app_rating` and `app_ratings_count` are per country), or what users in markets you do not watch are complaining about. Raise `maxReviewsPerCountry` for depth; small markets simply return what they have (a few countries had 1 to 7 reviews).

#### Job: weekly complaint digest for your own app

Read the most recent reviews in your main markets every week and filter `rating` to 1 and 2 in your sheet.

```json
{
  "apps": ["324684580"],
  "countries": ["us", "gb", "ca", "au", "in"],
  "maxReviewsPerCountry": 300,
  "sort": "mostRecent",
  "onlyNewReviews": true
}
```

Schedule it weekly (Console, Schedules, Add schedule). With `onlyNewReviews` on, each week brings only reviews you have not received before, and a country stops at the first page that holds nothing new.

#### Job: competitor research on the reviews people found most helpful

The most helpful list is where the long, detailed reviews are, often years old and with hundreds of votes. Read it for your rivals, with developer responses on, to see what users praise and what the competitor answers.

```json
{
  "apps": ["368677368", "529379082"],
  "countries": ["us", "gb"],
  "maxReviewsPerCountry": 500,
  "sort": "mostHelpful",
  "includeDeveloperResponses": true
}
```

`vote_sum` and `vote_count` show how many readers found each review helpful.

#### Job: daily alert on new reviews

```json
{
  "apps": ["310633997", "324684580"],
  "countries": ["us", "gb", "de", "in"],
  "maxReviewsPerCountry": 200,
  "sort": "mostRecent",
  "onlyNewReviews": true
}
```

Run it every morning and connect it to Slack, email or a sheet (see Integrations). A day with no new reviews costs only the start fee.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `apps` | array of strings | `["310633997", "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"]` | Apps to read: numeric App Store ids or App Store links, one per line. Required. Up to 200 per run. |
| `countries` | array of strings | `["us"]` | Two letter App Store country codes. Each is read separately. `all` reads every country. |
| `allCountries` | boolean | `false` | Read all 174 App Store countries instead of the list. |
| `maxReviewsPerCountry` | integer | `100` | Reviews to collect per app in each country, 20 to 1,000. One sort order holds up to 500. |
| `sort` | string | `mostRecent` | `mostRecent`, `mostHelpful`, or `both` (the most recent list, then the most helpful list, without repeats). |
| `includeDeveloperResponses` | boolean | `true` | Add the developer's response to reviews that have one. Apple shows responses on the 10 featured reviews of each country's App Store page, so they appear when the most helpful list is read. One extra page read per country. |
| `onlyNewReviews` | boolean | `false` | Skip, and never charge, reviews an earlier run of this actor in your account already delivered. |

### What data do you get?

One row per review. Fields are grouped below; a field with no value (for example no developer response) is left out of the row rather than filled with an empty value.

**The review**: `review_id` (Apple's own id, stable across runs), `country` (the App Store the review was written in, upper case), `user_name` (the reviewer's public nickname), `rating` (1 to 5), `title`, `text`, `app_version` (the version the review was written on), `vote_sum` (helpful votes minus not helpful votes), `vote_count` (all votes), `reviewed_at` (ISO 8601, UTC; the latest edit when the review was edited).

**The developer's response**: `developer_response` and `developer_response_at`, when the developer answered and Apple shows the answer (see the FAQ on why this is rare).

**The app in that country**: `app_id`, `app_name` (as the App Store in that country names it, for example "Uber: Rides, eats, and more" in the UK), `app_developer`, `app_rating` and `app_ratings_count` (that country's average and number of ratings), `app_url` (the app in that country's App Store).

**How it was read**: `sort` (`mostRecent`, `mostHelpful`, or `featured` for the App Store page fallback described in the FAQ), `position` (the review's place in that list for this app and country), `input` (the app as you typed it), `scraped_at`.

At the end of a run with results, one extra row with `"_type": "info"` carries scheduling tips. It is never charged; filter it out with `_type`. A full run report (status per app and country, pages, retries, charges) is saved as the `OUTPUT` record of the run's key value store.

#### Stable fields for automations

These fields were present in every one of the 5,332 rows of our two proof runs:

| Field | Meaning |
|---|---|
| `app_id` | Numeric App Store id |
| `country` | App Store country, upper case |
| `review_id` | Apple's review id; use it to deduplicate |
| `user_name` | Reviewer's public nickname |
| `rating` | Stars, 1 to 5 |
| `title` | Review title |
| `text` | Review text |
| `reviewed_at` | Review date, ISO 8601 UTC |
| `sort` | List the review was read from |
| `position` | Place in that list |
| `app_url` | Link to the app in that country |
| `input` | The app as you gave it |
| `scraped_at` | When the row was collected |

These names will not change. New fields may be added, never renamed.

#### Output examples

Real rows from our proof runs on 5 October 2026, trimmed. Reviewer names are masked here; the dataset has them in full.

A most recent review from the Japanese App Store (every country run):

```json
{
  "app_id": "310633997",
  "app_name": "WhatsApp Messenger",
  "country": "JP",
  "review_id": "14621004122",
  "user_name": "*******",
  "rating": 1,
  "title": "...",
  "text": "GIFが不快なものばかり",
  "app_version": "26.38.74",
  "reviewed_at": "2026-10-03T01:49:43.000Z",
  "vote_sum": 0,
  "vote_count": 0,
  "app_developer": "WhatsApp Inc.",
  "app_rating": 4.54,
  "app_ratings_count": 261916,
  "sort": "mostRecent",
  "position": 1,
  "app_url": "https://apps.apple.com/jp/app/id310633997",
  "input": "310633997",
  "scraped_at": "2026-10-05T17:52:44.188Z"
}
```

The same app in Brazil, with Brazil's own rating and rating count:

```json
{
  "app_id": "310633997",
  "app_name": "WhatsApp Messenger",
  "country": "BR",
  "review_id": "14626610903",
  "user_name": "am******",
  "rating": 2,
  "title": "Figurinha",
  "text": "Tentando fazer figurinha animadas mas só dá erro. Outras pessoas conseguem 😡",
  "app_version": "26.38.74",
  "reviewed_at": "2026-10-04T12:49:39.000Z",
  "app_rating": 4.78,
  "app_ratings_count": 8543413,
  "sort": "mostRecent",
  "position": 1
}
```

A most helpful review with the developer's response (UK, sort "both"):

```json
{
  "app_id": "368677368",
  "app_name": "Uber: Rides, eats, and more",
  "country": "GB",
  "review_id": "4033481795",
  "user_name": "At*******",
  "rating": 3,
  "title": "Estimated arrival time needs to improve!",
  "text": "So we’ve been using Uber a couple of times a day whilst on holiday in the US. Literally every single time the estimated car arrival time is out by a great deal. ...",
  "app_version": "3.347.10001",
  "reviewed_at": "2019-04-19T16:54:10.000Z",
  "vote_sum": 157,
  "vote_count": 298,
  "developer_response": "Hi, we are sorry to hear about your unpleasant experience with Estimated arrival time. We will have a look in to this for you. Please send us a note to t.uber.com/contact or via the in-app Help section and we'll connect. ...",
  "developer_response_at": "2019-04-23T08:15:03.000Z",
  "app_developer": "Uber Technologies, Inc.",
  "app_rating": 4.87,
  "app_ratings_count": 1911874,
  "sort": "mostHelpful",
  "position": 6,
  "app_url": "https://apps.apple.com/gb/app/id368677368",
  "input": "368677368",
  "scraped_at": "2026-10-05T17:56:54.303Z"
}
```

A most helpful review from deeper in the list (position 329 of 500):

```json
{
  "app_id": "324684580",
  "app_name": "Spotify: Music and Podcasts",
  "country": "GB",
  "review_id": "14471987065",
  "user_name": "Ka***********",
  "rating": 5,
  "title": "Little bug I noticed.",
  "text": "I noticed a bug every time when I close the app then when I open it again after a short while, when I go to change a song the menu simply disappears, ...",
  "app_version": "9.1.76",
  "reviewed_at": "2026-08-25T22:29:28.000Z",
  "vote_sum": 2,
  "vote_count": 2,
  "sort": "mostHelpful",
  "position": 329,
  "input": "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
}
```

### Pricing

Pay per event: you pay for the review rows you receive, plus a flat $0.005 per run, whatever memory you choose.

Free plan runs return up to 10 results each; paid plans have no cap.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `review-scraped` | Once per review row saved to your dataset | $0.10 per 1,000 | $0.10 per 1,000 | $0.10 per 1,000 | $0.10 per 1,000 |
| `run-start` | Once per run, when it starts | $0.005 | $0.005 | $0.005 | $0.005 |

The price per single review is the price per 1,000 divided by 1,000. 500 reviews of one app in one country are 500 events.

Never charged:

- countries where the app is not sold, and countries with no written reviews;
- feed pages Apple answered empty or refused, and the retries the actor makes on other IP addresses;
- the App Store page read for developer responses (only the reviews delivered are charged);
- a review already delivered in the same run, including one that is on both the most recent and the most helpful list;
- with `onlyNewReviews` on, reviews an earlier run in your account already delivered;
- the information row at the end of the run and the `OUTPUT` run report.

If you set a maximum charge for the run in Apify, the actor stops when it is reached and keeps everything delivered so far.

### FAQ

#### What do I get on the free plan?

On Apify's free plan every run returns the first 10 results as a preview, so you can check the data and the fields before you pay. A paid Apify plan returns every result with no cap: https://apify.com/pricing?fpr=ymnoit

#### What exactly does this actor read?

Three public Apple sources, logged out: Apple's customer review feed for each country (the reviews), the iTunes lookup service (the app's name, developer and rating in that country, and whether it is sold there), and the app's App Store web page (developer responses). It is the same information anyone sees without signing in.

#### How many reviews can I get?

Apple's review feed gives 10 pages of 50 reviews per country for each sort order, so 500 most recent and 500 most helpful; page 11 does not exist. With `sort` set to `both` you get up to about 1,000 per app per country (997 and 993 in our UK proof run, after dropping reviews that were on both lists). Multiply by the countries you read: a big app in 20 countries can return close to 20,000 reviews in one run.

#### Why are developer responses so rare in the output?

Apple's review feed never carries them. The only public place they appear is the App Store web page, and Apple shows it for the 10 featured reviews of each country only, which are the top of the most helpful list. So responses appear when you read the most helpful list (`mostHelpful` or `both`) and only on those reviews: 4 of 1,990 rows in our UK proof run. We fill the field whenever Apple shows a response and never guess one.

#### Which countries can I read?

All 174 App Store countries in our list; every one of them answered in our every country run. If the app is not sold in a country (WhatsApp in China, for example), that country is skipped and nothing is charged. The run report lists every country with its status.

#### How fresh is the data?

Every run reads Apple live. In our 5 October runs the newest review in Apple's feed was about a day old, so expect that delay between a review being written and it showing up.

#### How long does a run take?

170 seconds for one app in all 174 countries at 20 reviews each, and 74 seconds for 2 apps at about 1,000 reviews each in one country. A feed page of 50 reviews usually takes 2 to 7 seconds; six app and country pairs are read at a time.

#### What if Apple's feed is empty?

Apple sometimes answers a feed page with an empty shell although the page has reviews (on 6 September 2026 it was serving only empty shells for every app tested). The actor asks again for a fresh copy from another IP address, which recovered all 7 such pages in our two proof runs on the second try. If the feed stays empty for a country where the app has ratings, the actor delivers the 10 featured reviews from the App Store page instead, marked `"sort": "featured"`, without `app_version` or votes, which that page does not show.

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

No. Nothing to sign in to and nothing of yours is sent to Apple. There is no proxy to set up either: the actor uses Apify's datacenter proxy and tries a refused page again from another IP address.

#### Can I monitor new reviews over time?

Yes. Schedule the actor (Console, this actor, Schedules, Add schedule) with `sort` set to `mostRecent` and `onlyNewReviews` on. Each run returns only reviews no earlier run in your account delivered, and stops reading a country at the first page that holds nothing new.

#### Can I get Google Play reviews too?

This actor is for the App Store. For both stores in one run, see our [App Reviews Scraper](https://apify.com/themineworks/app-reviews-monitor).

#### Which formats can I download?

JSON, CSV, Excel, XML, HTML table and RSS from the dataset page, or the same through the API. In CSV and Excel, filter on `_type` to drop the information row.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

- Connector URL: https://mcp.apify.com/?tools=themineworks/app-store-reviews-scraper
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http app-store-reviews-scraper "https://mcp.apify.com/?tools=themineworks/app-store-reviews-scraper"`

#### Is it legal to scrape App Store reviews?

The actor only reads reviews Apple shows publicly to anyone without signing in. Reviews carry the public nicknames of the people who wrote them, which can be personal data: you are responsible for how you use the data, for Apple's terms, and for data protection law such as GDPR and CCPA. If in doubt, ask a lawyer about your use case.

### Integrations

- **Google Sheets**: send each run's rows to a sheet with Apify's Google Sheets integration, or import the CSV link of the dataset.
- **Make, Zapier and n8n**: start the actor and read its dataset with the Apify apps and nodes, for example "new one star reviews in any country to Slack".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper)
- [Google News Scraper](https://apify.com/themineworks/google-news)
- [Trustpilot Reviews Scraper](https://apify.com/themineworks/trustpilot-reviews)
- [Google Trends Scraper](https://apify.com/themineworks/google-trends-pro)
- [Semrush Scraper](https://apify.com/themineworks/semrush-scraper)
- [App Reviews Scraper](https://apify.com/themineworks/app-reviews-monitor)
- [Trustpilot Business Search](https://apify.com/themineworks/trustpilot-business-search)
- [TripAdvisor Reviews Scraper](https://apify.com/themineworks/tripadvisor-reviews)
- [Username Checker](https://apify.com/themineworks/username-checker)
- [Backlink Building Agent](https://apify.com/themineworks/backlink-building-agent)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper)

### Support

Found an app or a country that should work and does not? Open an issue in the Issues tab with the app link, the country and the run ID, and we will look at it. For a new source or a field you need, email dmineworks@gmail.com.

*List App Store apps and countries, choose most recent, most helpful or both, and get up to 1,000 reviews per app in every country back as clean rows with the country's rating and the developer's response where Apple shows it.*

# Actor input Schema

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

One app per line: the numeric App Store id (310633997) or an App Store link (https://apps.apple.com/us/app/whatsapp-messenger/id310633997). The country in a link is ignored; pick countries below. Up to 200 apps per run; repeats are read once.

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

Two letter App Store country codes, one per line, for example us, gb, in, de, jp. Each country is read separately and every row says which country it came from. Countries where the app is not sold are skipped and never charged.

## `allCountries` (type: `boolean`):

Reads all 174 App Store countries instead of the list above. Most apps have written reviews in a few dozen of them; the rest cost one small check each and are never charged.

## `maxReviewsPerCountry` (type: `integer`):

How many reviews to collect for each app in each country, 20 to 1,000. Apple's public feed holds up to 500 reviews per country for one sort order (10 pages of 50); with sort Both, up to about 1,000.

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

Most recent is the one to use for monitoring. Most helpful reaches back years. Both reads the most recent list, then the most helpful list, and skips reviews already collected.

## `includeDeveloperResponses` (type: `boolean`):

Adds the developer's reply to reviews that have one. Apple only shows replies on the 10 featured reviews of each country's App Store page (the top of the most helpful list), so replies appear when the sort is Most helpful or Both. Costs one extra page read per country.

## `onlyNewReviews` (type: `boolean`):

For schedules: skip reviews an earlier run of this actor in your account already delivered, so each run returns and charges only new ones. With Most recent first, reading a country stops at the first page that holds only reviews you already have.

## Actor input object example

```json
{
  "apps": [
    "310633997",
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
  ],
  "countries": [
    "us",
    "gb"
  ],
  "allCountries": false,
  "maxReviewsPerCountry": 100,
  "sort": "mostRecent",
  "includeDeveloperResponses": true,
  "onlyNewReviews": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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": [
        "310633997",
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
    ],
    "countries": [
        "us",
        "gb"
    ],
    "maxReviewsPerCountry": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/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": [
        "310633997",
        "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580",
    ],
    "countries": [
        "us",
        "gb",
    ],
    "maxReviewsPerCountry": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/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": [
    "310633997",
    "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
  ],
  "countries": [
    "us",
    "gb"
  ],
  "maxReviewsPerCountry": 100
}' |
apify call themineworks/app-store-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/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/hcx07f7uAyUSiJ6Oh/builds/hcbFgzZ3izOpSF3aR/openapi.json
