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

Scrape apps.shopify.com: app name, developer, website, rating, review count, pricing plans, categories, launch date and merchant reviews. Category or app URLs in, clean JSON out.

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

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## 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, Developers & Reviews

Pull structured data from the **Shopify App Store** (apps.shopify.com): app name, developer, developer website, star rating, review count, pricing plans, categories, launch date and descriptions. You can also pull **merchant reviews**: rating, date, text, store name, country, how long the store has used the app, and the developer's reply. Give it a category URL or a list of app URLs and get clean JSON, CSV or Excel back.

### What you can use it for

- **Competitor monitoring for Shopify app developers:** track rivals' ratings, review counts, pricing changes and new reviews.
- **Market research:** size a category, see which pricing models win, and find niches with weak or poorly rated apps.
- **Lead generation:** build lists of app vendors with developer websites, for agencies, SaaS tools and investors.
- **Review mining:** pull merchant complaints and feature requests to inform your roadmap or sales pitch.
- **Ecosystem analytics:** follow launches by date, and track category trends over time with scheduled runs.

### Input

| Field | Description |
|---|---|
| `startUrls` | App pages (`https://apps.shopify.com/klaviyo-email-marketing`) or category pages (`https://apps.shopify.com/categories/marketing-and-conversion-marketing-email-marketing`, including `/all` lists, which are paginated automatically). |
| `maxApps` | Maximum number of apps overall (default 50). |
| `includeReviews` | Also scrape reviews (default false). |
| `maxReviewsPerApp` | Newest reviews per app (default 50). |
| `maxConcurrency`, `delayMs` | Politeness settings (defaults: 2 parallel requests, ~1 s randomized delay). |
| `proxyConfiguration` | Optional Apify Proxy. |

```json
{
  "startUrls": [{ "url": "https://apps.shopify.com/categories/marketing-and-conversion-marketing-email-marketing" }],
  "maxApps": 30,
  "includeReviews": true,
  "maxReviewsPerApp": 20
}
```

### Output

Each dataset item has `type: "app"` or `type: "review"`. The **Apps** and **Reviews** views in the dataset tab separate the two. Sample (one plan shown):

````json
[
  {
    "type": "app",
    "handle": "klaviyo-email-marketing",
    "url": "https://apps.shopify.com/klaviyo-email-marketing",
    "name": "Klaviyo: Email Marketing & SMS",
    "tagline": "Build email marketing, SMS, and WhatsApp campaigns powered by AI to grow ecommerce sales.",
    "shortDescription": "Klaviyo is a leading email and sms marketing app for Shopify. Improve your marketing ROI with our templates to deliver personalized email and sms campaigns.",
    "description": "Go beyond the basics with the Klaviyo marketing app. New stores get a guided setup — sign-up form, welcome email, and abandoned-checkout flow — without leaving Shopify Admin. Unify data from 350+ integrations and boost marketing performance with campaigns, smart segmentation, and automated workflows from Klaviyo’s AI Agents. Over 117k brands use Klaviyo and Shopify to grow faster with personalized emails, SMS, WhatsApp messages, and marketing automation tools that turn browsers into buyers.",
    "developer": "Klaviyo",
    "developerUrl": "https://apps.shopify.com/partners/klaviyo",
    "developerWebsite": "https://developers.klaviyo.com/en",
    "rating": 4.7,
    "reviewCount": 3426,
    "pricingSummary": "Free to install",
    "pricingPlans": [
      {
        "name": "Free",
        "price": "Free to install",
        "features": [
          "Set up directly in Shopify Admin",
          "One place for forms, emails, and flows",
          "Up to 250 active profiles",
          "Up to 500 emails/month",
          "Built-in dashboard & reporting",
          "AI-assisted, on-brand content",
          "Guided onboarding setup",
          "Seamless migration to full platform"
        ]
      }
    ],
    "categories": [
      "Email marketing",
      "SMS marketing"
    ],
    "launchedAt": "September 20, 2012",
    "iconUrl": "https://cdn.shopify.com/app-store/listing_images/5edd9000b933a8fa88c152d1e498531f/icon/CP6B2OOv3PYCEAE=.png",
    "scrapedAt": "2026-11-01T17:42:04.621Z"
  },
  {
    "type": "review",
    "appHandle": "flow",
    "appName": "Shopify Flow",
    "reviewId": "2410529",
    "rating": 4,
    "date": "October 28, 2026",
    "text": "Insbesondere für technisch versierte Nutzer ein sehr praktisches Tool. Die Übersichtlichkeit bestehender Flows leidet etwas, bei vielen Flows.",
    "storeName": "Spieltraum Shop",
    "storeLocation": "Germany",
    "usageDuration": "Over 2 years using the app",
    "developerReply": null,
    "reviewUrl": "https://apps.shopify.com/reviews/2410529"
  }
]```

A full sample run (30 apps, 360 reviews) is in `sample-output.json`.

### Responsible scraping
- The Actor reads only public pages and never logs in.
- It follows apps.shopify.com/robots.txt. **Search URLs (`?q=`) are refused**, and so are `/internal/`, `/services/`, `/login/` and tracking parameters.
- Requests are polite by default: low concurrency, randomized delays and retries with backoff.
- Review data includes merchant store names. Process it in line with GDPR/CCPA and your own legal obligations. Shopify's Terms of Service restrict automated access, so you are responsible for how you use this tool and the data.

### Pricing (suggestion, not final)
Suggested **pay-per-result** pricing: **~$0.002 per app** and **~$0.0008 per review**, so 1,000 apps cost about $2 and 10,000 reviews about $8. Platform usage is included. *This is a draft suggestion only and has not been set on Apify.*

### FAQ
**Does it use the search page?** No. robots.txt disallows search, so start from categories or app URLs instead.
**How fresh is the data?** It is live on every run. Schedule the Actor for daily or weekly monitoring.
**Some fields are null?** Free apps often have no plan cards, and some developers list no website.



# Actor input Schema

## `startUrls` (type: `array`):

App pages (https://apps.shopify.com/klaviyo-email-marketing) or category pages (https://apps.shopify.com/categories/marketing-and-conversion or .../all). Search URLs (?q=) are skipped because robots.txt disallows them.
## `maxApps` (type: `integer`):

Maximum number of apps to scrape across all start URLs.
## `includeReviews` (type: `boolean`):

Also scrape merchant reviews for each app.
## `maxReviewsPerApp` (type: `integer`):

Newest-first reviews per app (10 per page).
## `maxConcurrency` (type: `integer`):

Parallel requests. Keep low to be polite.
## `delayMs` (type: `integer`):

Randomized delay (0.5x–1.5x) before each request.
## `proxyConfiguration` (type: `object`):

Optional Apify proxy.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://apps.shopify.com/categories/marketing-and-conversion-marketing-email-marketing"
    }
  ],
  "maxApps": 50,
  "includeReviews": false,
  "maxReviewsPerApp": 50,
  "maxConcurrency": 2,
  "delayMs": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

# Actor output Schema

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

Dataset items: Shopify App Store apps and reviews.

# 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 = {
    "startUrls": [
        {
            "url": "https://apps.shopify.com/categories/marketing-and-conversion-marketing-email-marketing"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("genesis-tools/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 = {
    "startUrls": [{ "url": "https://apps.shopify.com/categories/marketing-and-conversion-marketing-email-marketing" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("genesis-tools/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 '{
  "startUrls": [
    {
      "url": "https://apps.shopify.com/categories/marketing-and-conversion-marketing-email-marketing"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call genesis-tools/shopify-app-store-scraper --silent --output-dataset

```

## MCP server setup

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