WooCommerce Products Scraper: Prices, Stock, Images & SKUs
Pricing
from $0.35 / 1,000 product scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Features
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
| Event | Price |
|---|---|
| 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 ApifyClientclient = 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-jslibraries (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.
Related actors
- WooCommerce Catalog Monitor — track a WooCommerce store's catalog over time and get alerted on new/removed products, price changes, and stock flips, instead of a one-shot export.
- DriftGuard — on Shopify instead of WooCommerce? Catch feed-vs-storefront price and availability drift before Google/Meta/TikTok disapprove your products.
- AliExpress Scraper — compare store prices with AliExpress supplier prices.
- Shopify Scraper — competitors on Shopify? Export their products and prices too.
- Guide: Export WooCommerce Products in 2026: Real Store Data on Prices, Sales and Stock — real catalog exports from public WooCommerce stores: price ranges, discount depth, stock and cost per run.
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.