# Shopify App Store Intelligence Scraper (`datapeak/shopify-appstore-intel`) Actor

Scrape the Shopify App Store at scale. Extract app listings, ratings, reviews, pricing plans, categories and developer info as clean JSON/CSV. Built for app founders, competitor research and market intelligence. No login, pay per result, one-click run or API.

- **URL**: https://apify.com/datapeak/shopify-appstore-intel.md
- **Developed by:** [Gal Gilboa](https://apify.com/datapeak) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **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 scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Shopify App Store Scraper — App Data, Pricing Plans & Reviews

Extract structured data from the public **Shopify App Store** (apps.shopify.com): app details, pricing plans, ratings, review counts, categories, launch dates — and optionally **every merchant review** including the reviewer's store name, country, and how long they've used the app.

Built for **Shopify app developers, product teams, and agencies** who need reliable competitor intelligence without copy-pasting listings by hand.

### What data does it return?

For every app:

- App name, slug and canonical URL
- Developer name + partner page URL
- Star rating and total review count
- Pricing summary ("Free to install", "From $24/month", ...)
- **Full pricing plans** — plan name, price, and plan description
- Categories (e.g. Email marketing, SMS marketing)
- Launch date on the App Store
- Supported languages
- Listing description

With `includeReviews` enabled, one item per review:

- Star rating and review date
- Full review text (developer replies excluded from the text)
- Reviewer store name and **store country**
- Time using the app ("Almost 6 years using the app")

### Sample output

App item:

```json
{
  "type": "app",
  "name": "Klaviyo: Email Marketing & SMS",
  "slug": "klaviyo-email-marketing",
  "url": "https://apps.shopify.com/klaviyo-email-marketing",
  "developer": "Klaviyo",
  "developerUrl": "https://apps.shopify.com/partners/klaviyo",
  "rating": 4.6,
  "reviewCount": 2832,
  "pricingSummary": "Free to install",
  "pricingPlans": [
    { "name": "Free", "price": "Free to install", "description": "Email free forever for up to 250 contacts." },
    { "name": "SMS", "price": "$15 / month", "description": "Up to 1250 SMS/MMS credits. Includes carrier fees." },
    { "name": "Email", "price": "$20 / month", "description": "251-500 contacts. Upgrade as you grow." }
  ],
  "categories": [
    { "name": "Email marketing", "slug": "marketing-and-conversion-marketing-email-marketing" },
    { "name": "SMS marketing", "slug": "marketing-and-conversion-marketing-sms-marketing" }
  ],
  "launched": "September 20, 2012",
  "languages": ["English", "French", "Spanish"],
  "description": "Klaviyo is a leading email and sms marketing app for Shopify...",
  "scrapedAt": "2026-07-10T12:00:00.000Z"
}
```

Review item:

```json
{
  "type": "review",
  "appSlug": "klaviyo-email-marketing",
  "appName": "Klaviyo: Email Marketing & SMS",
  "rating": 5,
  "date": "May 2, 2026",
  "text": "We use Klaviyo app for more than 5 years and it did help us recover the carts left...",
  "storeName": "iSmart Home Gadgets",
  "country": "Hong Kong SAR",
  "timeUsingApp": "Over 5 years using the app",
  "scrapedAt": "2026-07-10T12:00:00.000Z"
}
```

### How to use it

Choose any combination of three input modes:

| Input | What it does |
|---|---|
| `appUrls` | Scrape specific apps by URL — best for monitoring a fixed competitor set |
| `categorySlug` | Crawl a whole category (paginated `/all` listing), e.g. `marketing-and-conversion-marketing-email-marketing` |
| `searchKeyword` | Harvest apps from App Store search results |
| `maxApps` | Cap on apps collected from category/search listings |
| `includeReviews` + `maxReviewsPerApp` | Also crawl each app's review pages (10 reviews per page, newest first) |

Tip: category mode is the most reliable way to enumerate many apps. Shopify sometimes renders search results client-side, so search may return fewer results.

### Use cases

- **Competitor monitoring** — schedule a daily/weekly run over your competitor URLs and diff rating, review count, and pricing changes over time.
- **Review mining** — pull 1-star reviews across a category to find recurring complaints (missing features, pricing pain, support gaps) = your product roadmap.
- **Pricing research** — extract every pricing plan in a category to position your own plans with real market data.
- **Market sizing / niche selection** — rank a category by review count and launch date to spot crowded vs. underserved niches.
- **Lead generation** — build lists of app developers by category for partnership outreach.

### Pricing (pay per event)

| Event | Price | Meaning |
|---|---|---|
| `app-scraped` | $0.002 | One app record in the dataset |
| `review-scraped` | $0.0005 | One review record in the dataset |

Example: 100 apps with 50 reviews each = 100 × $0.002 + 5,000 × $0.0005 = **$2.70**.
The Actor respects your maximum cost per run and stops cleanly when the limit is reached.

### Fair use

The Actor only visits public marketing pages, uses low concurrency, and collects no data beyond what any visitor sees in a browser. Review bylines (store name, country) are public information displayed on the listing.

### Integrations

Standard Apify platform features apply: export to JSON/CSV/Excel, API access, webhooks, and scheduled runs for continuous competitor monitoring.

### Development

```bash
npm install
npm test           # parses the saved fixture, 40 assertions
apify run          # local run (uses ./storage)
```

# Actor input Schema

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

Direct Shopify App Store app URLs to scrape, e.g. <code>https://apps.shopify.com/klaviyo-email-marketing</code>. Leave empty if you use a category or search keyword instead.

## `categorySlug` (type: `string`):

A Shopify App Store category to crawl. Accepts a full URL (<code>https://apps.shopify.com/categories/marketing-and-conversion-marketing-email-marketing</code>) or just the slug (<code>marketing-and-conversion-marketing-email-marketing</code>). The Actor automatically uses the paginated <code>/all</code> listing. Find slugs by browsing apps.shopify.com/categories.

## `searchKeyword` (type: `string`):

Keyword for Shopify App Store search, e.g. <code>email marketing</code>. Note: search results are sometimes rendered client-side by Shopify and may return fewer or zero results — category mode is the most reliable way to list many apps.

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

Maximum number of apps to scrape from category/search listings (direct App URLs are always scraped and don't count against this limit).

## `includeReviews` (type: `boolean`):

If enabled, the Actor also crawls each app's /reviews pages and outputs one dataset item per review (rating, date, text, reviewer store name, country, time using the app).

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

Upper limit of reviews scraped per app (10 reviews per page; newest first).

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

Proxy to use for the requests. Apify automatic proxy is recommended for larger runs.

## Actor input object example

```json
{
  "appUrls": [
    "https://apps.shopify.com/klaviyo-email-marketing"
  ],
  "maxApps": 25,
  "includeReviews": false,
  "maxReviewsPerApp": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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/klaviyo-email-marketing"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datapeak/shopify-appstore-intel").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/klaviyo-email-marketing"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("datapeak/shopify-appstore-intel").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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/klaviyo-email-marketing"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call datapeak/shopify-appstore-intel --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=datapeak/shopify-appstore-intel",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/jGkNnJBB5OuNtaWdo/builds/6lgNQwZee9sXouotW/openapi.json
