# Shopify App Store Scraper - $0.80/1k Apps, Reviews, Pricing (`martin10291/shopify-app-store-scraper`) Actor

Scrape Shopify App Store apps by category, developer or URL for $0.80 per 1000 apps: rating, review count and breakdown, all pricing plans, developer, website, support email, launch date and latest reviews. Monitor new and changed apps.

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

## Pricing

from $0.56 / 1,000 results

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 Scraper - Apps, Ratings, Pricing & Developers

Get structured data from the **Shopify App Store** (apps.shopify.com) in one clean table: every app in a **category**, all apps of a **developer**, or a list of **specific apps**. Each app comes with its **rating**, **number of reviews**, **rating breakdown**, **all pricing plans** with prices and features, **developer name, website, support email and address**, **launch date**, languages, integrations ("Works with"), categories and the **Built for Shopify** badge. Optionally add the **latest merchant reviews** inside each row, at no extra cost.

Built-in **monitoring** tells you which apps are **new** and which **changed** their rating, review count or pricing since the last run, which makes it a ready-made competitor tracker.

No login, no API key, no browser: the actor reads the public App Store pages politely and fast.

### What you get

- **App basics**: name, handle, URL, icon, tagline, short and long description, key features, screenshot count.
- **Ratings**: average rating, total reviews, and the **% of 1-5 star ratings**.
- **Pricing**: pricing summary (free plan / free trial), **every plan** with name, price, billing period, trial and features, plus `lowestPaidPlanUsd` and `highestPlanUsd` for easy sorting.
- **Developer**: name, developer page, **website**, **support email** (as published on the listing), postal address.
- **Listing details**: launch date, languages, "Works with" integrations, categories, Built for Shopify badge, Build Award, position in the category (`listingRank`).
- **Reviews (optional)**: the newest N reviews per app with rating, date, store name, store country, time using the app, text and developer reply.
- **Change tracking**: `changeStatus` (`new` / `changed` / `unchanged`) and a `changes` list (old and new value).

### Use cases

- **Competitor research for app developers**: map a whole category, compare pricing plans and features, find gaps.
- **Market sizing**: how many apps, how many reviews, which price points win in each category.
- **Lead generation for agencies and SaaS**: developers, websites and support emails of Shopify app companies (B2B outreach to companies only, see Legal).
- **Investors and M\&A**: spot fast-growing apps by review growth over time.
- **Review mining**: what merchants love and hate about the leading apps, for product and marketing ideas.
- **Daily monitoring**: get a Slack or email message when a competitor changes its price or its rating moves.

### How to use it (step by step)

1. Click **Try for free** (or **Start**).
2. Add one or more **Categories** (copy the handle from a category URL, e.g. `apps.shopify.com/categories/store-design-site-optimization-seo` → `store-design-site-optimization-seo`), or paste **Specific apps** or **Developers**.
3. Optional: add **Keywords**, a **Minimum rating**, a **Maximum number of reviews** (to find small competitors) or **Latest reviews per app**.
4. Set **Max apps in total** to control the cost.
5. Click **Start** and download the results as **Excel, CSV, JSON or HTML**, or send them to Google Sheets.

### Monitoring and alerts (competitor tracker)

1. Put your competitors in **Specific apps** (or a whole category).
2. Set **Monitoring** to **Only new and changed apps** and give it a **Monitor ID** (e.g. `my-competitors`).
3. Create a **Schedule** in Apify Console (e.g. every day at 8:00).
4. Add an integration: **Slack**, **email**, **Google Sheets**, **Zapier**, **Make** or a **webhook**. You only receive (and only pay for) apps that are new or changed their rating, review count, pricing summary, pricing plans or Built for Shopify badge.

The first run saves all apps as `new`. Later runs only return the changes.

### Input

| Field | Type | Description |
|---|---|---|
| `categories` | array | Category URLs or handles. Top-level categories are expanded into sub-categories. |
| `appUrls` | array | App URLs or handles, e.g. `judgeme`. |
| `developerUrls` | array | Developer URLs or handles, e.g. `https://apps.shopify.com/partners/judge-me`. |
| `keywords` | array | Keep only apps whose name, tagline or description contains a keyword. |
| `includeDetails` | boolean | Pricing plans, developer, website, support email, languages... Default `true`. |
| `reviewsPerApp` | integer | Newest N reviews inside each app row (0-200). Free. |
| `minRating` | integer | Skip apps rated below this. |
| `minReviews` / `maxReviews` | integer | Review count range. |
| `freePlanOnly` | boolean | Only apps with a free plan. |
| `builtForShopifyOnly` | boolean | Only Built for Shopify apps. |
| `monitorMode` | string | `off`, `markChanges` or `newAndChanged`. |
| `monitorId` | string | Separate memory for each watch list. |
| `maxItems` | integer | Hard limit on apps saved (and paid for). |
| `maxPagesPerCategory` | integer | 24 apps per page. |

#### Example input

```json
{
  "categories": ["marketing-and-conversion-upsell-and-bundles"],
  "keywords": ["bundle"],
  "maxReviews": 200,
  "reviewsPerApp": 10,
  "maxItems": 100
}
```

### Output

```json
{
  "handle": "example-reviews-app",
  "name": "Example Product Reviews & UGC",
  "url": "https://apps.shopify.com/example-reviews-app",
  "tagline": "Collect photo and video reviews on autopilot.",
  "rating": 4.9,
  "reviewCount": 43,
  "ratingDistributionPercent": {"5": 95, "4": 2, "3": 0, "2": 0, "1": 2},
  "pricingSummary": "Free plan available. Free trial available.",
  "hasFreePlan": true,
  "hasFreeTrial": true,
  "pricingPlans": [
    {"name": "Free", "price": "Free", "priceUsd": 0, "billingPeriod": null, "trial": null, "features": ["100 monthly orders"]},
    {"name": "Starter", "price": "$10 / month", "priceUsd": 10, "billingPeriod": "month", "trial": "14-day free trial", "features": ["1,000 monthly orders", "Video reviews"]}
  ],
  "lowestPaidPlanUsd": 10,
  "highestPlanUsd": 300,
  "developerName": "Example Inc.",
  "developerUrl": "https://apps.shopify.com/partners/example-inc",
  "developerWebsite": "https://www.example.com/",
  "supportEmail": "support@example.com",
  "developerAddress": "1 Example Street, Denver, CO, US",
  "launchedAt": "2023-10-06",
  "languages": ["English", "Spanish", "French"],
  "worksWith": ["Checkout", "Shopify Flow", "Klaviyo"],
  "categories": ["Product reviews", "Social proof"],
  "builtForShopify": true,
  "listingRank": 7,
  "source": "category:marketing-and-conversion-social-trust-product-reviews",
  "scrapedAt": "2026-10-31T10:00:00Z"
}
```

With `reviewsPerApp` you also get `latestReviews`: `rating`, `date`, `storeName`, `storeCountry`, `usageDuration`, `text`, `developerReply`. With monitoring on you get `changeStatus` and `changes`. *Values above are illustrative.*

### Use it from your code (API)

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("martin10291/shopify-app-store-scraper").call(run_input={
    "categories": ["store-design-site-optimization-seo"],
    "minRating": 4,
    "maxItems": 200,
})
for app in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(app["name"], app.get("rating"), app.get("reviewCount"), app.get("lowestPaidPlanUsd"))
```

```bash
curl -X POST "https://api.apify.com/v2/acts/martin10291~shopify-app-store-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"appUrls": ["judgeme", "loox"], "reviewsPerApp": 20}'
```

### Pricing

**$0.80 per 1,000 apps**, no start fee: cheaper than other Shopify App Store scrapers, and the full details, pricing plans and latest reviews are included in the same price. Apps removed by your filters are free, in monitoring mode unchanged apps are free, and **Max apps** caps the cost of every run.

### FAQ

**Is this allowed?**
The actor reads public App Store pages that anyone can open without an account, at a polite pace, and follows the site's robots.txt (it does not use the search pages). It does not log in or bypass any protection.

**Can I search by keyword?**
Pick the category that fits and add **Keywords**: the actor keeps only apps whose name, tagline or description contains them. This covers the same need without the search pages.

**How many apps can I get?**
A whole category (often hundreds of apps; 24 per page). Add more categories, or developers, for more.

**Where does the support email come from?**
It is the support contact the developer publishes on its own App Store listing. Some listings don't show one.

**How fast is it?**
About 20-40 apps per minute with full details, and much faster with **Include full app details** turned off.

**Something is missing?**
Open an issue on the **Issues** tab with an example input. I usually reply within a day.

### More Actors by Martin Petrov

- **[App Store & Google Play Reviews Scraper](https://apify.com/martin10291/app-reviews-scraper)**: Reviews of iOS and Android apps.
- **[Price Drop & Restock Monitor](https://apify.com/martin10291/price-drop-monitor)**: Watch any store's prices with Slack/Discord alerts.
- **[Cheapest Price Finder](https://apify.com/martin10291/cheapest-price-finder)**: Compare product prices across stores.
- **[Google Trends Scraper](https://apify.com/martin10291/google-trends-explorer)**: Interest over time, regions and related queries.

### Legal

App names, logos and texts belong to their developers and to Shopify. This actor is not affiliated with Shopify. Developer contacts are business contacts published by the companies themselves: use them for relevant B2B outreach only and follow GDPR and CAN-SPAM.

*Last updated: October 31, 2026.*

# Actor input Schema

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

Category URLs or handles from apps.shopify.com/categories/..., e.g. 'marketing-and-conversion-social-trust-product-reviews', 'store-design-site-optimization-seo', 'marketing-and-conversion-upsell-and-bundles'. Top-level categories (e.g. 'store-design') are expanded into their sub-categories.

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

App Store URLs or handles, e.g. 'https://apps.shopify.com/judgeme' or 'klaviyo-email-marketing'. Ideal for competitor monitoring.

## `developerUrls` (type: `array`):

Developer page URLs or handles, e.g. 'https://apps.shopify.com/partners/judge-me'.

## `keywords` (type: `array`):

Keep only apps whose name, tagline or description contains one of these words, e.g. 'tiktok', 'wishlist', 'ai'. Empty = all apps.

## `includeDetails` (type: `boolean`):

Open each app page for pricing plans, developer, support email, website, launch date, languages, integrations, categories and rating breakdown. Turn off for a fast list (name, rating, reviews, pricing summary).

## `reviewsPerApp` (type: `integer`):

Add up to N newest merchant reviews (rating, date, store, country, text, developer reply) inside each app row. 0 = none. Reviews are included at no extra charge.

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

Skip apps rated below this (0-5). 0 = no filter.

## `minReviews` (type: `integer`):

Skip apps with fewer reviews.

## `maxReviews` (type: `integer`):

Skip apps with more reviews (find small, new or under-served competitors). 0 = no limit.

## `freePlanOnly` (type: `boolean`):

Keep only apps that offer a free plan or are free to install.

## `builtForShopifyOnly` (type: `boolean`):

Keep only apps with the Built for Shopify badge.

## `monitorMode` (type: `string`):

'Off' = normal run. 'Mark changes' = every app gets changeStatus (new / changed / unchanged) and a list of changes vs. the last run. 'Only new and changed' = save (and pay for) only apps that are new or changed their rating, review count, pricing or badge.

## `monitorId` (type: `string`):

Name of the watch list for monitoring (use different IDs for different searches).

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

Hard limit on apps saved (and paid for).

## `maxPagesPerCategory` (type: `integer`):

Each category page has up to 24 apps.

## `maxConcurrency` (type: `integer`):

Keep it low to be polite to the App Store (1-5).

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

Usually not needed. Enable Apify Proxy only if you get blocked.

## Actor input object example

```json
{
  "categories": [
    "marketing-and-conversion-social-trust-product-reviews"
  ],
  "includeDetails": true,
  "reviewsPerApp": 0,
  "minRating": 0,
  "minReviews": 0,
  "maxReviews": 0,
  "freePlanOnly": false,
  "builtForShopifyOnly": false,
  "monitorMode": "off",
  "monitorId": "default",
  "maxItems": 20,
  "maxPagesPerCategory": 25,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Apps from the Shopify App Store with ratings, pricing plans and developer details.

# 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 = {
    "categories": [
        "marketing-and-conversion-social-trust-product-reviews"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("martin10291/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 = {
    "categories": ["marketing-and-conversion-social-trust-product-reviews"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("martin10291/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 '{
  "categories": [
    "marketing-and-conversion-social-trust-product-reviews"
  ],
  "maxItems": 20
}' |
apify call martin10291/shopify-app-store-scraper --silent --output-dataset

```

## MCP server setup

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