# WooCommerce Store Products Scraper (`centspy/woocommerce-products-scraper`) Actor

Scrape any WooCommerce store's product catalog via the public Store API. No proxy, no browser.

- **URL**: https://apify.com/centspy/woocommerce-products-scraper.md
- **Developed by:** [brandon nadeau](https://apify.com/centspy) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 product scrapeds

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

## WooCommerce Store Products Scraper

Extract the **full product catalog** from any WooCommerce store — names, prices (regular and sale), SKUs, stock status, categories, ratings, and image URLs. Ideal for competitor research, price monitoring, product discovery, and market analysis across the WooCommerce ecosystem.

This scraper reads the **public WooCommerce Store API** (`/wp-json/wc/store/v1/products`), the same endpoint headless WooCommerce storefronts use. That means:

- **No proxies needed** — keeps your cost low.
- **No browser** — fast and lightweight.
- **No broken selectors** — it reads a stable JSON API, not fragile HTML.

Pair it with the **Shopify Store Products Scraper** to cover both major independent e-commerce platforms.

### What it does

Give it one or more WooCommerce store URLs and it returns every product, cleanly structured and ready for a spreadsheet, database, or app. Prices are returned as normal decimals (the Store API serves them in minor units — this Actor converts them for you).

### Input

| Field | Type | Description |
|-------|------|-------------|
| `storeUrls` | array | One or more WooCommerce store URLs. Domain alone is fine. **Required.** |
| `maxProductsPerStore` | integer | Cap products per store. `0` = no limit. Default `0`. |
| `onlyInStock` | boolean | Skip out-of-stock products. Default `false`. |
| `includeVariations` | boolean | Include the variation count per product. Default `true`. |
| `includeImages` | boolean | Include image URLs. Default `true`. |

#### Example input

```json
{
    "storeUrls": ["https://store-a.com", "https://store-b.com"],
    "maxProductsPerStore": 500,
    "onlyInStock": true
}
```

### Output

```json
{
    "store": "https://store-a.com",
    "id": 1234,
    "name": "Organic Cotton T-Shirt",
    "sku": "OCT-BLK-M",
    "url": "https://store-a.com/product/organic-cotton-t-shirt",
    "price": 24.99,
    "regularPrice": 29.99,
    "salePrice": 24.99,
    "currency": "USD",
    "onSale": true,
    "inStock": true,
    "averageRating": 4.6,
    "reviewCount": 38,
    "categories": ["Apparel", "T-Shirts"],
    "tags": ["organic", "cotton"],
    "variationCount": 6,
    "images": ["https://store-a.com/wp-content/uploads/..."],
    "featuredImage": "https://store-a.com/wp-content/uploads/..."
}
```

Export to **CSV, JSON, Excel, or HTML**, or pull via the Apify API.

### Pricing

This Actor uses **pay-per-event** pricing — a small charge per product scraped, with platform usage included. A run scraping 1,000 products costs roughly the per-product price × 1,000.

### Notes & limitations

- Some WooCommerce stores disable or restrict the public Store API. For those, the Actor logs a warning and moves on.
- Returns published, customer-facing products.
- `inStock` reflects each product's purchasable status at scrape time.

### Use cases

- **Competitor monitoring** — track catalogs, pricing, and sales across WooCommerce rivals.
- **Price intelligence** — feed regular/sale pricing into your dashboards.
- **Product discovery** — find products and suppliers at scale.
- **Market research** — analyze assortment, categories, and ratings.

# Actor input Schema

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

One or more WooCommerce store URLs. The domain is enough (e.g. mystore.com) — paths are ignored.

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

Cap the number of products scraped per store. Set 0 for no limit (scrape the whole catalog).

## `onlyInStock` (type: `boolean`):

Skip products that are out of stock.

## `includeVariations` (type: `boolean`):

Include the number of variations for each product.

## `includeImages` (type: `boolean`):

Include image URLs for each product.

## Actor input object example

```json
{
  "storeUrls": [
    "https://store-a.com",
    "https://store-b.com"
  ],
  "maxProductsPerStore": 0,
  "onlyInStock": false,
  "includeVariations": true,
  "includeImages": true
}
```

# 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://woocommerce.com"
    ]
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/oGV1nLFPAe1RPu1Pl/builds/epiXqI11GYOl8i0ie/openapi.json
