# Shopify App Store Rank Tracker — Search & Category Ranks (`northbell/shopify-app-store-rank-tracker`) Actor

Track where Shopify apps rank in App Store search and categories: rank, rank change since the last run, new entries, rating, review count, pricing, Built for Shopify and developer. Add your own or competitor apps to get their best rank per keyword. No login.

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

## Pricing

from $0.80 / 1,000 ranked apps

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Shopify App Store Rank Tracker

See where apps rank in **Shopify App Store search** for your keywords and in **category listings** — and how that changes over time. Each row is one app in the store's order with its **rank, rank change since the last run, whether it is new in the results, rating, review count, pricing, Built for Shopify badge and developer**. **$1 per 1,000 ranked apps**, no login, no API key.

Run it again — or put it on a daily schedule — and every row says **what moved since the last run**: previous rank, places gained or lost, and apps that just entered the results. Add your own app or your competitors' to **Watch** and every search and category also gets a **summary row with their best rank and how it moved** — a daily App Store SEO report from one scheduled run.

### What you get

| Field | What it is |
|---|---|
| `search` or `category`, `source` | the keyword (`source: "search"`) or the category slug (`source: "category"`) the row belongs to |
| `rank` | position among the apps in the store's order. **Ads are not counted** |
| `previousRank`, `rankChange`, `isNewInSearch`, `previousObservedAt` | compared with your previous run of the same keyword or category (`null` on the first run; positive `rankChange` = moved up; `isNewInSearch` also applies to category rows) |
| `handle`, `name`, `url`, `iconUrl`, `tagline` | the app and the one-line description the store shows |
| `developer` | the company behind the app |
| `rating`, `reviewCount` | the rating and number of reviews as the store shows them in the list (`null` for apps with no reviews yet) |
| `pricingText` | the store's short pricing text, e.g. "Free plan available", "From $23/month" |
| `builtForShopify` | `true` for apps with the Built for Shopify badge |
| `totalApps` | how many apps the store reports for this search or category |
| `isWatched` | `true` for apps you put in **Watch** (only present when you use Watch) |

With **Watch**, one extra row per search or category (`type: "watch-summary"`): `resultsRead`, `watchedFound`, `bestRank`, `bestRankBefore`, `bestRankChange` (positive = moved up), the list of watched apps with their ranks, `notFound` for watched apps outside the results read, and a `note` when some are missing. `bestRankBefore` is the best previous rank of the apps you watch now. Summary rows are free.

With **Also list ads**, the paid "Ad" listings come out as extra rows with `isAd: true`, `rank: null`, `adPosition` and `adPage` — to see who advertises on a keyword. Ad rows are free and never change anyone's rank.

### Use it for

- **App Store SEO** — track where your app ranks for the keywords that bring installs, and see the day it drops or climbs
- **Competitor watch** — who took the top spots this week, which new apps entered a category, who advertises on your keywords
- **Market research** — what ranks for a topic, how many reviews and what rating it takes, and how apps price

### Input

```json
{ "searches": ["product reviews", "email marketing"], "categories": ["marketing-and-conversion-social-trust-product-reviews"], "maxResultsPerSearch": 24, "watch": ["judgeme", "https://apps.shopify.com/loox"] }
```

Ranks are remembered per keyword and per category in a named key-value store in your Apify account, so the second run already shows rank changes. Schedule it (Apify → Schedules) for a daily history. Turn on **Only output watched apps** to pay only for your watched rows. For a categories-only run, leave **Search terms** empty.

### Pricing

**$1 per 1,000 ranked apps**, plus $0.01 per run. Summary, ad and error rows are free. The $0.01 run-start fee is the one charge every run pays, even one that returns nothing.

### Notes

- Public data only: what anyone sees in the Shopify App Store without signing in, in English. The store's order can change from day to day and ads rotate — that is exactly what `rankChange` shows.
- **Ads are never counted in `rank`.** Each results page starts with a few paid listings, and the same app can also appear in the normal results; only the normal results get a rank.
- **Shopify's own "built-in feature" cards** (for some keywords the store shows one such card, e.g. "Abandoned checkout recovery", above the apps) are not apps and are skipped: not ranked, not returned, not charged. Rank 1 is the first app, the same way the store numbers it.
- Up to **100 apps per search or category** (about 20-24 per page). `isNewInSearch` is only `true` or `false` for ranks the previous run also read; if you ask for more results than last time, apps deeper than the previous run's last rank get `null`.
- **Categories** need the most specific category: use the slug or URL of a page like `apps.shopify.com/categories/marketing-and-conversion-social-trust-product-reviews`. A parent category such as `marketing-and-conversion-upsell-and-bundles` has no ranked list: you get a free error row that lists its sub-categories to use instead.
- `developer` is not shown in the store's lists, so it is read from each app's own page (about 1.5 seconds per new app, one at a time to stay under the store's rate limit; remembered for 30 days, so scheduled runs are fast). It is `null` for an app whose page could not be read in that run and is filled in on the next run. Turn **Read developer names** off for the fastest run; the field is then left out.
- `pricingText` is the app's own listing text, so a few apps show it in another language (e.g. "$9.90/Monat").
- `rating` and `reviewCount` are `null` for apps with no reviews yet. The rating is the rounded figure the store shows; for the exact star-by-star breakdown use the reviews Actor below.
- `isWatched` is only on rows when you use **Watch**; `search` only on keyword rows and `category` only on category rows.

To read the **reviews** behind an app's rating, with the exact star-by-star breakdown, see [Shopify App Reviews Scraper](https://apify.com/northbell/shopify-app-reviews-scraper).

### For AI agents

`{"searches": ["product reviews"], "maxResultsPerSearch": 10}` returns the top 10 apps with rank, rating, review count, pricing and developer. `{"categories": ["marketing-and-conversion-customer-loyalty"], "watch": ["smile-io"]}` adds a summary row with the watched app's best rank. Rows have `type`: `search-result` (add `isAd: true` for ads), `watch-summary` or `error`.

# Actor input Schema

## `searches` (type: `array`):

What you would type in the Shopify App Store search box. Each search returns the apps in the store's order with their rank. Leave empty if you only want categories.

## `categories` (type: `array`):

Category pages to rank, as a slug or URL, e.g. marketing-and-conversion-social-trust-product-reviews or https://apps.shopify.com/categories/marketing-and-conversion-customer-loyalty. Use the most specific category: parent categories have no ranked list.

## `maxResultsPerSearch` (type: `integer`):

How many ranked apps to read for each search and category, in the store's order (about 20-24 per page). Ads are not counted.

## `watch` (type: `array`):

Your own or your competitors' apps, as an app handle or URL (judgeme or https://apps.shopify.com/judgeme). Each search and category then gets a summary row with their best rank and how it moved since the last run.

## `onlyWatched` (type: `boolean`):

Return only the rows of watched apps, plus the summary row. You pay only for those rows.

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

Add the paid "Ad" listings shown above the results as extra rows (isAd true, rank empty) to see who advertises on a keyword. Ads never count toward rank, and these rows are free.

## `includeDeveloper` (type: `boolean`):

Add the developer (company) name to each row. The store's result lists do not show it, so it is read from each app's page and remembered for 30 days. Turn off for the fastest run.

## Actor input object example

```json
{
  "searches": [
    "product reviews"
  ],
  "maxResultsPerSearch": 24,
  "onlyWatched": false,
  "includeAds": false,
  "includeDeveloper": true
}
```

# Actor output Schema

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

Apps in the store's order for each search and category, with rank change, rating, reviews, pricing and developer.

# 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 = {
    "searches": [
        "product reviews"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("northbell/shopify-app-store-rank-tracker").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 = { "searches": ["product reviews"] }

# Run the Actor and wait for it to finish
run = client.actor("northbell/shopify-app-store-rank-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searches": [
    "product reviews"
  ]
}' |
apify call northbell/shopify-app-store-rank-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,northbell/shopify-app-store-rank-tracker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5TfOhxtMK96fLUzrU/builds/Cv5Kjk1pzWokh3yti/openapi.json
