# Shopify Competitor Tracker (`problemsolver/shopify-competitor-tracker`) Actor

Monitors Shopify stores and detects changes in products, prices, and stock availability. Get notified of new products, removed items, price changes, and stock updates — pay only for the changes that are found.

- **URL**: https://apify.com/problemsolver/shopify-competitor-tracker.md
- **Developed by:** [Dimitris Kouretas](https://apify.com/problemsolver) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 detected changes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

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

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

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

# README

## Shopify Competitor Tracker

Track competitor Shopify stores automatically and get notified only when something actually changes — new products, removed products, price changes, and stock updates.

### Why use this Actor

Manually checking competitor stores is slow and easy to forget. Generic scrapers dump the entire product catalog every run, forcing you to compare thousands of items yourself to spot what's new.

This Actor does the comparison for you. Each run, it checks the store's current catalog against its previous snapshot and returns **only the differences** — nothing else. You pay per detected change, not per product scraped, so monitoring a 10,000-product store costs the same as monitoring a 50-product store when nothing changes.

### What it detects

- 🆕 **New products** added to the store
- ❌ **Products removed** from the store
- 💰 **Price changes**, tracked per variant (size/color-level, not just per product)
- 📦 **Stock changes** — items going out of stock or back in stock

### How it works

1. Give it a list of Shopify store domains.
2. On the first run for each store, it saves a baseline snapshot (no charge).
3. On every following run, it compares the new snapshot to the previous one and outputs one dataset item per detected change.
4. Run it on a schedule (e.g., daily) via Apify Schedules to get ongoing monitoring with zero manual work.

### Input

```json
{
  "domains": [
    "gymshark.com",
    "kyliecosmetics.com",
    "colourpop.com"
  ]
}
```

Add as many Shopify store domains as you want to monitor.

### Output example

```json
{
  "domain": "gymshark.com",
  "type": "stock_change",
  "productId": "6806904471754",
  "variantId": "39799364059338",
  "oldAvailable": true,
  "newAvailable": false,
  "timestamp": "2026-08-11T13:28:57.856Z"
}
```

### Pricing

Pay per event — you're only charged when a real change is detected:

- **Detected change**: $0.01 per change (new product, removed product, price change, or stock change)
- No charge for runs that find nothing new, and no charge for the first (baseline) run on a new store

### Who it's for

- Brands and dropshippers monitoring competitor pricing and stock
- E-commerce teams tracking market moves without manual checks
- Anyone who wants a lightweight, cost-effective way to watch Shopify stores over time

### Data source

This Actor only reads Shopify's public, unauthenticated `/products.json` endpoint — the same product data already visible to anyone browsing the store. No login, scraping of private data, or account access is involved.

# Actor input Schema

## `domains` (type: `array`):

Λίστα από Shopify store domains προς παρακολούθηση (π.χ. gymshark.com)

## Actor input object example

```json
{
  "domains": [
    "gymshark.com",
    "kyliecosmetics.com",
    "colourpop.com"
  ]
}
```

# Actor output Schema

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

Το Dataset αυτής της εκτέλεσης, σε μορφή πίνακα (βλ. dataset\_schema.json για τις στήλες).

# 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 = {
    "domains": [
        "gymshark.com",
        "kyliecosmetics.com",
        "colourpop.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("problemsolver/shopify-competitor-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 = { "domains": [
        "gymshark.com",
        "kyliecosmetics.com",
        "colourpop.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("problemsolver/shopify-competitor-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 '{
  "domains": [
    "gymshark.com",
    "kyliecosmetics.com",
    "colourpop.com"
  ]
}' |
apify call problemsolver/shopify-competitor-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,problemsolver/shopify-competitor-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/J4Zbwb64XXVeQMG8Q/builds/54omhqRIOw7x4bcpi/openapi.json
