# Shopify AppStore Apps and Reviews Scraper (`craftheon/shopify-appstore-apps-and-reviews-scraper`)

A powerful Apify Actor designed to extract comprehensive data from the Shopify App Store. This scraper can discover all available apps, collect detailed application information, and extract user reviews from any Shopify app, making it perfect for market research, and competitor analysis.

- **URL**: https://beta-securitybyobscurity.apify.com/craftheon/shopify-appstore-apps-and-reviews-scraper.md
- **Developed by:** [Craftheon Labs](https://beta-securitybyobscurity.apify.com/craftheon) (community)
- **Categories:** E-commerce, Developer tools, SEO tools
- **Stats:** 19 total users, 13 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$3.90 / 1,000 results

This Actor is paid per result. You are not charged for the Apify platform usage, but only a fixed price for dataset items the Actor outputs.

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

# README

## Shopify AppStore Apps and Reviews Scraper

A powerful Apify Actor designed to extract comprehensive data from the Shopify App Store. This scraper can discover all available apps, collect detailed application information, and extract user reviews from any Shopify app, making it perfect for market research, competitor analysis, and app performance monitoring.

### Use Cases

- **Complete App Store Discovery**: Get a comprehensive list of all available Shopify apps for market analysis
- **Market Research**: Analyze competitors' app features, pricing, and user feedback
- **App Performance Monitoring**: Track your own app's reviews and ratings over time
- **Pricing Analysis**: Compare pricing strategies across similar apps
- **Feature Comparison**: Understand what features successful apps offer
- **Review Sentiment Analysis**: Process user reviews for insights and trends
- **Developer Research**: Identify top app developers and their portfolios
- **Data Pipeline Creation**: Use listing mode to discover apps, then batch process them for detailed analysis

### Features

- **Triple Scraping Modes**: Discover all app URLs, extract detailed app information, or collect user reviews with simple configuration
- **Bulk Processing**: Process multiple Shopify app URLs in a single run
- **Automatic Pagination**: Seamlessly handle multi-page review scraping
- **Rich Data Extraction**: Capture comprehensive app metadata and detailed review information
- **Proxy Support**: Built-in proxy rotation for reliable scraping
- **TypeScript Support**: Fully typed for better development experience

### Data Types

#### Listing Mode

Discovers and extracts all available Shopify app URLs from the app store including:

- Complete app URL catalog
- App handles/identifiers
- Total app count
- Filtered results (excludes non-app pages)

#### App Information Mode

Extracts comprehensive application details including:

- Basic app information (title, description, logo, rating)
- Developer information (name, address)
- Pricing plans and features
- Supported languages
- App categories
- Launch date
- And much more...

#### Review Mode

Captures detailed user review data including:

- Reviewer information and location
- Review content and ratings
- Usage duration
- Review timestamps
- Pagination metadata

### Input Parameters

#### `type` (Required)

Specifies the type of data to scrape.

**Options:**

- `"listing"` - Discover and extract all Shopify app URLs from the app store
- `"app"` - Extract detailed app information
- `"review"` - Extract user reviews and ratings

**Default:** `"app"`

#### `appUrls` (Array, Required for app/review modes)

List of Shopify app URLs to scrape. Each URL should point to a valid Shopify app page.

**Note:** This parameter is not needed when `type` is set to `"listing"`, as the scraper will automatically discover all app URLs from the Shopify App Store sitemap.

**Example:**

```json
[
  {
    "url": "https://apps.shopify.com/judgeme"
  },
  {
    "url": "https://apps.shopify.com/tiktok"
  }
]
```

#### `maxReviewPageNumber` (Number, Optional)

Maximum number of review pages to scrape when using review mode. Controls the depth of review extraction.

**Default:** `5`
**Range:** 1-100 (recommended)

### Output Data

#### Listing Output

When `type` is set to `"listing"`, the scraper returns a comprehensive list of all Shopify app URLs:

```json
[
    {
      "url": "https://apps.shopify.com/judgeme",
      "handle": "judgeme"
    },
    {
      "url": "https://apps.shopify.com/klaviyo-email-marketing",
      "handle": "klaviyo-email-marketing"
    },
    {
      "url": "https://apps.shopify.com/mailchimp",
      "handle": "mailchimp"
    },
    {
      "url": "https://apps.shopify.com/tiktok",
      "handle": "tiktok"
    },
    {
      "url": "https://apps.shopify.com/smile-loyalty-rewards",
      "handle": "smile-loyalty-rewards"
    }
]
```

##### Listing Field Descriptions:

- **`total`**: Total number of apps discovered in the Shopify App Store
- **`urls`**: Array of app objects, each containing:
  - **`url`**: Complete URL to the app's page on Shopify App Store
  - **`handle`**: Unique identifier/slug for the app (extracted from URL)

#### App Information Output

When `type` is set to `"app"`, the scraper returns comprehensive app data:

```json
{
  "url": "https://apps.shopify.com/judgeme",
  "title": "Judge.me Product Reviews App",
  "description": "Show real experiences with unlimited product reviews, store reviews, ratings, and testimonials...",
  "logo": "https://cdn.shopify.com/app-store/listing_images/8cada0f5da411a64e756606bb036f1ed/icon/CIfp9fWd34sDEAE=.png",
  "rating": "5.0",
  "developer": {
    "name": "Judge.me",
    "address": "C/O Buckworths 2nd Floor, 1-3 Worship Street, London, ENG, EC2A 2AB, GB"
  },
  "languages": [
    "English",
    "Spanish",
    "French",
    "Italian",
    "Portuguese (Brazil)",
    "and German"
  ],
  "categories": [
    "Product reviews",
    "SEO"
  ],
  "pricing": "Free plan available",
  "pricings": [
    {
      "planName": "Forever Free",
      "planPrice": "0",
      "planDescription": [
        "Unlimited reviews and review requests",
        "Unlimited photo & video reviews",
        "Reviews widget & star ratings badge",
        "Reviews carousel and UGC media grid",
        "Drive more traffic w/ SEO rich snippets",
        "Official trust badge and medals",
        "Shop App reviews and ratings syndication",
        "Reviews importer and AliExpress sync"
      ]
    },
    {
      "planName": "Awesome",
      "planPrice": "15",
      "planDescription": [
        "All Forever Free features",
        "100+ integrations (Klaviyo,Gorgias, etc)",
        "Advanced display (snippets, Q&A, etc)",
        "Advanced collection (A/B tests, etc)",
        "Full widget and email customization",
        "Push reviews to Google Shopping",
        "Social media push and Meta syndication",
        "All reviews page, AI replies, etc"
      ]
    }
  ],
  "launchedDate": "2015-06-25T00:00:00+08:00"
}
```

##### Field Descriptions:

- **`url`**: Original app URL that was scraped
- **`title`**: Official app name as displayed on the store
- **`description`**: Complete app description including features and benefits
- **`logo`**: Direct URL to the app's logo image
- **`rating`**: Average user rating (1-5 scale)
- **`developer`**: Object containing developer name and business address
- **`languages`**: Array of supported languages for the app
- **`categories`**: App store categories the app belongs to
- **`pricing`**: General pricing information summary
- **`pricings`**: Detailed array of all available pricing plans with features
- **`launchedDate`**: ISO timestamp of when the app was first launched

#### Review Output

When `type` is set to `"review"`, the scraper returns detailed review data:

```json
[
    {
      "reviewer": "Pack Ship Mail Supplies",
      "review_created_date": "2025-07-16T00:00:00+08:00",
      "reviewer_location": "United States",
      "rating": 5,
      "reviewer_latest_used_date": "Over 1 year using the app",
      "review_content": "Excellent support experience! The team was quick, helpful, and went above and beyond to solve layout and integration issues on my product pages. Special thanks to Faissal for the clear communication and hands-on help.What should other merchants know about this app? Judge.me is a reliable and flexible review app with powerful customization options. Even if your store has unique templates or third-party sections, their support team will help you make it work seamlessly. Highly recommended for stores that want control over how and where reviews are displayed."
    },
    {
      "reviewer": "KEYWAY",
      "review_created_date": "2025-07-14T00:00:00+08:00",
      "reviewer_location": "Canada",
      "rating": 5,
      "reviewer_latest_used_date": "Almost 9 years using the app",
      "review_content": "We've had a great experience with Judge.Me. There are a few things that we needed help setting up, but support has been great and responsive! Lot's of widget to adapt to your theme setup and easy to modify if you need customization. Recommended!"
    }
  ]
```

##### Review Field Descriptions:

- **`reviewer`**: Name or business name of the person who left the review
- **`review_created_date`**: ISO timestamp of when the review was posted
- **`reviewer_location`**: Geographic location of the reviewer (country/region)
- **`rating`**: Individual review rating (1-5 scale)
- **`reviewer_latest_used_date`**: How long the reviewer has been using the app
- **`review_content`**: Complete text content of the review

### 🛠️ Usage Examples

#### Example 1: Discover All App URLs

```json
{
  "type": "listing"
}
```

*Note: No `appUrls` parameter needed for listing mode. This will automatically discover all apps in the Shopify App Store.*

#### Example 2: Scrape App Information

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

#### Example 3: Scrape Reviews with Pagination

```json
{
  "appUrls": [
    {"url": "https://apps.shopify.com/judgeme"}
  ],
  "type": "review",
  "maxReviewPageNumber": 10
}
```

#### Example 4: Bulk App Analysis

```json
{
  "appUrls": [
    {"url": "https://apps.shopify.com/mailchimp"},
    {"url": "https://apps.shopify.com/oberlo"},
    {"url": "https://apps.shopify.com/product-reviews"},
    {"url": "https://apps.shopify.com/smile-loyalty-rewards"}
  ],
  "type": "app"
}
```

#### Example 5: Complete Data Pipeline

Step 1 - Discover all apps:

```json
{
  "type": "listing"
}
```

Step 2 - Use the discovered URLs to get detailed app information:

```json
{
  "appUrls": [
    {"url": "https://apps.shopify.com/judgeme"},
    {"url": "https://apps.shopify.com/klaviyo-email-marketing"},
    "...all other URLs from step 1..."
  ],
  "type": "app"
}
```

# Actor input Schema

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

Type of data to scrape

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

Shopify App URLs to start with.

## `maxReviewPageNumber` (type: `integer`):

Maximum number of review pages to scrape

## Actor input object example

```json
{
  "type": "app",
  "appUrls": [
    {
      "url": "https://apps.shopify.com/tiktok"
    }
  ],
  "maxReviewPageNumber": 5
}
```

# 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": [
        {
            "url": "https://apps.shopify.com/tiktok"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("craftheon/shopify-appstore-apps-and-reviews-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": [{ "url": "https://apps.shopify.com/tiktok" }] }

# Run the Actor and wait for it to finish
run = client.actor("craftheon/shopify-appstore-apps-and-reviews-scraper").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": [
    {
      "url": "https://apps.shopify.com/tiktok"
    }
  ]
}' |
apify call craftheon/shopify-appstore-apps-and-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shopify AppStore Apps and Reviews Scraper",
        "description": "A powerful Apify Actor designed to extract comprehensive data from the Shopify App Store. This scraper can discover all available apps, collect detailed application information, and extract user reviews from any Shopify app, making it perfect for market research, and competitor analysis.",
        "version": "0.0",
        "x-build-id": "QUtRylNW324VKF0ld"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/craftheon~shopify-appstore-apps-and-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-craftheon-shopify-appstore-apps-and-reviews-scraper",
                "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/craftheon~shopify-appstore-apps-and-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-craftheon-shopify-appstore-apps-and-reviews-scraper",
                "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/craftheon~shopify-appstore-apps-and-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-craftheon-shopify-appstore-apps-and-reviews-scraper",
                "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": {
                    "type": {
                        "title": "Type",
                        "enum": [
                            "listing",
                            "app",
                            "review"
                        ],
                        "type": "string",
                        "description": "Type of data to scrape",
                        "default": "app"
                    },
                    "appUrls": {
                        "title": "Shopify App URLs (If type is listing, not needed)",
                        "type": "array",
                        "description": "Shopify App URLs to start with.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxReviewPageNumber": {
                        "title": "Review Page Number Max",
                        "type": "integer",
                        "description": "Maximum number of review pages to scrape",
                        "default": 5
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
