# WooCommerce Products Scraper | Prices & Stock Updates (`signalfoundryhq/woocommerce-product-radar`) Actor

Export public WooCommerce product catalogs with currency-aware prices, stock flags, SKUs and product links. Track changed versions. $1.50 per 1,000 products.

- **URL**: https://apify.com/signalfoundryhq/woocommerce-product-radar.md
- **Developed by:** [Signal Foundry](https://apify.com/signalfoundryhq) (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.28 / 1,000 delivered product versions

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 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

## WooCommerce Products Scraper | Prices & Stock Updates

Export factual product catalog metadata from the public WooCommerce Store API. Prices use the source currency minor unit, so 9900 with USD/2 becomes 99.00.

You can use a store home URL or a shop, category or product page. When a page URL does not resolve to a catalog directly, the Actor reads its published WordPress API link to locate the store. A category or product URL selects the store's catalog; use the input filters to narrow the returned products.

### Try a ready-made example

- [Open the shop-URL product price example](https://console.apify.com/create-task-from-example/udV92nriOroety66F)
- [Open the in-stock product watchlist](https://console.apify.com/create-task-from-example/f5y6qL0Gg5vl4l1Aj)

Opening an example copies its saved setup into your Apify account. Set a small result limit and maximum charge, start the Actor, then open the run's dataset and export CSV or JSON. Replace the demo URL with a store whose public catalog you can access. One delivered product version costs **$0.0015** at the base rate, including platform usage; there is no start fee. Eligible Apify plans have lower event prices.

#### Preview the exported data

Three records from a successful run using `https://demos.flatsome.com/shop/` on October 20, 2026. These are demo catalog values; source prices and availability can change.

| Product ID | Name | Price | Currency | In stock |
| --- | --- | --- | --- | --- |
| 15 | Woo Logo | 18.00 | USD | false |
| 19 | Premium Quality | 20.00 | USD | true |
| 22 | Ship Your Idea | 20.00 | USD | true |

Each row also includes the store URL, product URL, SKU when published, regular and sale prices, stock flags, categories and the source API URL. For a compact CSV, select `name`, `sku`, `price`, `currency`, `inStock` and `productUrl` in the dataset export. Enable `inStockOnly` to omit products that are not explicitly in stock.

### What you can do

- Track published product prices and stock flags on store watchlists.
- Build a currency-aware product comparison spreadsheet.
- Refresh permitted catalogs and skip unchanged product versions.

### Pricing

The base price is $0.0015 per delivered normalized product version ($1.50 per 1,000), with plan discounts where shown in Apify. There is no start fee. Apify platform usage is included in this Actor's per-event price. Skipped unchanged versions are not charged. Set a maximum charge in Apify Console or use the API maxTotalChargeUsd parameter.

### Quick start

Paste this input in the Actor and choose Start:

```json
{
  "storeUrls": [
    "https://demos.flatsome.com"
  ],
  "maxProductsScanned": 100,
  "maxItems": 25
}
```

For repeated calls, enable onlyNew and reuse stateKey for the same feed. To replay records, change the key or use resetState. History retains the last 25,000 delivered fingerprints; older versions may be delivered again after eviction. Changing your filters with the same key does not clear history. onlyNew scans up to the source scan limit before skipping remembered versions, so repeated runs may read more source records than they deliver. maxItems caps delivered rows.

### API and export

POST your input to https://api.apify.com/v2/acts/signalfoundryhq~woocommerce-product-radar/runs?maxTotalChargeUsd=0.05 using an Apify token in the Authorization header. After the run succeeds, read defaultDatasetId from the run and retrieve /v2/datasets/{datasetId}/items. Apify also provides CSV and other exports in Console. OUTPUT contains delivered, duplicatesSkipped and eventChargeLimitReached. Never put tokens in public URLs.

Every record includes signalId, recordFingerprint, source, collectedAt and a source page/API URL. Metadata changes create new fingerprints. No background schedule is created by this Actor.

### Scope and limitations

Requires an accessible public WooCommerce Store API. Store home URLs, including WordPress installations in a subdirectory, use `/wp-json/wc/store/v1/products` directly. After a missing or non-JSON route, a same-origin WordPress discovery link can locate that endpoint or the `?rest_route=/` equivalent. If no link is advertised, provide the installation home URL.

Some stores disable the API or block cloud requests. A denied catalog request is not retried through another route. Robots exclusions and source access blocks are respected. No login, admin API, orders or customer data. Password-protected products are excluded. Variable products remain parent records; exact inventory counts and every variant are not retrieved. Currency conversion, shipping and tax calculations are not performed. Up to 10 stores and 2,000 scanned/delivered products per run. Use sources you are permitted to access; public API access does not transfer rights to product content.

Source documentation: [WooCommerce public Store API](https://developer.woocommerce.com/docs/apis/store-api/resources-endpoints/products/) and [WordPress API discovery](https://developer.wordpress.org/rest-api/using-the-rest-api/discovery/). SignalFoundry is independent of the source platform.

### Related tool

Need a store's published email, phone number or social links? Run the store's website URL through [Website Contact Scraper](https://apify.com/signalfoundryhq/website-contact-extractor). It is a separate Actor priced at $0.003 per delivered contact-page version, with source URLs for each record.

### Support

Open an issue on this Actor with the run URL and a non-sensitive description of the problem. Do not include tokens, passwords or private data.

# Actor input Schema

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

1 to 10 public WooCommerce store URLs. Home URLs work directly; shop, category or product pages can locate the catalog when they advertise a same-origin WordPress API link. The URL identifies the store; it does not filter a category.

## `nameContains` (type: `string`):

Case-insensitive substring.

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

Keep products explicitly marked in stock.

## `maxProductsScanned` (type: `integer`):

Source rows examined across stores before filtering.

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

Reuse a key for one watchlist; change it for another.

## `onlyNew` (type: `boolean`):

Skip previously delivered versions. No duplicate charge; no deletion events or field-level diffs.

## `resetState` (type: `boolean`):

Clear saved fingerprints and replay matching current records.

## `maxItems` (type: `integer`):

One current product version per dataset row. Variable products remain parent records.

## Actor input object example

```json
{
  "storeUrls": [
    "https://demos.flatsome.com"
  ],
  "inStockOnly": false,
  "maxProductsScanned": 500,
  "stateKey": "default",
  "onlyNew": false,
  "resetState": false,
  "maxItems": 100
}
```

# Actor output Schema

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

No description

## `summary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("signalfoundryhq/woocommerce-product-radar").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("signalfoundryhq/woocommerce-product-radar").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 '{}' |
apify call signalfoundryhq/woocommerce-product-radar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,signalfoundryhq/woocommerce-product-radar"
        }
    }
}
```

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/oRfVj4IbCkzt1aBuU/builds/v3s0B6tmXPidx4U8o/openapi.json
