# Shopify App Store Reviews Scraper with Review Themes (`tidydata-labs/shopify-app-reviews-scraper`) Actor

Scrape Shopify App Store reviews (rating, text, date, merchant country, time using the app, developer reply) and get an automatic report of top complaints and praise with counts and example quotes.

- **URL**: https://apify.com/tidydata-labs/shopify-app-reviews-scraper.md
- **Developed by:** [Tidy Data Labs](https://apify.com/tidydata-labs) (community)
- **Categories:** E-commerce, Marketing
- **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.

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 with Review Themes

Scrape **Shopify App Store** reviews for any app: star rating, review text, date, the merchant's country, how long they'd used the app, and the developer's reply. Then get an automatic **review themes report**: what merchants complain about and praise most, with counts, share of reviews, example quotes, frequent phrases, developer reply rate and reviews by country.

**$0.10 per 1,000 reviews**, plus **$0.05 per app** for the themes report (optional).

### What can you use it for?

- **Shopify app developers:** find the top complaints, track them after each release, and see how quickly competitors reply to bad reviews.
- **Competitor research:** see why merchants leave competing apps (pricing, support, bugs, missing features) before you build or position your own.
- **Agencies and investors:** gauge an app's real reputation beyond its star average.

It reads only Shopify's public, logged-out review pages. It does **not** save the reviewing store's name.

### What data does it extract?

| Field | Example |
|---|---|
| `appHandle`, `appName` | klaviyo-email-marketing, Klaviyo: Email Marketing & SMS |
| `rating` | 1–5 |
| `text` | "Very dynamic and helpful" (null for rating-only reviews) |
| `date` | 2026-10-01 |
| `merchantCountry` | United States |
| `timeUsingApp` | About 1 year using the app |
| `developerReply`, `developerReplyDate` | The developer's public reply |
| `reviewUrl` | https://apps.shopify.com/…/reviews/2383580 |

The **themes report** for each app is saved to the run's key-value store as `THEMES` (all apps) and `THEMES-<app>` (one app). It includes the top complaint themes from 1–2★ reviews and the top praise themes from 4–5★ reviews, each with a count, share of reviews, average rating and real example quotes. It also lists frequent complaint and praise phrases, the rating distribution, the developer reply rate and reviews by merchant country.

Example from Klaviyo's 1–2★ reviews: **Pricing & subscription** came up in 160 of 300 reviews and **Customer support** in 153, with frequent phrases like "customer support", "live chat" and "stay away".

#### Optional AI summary with Claude

Turn on **Add AI summary with Claude** and enter your own Anthropic API key to get a written overview, themes in plain language with quotes, feature requests and suggested fixes. This typically costs a few cents per app on your Anthropic bill.

### How to use it

1. Paste one or more Shopify App Store URLs, e.g. `https://apps.shopify.com/judgeme`, or just the handle `judgeme`.
2. Set the max reviews per app and any filters. Set **Maximum star rating** to 2 to collect only complaints; Shopify filters these server-side, so it's fast.
3. Click **Start**, then download the reviews (JSON, CSV, Excel) and open the `THEMES` record.

### How much does it cost?

- **$0.10 per 1,000 reviews**
- **$0.05 per app themes report.** Turn it off if you only want raw reviews.

Platform usage is included. Example: 1,000 reviews for each of 3 apps, with reports, costs $0.30 + $0.15 = **$0.45**.

### Guides

#### Guide 1: Find a competitor's biggest complaints in 2 minutes

Use this before you build or position a Shopify app. It shows exactly why merchants leave a competing app.

1. Paste the competitor's App Store URL into **Shopify apps**.
2. Set **Maximum star rating** to `2` and **Max reviews per app** to `300`.
3. Keep **Generate review themes report** on and click **Start**.
4. Open the `THEMES` record in the run's **Storage** tab. The top complaint themes (for example pricing, support, bugs, missing features) are listed with counts and real quotes.

```json
{
  "apps": ["https://apps.shopify.com/judgeme"],
  "maxRating": 2,
  "maxReviewsPerApp": 300,
  "generateThemesReport": true
}
```

#### Guide 2: Get new reviews of your app every week

1. Enter your own app's URL and set **Reviews posted after** to the date of your last run.
2. Save the input as a **task**, then add a weekly **Schedule** to it in Apify Console.
3. Connect the task to Slack, email or Google Sheets from the **Integrations** tab, so new reviews reach you automatically.

#### Guide 3: Compare all apps in a category

1. Paste 5 to 10 competing apps into **Shopify apps** (URLs or handles such as `klaviyo-email-marketing`).
2. Set **Max reviews per app** to `500` and keep the themes report on.
3. Download the dataset as CSV or Excel and pivot by `appName` and `rating`. Compare each app's themes report side by side: complaint themes, developer reply rate and reviews by merchant country.

#### Run it from code (API)

Replace `YOUR_APIFY_TOKEN` with your token from **Console > Settings > API & Integrations**. This call runs the actor and returns the results in one request:

```bash
curl -X POST "https://api.apify.com/v2/acts/tidydata-labs~shopify-app-reviews-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"apps":["judgeme"],"maxReviewsPerApp":200,"maxRating":2}'
```

You can do the same with the `apify-client` package for Python or JavaScript, or connect the actor to Make, Zapier, n8n, Google Sheets or a webhook from the **Integrations** tab.

### FAQ

**Do I need a Shopify account or API key?** No. The actor reads public review pages that anyone can open without logging in.

**Can I get only reviews that have text?** Yes. Turn on **Skip rating-only reviews**.

**Can I get only recent reviews?** Yes. Set **Reviews posted after** (YYYY-MM-DD) and keep **Sort by** on `newest`. The run stops as soon as it reaches older reviews.

**Does it collect personal data?** It does not save the reviewing store's name. It keeps the merchant's country and how long they used the app, which Shopify shows publicly.

### Is it legal?

The actor collects only public reviews that anyone can read without logging in, and it leaves out the reviewing store's name. Review text can still contain details that people typed in, so make sure your use of the data complies with applicable laws and Shopify's terms.

### Feedback

Missing a field or theme? Open an issue on the **Issues** tab. We usually reply within a day.

# Actor input Schema

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

Shopify App Store URLs (https://apps.shopify.com/klaviyo-email-marketing) or app handles (klaviyo-email-marketing).

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

Maximum reviews to save per item. You are charged per saved review.

## `sortBy` (type: `string`):

Which reviews to collect first.

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

Only keep reviews with at least this many stars.

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

Only keep reviews with at most this many stars. Set to 2 to collect only complaints (fast: low-rated reviews are fetched directly).

## `reviewedAfter` (type: `string`):

Only keep reviews posted on or after this date (YYYY-MM-DD).

## `skipEmptyReviews` (type: `boolean`):

Leave out reviews that have stars but no text.

## `generateThemesReport` (type: `boolean`):

Build a report per item with top complaint and praise themes, counts, share of reviews, example quotes, frequent phrases and rating by version. Saved to the key-value store as THEMES. Charged once per item.

## `useClaudeSummary` (type: `boolean`):

Also ask Claude to summarize themes, feature requests and suggested fixes. Requires your own Anthropic API key; typically a few cents per item on your Anthropic bill.

## `anthropicApiKey` (type: `string`):

Your Anthropic API key, used only for the AI summary. Stored encrypted.

## `claudeModel` (type: `string`):

Haiku is cheapest; Sonnet gives richer summaries.

## Actor input object example

```json
{
  "apps": [
    "https://apps.shopify.com/klaviyo-email-marketing"
  ],
  "maxReviewsPerApp": 200,
  "sortBy": "newest",
  "minRating": 1,
  "maxRating": 5,
  "skipEmptyReviews": false,
  "generateThemesReport": true,
  "useClaudeSummary": false,
  "claudeModel": "claude-haiku-4-5"
}
```

# Actor output Schema

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

No description

## `themes` (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.shopify.com/klaviyo-email-marketing"
    ],
    "maxReviewsPerApp": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("tidydata-labs/shopify-app-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.shopify.com/klaviyo-email-marketing"],
    "maxReviewsPerApp": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("tidydata-labs/shopify-app-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.shopify.com/klaviyo-email-marketing"
  ],
  "maxReviewsPerApp": 200
}' |
apify call tidydata-labs/shopify-app-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tidydata-labs/shopify-app-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/9b8cRJZYPyBYmHwMn/builds/qcNajFxmaDl9LGIBD/openapi.json
