{
  "openapi": "3.0.1",
  "info": {
    "title": "WooCommerce Scraper - Category Sizes & Price Ranges",
    "description": "WooCommerce Scraper extracts category data, product sizes, and price ranges, including product names, prices, variants, availability, categories, and store URLs. Ideal for e-commerce research, competitor analysis, pricing insights, and product catalog monitoring.",
    "version": "0.1",
    "x-build-id": "unBFHdeCIkhUXlDVv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapio~woocommerce-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapio-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/scrapio~woocommerce-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapio-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/scrapio~woocommerce-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapio-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 size up",
            "type": "array",
            "description": "💡 Store home pages, one per line (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: the same list of store URLs under the key 'url'. Both are read; duplicates are removed.",
            "items": {
              "type": "string"
            }
          },
          "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."
          },
          "includeCategorySummary": {
            "title": "📐 Read each category's size and price band",
            "type": "boolean",
            "description": "For every product category the store publishes, read its collection summary: product count, the store's own lowest and highest price for that set, the in-stock / out-of-stock / on-backorder split and the star-rating histogram. Prices come back in real currency units, in the currency the store serves this run's IP address. Costs one request, and one charged row, per category. Turn this off to get the plain catalogue records only.",
            "default": true
          },
          "minCategoryProducts": {
            "title": "🔢 Minimum products in a category",
            "minimum": 0,
            "type": "integer",
            "description": "Drop categories holding fewer products than this. Most stores carry a tail of near-empty categories that tell a researcher nothing. 0 keeps every category, including empty ones.",
            "default": 1
          },
          "maxCategories": {
            "title": "💰 Category budget per store",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Stop after this many category summaries per store - one request, and one charged row, each. Categories are ordered by the rule below before the budget is applied, so the default keeps the biggest ones.",
            "default": 50
          },
          "categoryOrder": {
            "title": "↕️ Order the categories by",
            "enum": [
              "size_desc",
              "size_asc",
              "name",
              "store"
            ],
            "type": "string",
            "description": "How to order categories before the budget above is applied. Sorted here, not by the store: the WooCommerce category endpoint accepts orderby=count but does not actually reorder by it (measured).",
            "default": "size_desc"
          },
          "includeSubcategories": {
            "title": "🧭 Include the subcategory tree",
            "type": "boolean",
            "description": "Add each category's direct children with their own product counts, plus the category's depth and its full path from the root. Built from the category list already fetched - no extra requests.",
            "default": true
          },
          "includeAttributeCounts": {
            "title": "🧮 Include attribute term counts",
            "type": "boolean",
            "description": "Add how many products in each category carry each size, colour, brand or other attribute term. The store answers with bare term IDs, so the run also reads the store's attribute taxonomies once to resolve the names (one request per taxonomy, per store). A term ID with no published name is returned as an ID with a null name - never a guessed one.",
            "default": true
          },
          "onlyCategoriesWithPrices": {
            "title": "🏷️ Only categories with a published price band",
            "type": "boolean",
            "description": "Drop categories where the store publishes no price range - usually categories whose products are hidden, unpurchasable or price-on-request. Off by default so you can see them and their 'price_range_available: false' flag.",
            "default": false
          },
          "resource": {
            "title": "📁 Record type",
            "enum": [
              "products",
              "categories",
              "brands",
              "tags",
              "attributes",
              "reviews",
              "pages",
              "posts",
              "comments",
              "post-categories",
              "post-tags",
              "users"
            ],
            "type": "string",
            "description": "Which catalogue records to return next to the category summaries. 'products' is the full product row; every other value is returned exactly as the store's API publishes it. Choosing 'categories' merges the sizing fields onto the category records themselves instead of adding separate summary rows. 'brands' needs the WooCommerce Brands taxonomy installed, 'users' is disabled on many stores, and 'comments' hides product reviews from logged-out clients - use 'reviews' for those.",
            "default": "products"
          },
          "limit": {
            "title": "♾️ Catalogue records per store",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of catalogue records to return per store. It does NOT cap the category summaries - use 'Category budget per store' for those. Product variations fetched by 'Include variations' are returned on top of this number.",
            "default": 10
          },
          "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'.",
            "default": false
          },
          "format": {
            "title": "Description format",
            "enum": [
              "md",
              "text",
              "html"
            ],
            "type": "string",
            "description": "💡 Output format for product, category and review descriptions. (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 for the catalogue records. Products accept every value below. Categories, tags and brands accept Slug and Title only; reviews accept Date, ID and Rating; pages and posts accept Date, Modified, ID, Title and Slug. An unsupported value is reported in the log and the store's own order is used.",
            "default": "date"
          },
          "order": {
            "title": "Order",
            "enum": [
              "",
              "asc",
              "desc"
            ],
            "type": "string",
            "description": "Sort direction. Applied only when the chosen Sorting value is supported by the record type.",
            "default": ""
          },
          "search": {
            "title": "Search",
            "type": "string",
            "description": "💡 Return only catalogue records matching this text. Applied by the store itself. Not supported for the 'attributes' and 'reviews' record types."
          },
          "category": {
            "title": "Category ID filter",
            "type": "string",
            "description": "Product category ID(s), comma separated, applied to the catalogue records. The category summaries are unaffected - they always cover every category that passes the size floor. Run once with record type 'categories' to read the IDs."
          },
          "sku": {
            "title": "SKU",
            "type": "string",
            "description": "💡 Return only products with this SKU. Products record type only."
          },
          "rating": {
            "title": "Product rating",
            "enum": [
              "",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "💡 Return only products whose rounded average rating equals this many stars. The WooCommerce Store API honours one value, so a single star level is applied. Products record type only."
          },
          "min_price": {
            "title": "Price range - min",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price for the catalogue records, in the store's minor currency unit (cents for a 2-decimal store: 1999 means 19.99). Products record type only."
          },
          "max_price": {
            "title": "Price range - max",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price for the catalogue records, in the store's minor currency unit (cents for a 2-decimal store: 4999 means 49.99). Products record type only."
          },
          "tag": {
            "title": "Tag",
            "type": "string",
            "description": "Product tag ID(s), comma separated. Run once with record type 'tags' to read the IDs. Products record type only."
          },
          "product_type": {
            "title": "Product type",
            "enum": [
              "",
              "simple",
              "grouped",
              "external",
              "variable",
              "wbs_bundle",
              "variation"
            ],
            "type": "string",
            "description": "Return only products of this type. Products record type only."
          },
          "stock": {
            "title": "Stock status",
            "enum": [
              "",
              "instock",
              "outofstock",
              "onbackorder"
            ],
            "type": "string",
            "description": "Return only products with this stock status. Products record type only."
          },
          "featured": {
            "title": "Featured only",
            "type": "boolean",
            "description": "Return only products the store marks as featured. Products record type only.",
            "default": false
          },
          "sale": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Return only products that are currently on sale. Products record type 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\": \"Authorization\", \"value\": \"Bearer token\"}]"
          },
          "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 in the output. Enter comma-separated field paths; each path becomes one flat column.\nFor a nested object use a DOT, e.g. price_range.max_price\nFor an array element use its index, e.g. subcategories.0.name"
          },
          "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: sizes-{DATE} becomes sizes-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 - useful when you want every category row to carry the same columns. Booleans and zeros are always kept.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}