# Shopify & WooCommerce Product Scraper + Price Change Monitor (`augmentedhuman/shopify-woocommerce-price-monitor`) Actor

Export full product catalogs (title, SKU, variants, price, compare-at price, stock, images) from any Shopify or WooCommerce store, then schedule it to get only price drops, price increases, restocks, sell-outs and new or removed products. No login, no proxies.

- **URL**: https://apify.com/augmentedhuman/shopify-woocommerce-price-monitor.md
- **Developed by:** [Augmented Human](https://apify.com/augmentedhuman) (community)
- **Categories:** E-commerce, Marketing, Automation
- **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 & WooCommerce Product Scraper + Price Change Monitor

**Export the full product catalog of a Shopify or WooCommerce store – then track competitor price drops, price increases, restocks and sell-outs automatically.** Paste store URLs and get clean product and variant data (title, SKU, price, compare-at price, discount %, currency, stock, images, categories, tags, ratings). Schedule it and switch on **Only changes** to receive just what changed since the last run.

Built and maintained by **Augmented Human**.

✅ No login, no API key · ✅ Auto-detects Shopify vs WooCommerce · ✅ Variant-level SKUs & stock (Shopify) · ✅ Built-in change detection: `new`, `price_decrease`, `price_increase`, `back_in_stock`, `out_of_stock`, `removed` · ✅ Respects robots.txt and store rate limits · ✅ Ready for AI agents (MCP / API)

### What does it do?

- 🛒 **Scrapes WooCommerce products** via the public WooCommerce Store API (`/wp-json/wc/store/v1/products`) – the most reliable mode
- 🛍️ **Scrapes Shopify products** via the public storefront catalogue (`/products.json`) incl. all variants
- 💸 **Competitor price monitoring**: previous price, new price and % change on every price move
- 📦 **Stock monitoring**: back-in-stock / out-of-stock alerts per product or per variant
- 🆕 **Catalog monitoring**: new product launches and removed products
- 🔎 Keyword filter on title, vendor, tags and categories

### Use cases

- E-commerce brands watching competitors' prices and promotions
- Dropshippers & resellers tracking supplier price and stock changes
- Agencies doing catalogue audits, migrations (Shopify ⇄ WooCommerce) and market research
- Price-comparison sites, deal alerts and affiliate feeds
- AI shopping / pricing agents that need a store's current catalogue as JSON

### How to monitor competitor prices (step by step)

1. Add store URLs (`https://competitor.com`). Choose **One row per: Variant** for SKU-level detail.
2. Run once to get the full catalog (all rows are `new`).
3. Turn on **Only changes since previous run**, keep the same **State key**, and create a daily **Schedule**.
4. Connect the dataset to Slack / Google Sheets / e-mail via Apify integrations.

### Input example

```json
{
  "storeUrls": ["https://yithemes.com"],
  "platform": "auto",
  "outputLevel": "product",
  "onlyChanges": true,
  "stateKey": "competitor-watch"
}
```

### Output example (change row)

From a monitoring test run on a WooCommerce store:

```json
{
  "store": "https://yithemes.com",
  "platform": "woocommerce",
  "productId": "1179540",
  "title": "YITH Live Push Notifications for WooCommerce",
  "productType": "simple",
  "categories": ["WooCommerce Extensions"],
  "currency": "USD",
  "price": 89.99,
  "previousPrice": 99.99,
  "compareAtPrice": 109.99,
  "discountPct": 18.2,
  "available": true,
  "averageRating": 4.54, "reviewCount": 35,
  "changeType": "price_decrease",
  "url": "https://yithemes.com/themes/plugins/yith-live-push-notifications-for-woocommerce/"
}
```

Per-store results (OK / failed and why) are saved as `RUN_STATS` in the key-value store.

### How much does it cost?

See the **Pricing** tab for the current price. In monitoring mode only **changed** rows are returned, so watching a large catalogue daily stays cheap. Apify's free plan credits are enough to try it.

### Limitations (please read)

- **WooCommerce-first.** WooCommerce stores with the public Store API enabled work best.
- **Shopify often rate-limits** catalogue reads per IP (HTTP 429). For several Shopify stores or frequent runs, enable **Proxy configuration → Apify Proxy (datacenter)** and keep concurrency low. Stores that block automated access or disallow the endpoint in robots.txt are **skipped and listed in `RUN_STATS` – never bypassed** (e.g. woocommerce.com itself disallows it).
- Headless or custom storefronts may not expose the standard catalogue endpoints.
- Shopify's public catalogue exposes availability, not exact inventory quantities.

### How an AI agent can call it

- **Apify MCP server**: add `augmentedhuman/shopify-woocommerce-price-monitor` as a tool via `https://mcp.apify.com` in any MCP client. The agent passes `storeUrls` and gets products/changes back as JSON.
- **One HTTP call** (synchronous, returns the dataset):

```bash
curl -X POST "https://api.apify.com/v2/acts/augmentedhuman~shopify-woocommerce-price-monitor/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"storeUrls":["https://yithemes.com"],"maxProductsPerStore":100}'
```

- **Python**: `ApifyClient(token).actor("augmentedhuman/shopify-woocommerce-price-monitor").call(run_input={...})`
- Works from Make, Zapier, n8n and LangChain through the standard Apify integrations.

### How does it compare to other product scrapers?

Honest note: there are many Shopify scrapers in Apify Store, and some handle Shopify at scale better (proxy rotation, higher throughput). Choose this Actor if you want **WooCommerce and Shopify in one schema** with **built-in change detection** (price drops, restocks, new/removed products) instead of diffing full exports yourself. If you need Amazon, marketplaces or JavaScript-rendered custom shops, use a different tool.

### FAQ

**Is it legal?** It reads the same public catalogue data any visitor's browser loads, honours robots.txt and rate limits and collects no personal data. Check each store's terms for your use. Not legal advice.

**Does it work with WooCommerce variable products / Shopify Plus?** Yes. WooCommerce rows are product-level with a min/max price range; Shopify can output one row per variant.

**Why was a store skipped?** See `RUN_STATS`: usually robots.txt disallows the catalogue endpoint, the endpoint is disabled, or Shopify rate-limited the request.

**Issues?** Use the **Issues** tab – the Actor is health-checked daily.

# Actor input Schema

## `storeUrls` (type: `array`):

Home page of each store, e.g. https://www.allbirds.com or gymshark.com. Shopify and WooCommerce are detected automatically.

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

Leave on auto-detect unless you know all stores use one platform.

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

Variant level gives SKU-level prices and stock for Shopify stores. WooCommerce is always product level.

## `keywords` (type: `array`):

Optional filter on title, vendor, tags and categories.

## `maxProductsPerStore` (type: `integer`):

Upper bound per store.

## `includeDescription` (type: `boolean`):

Plain-text description (max 5,000 chars).

## `onlyChanges` (type: `boolean`):

Schedule the Actor (e.g. daily) and turn this on: you get - and pay for - only price drops/increases, restocks, sell-outs, new and removed products. The first run returns the full catalog as 'new'.

## `reportRemoved` (type: `boolean`):

Emit a 'removed' row when a product/variant disappears from the catalog.

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

Separate memory per watch-list. Use the same key on every scheduled run.

## `maxConcurrency` (type: `integer`):

Across all stores.

## `minDelaySecs` (type: `number`):

Politeness rate limit per store; robots.txt Crawl-delay is honoured if larger.

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

Optional. Some Shopify stores rate-limit (HTTP 429) heavy catalogue reads from one IP. Enable Apify Proxy (datacenter is enough) for large or frequent watch-lists.

## Actor input object example

```json
{
  "storeUrls": [
    "https://yithemes.com"
  ],
  "platform": "auto",
  "outputLevel": "product",
  "keywords": [],
  "maxProductsPerStore": 5000,
  "includeDescription": false,
  "onlyChanges": false,
  "reportRemoved": true,
  "stateKey": "default",
  "maxConcurrency": 4,
  "minDelaySecs": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

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

No description

# 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 = {
    "storeUrls": [
        "https://yithemes.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("augmentedhuman/shopify-woocommerce-price-monitor").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 = { "storeUrls": ["https://yithemes.com"] }

# Run the Actor and wait for it to finish
run = client.actor("augmentedhuman/shopify-woocommerce-price-monitor").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 '{
  "storeUrls": [
    "https://yithemes.com"
  ]
}' |
apify call augmentedhuman/shopify-woocommerce-price-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,augmentedhuman/shopify-woocommerce-price-monitor"
        }
    }
}
```

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/eRaUDKgJGfBgaPuAc/builds/nNd14QQREvUo7qifz/openapi.json
