# Shopify App Store Scraper (`gio21/shopify-app-store-scraper`) Actor

Search the Shopify App Store by keyword and extract every app result: name, rating, review count, pricing label, tagline, icon, and Built for Shopify badge.

- **URL**: https://apify.com/gio21/shopify-app-store-scraper.md
- **Developed by:** [Gio](https://apify.com/gio21) (community)
- **Categories:** E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 apps

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 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

Search the [Shopify App Store](https://apps.shopify.com) by keyword and get a clean, structured list of every app that ranks for your terms: name, rating, review count, pricing label, tagline, icon, and the **Built for Shopify** badge. Sponsored results are detected and flagged so you can filter them out (or keep them for ad intelligence).

Great for app developers researching competitors, agencies building app shortlists, and market analysts tracking categories.

### What you get

One dataset item per app:

| Field | Description |
|-------|-------------|
| `name` | App name |
| `handle` | URL slug (stable identifier) |
| `url` | Clean app listing URL |
| `iconUrl` | App icon image URL |
| `rating` | Average star rating (e.g. `4.8`), or `null` if unrated |
| `reviewsCount` | Total number of reviews |
| `pricingLabel` | Pricing summary as shown in the store (e.g. `Free`, `Free plan available`, `From $20/month`) |
| `tagline` | Short app description |
| `builtForShopify` | `true` if the app carries the **Built for Shopify** badge |
| `isAd` | `true` if the result is a sponsored/promoted placement |
| `position` | Rank position on its results page |
| `query` | The search keyword that produced this result |
| `page` | Results page the app was found on |

### Input

```json
{
  "queries": ["email marketing", "upsell"],
  "maxItems": 100,
  "includeAds": false
}
````

| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `queries` | array of strings | — (required) | One or more keywords to search for. |
| `maxItems` | integer | `100` | Max apps to collect per query. Set `0` for all results. |
| `includeAds` | boolean | `false` | Include sponsored results. They are always flagged with `isAd: true`. |

### How it works

Results are read directly from the App Store's server-rendered search pages and paginated automatically until `maxItems` is reached or the results run out. Apps that appear both as a sponsored and an organic result are de-duplicated by handle.

### Notes

- Pricing is returned as the label the store displays, not a parsed numeric price.
- The store chooses the display language by region; field parsing is language-independent, so numeric fields (rating, reviews) are always reliable while `pricingLabel`/`tagline` reflect the store's served language.

# Actor input Schema

## `scrapeAllApps` (type: `boolean`):

Ignore the search keywords and crawl EVERY app in the store via its sitemap (~21,000 apps). Returns name, rating, review count, pricing, tagline and developer per app. Category and the Built for Shopify badge are not available in this mode (use keyword search for those).

## `queries` (type: `array`):

Keywords to search the Shopify App Store for (e.g. "email marketing", "upsell"). One run can process several queries. Ignored when "Scrape the entire App Store" is on.

## `maxItems` (type: `integer`):

Maximum number of apps to collect per query (search mode) or in total (full-catalogue mode). Leave at 0 to collect everything.

## `includeAds` (type: `boolean`):

Include promoted/sponsored results (the "Ads" cards). When off, only organic results are returned. Sponsored apps are always flagged with "isAd": true. Search mode only.

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

Which language sitemap to enumerate in full-catalogue mode (en, de, fr, es, pt\_br, ja, ...). The app set is the same across locales; this only affects the language of taglines.

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

Full-catalogue mode only. If provided, scrape exactly these app detail URLs instead of enumerating the sitemap. Useful to resume a partial run or refresh a subset.

## Actor input object example

```json
{
  "scrapeAllApps": false,
  "queries": [
    "email marketing",
    "upsell"
  ],
  "maxItems": 100,
  "includeAds": false,
  "sitemapLocale": "en",
  "appUrls": []
}
```

# 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 = {
    "queries": [
        "email marketing"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gio21/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 = { "queries": ["email marketing"] }

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shopify App Store Scraper",
        "description": "Search the Shopify App Store by keyword and extract every app result: name, rating, review count, pricing label, tagline, icon, and Built for Shopify badge.",
        "version": "0.0",
        "x-build-id": "aEPLzbqgr2tascpxZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/gio21~shopify-app-store-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-gio21-shopify-app-store-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/gio21~shopify-app-store-scraper/runs": {
            "post": {
                "operationId": "runs-sync-gio21-shopify-app-store-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/gio21~shopify-app-store-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-gio21-shopify-app-store-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": {
                    "scrapeAllApps": {
                        "title": "Scrape the entire App Store",
                        "type": "boolean",
                        "description": "Ignore the search keywords and crawl EVERY app in the store via its sitemap (~21,000 apps). Returns name, rating, review count, pricing, tagline and developer per app. Category and the Built for Shopify badge are not available in this mode (use keyword search for those).",
                        "default": false
                    },
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Keywords to search the Shopify App Store for (e.g. \"email marketing\", \"upsell\"). One run can process several queries. Ignored when \"Scrape the entire App Store\" is on.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max apps",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of apps to collect per query (search mode) or in total (full-catalogue mode). Leave at 0 to collect everything.",
                        "default": 100
                    },
                    "includeAds": {
                        "title": "Include sponsored apps",
                        "type": "boolean",
                        "description": "Include promoted/sponsored results (the \"Ads\" cards). When off, only organic results are returned. Sponsored apps are always flagged with \"isAd\": true. Search mode only.",
                        "default": false
                    },
                    "sitemapLocale": {
                        "title": "Catalogue language",
                        "type": "string",
                        "description": "Which language sitemap to enumerate in full-catalogue mode (en, de, fr, es, pt_br, ja, ...). The app set is the same across locales; this only affects the language of taglines.",
                        "default": "en"
                    },
                    "appUrls": {
                        "title": "Specific app URLs (catalogue resume)",
                        "type": "array",
                        "description": "Full-catalogue mode only. If provided, scrape exactly these app detail URLs instead of enumerating the sitemap. Useful to resume a partial run or refresh a subset.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
