# Shopify App Store Scraper - Reviews, Replies, Opportunity Intel (`philzx/shopify-app-intelligence`) Actor

Scrape Shopify App Store reviews, developer replies, complaints, feature requests, and opportunity scores. HTTP-only. $0.002/app. 7-day trial.

- **URL**: https://apify.com/philzx/shopify-app-intelligence.md
- **Developed by:** [Filipe Alves](https://apify.com/philzx) (community)
- **Categories:** Lead generation, Developer tools, E-commerce
- **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/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 — Reviews, Replies & Opportunity Intelligence

Scrape the **Shopify App Store** for app metadata, reviews, developer replies, and competitive intelligence. Discover what apps are failing their users — and where the opportunities are.

Find apps by **direct URL**, **keyword search**, or the **full 22,000+ catalog** via Shopify's official sitemap. Every result includes structured app data, complete reviews with store details, and automatic opportunity analysis.

No login. No API key. No browser automation — just clean, structured JSON.

---

### Why this scraper

- **App metadata** — name, developer, rating, review count, pricing summary, screenshots
- **Complete reviews** — full text, star rating, store name, country, how long they've used the app
- **Developer replies** — captured when the developer responds to reviews
- **Structured pricing plans** — individual pricing tiers extracted from the listing
- **Complaint tagging** — reviews automatically categorized: bugs, pricing complaints, UX issues, missing features, support problems, performance, integration issues
- **Feature requests** — extracted from review text ("I wish it had...", "it needs...")
- **Sentiment analysis** — per-review sentiment scoring
- **Opportunity score** — 0–100 rating of how viable it is to build a competing app
- **Opportunity summary** — human-readable analysis of what's wrong and what's missing

---

### Input example

Scrape a single app:

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

Search by keyword:

```json
{
  "mode": "search",
  "search": ["email marketing", "inventory management"],
  "maxApps": 10
}
```

Discover from the full catalog:

```json
{
  "mode": "sitemap",
  "maxApps": 25,
  "maxReviewsPerApp": 50
}
```

### Input fields

| Field | Type | Description |
|---|---|---|
| `startUrls` | string\[] | Direct Shopify App Store URLs |
| `mode` | string | `urls`, `search`, or `sitemap` |
| `search` | string\[] | Keywords to search (mode=`search`) |
| `maxApps` | integer | Max apps to scrape (0 = all) |
| `maxReviewsPerApp` | integer | Max reviews per app (0 = none) |
| `includeReviews` | boolean | Scrape reviews (default: true) |
| `enrichWebsite` | boolean | Visit developer website for extra info |

### Output

Each dataset item is one app with embedded reviews:

```json
{
  "slug": "klaviyo-email-marketing",
  "title": "Klaviyo: Email Marketing & SMS",
  "developer": "Klaviyo",
  "rating": 4.7,
  "reviewCount": 2962,
  "pricingSummary": "Free to install",
  "pricingPlans": [
    { "name": "Free", "price": "Free to install" },
    { "price": "$20/month" },
    { "price": "$45/month" }
  ],
  "reviews": [
    {
      "rating": 5,
      "date": "June 10, 2026",
      "storeName": "Acme Store",
      "country": "United States",
      "usedAppFor": "Over 3 years using the app",
      "body": "Excellent app, seamless integration with Shopify...",
      "developerReply": {
        "date": "Klaviyo replied June 12, 2026",
        "body": "Thank you for the kind words..."
      }
    }
  ],
  "featureRequests": [
    "more customizable email templates",
    "better analytics dashboard"
  ],
  "opportunity": {
    "score": 32,
    "summary": "26 positive reviews (87%), 4 negative (13%). Top complaint: UX (50% of negative reviews). Developer replied to 18 reviews. LOW opportunity — market well-served.",
    "complaints": { "ux": 2, "support": 2, "bug": 1 }
  }
}
```

### Use cases

- **Competitive research** — find apps with high installs but low ratings and specific complaints
- **Product discovery** — extract feature requests across an entire category to find gaps in the market
- **Lead generation** — build lists of Shopify developers with app metadata and website enrichment
- **Market monitoring** — track rating changes, review volume, and developer responsiveness over time
- **Investment research** — evaluate the Shopify App Store ecosystem for acquisition or investment targets

### Pricing

**$0.002 per app** — includes metadata, reviews, developer replies, and all intelligence features. 7-day free trial.

# Actor input Schema

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

Direct Shopify App Store URLs to scrape. Supports app pages (apps.shopify.com/{slug}). When provided, mode/search are ignored.

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

'urls' = use startUrls only. 'search' = search by keyword. 'sitemap' = discover from Shopify's official sitemap (full catalog).

## `search` (type: `array`):

Keywords to search on the Shopify App Store (e.g. 'email marketing'). One result page per keyword. Only used when mode='search'.

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

Maximum number of apps to extract (0 = all found). Useful to control time and cost.

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

Maximum number of reviews to extract per app (0 = none). Reviews include full text, rating, store name, country, usage duration, and developer replies.

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

Scrape reviews from the app's /reviews page. Includes developer replies when present.

## `enrichWebsite` (type: `boolean`):

Visit the developer's website and extract title, description, and visible text snippet. Useful for lead generation.

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

Proxy settings for the scraper.

## Actor input object example

```json
{
  "startUrls": [],
  "mode": "urls",
  "search": [],
  "maxApps": 0,
  "maxReviewsPerApp": 50,
  "includeReviews": true,
  "enrichWebsite": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "startUrls": [],
    "search": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("philzx/shopify-app-intelligence").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": [],
    "search": [],
}

# Run the Actor and wait for it to finish
run = client.actor("philzx/shopify-app-intelligence").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 '{
  "startUrls": [],
  "search": []
}' |
apify call philzx/shopify-app-intelligence --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shopify App Store Scraper - Reviews, Replies, Opportunity Intel",
        "description": "Scrape Shopify App Store reviews, developer replies, complaints, feature requests, and opportunity scores. HTTP-only. $0.002/app. 7-day trial.",
        "version": "0.0",
        "x-build-id": "zRUdg0cwWZ3sewxez"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/philzx~shopify-app-intelligence/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-philzx-shopify-app-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/philzx~shopify-app-intelligence/runs": {
            "post": {
                "operationId": "runs-sync-philzx-shopify-app-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/philzx~shopify-app-intelligence/run-sync": {
            "post": {
                "operationId": "run-sync-philzx-shopify-app-intelligence",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Shopify App URLs",
                        "type": "array",
                        "description": "Direct Shopify App Store URLs to scrape. Supports app pages (apps.shopify.com/{slug}). When provided, mode/search are ignored.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "urls",
                            "search",
                            "sitemap"
                        ],
                        "type": "string",
                        "description": "'urls' = use startUrls only. 'search' = search by keyword. 'sitemap' = discover from Shopify's official sitemap (full catalog).",
                        "default": "urls"
                    },
                    "search": {
                        "title": "Search query",
                        "type": "array",
                        "description": "Keywords to search on the Shopify App Store (e.g. 'email marketing'). One result page per keyword. Only used when mode='search'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxApps": {
                        "title": "Max apps to scrape",
                        "minimum": 0,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of apps to extract (0 = all found). Useful to control time and cost.",
                        "default": 0
                    },
                    "maxReviewsPerApp": {
                        "title": "Max reviews per app",
                        "minimum": 0,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of reviews to extract per app (0 = none). Reviews include full text, rating, store name, country, usage duration, and developer replies.",
                        "default": 50
                    },
                    "includeReviews": {
                        "title": "Include reviews",
                        "type": "boolean",
                        "description": "Scrape reviews from the app's /reviews page. Includes developer replies when present.",
                        "default": true
                    },
                    "enrichWebsite": {
                        "title": "Enrich developer website",
                        "type": "boolean",
                        "description": "Visit the developer's website and extract title, description, and visible text snippet. Useful for lead generation.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings for the scraper.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
