# Shopify App Store Scraper: Apps, Pricing Plans and Reviews (`pistachio_implementation/shopify-app-store-scraper`) Actor

Get Shopify App Store apps by link or category with rating, exact star counts, pricing plans, free trial, Built for Shopify badge, developer, categories, languages and integrations, plus merchant reviews with store name, country and developer reply. Public pages, no login.

- **URL**: https://apify.com/pistachio\_implementation/shopify-app-store-scraper.md
- **Developed by:** [Hay Equipos](https://apify.com/pistachio_implementation) (community)
- **Categories:** E-commerce, Marketing, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Scraper: Apps, Pricing Plans and Reviews

Get clean data on any Shopify app: rating, exact count of reviews at each star level, every pricing plan with its price, billing period, free trial and features, the Built for Shopify badge, developer, categories, feature tags, languages, integrations and launch date. Add merchant reviews with the reviewing store's name and country, how long they used the app, and the developer's reply.

Give it app links or handles, or whole categories, and it reads the public pages of apps.shopify.com. No login, no browser, no proxies.

### What you can use it for

- **Competitor tracking for app developers:** watch rivals' pricing plans, ratings and review velocity; get alerted to new 1 and 2 star reviews.
- **Market research:** map a category (for example product reviews or email marketing) with price points, ratings and Built for Shopify status.
- **Idea validation:** read complaints across the apps in a category to find unmet needs.
- **Partner and agency research:** find the developers behind the top apps in a category.
- **AI agents:** one job, simple inputs, predictable rows.

### Input

| Field | What it does | Default |
|---|---|---|
| Apps | Handles (`judgeme`) or links (`https://apps.shopify.com/judgeme`) | none |
| Categories | Category links or slugs | none |
| Maximum apps per category | Apps taken from each category, in listing order | 48 |
| Open each app page | Full details; off gives the short card data from the category page only | on |
| Include reviews | Also collect merchant reviews, newest first | off |
| Maximum reviews per app | Cap per app | 50 |
| Only reviews with these star ratings | For example 1 and 2 | all |
| Only reviews newer than | A date such as `2026-09-01` | none |
| Maximum rows | Total cap on apps plus reviews | 5000 |

Example input:

```json
{
  "apps": ["judgeme", "https://apps.shopify.com/klaviyo-email-marketing"],
  "categories": ["https://apps.shopify.com/categories/marketing-and-conversion-social-trust-product-reviews"],
  "maxAppsPerCategory": 24,
  "includeReviews": true,
  "maxReviewsPerApp": 20,
  "reviewRatings": ["1", "2"]
}
```

### Output

Each row has a `type`: `app`, `review` or `error`.

App row (trimmed):

```json
{
  "type": "app",
  "handle": "judgeme",
  "url": "https://apps.shopify.com/judgeme",
  "name": "Judge.me Product Reviews App",
  "tagline": "Collect unlimited product reviews, star ratings, testimonials",
  "developer": "Judge.me",
  "developerUrl": "https://apps.shopify.com/partners/judge-me",
  "rating": 5,
  "reviewCount": 47554,
  "ratingHistogram": { "1": 156, "2": 37, "3": 69, "4": 790, "5": 46502 },
  "pricingSummary": "Free plan available. Free trial available.",
  "hasFreePlan": true,
  "hasFreeTrial": true,
  "plans": [
    { "name": "Forever Free", "priceText": "Free", "price": 0, "billingPeriod": null, "freeTrialDays": null, "features": ["Unlimited product and store reviews"] },
    { "name": "Awesome", "priceText": "$15/month", "price": 15, "billingPeriod": "month", "freeTrialDays": 15, "features": ["AI (replies, summary, translations)"] }
  ],
  "builtForShopify": true,
  "categories": [{ "name": "Product reviews", "slug": "marketing-and-conversion-social-trust-product-reviews" }],
  "languages": ["English", "Spanish", "French"],
  "worksWith": ["Checkout", "Shopify Flow", "Klaviyo: Email Marketing"],
  "launchedDate": "2015-06-25"
}
```

Review row:

```json
{
  "type": "review",
  "handle": "google-reviews-trust-badge",
  "reviewId": "875529",
  "reviewUrl": "https://apps.shopify.com/reviews/875529",
  "rating": 1,
  "date": "2022-04-08",
  "text": "Funkar inte alls med våra annonser...",
  "storeName": "DOCTOR_K",
  "storeCountry": "Sweden",
  "timeUsingApp": "About 1 month",
  "developerReply": "Dear Customer, We are sorry you had problems with our app...",
  "developerReplyDate": "2022-04-10"
}
```

Apps that do not exist come back as an `error` row and are free. A `RUN_SUMMARY` record in the run's key value store lists any input that returned nothing.

### Pricing

Pay per event. No subscription and no platform usage charge on top.

| Event | Price |
|---|---|
| App saved | $0.0015 (1.50 dollars per 1,000 apps) |
| Review saved | $0.0003 (0.30 dollars per 1,000 reviews) |

Error rows are free. Example: a weekly check of 50 competitor apps with their 20 newest reviews each costs 50 × $0.0015 + 1,000 × $0.0003 = $0.375.

### Limits

- **Keyword search is not supported**, because the App Store's robots.txt asks automated tools not to read search pages. Use categories or app links instead.
- The App Store shows reviews 10 per page; large review histories take time (one page about every 1.5 seconds, to stay polite).
- Category listings follow the App Store's own order at the time of the run and can include promoted apps.
- Prices are what the listing shows (usually in US dollars). Usage based or additional charges appear only as the listing words them.
- The reviewing store's name and country are what the App Store publishes on each review. No personal contact details are collected.

### FAQ

**Do I need a Shopify account?** No. All pages used are public.

**Can I monitor new reviews?** Yes. Schedule the actor with "Only reviews newer than" set to your last run date, and you pay only for reviews on or after that date rather than the whole history. Every run also saves and charges one app row for each app you list ($0.0015 each), so a daily check of 10 apps adds about $0.015 per run on top of the new reviews.

**Why are star counts exact?** They come from the review filter links on the listing, which carry the precise count rather than the rounded "47K" shown on screen.

**Is this affiliated with Shopify?** No. It is an independent tool that reads public Shopify App Store pages.

# Actor input Schema

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

Apps to fetch, one per line: the handle (judgeme) or the app link (https://apps.shopify.com/judgeme).

## `categories` (type: `array`):

Category links or slugs, one per line, for example https://apps.shopify.com/categories/marketing-and-conversion-social-trust-product-reviews (apps are taken in the order the category lists them).

## `maxAppsPerCategory` (type: `integer`):

Stop collecting a category after this many apps (24 apps per category page).

## `includeAppDetails` (type: `boolean`):

On: full details (pricing plans, star counts, developer, languages, integrations, launch date). Off: category apps come back with the short card data only (name, rating, review count, pricing label, tagline), which is faster.

## `includeReviews` (type: `boolean`):

Also collect merchant reviews for each app, newest first.

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

Stop after this many reviews for each app (10 reviews per page).

## `reviewRatings` (type: `array`):

Optional, for example 1 and 2 to collect only complaints. Leave empty for all ratings.

## `reviewsNewerThan` (type: `string`):

Optional date such as 2026-09-01. Older reviews are not collected and not charged.

## `maxItems` (type: `integer`):

Stop after saving this many rows in total (apps plus reviews).

## Actor input object example

```json
{
  "apps": [
    "judgeme",
    "https://apps.shopify.com/klaviyo-email-marketing"
  ],
  "maxAppsPerCategory": 48,
  "includeAppDetails": true,
  "includeReviews": false,
  "maxReviewsPerApp": 50,
  "maxItems": 5000
}
```

# Actor output Schema

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

All rows the run saved to the default dataset.

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

The RUN\_SUMMARY record: counts and problems for the whole run.

# 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": [
        "judgeme",
        "https://apps.shopify.com/klaviyo-email-marketing"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pistachio_implementation/shopify-app-store-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": [
        "judgeme",
        "https://apps.shopify.com/klaviyo-email-marketing",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("pistachio_implementation/shopify-app-store-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": [
    "judgeme",
    "https://apps.shopify.com/klaviyo-email-marketing"
  ]
}' |
apify call pistachio_implementation/shopify-app-store-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pistachio_implementation/shopify-app-store-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/Nad7KqKOQtP9NSBoR/builds/NDEFcbQW4NKbx7D9n/openapi.json
