# WooCommerce Products Scraper: Prices, Stock & Catalog (`f0rty7even/woocommerce-products-scraper`) Actor

Scrape any WooCommerce store's product catalog via the public Store API: names, prices, sale prices, SKUs, stock, categories, and images. Filter by price, category, stock, and sale across many stores. No login.

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

## Pricing

from $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 Products Scraper: Prices, Stock & Catalog

**Export any WooCommerce store's product catalog into clean, structured data.** This **WooCommerce scraper** pulls every product from a store's public Store API and returns names, prices, sale prices, SKUs, stock status, categories, tags, and images, normalized into one tidy schema. Point it at one store or many, filter by price, category, stock, or sale, and get exactly the products you care about.

No login, no API key, no anti-bot workarounds. Just clean product data.

### Why this actor

- **Whole catalog in one run**: pages through the store's public Store API and returns every product.
- **Many stores at once**: pass a list of stores and get one unified dataset.
- **Prices done right**: the Store API returns prices as raw minor units; this actor converts them to real numbers, with sale price and currency.
- **Real filtering**: keep only what matches your price range, category, tag, stock, or on-sale status, or run a server-side search term.
- **Honest billing**: you are charged per product returned. Stores without the Store API cost you nothing.

### Use cases

- **Competitor price monitoring**: track a rival WooCommerce store's prices, discounts, and stock on a schedule.
- **Dropshipping and reselling**: pull supplier catalogs with SKUs and stock into your own system.
- **Market and pricing research**: compare pricing and assortment across many stores in a niche.
- **Catalog and feed building**: seed a marketplace, comparison site, or product feed from real listings.

### Input

| Field | Description |
|---|---|
| `storeUrls` | One or more WooCommerce store URLs or domains (e.g. `https://barefootbuttons.com`). |
| `search` | Optional server-side search term. |
| `minPrice` / `maxPrice` | Optional. Keep products in this price range (store currency units). |
| `category` | Optional. Keep only products in this category (name or slug, contains match). |
| `tag` | Optional. Keep only products carrying this tag. |
| `inStockOnly` | Keep only products currently in stock. |
| `onSaleOnly` | Keep only products currently on sale. |
| `includeBodyText` | Include the full product description as plain text. |
| `maxProductsPerStore` | Cap on products per store (main cost lever). |

### Output

Each product becomes one dataset item:

```json
{
  "store": "barefootbuttons.com",
  "productId": 1470,
  "name": "Replacement Set Screw and Allen Wrench Kit",
  "slug": "replacement-set-screw-and-allen-wrench-kit",
  "url": "https://barefootbuttons.com/product/replacement-set-screw-and-allen-wrench-kit/",
  "type": "variable",
  "sku": "18-AC-AS-02",
  "price": 1.95,
  "regularPrice": 1.95,
  "salePrice": 1.95,
  "onSale": false,
  "currency": "USD",
  "inStock": true,
  "isPurchasable": true,
  "averageRating": 0,
  "reviewCount": 0,
  "categories": ["Accessories"],
  "tags": [],
  "brands": [],
  "attributes": [{ "name": "Set Screw Size", "options": ["For V1/V2 Mini", "For V1/V2 Tallboy"] }],
  "variationsCount": 2,
  "featuredImage": "https://barefootbuttons.com/wp-content/uploads/....png",
  "images": ["https://barefootbuttons.com/wp-content/uploads/....png"],
  "shortDescription": "..."
}
```

### Pricing

Pay per result: you are charged **per product returned**. There is no monthly fee, and no charge for stores that do not expose the Store API or return nothing.

### Notes

- **Public data only.** This actor reads the store's own public Store API (`/wp-json/wc/store/...`), the same data any shopper's browser can load. It does not access orders, customers, or anything behind the store admin.
- **Coverage.** Most WooCommerce stores expose the Store API. A minority disable it or sit behind a security plugin that blocks it; those return an error item and are not billed. The default datacenter proxy works for most stores; if one blocks it, switch the proxy setting to Residential for the best coverage.

# Actor input Schema

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

One or more WooCommerce store URLs or domains (e.g. https://barefootbuttons.com or barefootbuttons.com).

## `search` (type: `string`):

Only products matching this search term (matched server-side by the store). Leave empty for the whole catalog.

## `minPrice` (type: `integer`):

Keep only products priced at or above this (in the store's own currency units). Leave empty for no minimum.

## `maxPrice` (type: `integer`):

Keep only products priced at or below this. Leave empty for no maximum.

## `category` (type: `string`):

Keep only products in this category (case-insensitive contains match on category name or slug). Leave empty for all.

## `tag` (type: `string`):

Keep only products carrying this tag (case-insensitive contains match on tag name or slug). Leave empty for all.

## `inStockOnly` (type: `boolean`):

Keep only products that are currently in stock.

## `onSaleOnly` (type: `boolean`):

Keep only products that are currently on sale.

## `includeBodyText` (type: `boolean`):

Include the full product description as plain text (HTML stripped). Off by default to keep records small.

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

Cap on products scraped per store (main cost lever).

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

Proxy used to reach the stores. The default rotating datacenter proxy is included on all plans and works for most stores. If a specific store (behind a security plugin) blocks datacenter IPs, switch this to Residential for the best coverage.

## Actor input object example

```json
{
  "storeUrls": [
    "https://barefootbuttons.com"
  ],
  "inStockOnly": false,
  "onSaleOnly": false,
  "includeBodyText": false,
  "maxProductsPerStore": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One normalized product per item. Export as JSON, JSONL, CSV, or Excel.

# 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://barefootbuttons.com"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("f0rty7even/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://barefootbuttons.com"],
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/v68mIS5QyaltNdxeL/builds/6sbgZrDy9fVdY4nac/openapi.json
