# Shopify App Store Reviews by Rating (with Store & Tenure) (`reaperoak/shopify-app-reviews-by-rating`) Actor

Scrape Shopify App Store reviews filtered by star rating. Each review includes store name, country, date and how long the merchant used the app. Find what paying merchants complain about.

- **URL**: https://apify.com/reaperoak/shopify-app-reviews-by-rating.md
- **Developed by:** [Owais Khan](https://apify.com/reaperoak) (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 $1.28 / 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

## Shopify App Store Reviews Scraper by Star Rating (with Store, Country & Tenure)

Collect reviews from any [Shopify App Store](https://apps.shopify.com) listing, filtered by star rating. Every review comes with the merchant's **store name, country and how long they had used the app**, so you can tell a day-one install rage-quit from a complaint by someone who stayed for a year. No login, no proxy, no browser.

### What is the Shopify App Store Reviews Scraper?

It is an Apify Actor that reads the public review pages of Shopify apps and returns clean, structured rows. Use it to find what paying merchants complain about in a competitor's app, to monitor reviews of your own app, or to feed a support or product pipeline.

### What data can you extract from Shopify App Store reviews?

| Field | Example |
|---|---|
| `rating` | `2` |
| `date` | `2025-10-07` |
| `edited` | `true` when the merchant came back and edited the review |
| `body` | the review text |
| `store` | `LILIMAUS` |
| `country` | `Germany` |
| `tenureMonths` | `3` (from "3 months using the app") |
| `id`, `appHandle`, `appUrl`, `scrapedAt` | for deduplication and joins |

A `SUMMARY` record in the run's key-value store holds each app's star histogram (how many 1, 2, 3, 4 and 5 star reviews exist), so you can see how much is there before you collect it.

### How to scrape Shopify App Store reviews

1. Open the Actor and paste one or more app handles or URLs, for example `return-prime` or `https://apps.shopify.com/order-printer-pro`.
2. Pick the star ratings you want. Choose 1 and 2 for complaints only.
3. Set the maximum number of reviews per app and, if you like, a start date.
4. Click **Start**. Download the results as JSON, CSV or Excel, or call the Actor through the Apify API, schedules or integrations (Make, n8n, Zapier, Google Sheets).

```json
{
    "apps": ["return-prime", "https://apps.shopify.com/order-printer-pro"],
    "ratings": ["1", "2", "3"],
    "maxReviewsPerApp": 200,
    "since": "2025-01-01",
    "textOnly": true
}
```

- **apps**: app handles or `apps.shopify.com` URLs.
- **ratings**: which star ratings to return, as the strings `"1"` to `"5"`. Leave empty for all five.
- **maxReviewsPerApp**: cap per app. Ratings are read in the order listed, so the cap is spent on the first rating first.
- **since**: skip reviews older than this date (`YYYY-MM-DD`).
- **textOnly**: many merchants leave stars with no text. On by default, so you are not charged for empty reviews.

### How much does it cost to scrape Shopify App Store reviews?

You pay per review returned plus a very small start fee. There is no subscription.

| Reviews | Approximate cost |
|---|---|
| 100 | $0.15 |
| 1,000 | $1.50 |
| 10,000 | $15 |

Paid Apify plans get tiered discounts. Set a maximum cost per run in the run options and the Actor stops when it is reached. You can try it without a card on Apify's free plan.

### Who is it for?

- **App developers and product managers** researching competitors' weak spots before building.
- **Agencies and consultants** who advise merchants on app choices.
- **Researchers and analysts** studying the Shopify ecosystem.
- **Support teams** watching their own app's reviews.

### Frequently asked questions

**Does it need a proxy or a login?** No. It reads public pages at a polite pace, about 10 reviews per page.

**How fast is it?** About 100 reviews per 10 seconds. An app with thousands of reviews takes minutes.

**Why are the star counts approximate for big apps?** Shopify abbreviates counts above 999 ("1.2K") in its histogram.

**What happens if Shopify changes its page layout?** The run fails with an explicit error instead of returning empty data. The Actor is health-checked every night and updated when that happens.

**Is it legal?** It reads publicly visible pages. Review text belongs to the merchants who wrote it and to Shopify, so check that your use complies with Shopify's terms and applicable law.

### Feedback

Found a bug or want another field? Open an issue on the Actor's Issues tab.

# Actor input Schema

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

App handles or URLs, for example <code>return-prime</code> or <code>https://apps.shopify.com/return-prime</code>.

## `ratings` (type: `array`):

Which star ratings to return. Use 1 and 2 for complaints only. Leave empty for all five.

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

Stops collecting for an app after this many reviews.

## `textOnly` (type: `boolean`):

Many merchants leave a star rating with no text. Leave this on to return only reviews that have text.

## `since` (type: `string`):

Skip reviews older than this date. Optional.

## Actor input object example

```json
{
  "apps": [
    "return-prime"
  ],
  "ratings": [
    "2",
    "3"
  ],
  "maxReviewsPerApp": 20,
  "textOnly": true
}
```

# Actor output Schema

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

One item per review: rating, date, body, store, country, tenureMonths, edited, id, appHandle, appUrl, scrapedAt.

## `summary` (type: `string`):

For each requested app: whether it was found, its 1 to 5 star histogram, total reviews, and how many reviews this run returned.

# 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": [
        "return-prime"
    ],
    "ratings": [
        "2",
        "3"
    ],
    "maxReviewsPerApp": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("reaperoak/shopify-app-reviews-by-rating").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": ["return-prime"],
    "ratings": [
        "2",
        "3",
    ],
    "maxReviewsPerApp": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("reaperoak/shopify-app-reviews-by-rating").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": [
    "return-prime"
  ],
  "ratings": [
    "2",
    "3"
  ],
  "maxReviewsPerApp": 20
}' |
apify call reaperoak/shopify-app-reviews-by-rating --silent --output-dataset

```

## MCP server setup

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

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/5SuPo60Ip2F705pmn/builds/XAIPqCatg0EIXtBeG/openapi.json
