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

Scrape the Shopify App Store: full app details with pricing plans, rating, review count, categories, launch date, languages, integrations and Built for Shopify badge. For app URLs, whole categories or the full catalog of 27,000+ apps. Pay only per app returned.

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

## Pricing

from $1.50 / 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 & Ratings

Get structured data from the **Shopify App Store**: every app's pricing plans, rating, review count, categories, launch date, languages, integrations and the Built for Shopify badge. Scrape a list of apps, whole categories in App Store order, or the **full catalog of 27,000+ apps**.

**$1.50 per 1,000 apps.** You only pay for apps that are actually returned. Apps that were removed or don't exist are reported and not charged. Other Shopify App Store scrapers in the Store charge up to $5 per 1,000.

### What you get for each app

| Field | Example |
|---|---|
| `name`, `tagline`, `handle`, `url` | Judge.me Product Reviews App · "Collect unlimited product reviews, star ratings, testimonials" · judgeme |
| `developerName`, `developerPageUrl` | Judge.me · apps.shopify.com/partners/judge-me (public partner page) |
| `rating`, `reviewCount` | 5.0 · 47,909 |
| `pricingSummary`, `freePlan`, `freeTrialDays`, `lowestPaidPrice` | "Free plan available. Free trial available." · true · 15 · 15 |
| `pricingPlans[]` | name, `price`, `currency`, `period`, `yearlyPrice`, `additionalCharges`, `freeTrialDays`, `features[]` |
| `categories`, `categoryHandles` | Product reviews, SEO |
| `launchDate` | 2015-06-25 |
| `languages`, `translatedToEnglish`, `worksWith` | English, German … · true (false if the App Store says "This app is not translated into English") · Klaviyo, Shopify Flow, Checkout … |
| `builtForShopify`, `iconUrl` | true · image URL |
| `introduction`, `description`, `keyBenefits` | the app's own listing texts |
| `categoryHandle`, `categoryPosition`, `sitemapLastmod`, `scrapedAt` | run context (`categoryPosition` = rank in the category) |

### Use cases

- **Competitor research for app developers:** compare pricing plans, free trials and features of every app in your category.
- **Market sizing:** how many apps per category, which ones are Built for Shopify, how ratings and review counts are distributed.
- **Category rankings:** track the position of your app and your competitors in a category over time.
- **Pricing intelligence:** find the typical price points per category, yearly discounts and usage-based charges.
- **Monitoring:** schedule a weekly run with `listingChangedSince` to get only apps whose listing changed.

### How to use

Choose one of three modes:

1. **Specific apps** – add app URLs or handles:

```json
{
  "mode": "apps",
  "appUrls": ["https://apps.shopify.com/judgeme", "klaviyo-email-marketing"]
}
```

2. **Whole categories** – add category URLs. Apps come in App Store order (sponsored placements are skipped). Overview categories such as `store-design` are walked through subcategory by subcategory:

```json
{
  "mode": "category",
  "categoryUrls": ["https://apps.shopify.com/categories/store-design-site-optimization-seo"],
  "maxItems": 200
}
```

3. **Full catalog** – every app from the official App Store sitemap. Use `maxItems` for a sample, or `listingChangedSince` (YYYY-MM-DD) for apps changed since a date:

```json
{
  "mode": "fullCatalog",
  "maxItems": 0,
  "listingChangedSince": "2026-09-01"
}
```

Turn off `includePricingPlans` if you only need the pricing summary. Export as JSON, CSV or Excel, or connect to Google Sheets, Make, Zapier or n8n.

### Speed

The Shopify App Store answers fast requests with "too many requests". The Actor adapts its pace automatically and retries, so you get complete data instead of gaps:

- **Without proxy (default):** about 30 apps per minute – 100 apps in 3–4 minutes, 1,000 apps in about 30 minutes.
- **With Apify Proxy:** about 150–180 apps per minute – 1,000 apps in about 6 minutes. Recommended for the full catalog (about 27,600 apps, roughly 3 hours – raise the run timeout, the default is 1 hour).
- **Run timeout:** the Actor warns at the start if the timeout is too short. About 1.5 minutes before the timeout it stops starting new apps, finishes the running ones and ends normally with the apps scraped so far. The status message tells you how many apps were not scraped. You only pay for apps returned.

### Pricing

Pay per event: **$0.0015 per app returned** ($1.50 per 1,000 apps), plus Apify's tiny actor-start fee. Platform usage is included. Error items (removed apps, wrong handles) are free.

### Use with AI agents (MCP)

This Actor works as a tool for AI assistants and agents – Claude, ChatGPT, Cursor, VS Code, n8n and other MCP clients – through Apify's hosted MCP server. Add this server URL to your client:

```
https://mcp.apify.com?tools=stevenkramp/shopify-app-store-scraper
```

Sign in with your Apify account when asked. Your agent can then call the Actor in plain language, for example: *"Compare the pricing plans of the top 20 product review apps in the Shopify App Store."* – and gets clean, structured JSON back. Runs started by your agent are normal Actor runs on your Apify account at the same pay-per-event price.

### More from stevenkramp

Other Actors by the same developer – same quality standards, pay only for results:

**Search & trends**

- [Google Trends Scraper](https://apify.com/stevenkramp/google-trends-scraper) – interest over time, regions, rising queries
- [Keyword Trends Finder](https://apify.com/stevenkramp/keyword-trends-finder) – keyword ideas with trend direction
- [Google News Scraper](https://apify.com/stevenkramp/google-news-scraper) – news articles with real URLs
- [Google Images Scraper](https://apify.com/stevenkramp/google-images-scraper) – full-size image URLs
- [Google Shopping Scraper](https://apify.com/stevenkramp/google-shopping-scraper) – prices and merchants
- [Google Jobs Scraper](https://apify.com/stevenkramp/google-jobs-scraper) – job listings

**Apps**

- [Google Play Store Scraper](https://apify.com/stevenkramp/google-play-store-scraper) – Android app data and rankings
- [Google Play Reviews Scraper](https://apify.com/stevenkramp/google-play-reviews-scraper) – Play Store reviews and ratings
- [Apple App Store Scraper](https://apify.com/stevenkramp/apple-app-store-scraper) – iPhone, iPad and Mac app data

**Research & media**

- [arXiv Papers Scraper](https://apify.com/stevenkramp/arxiv-papers-scraper) – research papers and abstracts
- [Apple Podcasts Scraper](https://apify.com/stevenkramp/apple-podcasts-scraper) – podcasts with latest episodes

**Websites & places**

- [Website SEO Audit](https://apify.com/stevenkramp/website-seo-audit) – broken links, titles, sitemap
- [Germany Neighborhood Profile](https://apify.com/stevenkramp/germany-neighborhood-profile) – German neighborhood rents and vacancy

### FAQ

**Which language?** English listings (the App Store's main language). Prices are in USD, as billed by Shopify.

**What is not included?** Individual reviews, reviewer names and developer addresses are not collected – only public app listing data and total review counts. Email addresses and phone numbers that developers put into their listing texts (description, benefits, pricing plans) are replaced with `[removed]`.

**Why is `rating` empty for some apps?** New apps without reviews have no rating yet; `reviewCount` is then 0.

**What happens with removed apps?** You get an error item with a short `errorMessage` instead of app data. Error items are not charged. The `error` field tells you why:

- `not-found` – the app page does not exist (removed from the App Store or wrong handle, HTTP 404).
- `delisted` – the page still exists, but the App Store says the app is not currently available.
- `not-an-app-page` – the address leads to another page, for example a category.
- `parse-error` – the page loaded but could not be read. Please open an issue so we can fix it.

**What if `listingChangedSince` is not a valid date?** The run stops right away with a clear message (for example for `2026-02-30`), instead of scraping the whole catalog.

**Something broken?** Open an issue in the Issues tab. Shopify changes its pages from time to time, and we fix scrapers quickly.

# Actor input Schema

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

<b>apps</b>: the apps you list below. <b>category</b>: all apps of one or more categories, in App Store order. <b>fullCatalog</b>: every app in the Shopify App Store (about 27,600, from the official sitemap).

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

Mode <b>apps</b>: app page URLs like https://apps.shopify.com/judgeme or just the handle (judgeme).

## `categoryUrls` (type: `array`):

Mode <b>category</b>: category URLs like https://apps.shopify.com/categories/store-design-site-optimization-seo or the category handle. Overview categories (e.g. store-design) are walked through subcategory by subcategory.

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

Stop after this many apps. 0 = no limit (full catalog: about 27,600 apps). You only pay for apps returned.

## `includePricingPlans` (type: `boolean`):

Add every pricing plan with name, price, billing period, yearly price, trial days, extra charges and plan features. Turn off for a smaller dataset.

## `listingChangedSince` (type: `string`):

Mode <b>fullCatalog</b>: only apps whose listing changed on or after this date (YYYY-MM-DD), based on the App Store sitemap. Ideal for daily or weekly monitoring.

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

Optional. Without proxy the Actor runs at about 30 apps per minute (the App Store limits fast requests). Turn on Apify Proxy for large runs such as the full catalog: about 150-180 apps per minute.

## Actor input object example

```json
{
  "mode": "apps",
  "appUrls": [
    "https://apps.shopify.com/judgeme",
    "klaviyo-email-marketing"
  ],
  "categoryUrls": [
    "https://apps.shopify.com/categories/store-design-site-optimization-seo"
  ],
  "maxItems": 100,
  "includePricingPlans": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `apps` (type: `string`):

One item per app, including pricing plans.

## `overview` (type: `string`):

Key fields as a table.

## `pricing` (type: `string`):

Pricing summary and plans per app.

# 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 = {
    "appUrls": [
        "https://apps.shopify.com/judgeme",
        "klaviyo-email-marketing"
    ],
    "categoryUrls": [
        "https://apps.shopify.com/categories/store-design-site-optimization-seo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("stevenkramp/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 = {
    "appUrls": [
        "https://apps.shopify.com/judgeme",
        "klaviyo-email-marketing",
    ],
    "categoryUrls": ["https://apps.shopify.com/categories/store-design-site-optimization-seo"],
}

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

```

## MCP server setup

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