# Shopify Price & Stock Checker: Competitor Products (Free) (`rivalstock/store-stock-checker`) Actor

Free check of a competitor store: prices, sale prices and in-stock status of products sampled across the catalog, the platform, and whether its units sold can be tracked. Shopify, WooCommerce, T-Soft, ikas, IdeaSoft, OpenCart.

- **URL**: https://apify.com/rivalstock/store-stock-checker.md
- **Developed by:** [Rival Stock](https://apify.com/rivalstock) (community)
- **Categories:** E-commerce, Business
- **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/actors/running/actors-in-store.md#pay-per-usage

## 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 Price & Stock Checker: Competitor Products (Free)

**Check a competitor's online store in a minute - for free.** Paste one or more store URLs. The Actor detects the e-commerce platform, reads a sample of products spread over the whole catalog and gives you:

- **prices and sale prices** of the sampled products, with the discount %
- **in-stock / out-of-stock status** per product
- the store's **price range**, **share of products on sale** and **share in stock**
- the **platform** (Shopify, WooCommerce, T-Soft, ikas, IdeaSoft, OpenCart, GoldenPlanet) and **catalog size**
- **whether the store's units in stock and units sold can be tracked**, with a ready input for the tracker

### Want the competitor's units in stock and units sold?

This free checker tells you **whether** a store publishes exact stock counts - not the counts themselves. Tracking them is what **[Competitor Stock Tracker](https://apify.com/rivalstock/competitor-stock-tracker)** does:

- **exact units in stock** for every product and variant
- **estimated units sold and revenue** per product between runs
- sell-outs, restocks (with units added) and price changes
- an **Excel competitor report** for the last 7 and 30 days: top sellers, best-selling categories, price moves, sell-outs

Every result of this checker includes `trackerInput` - paste it into Competitor Stock Tracker, schedule it daily, done.

### What you get

One row per store. The **Result per store** table in the Output tab shows it at a glance.

```json
{
    "storeUrl": "https://www.example-store.com",
    "platformName": "Shopify",
    "productsChecked": 10,
    "inStockPercent": 92,
    "onSalePercent": 25,
    "currency": "USD",
    "priceMin": 25.0,
    "priceMedian": 95.0,
    "priceMax": 189.0,
    "catalogSize": 1306,
    "sample": [
        {"productTitle": "Leather Wallet", "variantTitle": "Black", "price": 95.0, "listPrice": 120.0,
         "discountPercent": 21, "currency": "USD", "inStock": true,
         "productUrl": "https://www.example-store.com/products/leather-wallet"}
    ],
    "stockTracking": "trackable",
    "stockTrackingText": "This store publishes exact stock counts for most products: its units in stock and units sold can be tracked.",
    "stockCountsPublishedPercent": 80,
    "fullTrackingRunCostUsd": 3.92,
    "trackerUrl": "https://apify.com/rivalstock/competitor-stock-tracker",
    "trackerInput": {"startUrls": ["https://www.example-store.com"], "trackingId": "my-competitors"}
}
```

### Stock tracking verdicts

| `stockTracking` | Products with a published stock count | What Competitor Stock Tracker can do |
|---|---|---|
| `trackable` | 70% or more | Units in stock and units sold for most products |
| `partly-trackable` | 20-69% | Units in stock and units sold for those products |
| `mostly-not-trackable` | under 20% | Prices, sell-outs and restocks; units sold for very few products |
| `not-trackable` | none | Prices, sell-outs and restocks |
| `unreadable` | - | Unsupported platform, blocked, or a headless / custom storefront |

### Input

| Field | What it does |
|---|---|
| **Stores to check** | Home page URLs, up to 10 per run |
| **Products to sample per store** | 10 by default (at most 30), spread over the whole catalog |
| **Proxy** | Datacenter proxy is enough for most stores |

### Cost

The Actor itself is **free** - you only pay the small Apify platform usage of the run (a check of a few stores typically costs well under one cent and fits in Apify's free monthly credit).

### FAQ

**Why are stock counts not shown?** The checker is a quick, free look at a store. Units in stock - and the units sold you get by comparing them over time - come from [Competitor Stock Tracker](https://apify.com/rivalstock/competitor-stock-tracker).

**Can I use it to scrape a whole catalog for free?** No - it samples at most 30 products per store and 10 stores per run. For full catalogs, prices and stock over time, use the tracker.

**Why is a Shopify store `unreadable`?** Some large brands use a headless (custom) storefront instead of a Shopify theme; these are not supported yet. Blocked pages are retried with a new proxy session; if they keep failing, try residential proxy.

**Does it log in or use private APIs?** No. It reads only what any visitor's browser receives: public product pages, sitemaps and public storefront APIs. No personal data is collected.

**Is it legal?** It reads publicly available product information. You are responsible for how you use it: respect the websites' terms of service and the laws that apply to you.

**A result looks wrong?** Open an issue on the Issues tab with the store URL.

# Actor input Schema

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

Home page URLs of up to 10 online stores. Supported platforms: Shopify, WooCommerce, T-Soft, IdeaSoft, ikas, OpenCart, GoldenPlanet (detected automatically).

## `productsPerStore` (type: `integer`):

How many products are read, spread over the whole catalog. 10 is enough for a reliable verdict; at most 30.

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

Datacenter proxy is enough for most stores.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.ridgewallet.com",
    "https://www.cbeaux.com"
  ],
  "productsPerStore": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per store: platform, price range, share on sale and in stock, sampled products with price and in-stock status, and whether units sold can be tracked.

# 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": [
        "https://www.ridgewallet.com",
        "https://www.cbeaux.com"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rivalstock/store-stock-checker").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": [
        "https://www.ridgewallet.com",
        "https://www.cbeaux.com",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("rivalstock/store-stock-checker").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 '{
  "startUrls": [
    "https://www.ridgewallet.com",
    "https://www.cbeaux.com"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rivalstock/store-stock-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rivalstock/store-stock-checker"
        }
    }
}
```

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/pGO01C5b9VI2Ynerh/builds/zd1vm8yUKbJ6KWo1J/openapi.json
