# Shopify App Store Scraper – Apps, Pricing Plans & App Reviews (`openharvest/shopify-app-store-scraper`) Actor

Shopify App Store scraper (apps.shopify.com): search Shopify apps by keyword, list categories, get full app details (pricing plans, rating breakdown, developer, categories, languages, integrations, launch date) and Shopify app reviews with developer replies. No login, no browser.

- **URL**: https://apify.com/openharvest/shopify-app-store-scraper.md
- **Developed by:** [Enes Bulanık](https://apify.com/openharvest) (community)
- **Categories:** E-commerce, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 apps

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 & App Reviews

Shopify App Store scraper (apps.shopify.com): search Shopify apps by keyword, list categories, get full app details (pricing plans, rating breakdown, developer, categories, languages, integrations, launch date) and Shopify app reviews with developer replies. No login, no browser.

**Price: $2 per 1,000 apps and $0.50 per 1,000 reviews.** Inputs that return nothing produce a free error row.

### What data do you get?

**Apps** (`type: "app"`)

- `name`, `handle`, `url`, `tagline`, `shortDescription`, `description`, `keyFeatures`, `iconUrl`, `screenshots`
- `rating`, `reviewCount`, `ratingBreakdown` (percent and count per star), `reviewSummary` (Shopify's AI summary of reviews)
- `pricingSummary`, `hasFreePlan`, `lowestPaidPlanPrice` and every pricing plan: `plans[{name, price, priceAmount, billingPeriod, yearlyPrice, additionalCharges, freeTrial, features[]}]`
- `developer`, `developerUrl`, `developerAddress` (business address published on the listing)
- `categories`, `categoryHandles`, `features` (category features), `builtForShopify`
- `languages`, `worksWith` (integrations), `launchedAt`, `resources` (privacy policy, FAQ, docs)
- `position`, `searchQuery` / `category`, `isAd` – the app's rank in the search results or category

**Reviews** (`type: "review"`)

- `appHandle`, `reviewId`, `reviewUrl`, `rating` (1–5), `date`, `text`
- `storeName` (the reviewing **store's business name**), `country`, `usageDuration` (e.g. "Over 2 years using the app")
- `developerReply` and `developerReplyDate`

### Modes

| Mode | Input | Output |
|---|---|---|
| `search` | `searchQueries` – keywords like `email marketing` | Apps in App Store ranking order (ads skipped unless `includeAds`) |
| `category` | `categories` – handle or URL; top-level categories are expanded into sub-categories | Apps in category order |
| `appDetails` | `appUrls` – handles or URLs | One detailed row per app |
| `reviews` | `appUrls` + `maxReviewsPerApp`, `reviewsSort` (`newest`/`relevance`), `reviewsRating` (`1`–`5`) | Reviews with developer replies |

With `fetchAppDetails: true` (default) search and category results include all app details. Set it to `false` for a quick list (name, rating, review count, pricing summary, short description, Built for Shopify) – same price per app, about 10× faster.

### Use cases

- **Competitor & market research for app developers** – who ranks for your keywords, how competitors price their plans, which features they list.
- **Pricing intelligence** – compare plan prices, free trials and free plans across a whole category.
- **Review mining & product feedback** – collect 1-star reviews of competitors and see what merchants complain about (and how developers reply).
- **Lead generation for agencies & SaaS partners** – find app developers by category, launch date and rating.
- **App Store SEO tracking** – schedule daily searches to track your ranking position for keywords.
- **AI / LLM pipelines** – summarise reviews, cluster feature requests, build market maps.

### Input examples

Search:

```json
{
    "mode": "search",
    "searchQueries": ["email marketing", "product reviews"],
    "maxApps": 50,
    "fetchAppDetails": true
}
```

Reviews (newest 1-star reviews of two apps):

```json
{
    "mode": "reviews",
    "appUrls": ["https://apps.shopify.com/klaviyo-email-marketing", "judgeme"],
    "maxReviewsPerApp": 200,
    "reviewsSort": "newest",
    "reviewsRating": "1"
}
```

### Output example

Real output (shortened):

```json
{
    "type": "app",
    "handle": "judgeme",
    "url": "https://apps.shopify.com/judgeme",
    "name": "Judge.me Product Reviews App",
    "tagline": "Sell more with unlimited product reviews, UGC, star ratings, Google reviews and testimonials",
    "developer": "Judge.me",
    "developerUrl": "https://apps.shopify.com/partners/judge-me",
    "rating": 5,
    "reviewCount": 48130,
    "ratingBreakdown": [{ "stars": 5, "percent": 98, "count": 47000 }, { "stars": 4, "percent": 2, "count": 795 }, { "stars": 1, "percent": 0, "count": 155 }],
    "pricingSummary": "Free plan available. Free trial available.",
    "hasFreePlan": true,
    "lowestPaidPlanPrice": 15,
    "plans": [
        { "name": "Forever Free", "price": "Free", "priceAmount": 0, "billingPeriod": null, "freeTrial": null, "features": ["Unlimited product and store reviews", "Unlimited visual reviews (photos/videos)", "Review widget & star rating badge"] },
        { "name": "Awesome", "price": "$15/month", "priceAmount": 15, "currencySymbol": "$", "billingPeriod": "month", "freeTrial": "15-day free trial", "features": ["AI (replies, summary, translations)", "130+ integrations, inc. Klaviyo, Gorgias", "Google Shopping"] }
    ],
    "builtForShopify": true,
    "categories": ["Product reviews", "SEO"],
    "launchedAt": "2015-06-25",
    "languages": ["English", "Spanish", "French", "Italian", "Portuguese (Brazil)", "German", "Dutch", "Japanese"],
    "worksWith": ["Checkout", "Customer accounts", "Shopify Flow", "Klaviyo: Email Marketing"],
    "description": "Driving traffic is only half the battle – trust is what converts. Judge.me boosts conversion rate with unlimited product reviews, star ratings, and UGC (photo/video)...",
    "reviewSummary": "Merchants recommend this app as a reliable, user-friendly way to collect and showcase product and store reviews...",
    "searchQuery": "product reviews",
    "position": 1,
    "isAd": false
}
```

```json
{
    "type": "review",
    "appHandle": "klaviyo-email-marketing",
    "reviewId": "2380223",
    "reviewUrl": "https://apps.shopify.com/reviews/2380223",
    "storeName": "The Little Rainbow Company Limited",
    "country": "New Zealand",
    "rating": 1,
    "date": "2026-10-01",
    "text": "It’s okay but when trying to cancel it makes it extremely hard. I deinstalled the app wanting to stop it, and got an email that it will automatically bill me...",
    "usageDuration": "Almost 3 years using the app",
    "developerReply": "We appreciate you for sharing this feedback regarding your experience with the cancellation process. A senior member of our Billing Support team has reached out to you directly...",
    "developerReplyDate": "2026-10-02"
}
```

Inputs that return nothing produce a **free** row: `{"type": "error", "errorCode": "NOT_FOUND" | "NO_RESULTS" | "INVALID_INPUT" | "SCRAPE_FAILED", "error": "..."}`.

The dataset has ready-made views: **Apps**, **Pricing plans**, **Reviews** and **Errors**.

### Pricing

Pay-per-event – you only pay for results. Platform usage is included.

| Event | Price | When it is charged |
|---|---|---|
| `app` | **$0.002** per app ($2 / 1,000) | Each app row (with or without full details) |
| `review` | **$0.0005** per review ($0.50 / 1,000) | Each review row |
| Errors | **Free** | Unknown apps/categories, searches without results |

| Job | Cost |
|---|---|
| Top 20 apps for "email marketing" with full details | **$0.04** |
| All ~450 apps of the "Product reviews" category | **$0.90** |
| 1,000 newest reviews of one app | **$0.50** |

Apps are de-duplicated within a run, so an app found by several keywords is charged once. Set **Max cost per run** – the Actor stops cleanly at your budget.

### Use with AI agents (MCP)

This Actor works as a tool for AI agents through the [Apify MCP server](https://mcp.apify.com) (Claude, ChatGPT, Cursor, n8n and other MCP clients). Ask, for example, *"Compare the pricing plans of the top 10 Shopify product review apps"* or *"What do merchants complain about in Klaviyo's 1-star reviews from the last months?"* The agent calls the Actor with:

```json
{
    "mode": "search",
    "searchQueries": ["product reviews"],
    "maxApps": 10,
    "fetchAppDetails": true
}
```

Flat, consistently named fields (`rating`, `reviewCount`, `plans[].priceAmount`, `developerReply`) make the results easy for LLMs to compare and summarise.

### FAQ

**How many reviews can I get?**
All reviews shown on the App Store – the Actor follows the review pages (10 reviews per page) until `maxReviewsPerApp` is reached. Popular apps have tens of thousands; set `0` for all.

**Why are `ratingBreakdown` counts rounded?**
Shopify shows them rounded (e.g. "47K"). Percentages and the total `reviewCount` are exact.

**Are reviewers' personal names collected?**
No. Shopify App Store reviews are written by **stores**; the Actor only stores the store's business name, its country and how long it used the app. No emails, no profile links.

**Why are some prices like "Free to install"?**
Usage-based apps don't have a fixed monthly price. `price` keeps Shopify's wording, `additionalCharges` explains the usage fees, and `priceAmount` is `0`.

**What about ads in search results?**
Sponsored listings are skipped by default so `position` reflects organic ranking. Set `includeAds: true` to keep them (marked `isAd: true`).

**Do I need a proxy?**
No. The App Store is public HTML. The Actor is polite (3 parallel requests, automatic retries with back-off on HTTP 429). For very large runs you can enable Apify Proxy.

**Which language?**
English listing texts (the App Store default). Pricing is shown in USD as published by Shopify.

### Is it legal to scrape the Shopify App Store?

The Actor only extracts **publicly available information** that anyone can see on apps.shopify.com without logging in. It does not log in, does not install apps and does not collect personal data – reviews are attributed to store (business) names only, and developer details are the business information developers publish on their listings. Respect Shopify's Terms of Service, don't use the data for spam, and comply with laws such as GDPR when combining it with other data. If unsure, consult a lawyer. Read more: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Related actors

- E-commerce Product Scraper – Shopify, WooCommerce & any online store
- Apple App Store Scraper – apps, reviews, search & top charts
- Google Play Scraper – apps, reviews, search & top charts
- Chrome Web Store Scraper *(coming soon)*

### Support

Missing a field or found a bug? Open an issue in the **Issues** tab with the app URL or the input you used.

# Actor input Schema

## `mode` (type: `string`):

<b>Search</b>: apps matching keywords. <b>Category</b>: apps listed in a category. <b>App details</b>: full data for the apps you list. <b>Reviews</b>: merchant reviews of the apps you list.

## `searchQueries` (type: `array`):

Keywords to search for, exactly as in the App Store search box, e.g. <code>email marketing</code>, <code>product reviews</code>, <code>upsell</code>.

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

Category URLs or handles, e.g. <code>https://apps.shopify.com/categories/marketing-and-conversion-social-trust-product-reviews</code> or <code>store-design</code>. Top-level categories are expanded into their sub-categories.

## `appUrls` (type: `array`):

App URLs or handles, e.g. <code>https://apps.shopify.com/judgeme</code> or <code>klaviyo-email-marketing</code>.

## `maxApps` (type: `integer`):

How many apps to return for each keyword or category (in App Store order). Set to 0 for all. You pay per app.

## `fetchAppDetails` (type: `boolean`):

For Search and Category modes: open every app page to get pricing plans, developer, categories, languages, integrations, launch date, description and rating breakdown. Turn off for a fast list with name, rating, review count and pricing summary only (same price per app).

## `includeAds` (type: `boolean`):

Search and category pages show paid ads at the top. By default they are skipped so positions reflect organic ranking.

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

How many reviews to return per app. Set to 0 for all (popular apps have tens of thousands). You pay per review.

## `reviewsSort` (type: `string`):

Newest first, or the App Store's "Most relevant" order.

## `reviewsRating` (type: `string`):

Optionally keep only reviews with this star rating (e.g. 1 to analyse complaints).

## `proxyConfiguration` (type: `object`):

Usually not needed. Enable Apify Proxy for very large runs if you see many HTTP 429 (rate limit) warnings.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "email marketing",
    "product reviews"
  ],
  "categories": [
    "marketing-and-conversion-social-trust-product-reviews",
    "https://apps.shopify.com/categories/store-design-site-optimization-seo"
  ],
  "appUrls": [
    "judgeme",
    "https://apps.shopify.com/klaviyo-email-marketing"
  ],
  "maxApps": 100,
  "fetchAppDetails": true,
  "includeAds": false,
  "maxReviewsPerApp": 500,
  "reviewsSort": "newest",
  "reviewsRating": "1",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped items in the default dataset (JSON, CSV, Excel and more via the dataset export).

## `files` (type: `string`):

Records saved in the default key-value store, e.g. the run summary.

# 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 = {
    "mode": "search",
    "searchQueries": [
        "email marketing"
    ],
    "maxApps": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("openharvest/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 = {
    "mode": "search",
    "searchQueries": ["email marketing"],
    "maxApps": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("openharvest/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 '{
  "mode": "search",
  "searchQueries": [
    "email marketing"
  ],
  "maxApps": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call openharvest/shopify-app-store-scraper --silent --output-dataset

```

## MCP server setup

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