# Shopify App Store Scraper – Pricing & Reviews (`refillflows/shopify-app-store-scraper`) Actor

Scrape the Shopify App Store: keyword search rankings, categories, developer portfolios and full app details — pricing plans, launch date, integrations, rating distribution, AI review summary and merchant reviews. Fast HTTP, no browser. Export CSV or call from Python.

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

## Pricing

from $2.00 / 1,000 app with full details

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

Get structured data from the **[Shopify App Store](https://apps.shopify.com)** with this **Shopify App Store Scraper**: **search rankings** for any keyword, every app in a **category**, a **developer's** whole portfolio, and **full app details**. Details include every pricing plan with its features, launch date, languages, integrations ("works with"), Built for Shopify status, star-rating distribution, Shopify's **AI review summary** and developer contact and resources. Merchant **reviews** are optional, with store name, country, usage time and the developer's reply.

It is pure HTTP (no browser), with automatic back-off on rate limits. About 40 apps plus 860 reviews take roughly 90 seconds. Try the prefilled "subscriptions" search, or call the Actor from Python, JavaScript, Make, Zapier, n8n or the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### Why use this Shopify App Store Scraper?

- 📈 **App developers and marketers**: track your keyword rank against competitors daily, watch their pricing changes and read their 1–2★ reviews for feature ideas.
- 🧲 **B2B sales and agencies**: build lead lists of app developers by category, with website, address and support email.
- 💸 **Investors and M\&A**: screen categories by review growth, rating, launch date and pricing.
- 🛍️ **Merchants and consultants**: compare every subscription, reviews or upsell app side by side, plan by plan.
- 🤖 **AI agents (MCP)**: ask things like "what are the top 10 Shopify subscription apps and their cheapest paid plan?" and get fresh, structured answers.

### What data can you extract?

- **Search** by keywords, keeping organic rank position. Sponsored ads are skipped by default.
- **Categories** by URL or slug, for example `marketing-and-conversion-marketing-email-marketing`.
- **Developer pages**, for example `https://apps.shopify.com/partners/klaviyo`.
- **Specific apps** by URL or handle.
- **Fast mode** (`scrapeAppDetails: false`) gets rank, rating, review count, pricing summary and tagline straight from the listing pages, at the lowest price.
- **Reviews**: newest or most relevant first, filtered by stars (for example only 1–2★) and by date (`reviewsSince`). They are nested inside each app record, and the **Reviews** view flattens them into one row per review.
- Clean JSON, CSV or Excel, plus API, webhooks, Zapier, Make, n8n and MCP.

### How to scrape the Shopify App Store

1. Open the [Shopify App Store Scraper](https://apify.com/refillflows/shopify-app-store-scraper) and click **Try for free**.
2. Enter a search keyword (the form is prefilled with `subscriptions`), a category slug, a developer page, or one or more app URLs.
3. Leave **Scrape full app details** on for pricing plans, launch date and integrations. Turn on **Scrape reviews** only if you need merchant review text.
4. Click **Start**. When the run finishes, export the dataset as **CSV**, Excel or JSON, or pull it through the Apify API.

A first run of about 10 apps with full details usually finishes in under a minute and costs a few cents.

### How much does it cost to scrape the Shopify App Store?

| Event | Price |
|---|---|
| Actor start | $0.005 per run |
| App from listing (fast mode) | **$0.80 per 1,000 apps** |
| App with full details | **$2.00 per 1,000 apps** |
| Review | **$0.30 per 1,000 reviews** |

For example, a full category of 300 apps with details costs about $0.60, and 10,000 reviews cost $3. Apify platform usage is included. The free plan's $5 monthly credit covers thousands of apps. Set a max cost per run, or lower **Max apps per search/category/developer**, to cap spending.

### Input

```json
{
  "searchQueries": ["subscriptions"],
  "categoryUrls": ["marketing-and-conversion-marketing-email-marketing"],
  "developerUrls": ["klaviyo"],
  "appUrls": ["https://apps.shopify.com/klaviyo-email-marketing"],
  "maxAppsPerSource": 20,
  "scrapeReviews": true,
  "maxReviewsPerApp": 25,
  "reviewsSince": "2026-08-01"
}
```

### Output

Each app is one record. Here is a shortened real example:

```json
{
  "recordType": "app",
  "handle": "klaviyo-email-marketing",
  "name": "Klaviyo: Email Marketing & SMS",
  "url": "https://apps.shopify.com/klaviyo-email-marketing",
  "iconUrl": "https://cdn.shopify.com/app-store/listing_images/5edd9000b933a8fa88c152d1e498531f/icon/CP6B2OOv3PYCEAE=.png",
  "rating": 4.7,
  "reviewCount": 3434,
  "ratingDistribution": {
    "stars5": 3011,
    "stars4": 82,
    "stars3": 33,
    "stars2": 38,
    "stars1": 270
  },
  "pricingSummary": "Free to install",
  "builtForShopify": false,
  "tagline": "Build email marketing, SMS, and WhatsApp campaigns powered by AI to grow ecommerce sales.",
  "developerName": "Klaviyo",
  "developerUrl": "https://apps.shopify.com/partners/klaviyo",
  "developerWebsite": "https://developers.klaviyo.com/en",
  "supportEmail": "support@klaviyo.com",
  "launchedDate": "2012-09-20",
  "worksWith": ["Checkout", "Shopify Flow", "Meta Advertising", "Recharge"],
  "pricingPlans": [
    {
      "name": "Free",
      "priceText": "Free to install",
      "price": 0,
      "features": ["Up to 250 active profiles", "Up to 500 emails/month"]
    }
  ],
  "reviewsAiSummary": "Merchants highly recommend this app as a powerful, user-friendly email and SMS platform with tight Shopify integration.",
  "searchPosition": 1,
  "isSponsored": false,
  "detailsScraped": true,
  "scrapedAt": "2026-11-10T20:14:04.484Z"
}
```

> **Currency note:** Shopify shows plan prices in the visitor's local currency. On Apify's servers (US) that is USD. The `planCurrency` field always tells you which currency was captured.

### How to scrape Shopify App Store data with Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("refillflows/shopify-app-store-scraper").call(run_input={
    "searchQueries": ["subscriptions"],
    "maxAppsPerSource": 20,
    "scrapeAppDetails": True,
    "scrapeReviews": False,
})
for app in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(app["searchPosition"], app["name"], app.get("pricingSummary"))
```

Schedule the Actor daily and compare `searchPosition` by `handle` to track keyword rank over time. Export to CSV from the dataset tab, or send new rows to Google Sheets, Slack or a webhook.

### Tips

- For daily rank tracking, run fast mode on a schedule and compare `searchPosition` by `handle`.
- For large crawls (thousands of apps or reviews), enable an **Apify datacenter proxy** and raise `maxConcurrency` and `maxRequestsPerMinute`.
- Rating-only reviews (no text) are real and are kept, with `text: null`.

### FAQ

#### Is there an official Shopify App Store API?

Shopify does not offer a public API for App Store search rankings, pricing plans or merchant reviews. This Actor reads the same public pages any visitor can open in a browser, and returns them as structured data.

#### How do I get only 1-star and 2-star reviews?

Turn on **Scrape reviews**, set **Only these star ratings** to `[1, 2]`, and optionally set **Reviews since** so you only pull recent feedback.

#### Can I scrape a whole category?

Yes. Paste a category URL or slug such as `marketing-and-conversion-marketing-email-marketing`, and set **Max apps per search/category/developer**. Each app can include full pricing plans when details mode is on.

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

This Actor only reads **public** pages of the Shopify App Store that any visitor can see without logging in. Review authors are shown as their **store names**, as Shopify publishes them. Use the data responsibly and in line with Shopify's terms and the laws that apply to you, including GDPR and CCPA where relevant.

### Other tools by Refill Flows

- [Luma Events Scraper](https://apify.com/refillflows/luma-events-scraper) — public Luma (lu.ma) events by city, category or calendar.
- [Bulk Lighthouse Audit](https://apify.com/refillflows/bulk-lighthouse-audit) — Lighthouse and Core Web Vitals for many URLs, no API key.

### Support

Found an issue or need a field? Open an issue on the **Issues** tab. Maintained by [Refill Flows](https://apify.com/refillflows).

# Actor input Schema

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

Search the Shopify App Store like a merchant does, e.g. "subscriptions", "reviews", "upsell". Results keep their search ranking position.

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

Category pages, e.g. https://apps.shopify.com/categories/marketing-and-conversion-marketing-email-marketing or just the slug.

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

All apps by a developer, e.g. https://apps.shopify.com/partners/klaviyo

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

Specific apps, e.g. https://apps.shopify.com/klaviyo-email-marketing or klaviyo-email-marketing

## `maxAppsPerSource` (type: `integer`):

Stop paginating after this many apps per source (24 apps per page).

## `scrapeAppDetails` (type: `boolean`):

Open each app page for pricing plans, developer info, launch date, languages, integrations, categories, rating distribution and Shopify's AI review summary. Turn off for fast, cheap ranking/listing data only.

## `excludeSponsored` (type: `boolean`):

Skip paid ad placements in search results so positions reflect organic ranking.

## `scrapeReviews` (type: `boolean`):

Also scrape merchant reviews for every app (one row per review, recordType = review).

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

10 reviews per page.

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

Newest first is best for monitoring.

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

E.g. \[1,2] for complaints only. Empty = all.

## `reviewsSince` (type: `string`):

Only reviews on/after this date (YYYY-MM-DD).

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

Parallel requests.

## `maxRequestsPerMinute` (type: `integer`):

Throttle to stay polite and avoid rate limits. Raise when using proxies.

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

Recommended: Apify datacenter proxy. Note: plan prices are shown in the currency of the proxy/server location (USD on Apify's US servers).

## Actor input object example

```json
{
  "searchQueries": [
    "subscriptions"
  ],
  "categoryUrls": [],
  "developerUrls": [],
  "appUrls": [],
  "maxAppsPerSource": 10,
  "scrapeAppDetails": true,
  "excludeSponsored": true,
  "scrapeReviews": false,
  "maxReviewsPerApp": 50,
  "reviewsSort": "newest",
  "reviewRatings": [],
  "maxConcurrency": 5,
  "maxRequestsPerMinute": 120,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

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

No description

## `stats` (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 = {
    "searchQueries": [
        "subscriptions"
    ],
    "maxAppsPerSource": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("refillflows/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 = {
    "searchQueries": ["subscriptions"],
    "maxAppsPerSource": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("refillflows/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 '{
  "searchQueries": [
    "subscriptions"
  ],
  "maxAppsPerSource": 10
}' |
apify call refillflows/shopify-app-store-scraper --silent --output-dataset

```

## MCP server setup

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