WooCommerce Product Scraper
Pricing
from $4.00 / 1,000 product returneds
WooCommerce Product Scraper
Scrape public WooCommerce product catalogs for price, stock, rating, and category monitoring. Use for competitor or supplier research, not private data. Returns normalized product rows with price, availability, reviews, and source provenance. $0.004/product plus a $0.00005 start fee; usage extra.
Pricing
from $4.00 / 1,000 product returneds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Extract public, published product catalog data from WooCommerce stores through its Store API. Each dataset row is a normalized product record with price, stock, rating, categories, images, and source-endpoint provenance.
Use it for competitor price tracking, supplier catalog research, and e-commerce assortment analysis. Do not use it for orders, customers, checkout details, unpublished products, or a store whose public Store API is disabled.
Output
One validated dataset item per public product. The output stays compact enough for agent use; store-level diagnostics are written separately to OUTPUT and RUN_SUMMARY.
| Field | Description |
|---|---|
productId, title, productUrl | Stable public product identifiers and canonical URL |
price, regularPrice, salePrice, currency | API prices normalized from WooCommerce minor units |
stockStatus, inStock, onBackorder, lowStockRemaining | Published availability signals |
averageRating, reviewCount | Public review signals |
categories, tags, attributes, variationsCount | Product taxonomy and option metadata |
imageUrl, imageUrls | Primary image plus up to ten public image URLs |
storeUrl, storeDomain, sourceEndpoint, scrapedAt | Provenance and freshness fields |
Pricing
| Event | Price |
|---|---|
| Valid actor start | $0.00005 / run |
| Validated product returned | $0.004 / product |
A default 100-product run is capped at $0.40005 in event charges, plus Apify platform usage. Products that fail validation, blocked stores, invalid inputs, and empty stores are never billed as returned products. The deployed actor will use Pay per event + usage, so proxy and compute usage are shown separately by Apify.
Input
storeUrls is the only required input. Provide a store homepage or a WooCommerce installation in a subdirectory.
{"storeUrls": ["https://porterandyork.com"],"maxProducts": 100,"search": "steak","stockStatuses": ["instock"],"onSale": false,"sortBy": "price","sortOrder": "asc"}
| Field | Use it for |
|---|---|
storeUrls | One to 100 public WooCommerce store URLs. This is not a product or admin URL. |
maxProducts | One run-wide product cap, from 1 to 10,000. |
search | Optional Store API product text search. Leave empty for the full catalog. |
categoryIds | Optional public WooCommerce category IDs, for example [12, 27]. |
stockStatuses | Optional instock, outofstock, and/or onbackorder filter. |
onSale, featured | Set to true only to filter to those products. false does not add a filter. |
sortBy, sortOrder | Store API ordering: date, price, popularity, or rating; asc or desc. |
proxyConfiguration | Optional Apify Proxy fallback for stores that block direct API requests. No cookies or credentials are accepted. |
Example output
{"productId": "42","title": "Organic Espresso Blend","productUrl": "https://example.com/product/organic-espresso-blend/","storeDomain": "example.com","sourceEndpoint": "https://example.com/wp-json/wc/store/v1/products?page=1&per_page=100","currency": "USD","price": 19.99,"regularPrice": 24.99,"salePrice": 19.99,"onSale": true,"stockStatus": "instock","averageRating": 4.75,"reviewCount": 12,"categories": ["Coffee"],"attributes": [{ "name": "Grind", "values": ["Whole bean", "Ground"] }],"scrapedAt": "2026-07-14T12:00:00.000Z"}
How it works
For each store, the actor requests the unauthenticated public endpoint:
GET /wp-json/wc/store/v1/products?page=1&per_page=100
It applies supported Store API filters, follows pagination, normalizes the public response, validates the complete product contract, then writes and bills the row together through the Apify SDK. It retries temporary 429 and 5xx responses with bounded backoff; 401, 403, and 404 responses are not retried indefinitely.
The actor never tries the authenticated WooCommerce admin REST API. It therefore cannot return private products, exact inventory records hidden by a store, customer data, orders, or content that the Store API does not expose.
Results and failure semantics
Every terminal path writes two key-value records:
| Key | Purpose |
|---|---|
OUTPUT | Compact outcome, result count, warnings, and charged-event count |
RUN_SUMMARY | Detailed store diagnostics, coverage, errors, and charge-cap state |
The actor uses these outcomes truthfully:
COMPLETE— all requested stores produced the advertised data.PARTIAL— useful products were returned, but a store failed or a cap/deadline stopped additional work.VALID_EMPTY— functioning Store API responses had no products matching the filters.INVALID_INPUT— correct the request; no Store API requests or result charges were made.UPSTREAM_FAILED— valid input could not obtain any usable Store API product response.
Dataset rows never contain synthetic error records. This keeps CSV, JSON, and MCP consumers from mistaking a diagnostic for a product.
API and AI-agent use
This is a regular Apify Actor and can be called through the Apify API, schedules, integrations, or the Apify MCP server after deployment. It is a good fit for an agent that needs structured public WooCommerce catalog data from a known store URL; it is not a substitute for a general website crawler or a WooCommerce administration API.
For a small, predictable call, keep maxProducts at 100 or below. Inspect OUTPUT before treating a partial run as a full catalog export.
Limitations
- Only published products returned by the target's public WooCommerce Store API are in scope.
- Stores can disable, restrict, rate-limit, or geo-block the API; enable Apify Proxy only when needed.
- WooCommerce extensions can add or remove fields. The actor skips malformed rows rather than fabricating incomplete billable data.
- Product variations are represented by a count and public attributes, not separate variation rows.
- Product descriptions are converted to plain text and bounded to keep records agent-friendly.
Legal and responsible use
This actor collects only publicly accessible product catalog data. You are responsible for complying with each target's terms, robots directives, applicable law, copyright, database rights, and privacy obligations. Do not use it to access private, authenticated, or personal data.