WooCommerce Products Scraper: Prices, Stock, Images & SKUs avatar

WooCommerce Products Scraper: Prices, Stock, Images & SKUs

Pricing

from $0.35 / 1,000 product scrapeds

Go to Apify Store
WooCommerce Products Scraper: Prices, Stock, Images & SKUs

WooCommerce Products Scraper: Prices, Stock, Images & SKUs

Export a public WooCommerce catalog: name, decimal price, sale price, stock, SKU, categories, images, and URL. No login. Filter by category, keyword, stock, or sale. changesOnly diffs a saved baseline; the first run only records it.

Pricing

from $0.35 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

dheeraj kumar

dheeraj kumar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Features

Limited permissions

Share

Who it's for: competitor researchers and analysts who need a structured export of a public WooCommerce catalog.

Export products to CSV, JSON, or Excel, with no plugin on the store: name, decimal price, regular and sale price, discount, stock, categories, tags, images, attributes, SKU, and URL. Prices are major units (16.50), not cents. No login, no API keys, and no browser. Filter by category, keyword, in-stock, or on-sale. Stores that do not expose a public catalog return an error row and are not charged per product.

outputMode: "changesOnly" is optional. The first run only records a baseline (_change: "new"). Later runs return products that are new, changed, or removed. It is not an instant diff of a store you have never scraped.

For AI agents

Call this actor through the Apify MCP server. maxChargeUsd is this actor's cap. MCP callOptions.maxTotalChargeUsd is a separate platform cap; set both before a paid call. Omit storeUrls for the built-in demo (no per-product charge). A real run needs at least one public store URL.

List prices (unchanged): run start $0.001, each product $0.0005. In changesOnly, each new or changed product also costs $0.002; a removed row costs $0.002 and does not include the product charge. Five products in the default all mode are about $0.0035. Error rows are free.

There is no compact key-value artifact. Read the dataset.

Full export:

{ "storeUrls": ["https://jococups.com"], "maxProductsPerStore": 5, "outputMode": "all", "maxChargeUsd": 1 }

Product fields: recordType product, name, price, regularPrice, salePrice, currency, inStock, sku, url, categories, images. One store-summary row per store (productsScraped, truncated, spentUsdSoFar).

On-sale slice:

{ "storeUrls": ["https://jococups.com"], "maxProductsPerStore": 5, "onSaleOnly": true, "maxChargeUsd": 1 }

onSale, salePrice, and discountPercent are filled when the store marks the product on sale. salePrice is null otherwise.

Baseline, then a later diff (use the same monitorKey):

{ "storeUrls": ["https://jococups.com"], "maxProductsPerStore": 5, "outputMode": "changesOnly", "monitorKey": "joco-sample", "maxChargeUsd": 1 }

The first run's products are _change new. A later run adds changedFields on changes, or _change removed with only store and productId.

Try it in one click

The input form on this page is already prefilled with the example below — press Start and it runs as-is.

{ "storeUrls": ["https://jococups.com"], "maxProductsPerStore": 10, "maxChargeUsd": 0.5 }

What you get:

  • Up to 10 real products from jococups.com: name, price, sale price/discount %, stock, categories, images, attributes and SKU.
  • About 10 rows for roughly $0.006 at the listed pricing (run-start $0.001 + $0.0005/product).
  • Leave Store URLs empty to see demo rows instead, or point it at any other WooCommerce store.

What you can use it for

  • Competitor price research: export a rival store's whole catalog with current and sale prices.
  • Catalog migration and backups: pull products, images, categories and attributes out of a WooCommerce shop.
  • Product feeds and market research: build datasets of products, brands and price points across many stores.
  • Sale tracking: export only on-sale items, with the discount percent already calculated.

Need to track changes over time instead (new products, price changes, stock flips)? Use WooCommerce Catalog Monitor.

Input

  • Store URLs: one or more WooCommerce stores, e.g. https://example-store.com.
  • Max products per store (default 1,000): caps reads and cost.
  • Categories (optional): category slugs, names or numeric IDs, e.g. sale, t-shirts.
  • Search keyword (optional): the store's own product search.
  • In-stock only / On-sale only (optional).
  • Maximum charge per run (default $5): hard cap; the run stops cleanly before exceeding it.

Example input

{
"storeUrls": ["https://offermanwoodshop.com", "https://jococups.com"],
"maxProductsPerStore": 1000,
"categories": ["sale"],
"onSaleOnly": false,
"maxChargeUsd": 5
}

Output

One row per product (recordType: product), plus one store-summary row per store. Prices are decimals in the store's currency.

Example output

{
"recordType": "product",
"store": "https://offermanwoodshop.com",
"productId": 43116,
"name": "Sale OWS T-Shirts",
"slug": "ows-t-shirt-2",
"url": "https://offermanwoodshop.com/store/shop-fashion/ows-t-shirt-2",
"sku": "AP-OWSTSHIRT-SALE",
"type": "variable",
"price": 18.0,
"regularPrice": 32.0,
"salePrice": 18.0,
"onSale": true,
"discountPercent": 43.8,
"priceRange": null,
"currency": "USD",
"inStock": true,
"onBackorder": false,
"lowStockRemaining": null,
"categories": [
{"id": 474, "name": "Sale", "slug": "sale"},
{"id": 91, "name": "Shop Fashion", "slug": "shop-fashion"}
],
"tags": [],
"images": [
"https://offermanwoodshop.com/wp-content/uploads/2018/08/cropped-redshirt2-scaled-1.jpg"
],
"attributes": [
{"name": "Sizes", "values": ["S", "M", "L", "XL"]},
{"name": "Colors", "values": ["Navy", "Royal Blue"]}
],
"variationCount": 8,
"averageRating": 0.0,
"reviewCount": 0,
"shortDescription": "100% cotton.",
"description": "Special cut-price on select colors and sizes.",
"scrapedAt": "2026-10-17T02:12:40+00:00"
}

Run it with empty input to see demo rows.

Monitor mode

Schedule this actor and set Output mode to changesOnly to get a diff instead of a full re-export: the first run records a baseline, and every run after that reports only products that are new, changed (with a changedFields list), or removed since last time. Removed rows carry just the product's key fields. Use Monitor name if you run more than one monitor and want to keep their baselines separate, and Report removed products / Fields to ignore to tune what counts as a change. Default mode (all) is unaffected — it always exports everything, every run. In changesOnly, every new/changed row is billed as a changed row in addition to the normal per-product charge — see Pricing below; a removed row is billed as a changed row only (there's no per-product charge for a product that wasn't actually fetched this run); unchanged rows are free and aren't pushed.

Pricing: pay per event

EventPrice
Run started$0.001 per run
Product scraped$0.0005 per product ($0.50 per 1,000)

A 1,000-product store costs about $0.50. Stores that can't be read (unsupported, private/B2B shops, network errors) return an error row and aren't charged per product.

Works on Apify’s Free plan — $5/mo platform usage, no credit card required to try. Actor event prices above are unchanged.

Use it from code

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("dheerajitbhu/woocommerce-products-scraper").call(run_input={
"storeUrls": ["https://jococups.com"],
"maxProductsPerStore": 500,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("recordType") == "product":
print(row["name"], row["price"], row["currency"], row["url"])

Limits

  • Works with the large majority of public WooCommerce stores. Stores behind bot challenges, password protection or B2B logins return an error row.
  • Light, paced reads, to be polite to stores.

Integrations

This actor runs on the Apify platform, so it connects to the tools you already use without custom code:

  • Make, Zapier, n8n — trigger a run on a schedule or webhook, and feed exported product rows straight into your workflow using Apify's integrations for each tool.
  • Google Sheets — push exported products to a spreadsheet with the Apify Google Sheets integration, no code required.
  • Slack / email — get notified when a scheduled export finishes (or fails) via Apify's built-in Slack and email integrations.
  • API, Python, and JavaScript clients — call it programmatically with the Apify API or the apify-client / apify-client-js libraries (see "Use it from code" above).
  • MCP / AI agents — expose this actor as a callable tool to Claude, Cursor, or any MCP-compatible agent through the Apify MCP server, so an agent can pull catalog data on its own.

Run it on a schedule

Suggested frequency: weekly for price research snapshots. To track changes, turn on monitor mode and run it daily, and you only get the products that changed.

To set it up: save your input as a Task in Apify Console, then add a Schedule. Send results where you work with Apify integrations: Google Sheets, Slack or email notifications, webhooks, Make / Zapier / n8n, or straight into an AI agent through the Apify MCP server. A run that can't get data is marked failed, so your alerts fire.

FAQ

Is this legal? Is the data public? Yes. It reads only the public catalog data the store shows any visitor — no private or password-protected pages are accessed. You're responsible for using the exported data in line with each store's terms.

Do I need a login or API keys? No. No account, login, or API key is required for the store you're scraping. You only need your own Apify account to run the actor.

How often should I schedule it? This actor is built for one-shot exports (a full catalog pull), not change tracking. Run it whenever you need a fresh snapshot — e.g. weekly for ongoing price research. For scheduled change detection instead, use WooCommerce Catalog Monitor.

What does a run cost? Pay per event: $0.001 per run, $0.0005 per product scraped ($0.50 per 1,000). A 1,000-product store costs about $0.50 per run. Set Maximum charge per run to cap spend.

Does it need a proxy? No. It reads public catalog data efficiently, so no proxy is needed.

What happens if a store blocks it or can't be read? The store is reported as unsupported/failed in an error row and is not charged per product. This includes stores behind bot challenges, password protection, or B2B-only logins.

How do I export WooCommerce products to CSV without a plugin? Paste the store URL and press Start. When the run ends, download the dataset as CSV, Excel or JSON. Nothing gets installed on the store, and it works on stores you don't own, so you can use it for competitor price research.

How do I get support or report a bug? Open an issue on this actor's Issues tab on Apify (apify.com/dheerajitbhu/woocommerce-products-scraper/issues) and we'll follow up there.

Feedback

If the data helped, a short rating on the Reviews tab helps others find this actor. Something broke or missing a field? Open an issue on the Issues tab — we aim to reply within 24 hours.

Keywords: WooCommerce products scraper, WooCommerce scraper, export WooCommerce products to CSV, WooCommerce product export, WooCommerce price research, WooCommerce competitor prices.

Built and maintained by Integration Yard (dheerajitbhu).

Independent tool. Not affiliated with or endorsed by WooCommerce / Automattic. Use exported data in line with each store's terms.