{
  "openapi": "3.0.1",
  "info": {
    "title": "WooCommerce Scraper & Product Reviews",
    "description": "WooCommerce Scraper extracts product listings and reviews, including titles, prices, descriptions, ratings, review text, images, availability, categories, and URLs. Ideal for e-commerce research, competitor analysis, product monitoring, review insights, and market intelligence.",
    "version": "0.1",
    "x-build-id": "82Ryab3ObIgHfDZqF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simpleapi~woocommerce-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simpleapi-woocommerce-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/simpleapi~woocommerce-scraper/runs": {
      "post": {
        "operationId": "runs-sync-simpleapi-woocommerce-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/simpleapi~woocommerce-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-simpleapi-woocommerce-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",
        "properties": {
          "startUrls": {
            "title": "🛍️ Stores to read",
            "type": "array",
            "description": "💡 Which shops do you want the reviews of? Enter store home pages (https://example.com). A bare domain works, and a sub-directory install (https://example.com/shop) is kept. Fill in this field or the 'Store URLs (alternative)' field below.",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "title": "Store URLs (alternative)",
            "type": "array",
            "description": "Alternative to the field above: an array of store URLs. Both are merged when both are filled in.",
            "items": {
              "type": "string"
            }
          },
          "limit": {
            "title": "♾️ Products per store",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many catalogue records to read per store. Reviews are fetched for these products and are NOT counted against this number; product variations fetched by 'Include variations' are not counted either.",
            "default": 10
          },
          "attachProductReviews": {
            "title": "🗨️ Attach each product's reviews",
            "type": "boolean",
            "description": "Read the reviews written about every product returned and put them on that product's row (product_reviews[]), with a per-product summary. Costs one extra request per product that passes the review floor below.",
            "default": true
          },
          "maxReviewsPerProduct": {
            "title": "🔢 Max reviews per product",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many reviews to keep per product. The store serves at most 100 per request, so 101-500 means 2-5 requests for that product. Measured: two pages of 100 on a 317-review product returned 200 distinct reviews with no duplicates.",
            "default": 10
          },
          "reviewOrder": {
            "title": "↕️ Which reviews to take first",
            "enum": [
              "newest",
              "oldest",
              "highest_rating",
              "lowest_rating"
            ],
            "type": "string",
            "description": "The order asked of the store, so a cap of 10 keeps the 10 you care about. Measured on the live Store API: rating order really does reorder (ascending returned only 1-star rows, descending only 5-star rows).",
            "default": "newest"
          },
          "minProductReviewCount": {
            "title": "🧾 Minimum reviews before fetching",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Skip the review request for products the store already reports fewer reviews than this for - a genuine request saver, because the count is on the product row before any review call. The product itself is still returned, marked with why no request was made. 0 and 1 behave the same: a product the store reports 0 reviews for provably returns none.",
            "default": 1
          },
          "onlyVerifiedReviews": {
            "title": "✅ Verified buyers only",
            "type": "boolean",
            "description": "Keep only reviews WooCommerce flags as written by a verified buyer of that product. Off keeps every published review.",
            "default": false
          },
          "minReviewRating": {
            "title": "⭐ Minimum stars on a review",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Drop reviews rated below this many stars. 0 keeps every rating. This filters the review rows, not the products - use it with 'Lowest rating first' to hunt complaints, or leave it at 0.",
            "default": 0
          },
          "onlyProductsWithReviews": {
            "title": "🎯 Only products that have reviews",
            "type": "boolean",
            "description": "Drop products that came back with no review matching your filters. Off returns every product, with reviews_available telling you which ones have feedback. Careful: on a shop with reviews switched off this returns nothing at all.",
            "default": false
          },
          "reviewOutput": {
            "title": "🗂️ Where the review rows go",
            "enum": [
              "attached",
              "attached_and_rows",
              "attached_and_child_dataset"
            ],
            "type": "string",
            "description": "Reviews are always attached to the product row. This adds a flat one-row-per-review copy on top: in the same dataset (row_type = review), or in a separate child dataset named after this run so the product table stays narrow. Every review row carries parent_product_id. Each review row is charged as one result row, so the default keeps them attached only - and the 'Review rows only' output view stays empty until you pick one of the two row modes.",
            "default": "attached"
          },
          "resource": {
            "title": "📁 Record type",
            "enum": [
              "products",
              "categories",
              "brands",
              "tags",
              "attributes",
              "reviews",
              "pages",
              "posts",
              "comments",
              "post-categories",
              "post-tags",
              "users"
            ],
            "type": "string",
            "description": "Reviews are attached to 'products' rows. Every other value is returned exactly as the store's API publishes it; 'reviews' returns the store's flat review list (with this actor's normalised review fields added). 'brands' needs the WooCommerce Brands taxonomy installed, 'users' is disabled on many stores, and 'comments' hides product reviews from logged-out clients.",
            "default": "products"
          },
          "include_variations": {
            "title": "Include variations",
            "type": "boolean",
            "description": "Also return every variation of the variable products found (one extra request per variation). Variation rows carry the parent product id in 'parent' and type 'variation'. Variations rarely carry their own reviews.",
            "default": false
          },
          "format": {
            "title": "Text format",
            "enum": [
              "md",
              "text",
              "html"
            ],
            "type": "string",
            "description": "💡 How product descriptions AND review bodies are rendered. Reviews arrive from WooCommerce as HTML paragraphs. (default: Markdown)",
            "default": "md"
          },
          "sort": {
            "title": "Sorting",
            "enum": [
              "",
              "date",
              "modified",
              "id",
              "include",
              "title",
              "slug",
              "price",
              "popularity",
              "rating",
              "menu_order",
              "comment_count"
            ],
            "type": "string",
            "description": "Sort order requested from the store. Default here is Comment count, because it is the order that surfaces reviewed products first - measured on woocommerce.com: 10 of 10 products had reviews in comment-count order, 0 of 10 in date order. Categories, tags and brands accept Slug, Title and Popularity only; reviews accept Date, ID and Rating. An unsupported value is reported in the log and the store's own order is used.",
            "default": "comment_count"
          },
          "order": {
            "title": "Order",
            "enum": [
              "",
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "Sort direction. Applied only when the chosen Sorting value is supported by the resource.",
            "default": "desc"
          },
          "search": {
            "title": "Search",
            "type": "string",
            "description": "💡 Return only records matching this text. Applied by the store itself. Not supported for the 'attributes' and 'reviews' resources."
          },
          "sku": {
            "title": "SKU",
            "type": "string",
            "description": "💡 Return only products with this SKU. Products resource only."
          },
          "rating": {
            "title": "Product star rating",
            "enum": [
              "",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "💡 Return only products whose rounded average rating equals this many stars. This is the PRODUCT average, not a filter on individual reviews - use 'Minimum stars on a review' for that. The Store API honours one value. Products resource only."
          },
          "min_price": {
            "title": "Price range - min",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price, in the store's minor currency unit (cents for a 2-decimal store: 1999 means 19.99). Products resource only."
          },
          "max_price": {
            "title": "Price range - max",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price, in the store's minor currency unit (cents for a 2-decimal store: 4999 means 49.99). Products resource only."
          },
          "category": {
            "title": "Category ID",
            "type": "string",
            "description": "Product category ID(s), comma separated. Run once with Record type 'categories' to get the IDs. Products resource only."
          },
          "tag": {
            "title": "Tag ID",
            "type": "string",
            "description": "Product tag ID(s), comma separated. Run once with Record type 'tags' to get the IDs. Products resource only."
          },
          "product_type": {
            "title": "Product type",
            "enum": [
              "",
              "simple",
              "grouped",
              "external",
              "variable",
              "wbs_bundle",
              "variation"
            ],
            "type": "string",
            "description": "Return only products of this type. Products resource only."
          },
          "stock": {
            "title": "Stock status",
            "enum": [
              "",
              "instock",
              "outofstock",
              "onbackorder"
            ],
            "type": "string",
            "description": "Return only products with this stock status. Products resource only."
          },
          "featured": {
            "title": "Featured only",
            "type": "boolean",
            "description": "Return only products the store marks as featured. Products resource only.",
            "default": false
          },
          "sale": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Return only products that are currently on sale. Products resource only.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Choose which proxies to use. By default no proxy is used; if a store refuses the direct request the actor escalates to an Apify datacenter proxy and then to a residential proxy on its own."
          },
          "dev_proxy_config": {
            "title": "🌐 Your own proxy",
            "type": "string",
            "description": "💡 Your own HTTP(S) proxy, used instead of the Apify proxy.\nhttp://{user:pass}@{hostname|ip-address}:port\nExample: http://user:pass@proxy.example.com:8000\nSOCKS proxies are not supported by this actor's HTTP client."
          },
          "dev_custom_headers": {
            "title": "📜 Extra HTTP headers",
            "type": "string",
            "description": "💡 Extra HTTP headers, as a JSON array of {name, value} pairs, a JSON object, or one 'Name: value' per line.\nExample: [{\"name\": \"Accept-Language\", \"value\": \"en-GB\"}]"
          },
          "dev_custom_cookies": {
            "title": "🍰 Extra HTTP cookies",
            "type": "string",
            "description": "💡 Extra HTTP cookies, as a JSON array of {name, value} pairs, a JSON object, or one 'name=value' per line.\nExample: [{\"name\": \"session\", \"value\": \"abc123\"}]"
          },
          "dev_transform_fields": {
            "title": "♻️ Keep only these fields",
            "type": "string",
            "description": "💡 Keep only these fields on the catalogue rows. Enter comma-separated field paths; each path becomes one flat column.\nFor a nested object use a DOT, e.g. prices.price\nFor an array element use its index, e.g. product_reviews.0.rating\nReview rows keep their own shape and are not reshaped by this field."
          },
          "dev_dataset_name": {
            "title": "📁 Named dataset",
            "type": "string",
            "description": "💡 Write the results into a named dataset instead of the default one. Masks:\n{ACTOR} = actor name\n{DATE} = date (YYYYMMDD)\n{TIME} = time (HHMMSS)\nExample: data-{DATE} becomes data-20260810"
          },
          "dev_dataset_clear": {
            "title": "Clear the named dataset first",
            "type": "boolean",
            "description": "Empty the named dataset above before writing this run's results. It has no effect without 'Named dataset': the default dataset of a run is always new and empty.",
            "default": false
          },
          "dev_no_strip": {
            "title": "Keep empty values",
            "type": "boolean",
            "description": "💡 Keep empty values (null, empty string, empty array, empty object) in the output - including product_reviews: [] on products with no feedback. Booleans and zeros are always kept either way.",
            "default": false
          },
          "dev_fileupload": {
            "title": "📎 Store list from a file",
            "type": "string",
            "description": "💡 URL of a text or JSON file holding one store URL per line or a JSON array of URLs. Its URLs are added to the list above."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}