WooCommerce Products Scraper — Prices, SKUs & Stock
Pricing
from $0.50 / 1,000 woocommerce products
WooCommerce Products Scraper — Prices, SKUs & Stock
Export public WooCommerce Store API products with currency-scaled prices, SKUs, stock flags, images, categories and parent variation options. Per-product fees and separate Apify platform usage apply.
Pricing
from $0.50 / 1,000 woocommerce products
Rating
0.0
(0)
Developer
Coor Yu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
WooCommerce Products Scraper exports public Store API catalogs: names, SKUs, currency-scaled prices, stock flags, categories, ratings, images and parent options for product research.
No WooCommerce login, consumer key, browser or paid proxy. Public Store API access is required; Apify API calls need your token.
Quick start
- Enter the WordPress installation root or public collection endpoint—not a product/category page.
- Set limits/filters and click Start.
- Export Products as JSON/CSV/Excel; inspect the source summary for limits/errors.
{"storeUrls": ["https://woocommerce.com"],"maxProductsPerStore": 10,"maxProducts": 100,"includeDescription": false}
{} requests up to 10 WooCommerce.com demo products. 10 saved products = $0.005 in event fees plus Apify usage. Results are not guaranteed; no store affiliation.
Accepted URLs
- Installation root:
https://store.com/orhttps://store.com/wordpress/. - Collection:
https://store.com/wordpress/wp-json/wc/store/v1/products. - Query route:
https://store.com/?rest_route=/wc/store/v1/products;index.phproutes also work.
/shop/ may not be the installation root. URL query filters are rejected; use Actor fields. No consumer keys, cookies or access tokens, and no admin/cart/checkout/order/customer endpoints.
A first-page 404 can trigger the equivalent public query route—not a fallback for 401/403 denial, login pages or challenges.
Input fields
| Field | Default | Purpose |
|---|---|---|
storeUrls | Demo store | 1–20 public HTTPS installation roots or collection endpoints |
maxProductsPerStore | 10 | Matching products saved per store, 1–5,000 |
maxProducts | 1,000 | Global saved-product cap, 1–10,000 |
onlyInStock | false | Require is_in_stock=true; exclude explicit backorders |
onlyOnSale | false | Require the returned on_sale=true flag |
search | empty | Store-side search text, up to 200 characters |
category | empty | Up to 20 comma-separated positive category IDs; match any |
productType | any | any, simple, variable, grouped or external |
includeDescription | false | Plain-text descriptions and short descriptions |
pageSize | 100 | Requested products per page, 1–100 |
failOnStoreError | false | Stop and fail at the first source error |
Stock/sale/type/category filters are rechecked locally. Unknown stock is not in stock; backorder flags are not inferred. Search rules and category IDs are store-specific.
In-stock product search
{"storeUrls": ["https://seedsforgenerations.com"],"onlyInStock": true,"search": "onion","maxProductsPerStore": 10,"includeDescription": true}
onlyInStock is a stock filter, not a physical/virtual-product filter. Replace example URLs with your own targets.
Variable parents and option mappings
{"storeUrls": ["https://seedsforgenerations.com"],"productType": "variable","maxProductsPerStore": 3}
variationOptions includes exposed child IDs/options in the parent fee. No child SKU, price, image or inventory details are fetched or expanded, and no option combinations are invented.
Output and price interpretation
One row is one unique public product:
- Store/product hash
id, sourceproductId, name, slug, type, SKU and product/store/source URLs. currency,currencyMinorUnit,rawPrices; numericprice,regularPrice,salePrice,minPrice,maxPriceand decimal*Textcounterparts.onSale,isInStock,isOnBackorder, derivedstockStatusand conditionallowStockRemaining.- Categories, tags, brands, attributes, parent
variationOptions, grouped IDs, image links and aggregate ratings/review counts—not individual reviews. - Optional descriptions, truncation flags and
scrapedAt(collection time, not product creation/update time).
Raw "325" becomes "3.25" at scale 2, "325" at 0 or "0.325" at 3. Scales 0–6 are supported. Zero is retained; malformed amounts/scales become null. Unsafe numeric conversions become null while supported exact text remains. Use text/raw fields for financial arithmetic.
Range bounds use the exposed range or current summary price, not an audit of child prices. Check onSale rather than the presence of salePrice. Prices use anonymous storefront tax/currency settings; no FX conversion.
Stock flags are not private inventory counts. No private stock, sales, customer data or authoritative dates are inferred. Missing values stay null/empty arrays. Descriptions reflect the public API—not an Actor-side redaction guarantee. No passwords/cookies or protected-content unlocking.
Current pricing and billing
Current USD rates; consult the Pricing tab and run Usage report.
| Charge | Current rate |
|---|---|
apify-default-dataset-item | $0.0005 per saved product — $0.50 per 1,000 |
| Actor startup event | None configured |
| Exposed parent option mappings and optional descriptions | Included |
| Apify compute, transfer and storage operations | Billed separately to the running user at their plan rates |
Pay per event + usage, not all-inclusive. Saved rows are automatically billed once. No paid upstream Actor/data service is called.
Invalid/excluded/error/duplicate records incur no product fee. Empty/failed runs can cost usage; saved rows remain billable after later failure. maxProducts and the event budget limit rows, not platform usage. Event allowance is checked before requests/save batches.
Pagination, reliability and limits
- Sequential stores,
orderby=id&order=asc. Page size is reduced for initial result/budget caps, then fixed per store. Total-page headers outrank short-page heuristics. Live catalog changes can affect pagination. - Canonical stores/recognized redirect aliases and store/product IDs are deduplicated per run. Different stores remain distinct. Repeated pages stop; new runs bill saved rows again.
- Public HTTPS/443 only; no URL credentials, literal IPs or private/local targets. DNS/redirects are checked; TLS validation stays enabled.
- 100 pages/store, 120 HTTP requests/run, 4 MiB decoded JSON/response, fixed 256 MB memory, two-minute collection deadline and 180-second default run timeout. In-flight calls may finish later. One HTTP 429/502/503/504 retry; no access-control bypass/paid fallback.
- Descriptions: 10,000 characters; short notes: 3,000. Lists/nested options: 100 entries; variation mappings/grouped IDs: 1,000. Check
descriptionTruncated,metadataTruncatedandvariationOptionsTruncated.
OUTPUT reports counts, pages, source totals, errors and stops. Successful samples can have complete:false. Errors normally allow other stores to continue; all failing without valid output fails the run. failOnStoreError: true stops at the first error. Empty matches can succeed. Completeness is not guaranteed.
FAQ
Do I get every variation's price and SKU?
No. Variable parents include public option mappings, not expanded child detail rows.
Why does a WooCommerce website return no products?
The public API may be disabled, protected, empty or incompatible. Check the installation root/collection URL; restrictions are not bypassed.
API and related Actors
Use funny_ground/woocommerce-store-products-scraper via Apify API/SDK with the same JSON; read its dataset and key-value OUTPUT. Keep your token private. Official reference: WooCommerce Products API.
- Shopify Products Scraper — public Shopify catalogs.
- Website Contact & Social Scraper — separate website contact/social extraction.
Follow store terms/copyright; export grants no redistribution rights.