# WooCommerce Product Scraper | $0.9/1K | Shopify CSV Export (`apivault_labs/woocommerce-product-scraper`) Actor

Scrape any WooCommerce catalog via the public Store API. Full variant prices, reviews text, related products, discount %, product intelligence score. Export to Shopify CSV (migration) or Google Merchant feed. $0.0009 per product ($0.9 per 1,000).

- **URL**: https://apify.com/apivault\_labs/woocommerce-product-scraper.md
- **Developed by:** [Apivault Labs](https://apify.com/apivault_labs) (community)
- **Categories:** E-commerce, Marketing, Developer tools
- **Stats:** 8 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 product scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## WooCommerce Product Scraper | Catalog Snapshot, Variants, Reviews, Shopify CSV & Google Merchant Export

<!-- n8n-node-callout -->
> ### ⚡ Use this Actor in n8n — no code
> Building no-code workflows in **[n8n](https://n8n.io)**? Install our official community node and drop this Actor straight onto your canvas:
>
> **📦 [`n8n-nodes-apivault-woocommerce`](https://www.npmjs.com/package/n8n-nodes-apivault-woocommerce)**
>
> **Setup (30 seconds):** in n8n go to **Settings → Community Nodes → Install**, paste `n8n-nodes-apivault-woocommerce` and confirm → add the new node to your workflow → paste your **Apify API token** → fill in the input and run.
<!-- /n8n-node-callout -->

Scrape **any WooCommerce-powered store** in real-time via the public Store API. Now with **catalog snapshot mode** (one aggregate record per store), **brand auto-extraction**, **auto-categorization** (apparel/electronics/beauty/...), **new-arrival detection**, **popularity ranking**, **live FX conversion**, **full variant prices**, **review text**, **discount %**, **product intelligence score**, and **direct export to Shopify CSV** (for store migration), **Google Merchant feed** (for Google Shopping), or **custom CSV** (you pick the columns).

WooCommerce powers ~30% of all online stores worldwide — millions of shops are reachable with this single actor.

### ✨ Why this is different

- ⚡ **Direct JSON API** — 10–100× faster than browser scraping
- 🎯 **Exact structured data** — no AI guessing, no hallucinations
- 📦 **Full catalog pagination** — up to 10,000 products per run
- 🧬 **Real variant prices** (when `enrichVariants` is on)
- 💬 **Review text + reviewer info** (optional)
- 💰 Auto-computed `discountPct` per product
- 🏷️ **Brand auto-extraction** from attributes/meta
- 📂 **Auto-categorization** — apparel / electronics / beauty / home / food / etc
- 🆕 **`isNewArrival`** flag for products added in last 30 days
- 🔝 **`popularityRank`** within-store bestseller ranking
- 💱 **Live FX conversion** (`convertToCurrency: "USD"`)
- 🧠 **Product intelligence score** (0-100)
- 📊 **Catalog snapshot mode** — one aggregate record per store
- 🔄 **WooCommerce → Shopify migration** (`exportFormat: "shopify-csv"`)
- 📢 **Google Shopping feed generator** (`exportFormat: "google-merchant"`)
- 📋 **Custom CSV** — pick exactly which columns you want
- 🔒 Zero antibot — Store API is public by design

### Works on

Any store built on WooCommerce — ~30% of all online stores:
- WordPress + WooCommerce sites of any theme (Astra, OceanWP, Kadence, Storefront, Divi)
- WooCommerce Marketplace and any third-party themes
- Subscription, multilingual (WPML), variable-product stores

**Not sure if a site is WooCommerce?** Try `<store>/wp-json/wc/store/v1/products?per_page=1`. JSON response → it works.

### 📦 Input

#### Scrape entire catalog with full variant prices

```json
{
  "storeUrls": ["https://store.com"],
  "maxProducts": 500,
  "enrichVariants": true
}
````

#### Migrate WooCommerce → Shopify

```json
{
  "storeUrls": ["https://my-old-store.com"],
  "maxProducts": 0,
  "exportFormat": "shopify-csv-only"
}
```

Result: every dataset row already has Shopify-CSV columns (`Handle`, `Title`, `Body (HTML)`, `Variant SKU`, `Variant Price`, `Variant Compare At Price`, `Image Src`, `SEO Title`, ...). Export the dataset as CSV and import directly into Shopify.

#### Generate Google Shopping feed

```json
{
  "storeUrls": ["https://store.com"],
  "exportFormat": "google-merchant-only",
  "onlyInStock": true
}
```

Each row contains `id, title, link, image_link, availability, price, brand, condition, product_type` — drop into Google Merchant Center.

#### Catalog snapshot — competitor monitoring at scale ⭐

```json
{
  "storeUrls": [
    "https://competitor1.com",
    "https://competitor2.com",
    "https://competitor3.com"
  ],
  "exportFormat": "catalog-snapshot",
  "maxProducts": 0
}
```

Returns **one aggregate record per store** with full intel:

- Total product count, price ranges, AOV estimate
- % on sale, average discount %, in-stock %
- New arrivals in last 30 days
- Top 10 brands with product counts
- Category distribution (apparel/electronics/beauty/...)
- Catalog-wide review aggregates
- Top-3 most-reviewed products
- Average product intelligence score

100 competitor stores → 100 rows. Perfect for weekly competitive dashboards.

#### Custom CSV — pick your columns

```json
{
  "storeUrls": ["https://store.com"],
  "exportFormat": "custom-csv",
  "customColumns": "productId,title,brand,price,priceUsd,inStock,popularityRank,autoCategory,isNewArrival",
  "convertToCurrency": "USD"
}
```

#### Multi-currency price normalization

```json
{
  "storeUrls": [
    "https://uk-store.com",
    "https://eu-store.com",
    "https://us-store.com"
  ],
  "convertToCurrency": "USD"
}
```

Each product gets `priceUsd` field with live FX-converted price for fair cross-store comparison.

#### Scrape products with full variant + review text

```json
{
  "storeUrls": ["https://store.com"],
  "maxProducts": 100,
  "flattenVariants": true,
  "extractReviewsText": true,
  "reviewsPerProduct": 10
}
```

#### Filter by category and stock

```json
{
  "storeUrls": ["https://store.com"],
  "category": "hoodies",
  "onlyInStock": true,
  "maxProducts": 200
}
```

#### Competitive analysis — multiple stores at once

```json
{
  "storeUrls": [
    "https://store1.com",
    "https://store2.com",
    "https://store3.com"
  ],
  "maxProducts": 100,
  "maxConcurrency": 3
}
```

#### Input parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `storeUrls` | string\[] | required | Store domains, product URLs, or bare domains |
| `maxProducts` | int | 250 | Limit per store (0 = unlimited) |
| `perPage` | int | 100 | Products per API page (WC max: 100) |
| `flattenVariants` | bool | false | One row per variant. Auto-enables `enrichVariants` |
| `enrichVariants` | bool | false | Second API call per product → full variant prices + related\_ids |
| `extractReviewsText` | bool | false | Pull review text per product |
| `reviewsPerProduct` | int | 5 | Reviews to fetch per product |
| `exportFormat` | string | `default` | `default`, `shopify-csv`, `shopify-csv-only`, `google-merchant`, `google-merchant-only`, `custom-csv`, `catalog-snapshot` |
| `customColumns` | string | "" | Comma-separated columns when `exportFormat: "custom-csv"` |
| `convertToCurrency` | string | "" | ISO code (USD/EUR/GBP) — adds `priceXxx` field with live FX conversion |
| `onlyInStock` | bool | false | Skip out-of-stock products |
| `category` | string | "" | Category slug filter |
| `extractTitle` ... `extractVariations` | bool | true | Toggle individual fields |
| `maxConcurrency` | int | 3 | Parallel store fetches |
| `timeout` | int | 30 | HTTP timeout per request (seconds) |

### 📖 Output (default JSON format)

```json
{
  "success": true,
  "productId": 18734006539864,
  "productUrl": "https://store.com/product/awesome-hoodie/",
  "slug": "awesome-hoodie",
  "title": "Awesome Hoodie",
  "shortDescription": "Premium organic cotton hoodie. Made in Portugal.",
  "description": "Our flagship hoodie, hand-crafted from 100% organic cotton...",
  "price": "59.00",
  "regularPrice": "79.00",
  "salePrice": "59.00",
  "currency": "USD",
  "priceUsd": 59.00,
  "onSale": true,
  "discountPct": 25.3,
  "sku": "HOOD-001",
  "brand": "ApiVault Apparel",
  "autoCategory": "apparel",
  "isNewArrival": true,
  "dateCreated": "2026-05-12T14:30:00",
  "popularityRank": 3,
  "images": "https://store.com/img/hood-1.jpg, https://store.com/img/hood-2.jpg",
  "mainImage": "https://store.com/img/hood-1.jpg",
  "imagesCount": 6,
  "categories": "Apparel, Hoodies",
  "categorySlugs": "apparel, hoodies",
  "tags": "winter, organic, bestseller",
  "attributes": "Size: [S, M, L, XL] | Color: [Black, Grey, Navy]",
  "stockStatus": "in-stock",
  "inStock": true,
  "isPurchasable": true,
  "lowStock": null,
  "averageRating": 4.7,
  "reviewCount": 128,
  "type": "variable",
  "parentId": null,
  "hasOptions": true,
  "addToCartUrl": "https://store.com/?add-to-cart=18734",
  "variationsCount": 12,
  "relatedProductIds": "18735, 18736, 18737",
  "productIntelligenceScore": 87,
  "variations": [
    {
      "variant_id": 18741,
      "sku": "HOOD-001-S-BLK",
      "name": "Awesome Hoodie - S, Black",
      "price": "59.00",
      "regular_price": "79.00",
      "sale_price": "59.00",
      "currency": "USD",
      "in_stock": true,
      "low_stock": null,
      "attributes": "Size: S | Color: Black"
    }
  ],
  "reviews": [
    {
      "reviewer": "John D.",
      "rating": 5,
      "review_text": "Best hoodie I've ever owned. Super soft.",
      "date_created": "2026-04-12T14:23:00",
      "verified": true
    }
  ]
}
```

### 📊 Output (catalog-snapshot mode)

```json
{
  "success": true,
  "snapshot_type": "catalog",
  "store_url": "https://competitor.com",
  "domain": "competitor.com",
  "product_count": 487,
  "currency": "USD",
  "price_min": 12.50,
  "price_max": 459.00,
  "price_median": 89.00,
  "aov_estimate": 133.50,
  "products_on_sale_pct": 32.4,
  "avg_discount_pct": 18.5,
  "in_stock_pct": 87.2,
  "new_arrivals_30d": 42,
  "new_arrivals_pct": 8.6,
  "brands_count": 17,
  "top_brands": [
    {"brand": "Nike", "products": 89},
    {"brand": "Adidas", "products": 64}
  ],
  "category_distribution": [
    {"category": "apparel", "count": 220},
    {"category": "footwear", "count": 152},
    {"category": "accessories", "count": 89}
  ],
  "avg_images_per_product": 5.3,
  "avg_intelligence_score": 68.4,
  "max_intelligence_score": 95,
  "premium_listings_pct": 41.2,
  "total_reviews": 8453,
  "catalog_avg_rating": 4.42,
  "top_3_by_reviews": [
    {"title": "Air Max 90", "reviewCount": 412, "averageRating": 4.7, "price": "129.99", "url": "..."}
  ]
}
```

### 🧠 Product Intelligence Score

A heuristic 0–100 indicating product listing quality. Computed for every product:

| Signal | Weight |
|---|---|
| 8+ product images | +20 |
| Description ≥ 1000 chars | +20 |
| Has variations | +10 |
| Has attributes | +10 |
| Has SKU | +10 |
| Has tags + short description | +10 |
| Rating ≥ 4.0 with 5+ reviews | +15 |
| Has rating only | +5 |

- **70+** = premium DTC brand listing
- **40–70** = decent mid-market
- **< 40** = thin / generic / dropshipper-style listing

### 💼 Use Cases

#### 🚀 WooCommerce → Shopify Migration

Switch platforms in minutes, not weeks. Use `exportFormat: "shopify-csv-only"` to get a clean Shopify Product CSV directly from any WooCommerce store. Includes Handle, Title, Body, Vendor, Type, Tags, Variant SKU, Variant Price, Variant Compare At Price, Image Src, SEO Title, SEO Description, and more — all matching Shopify's official import format.

#### 📢 Google Shopping Feed Generation

Set `exportFormat: "google-merchant-only"` to produce a feed compliant with Google Merchant Center. Each row has `id, title, description, link, image_link, availability, price, brand, condition, product_type`. Pipe directly into your ad platform.

#### 🏪 Dropshipping & Reseller Research

Pull entire WooCommerce-store catalogs in seconds. Filter `productIntelligenceScore > 70` to find premium stores worth reselling, or `< 30` to spot generic/copycat catalogs.

#### 📊 Competitive Intelligence

Diff your catalog vs. competitor WooCommerce stores. Spot new product launches, price drops, restocks. The `relatedProductIds` field reveals their cross-sell strategy.

#### 🏷️ Price Monitoring & MAP Enforcement

Track pricing on retailers hosting your products. `discountPct` flags MAP violations automatically.

#### 🛠️ Catalog Migration & Backup

Export any WooCommerce store to JSON or CSV. Feed your custom store, marketplace listing, or affiliate site.

#### 🧬 Product Research

Analyze product attribute trends across a niche. Aggregate `categories`, `attributes`, `productIntelligenceScore` distributions to understand market positioning.

### 💰 Pricing

| Volume | Cost |
|---|---|
| 1 product | $0.0009 |
| 100 products | $0.09 |
| 1,000 products | $0.9 |
| 10,000 products | $9.00 |

No subscriptions, no hidden fees. Pay only for products successfully fetched.

### 🔧 How It Works

WooCommerce 4.7+ stores expose `/wp-json/wc/store/v1/products` by default:

1. **Listing endpoint** — paginates the catalog at `?per_page=100&page=N`
2. **Detail endpoint (when `enrichVariants` on)** — `/products/{id}` for full variant data + `related_ids`
3. **Reviews endpoint (when `extractReviewsText` on)** — `/products/reviews?product_id={id}`

All endpoints are public, official WooCommerce REST APIs. No anti-bot risk, no proxies needed.

**Speed:**

- Default mode: ~1 second per 100 products (10K products ≈ 60 seconds)
- With `enrichVariants`: ~0.3 seconds per extra product (100 products ≈ +30 seconds)
- With `extractReviewsText`: ~0.3 seconds per extra product

**Reliability:** 100% — Store API is an official WooCommerce endpoint. Some stores disable it via security plugins; if so, you get a 404 and the actor skips cleanly.

### ❓ FAQ

**Q: Do I need any keys, plugins or cookies?**
A: No. The Store API is public by default in modern WooCommerce.

**Q: How is the variant pricing extracted?**
A: Listing endpoint returns variation IDs only. Set `enrichVariants: true` (or use `flattenVariants`) — the actor then makes one extra call per product to `/products/{id}` for full variant prices, stock, and attribute values.

**Q: Are variant prices in cents?**
A: WooCommerce's API uses minor units. The actor auto-formats to decimal strings (e.g. `59.00`, not `5900`).

**Q: Can I use the Shopify CSV output directly?**
A: Yes. Set `exportFormat: "shopify-csv-only"`, run, then export the dataset as CSV and import via Shopify Admin → Products → Import. Note: review images and pricing before importing into a live store.

**Q: How accurate is `productIntelligenceScore`?**
A: It's a heuristic, not a perfect signal. Use it as a filter to surface premium listings or flag thin ones. Always sanity-check on a sample.

**Q: What if a store has the Store API disabled?**
A: You'll get 0 products and an HTTP 404 in the log. We don't fall back to scraping (would defeat the speed advantage). Consider [Shopify Store Analyzer](https://apify.com/apivault_labs/shopify-store-analyzer) if the store turns out to be Shopify.

### 🔗 Related Actors

- [Shopify Product Scraper](https://apify.com/apivault_labs/shopify-product-scraper) — Shopify catalog extraction
- [WooCommerce Store Analyzer](https://apify.com/apivault_labs/woocommerce-store-analyzer) — revenue, traffic, plugins for any WC store
- [WordPress Plugin Detector](https://apify.com/apivault_labs/wp-plugin-detector) — detect WP plugins on any site
- [Shopify Store Analyzer](https://apify.com/apivault_labs/shopify-store-analyzer) — full Shopify intelligence

### 📞 Support

Issues, feature requests, or custom data fields? Reach out via Apify messaging or the actor's page.

# Actor input Schema

## `storeUrls` (type: `array`):

Accepts:
• Store domain — https://woocommerce.com (pulls entire catalog)
• Product URL — https://store.com/product/awesome-shirt/
• Bare domain — store.com
Mix them freely.

## `maxProducts` (type: `integer`):

Limit per store (0 = unlimited). Default: 250.

## `perPage` (type: `integer`):

Products per API page. WooCommerce max: 100.

## `flattenVariants` (type: `boolean`):

If true: outputs one row per variant (size/color) with full variant prices and stock. Auto-enables enrichVariants.

## `enrichVariants` (type: `boolean`):

Make a second API call per product to get full variant prices, stock, attributes, plus related\_ids and cross-sells. Slower but adds rich variant data.

## `extractReviewsText` (type: `boolean`):

Pull actual review text + reviewer info per product. Adds 1 extra API call per product.

## `reviewsPerProduct` (type: `integer`):

How many recent reviews to fetch per product when extractReviewsText is on.

## `exportFormat` (type: `string`):

Output format. 'default' = full JSON. 'shopify-csv' / 'shopify-csv-only' = WC → Shopify migration. 'google-merchant' / 'google-merchant-only' = Google Shopping feed. 'custom-csv' = user-defined columns (use customColumns). 'catalog-snapshot' = ONE aggregate record per store.

## `customColumns` (type: `string`):

Comma-separated column names for exportFormat='custom-csv'. Example: 'productId,title,price,brand,categorySlugs,inStock,averageRating'. Available columns: productId, productUrl, slug, title, price, regularPrice, salePrice, currency, discountPct, sku, brand, autoCategory, categories, tags, inStock, averageRating, reviewCount, popularityRank, isNewArrival, productIntelligenceScore, mainImage, images, variationsCount, etc.

## `convertToCurrency` (type: `string`):

Optional ISO currency code (USD, EUR, GBP). If set and store currency differs, adds 'priceUsd' / 'priceEur' / etc field with live FX-converted price. Free FX rates from open.er-api.com.

## `onlyInStock` (type: `boolean`):

Skip products that are out of stock.

## `category` (type: `string`):

Optional: only fetch products from this category slug (e.g. 'hoodies').

## `extractTitle` (type: `boolean`):

Extract product name

## `extractPrice` (type: `boolean`):

Extract current price

## `extractRegularPrice` (type: `boolean`):

Extract regular (non-sale) price

## `extractSalePrice` (type: `boolean`):

Extract sale price

## `extractSku` (type: `boolean`):

Extract SKU codes

## `extractDescription` (type: `boolean`):

Extract full product description (HTML stripped)

## `extractShortDescription` (type: `boolean`):

Extract short product description

## `extractImages` (type: `boolean`):

Extract all image URLs

## `extractCategories` (type: `boolean`):

Extract category list

## `extractTags` (type: `boolean`):

Extract product tags

## `extractAttributes` (type: `boolean`):

Extract product attributes (brand, material, etc.)

## `extractStock` (type: `boolean`):

Extract stock availability status and low-stock count

## `extractRating` (type: `boolean`):

Extract average rating and review count

## `extractVariations` (type: `boolean`):

Extract product variation IDs (when not flattening)

## `maxConcurrency` (type: `integer`):

Parallel store fetches

## `timeout` (type: `integer`):

HTTP timeout per API call

## Actor input object example

```json
{
  "storeUrls": [
    "https://woocommerce.com"
  ],
  "maxProducts": 250,
  "perPage": 100,
  "flattenVariants": false,
  "enrichVariants": false,
  "extractReviewsText": false,
  "reviewsPerProduct": 5,
  "exportFormat": "default",
  "customColumns": "",
  "convertToCurrency": "",
  "onlyInStock": false,
  "category": "",
  "extractTitle": true,
  "extractPrice": true,
  "extractRegularPrice": true,
  "extractSalePrice": true,
  "extractSku": true,
  "extractDescription": true,
  "extractShortDescription": true,
  "extractImages": true,
  "extractCategories": true,
  "extractTags": true,
  "extractAttributes": true,
  "extractStock": true,
  "extractRating": true,
  "extractVariations": true,
  "maxConcurrency": 3,
  "timeout": 30
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "storeUrls": [
        "https://woocommerce.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("apivault_labs/woocommerce-product-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "storeUrls": ["https://woocommerce.com"] }

# Run the Actor and wait for it to finish
run = client.actor("apivault_labs/woocommerce-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "storeUrls": [
    "https://woocommerce.com"
  ]
}' |
apify call apivault_labs/woocommerce-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=apivault_labs/woocommerce-product-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "WooCommerce Product Scraper | $0.9/1K | Shopify CSV Export",
        "description": "Scrape any WooCommerce catalog via the public Store API. Full variant prices, reviews text, related products, discount %, product intelligence score. Export to Shopify CSV (migration) or Google Merchant feed. $0.0009 per product ($0.9 per 1,000).",
        "version": "1.0",
        "x-build-id": "RBmhtrQ5xHMOsI2q8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/apivault_labs~woocommerce-product-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-apivault_labs-woocommerce-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/apivault_labs~woocommerce-product-scraper/runs": {
            "post": {
                "operationId": "runs-sync-apivault_labs-woocommerce-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/apivault_labs~woocommerce-product-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-apivault_labs-woocommerce-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "storeUrls"
                ],
                "properties": {
                    "storeUrls": {
                        "title": "WooCommerce Store or Product URLs",
                        "type": "array",
                        "description": "Accepts:\n• Store domain — https://woocommerce.com (pulls entire catalog)\n• Product URL — https://store.com/product/awesome-shirt/\n• Bare domain — store.com\nMix them freely.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxProducts": {
                        "title": "Max products per store",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Limit per store (0 = unlimited). Default: 250.",
                        "default": 250
                    },
                    "perPage": {
                        "title": "Products per page",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Products per API page. WooCommerce max: 100.",
                        "default": 100
                    },
                    "flattenVariants": {
                        "title": "One row per variant",
                        "type": "boolean",
                        "description": "If true: outputs one row per variant (size/color) with full variant prices and stock. Auto-enables enrichVariants.",
                        "default": false
                    },
                    "enrichVariants": {
                        "title": "Enrich variants (full data)",
                        "type": "boolean",
                        "description": "Make a second API call per product to get full variant prices, stock, attributes, plus related_ids and cross-sells. Slower but adds rich variant data.",
                        "default": false
                    },
                    "extractReviewsText": {
                        "title": "Extract review text",
                        "type": "boolean",
                        "description": "Pull actual review text + reviewer info per product. Adds 1 extra API call per product.",
                        "default": false
                    },
                    "reviewsPerProduct": {
                        "title": "Reviews per product",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many recent reviews to fetch per product when extractReviewsText is on.",
                        "default": 5
                    },
                    "exportFormat": {
                        "title": "Export format",
                        "enum": [
                            "default",
                            "shopify-csv",
                            "shopify-csv-only",
                            "google-merchant",
                            "google-merchant-only",
                            "custom-csv",
                            "catalog-snapshot"
                        ],
                        "type": "string",
                        "description": "Output format. 'default' = full JSON. 'shopify-csv' / 'shopify-csv-only' = WC → Shopify migration. 'google-merchant' / 'google-merchant-only' = Google Shopping feed. 'custom-csv' = user-defined columns (use customColumns). 'catalog-snapshot' = ONE aggregate record per store.",
                        "default": "default"
                    },
                    "customColumns": {
                        "title": "Custom CSV columns",
                        "type": "string",
                        "description": "Comma-separated column names for exportFormat='custom-csv'. Example: 'productId,title,price,brand,categorySlugs,inStock,averageRating'. Available columns: productId, productUrl, slug, title, price, regularPrice, salePrice, currency, discountPct, sku, brand, autoCategory, categories, tags, inStock, averageRating, reviewCount, popularityRank, isNewArrival, productIntelligenceScore, mainImage, images, variationsCount, etc.",
                        "default": ""
                    },
                    "convertToCurrency": {
                        "title": "Convert prices to currency",
                        "type": "string",
                        "description": "Optional ISO currency code (USD, EUR, GBP). If set and store currency differs, adds 'priceUsd' / 'priceEur' / etc field with live FX-converted price. Free FX rates from open.er-api.com.",
                        "default": ""
                    },
                    "onlyInStock": {
                        "title": "Only in-stock products",
                        "type": "boolean",
                        "description": "Skip products that are out of stock.",
                        "default": false
                    },
                    "category": {
                        "title": "Filter by category slug",
                        "type": "string",
                        "description": "Optional: only fetch products from this category slug (e.g. 'hoodies').",
                        "default": ""
                    },
                    "extractTitle": {
                        "title": "Product Title",
                        "type": "boolean",
                        "description": "Extract product name",
                        "default": true
                    },
                    "extractPrice": {
                        "title": "Price",
                        "type": "boolean",
                        "description": "Extract current price",
                        "default": true
                    },
                    "extractRegularPrice": {
                        "title": "Regular Price",
                        "type": "boolean",
                        "description": "Extract regular (non-sale) price",
                        "default": true
                    },
                    "extractSalePrice": {
                        "title": "Sale Price",
                        "type": "boolean",
                        "description": "Extract sale price",
                        "default": true
                    },
                    "extractSku": {
                        "title": "SKU",
                        "type": "boolean",
                        "description": "Extract SKU codes",
                        "default": true
                    },
                    "extractDescription": {
                        "title": "Description",
                        "type": "boolean",
                        "description": "Extract full product description (HTML stripped)",
                        "default": true
                    },
                    "extractShortDescription": {
                        "title": "Short Description",
                        "type": "boolean",
                        "description": "Extract short product description",
                        "default": true
                    },
                    "extractImages": {
                        "title": "Images",
                        "type": "boolean",
                        "description": "Extract all image URLs",
                        "default": true
                    },
                    "extractCategories": {
                        "title": "Categories",
                        "type": "boolean",
                        "description": "Extract category list",
                        "default": true
                    },
                    "extractTags": {
                        "title": "Tags",
                        "type": "boolean",
                        "description": "Extract product tags",
                        "default": true
                    },
                    "extractAttributes": {
                        "title": "Attributes",
                        "type": "boolean",
                        "description": "Extract product attributes (brand, material, etc.)",
                        "default": true
                    },
                    "extractStock": {
                        "title": "Stock / Availability",
                        "type": "boolean",
                        "description": "Extract stock availability status and low-stock count",
                        "default": true
                    },
                    "extractRating": {
                        "title": "Rating",
                        "type": "boolean",
                        "description": "Extract average rating and review count",
                        "default": true
                    },
                    "extractVariations": {
                        "title": "Variations",
                        "type": "boolean",
                        "description": "Extract product variation IDs (when not flattening)",
                        "default": true
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Parallel store fetches",
                        "default": 3
                    },
                    "timeout": {
                        "title": "Timeout per request (seconds)",
                        "minimum": 10,
                        "maximum": 120,
                        "type": "integer",
                        "description": "HTTP timeout per API call",
                        "default": 30
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
