WooCommerce Products Scraper — Prices, SKUs & Stock avatar

WooCommerce Products Scraper — Prices, SKUs & Stock

Pricing

from $0.50 / 1,000 woocommerce products

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

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

Coor Yu

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

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

  1. Enter the WordPress installation root or public collection endpoint—not a product/category page.
  2. Set limits/filters and click Start.
  3. 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/ or https://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.php routes 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

FieldDefaultPurpose
storeUrlsDemo store1–20 public HTTPS installation roots or collection endpoints
maxProductsPerStore10Matching products saved per store, 1–5,000
maxProducts1,000Global saved-product cap, 1–10,000
onlyInStockfalseRequire is_in_stock=true; exclude explicit backorders
onlyOnSalefalseRequire the returned on_sale=true flag
searchemptyStore-side search text, up to 200 characters
categoryemptyUp to 20 comma-separated positive category IDs; match any
productTypeanyany, simple, variable, grouped or external
includeDescriptionfalsePlain-text descriptions and short descriptions
pageSize100Requested products per page, 1–100
failOnStoreErrorfalseStop 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.

{
"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, source productId, name, slug, type, SKU and product/store/source URLs.
  • currency, currencyMinorUnit, rawPrices; numeric price, regularPrice, salePrice, minPrice, maxPrice and decimal *Text counterparts.
  • onSale, isInStock, isOnBackorder, derived stockStatus and conditional lowStockRemaining.
  • 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.

ChargeCurrent rate
apify-default-dataset-item$0.0005 per saved product — $0.50 per 1,000
Actor startup eventNone configured
Exposed parent option mappings and optional descriptionsIncluded
Apify compute, transfer and storage operationsBilled 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, metadataTruncated and variationOptionsTruncated.

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.

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.

Follow store terms/copyright; export grants no redistribution rights.