{
  "openapi": "3.0.1",
  "info": {
    "title": "Woolworths Scraper - Prices, Specials, Barcodes & Nutrition",
    "description": "Scrape Woolworths Australia by search, category, specials, stockcode or barcode: price, was price, unit price, multi-buy, stock, barcode, ingredients, nutrition, ratings. Reviews, in-store stock and store directory add-ons. Price monitor. $0.27 per 1,000 products, no start fee.",
    "version": "0.1",
    "x-build-id": "wVraFgcSjR0cGQTvP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/topapi~woolworths-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-topapi-woolworths-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/topapi~woolworths-scraper/runs": {
      "post": {
        "operationId": "runs-sync-topapi-woolworths-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/topapi~woolworths-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-topapi-woolworths-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": {
          "searchTerms": {
            "title": "🔍 Search terms",
            "type": "array",
            "description": "Products to search for, as you would type them on woolworths.com.au, e.g. \"milk\", \"tim tam\", \"gluten free bread\". A barcode typed here is looked up as a barcode.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "🔗 Woolworths links",
            "type": "array",
            "description": "Any woolworths.com.au search, category / aisle, specials, multi-buy offer or product link, e.g. https://www.woolworths.com.au/shop/browse/dairy-eggs-fridge/milk. Sort and specials settings in a link are kept.",
            "items": {
              "type": "string"
            }
          },
          "specials": {
            "title": "🏷️ Specials",
            "type": "array",
            "description": "Woolworths specials groups to scrape in full, e.g. Half Price. Each group is read page by page like a category.",
            "items": {
              "type": "string",
              "enum": [
                "halfPrice",
                "lowerShelfPrice",
                "everydayLowPrice",
                "seasonal",
                "buyMoreSaveMore",
                "bundles",
                "onlineOnly",
                "all"
              ],
              "enumTitles": [
                "Half Price",
                "Lower Shelf Price (price drops)",
                "Everyday Low Price",
                "Seasonal Price",
                "Buy More Save More (multi-buy)",
                "Bundles",
                "Online Only Specials",
                "All specials groups"
              ]
            }
          },
          "stockcodes": {
            "title": "🔢 Stockcodes",
            "type": "array",
            "description": "Woolworths product numbers (the number in a product link), e.g. 888140 for /shop/productdetails/888140/... Looked up 20 at a time.",
            "items": {
              "type": "string"
            }
          },
          "barcodes": {
            "title": "📦 Barcodes (EAN / GTIN)",
            "type": "array",
            "description": "Exact barcodes, e.g. 9300633556150. Only an exact barcode match is returned; a barcode Woolworths does not sell online is reported as not found.",
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "🗂️ Whole departments",
            "type": "array",
            "description": "Scrape whole departments page by page, e.g. Dairy, Eggs & Fridge. Set Max products to bound the run (a department holds 500-3,000 products).",
            "items": {
              "type": "string",
              "enum": [
                "fruit-veg",
                "poultry-meat-seafood",
                "deli",
                "dairy-eggs-fridge",
                "bakery",
                "freezer",
                "snacks-confectionery",
                "pantry",
                "international-foods",
                "drinks",
                "beer-wine-spirits",
                "beauty",
                "personal-care",
                "health-wellness",
                "cleaning-maintenance",
                "baby",
                "pet",
                "electronics",
                "home-lifestyle",
                "lunch-box",
                "dinner",
                "healthylife",
                "front-of-store"
              ],
              "enumTitles": [
                "Fruit & Veg",
                "Poultry, Meat & Seafood",
                "Deli",
                "Dairy, Eggs & Fridge",
                "Bakery",
                "Freezer",
                "Snacks & Confectionery",
                "Pantry",
                "International Foods",
                "Drinks",
                "Beer, Wine & Spirits",
                "Beauty",
                "Personal Care",
                "Health & Wellness",
                "Cleaning & Maintenance",
                "Baby",
                "Pet",
                "Electronics",
                "Home & Lifestyle",
                "Lunch Box",
                "Dinner",
                "Healthylife",
                "Front of Store"
              ]
            }
          },
          "fullCatalog": {
            "title": "🛒 Full catalogue",
            "type": "boolean",
            "description": "Every department, duplicates removed (about 25,000 supermarket products). Departments above narrow it. Pair with Max products.",
            "default": false
          },
          "categoryTree": {
            "title": "🌳 Category tree",
            "type": "boolean",
            "description": "One row per Woolworths category (about 2,600) with its id, path and browse link - the way to find an aisle link to pass back in Woolworths links.",
            "default": false
          },
          "storeDirectory": {
            "title": "🏪 Store directory",
            "type": "boolean",
            "description": "Woolworths supermarkets with address, phone, coordinates, this week's opening hours and facilities. All of them, or the ones near Postcodes / the Store numbers below.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "priceAsc",
              "priceDesc",
              "unitPriceAsc",
              "unitPriceDesc",
              "nameAsc",
              "nameDesc"
            ],
            "type": "string",
            "description": "Order of search and category results, as on the site.",
            "default": "relevance"
          },
          "specialsOnly": {
            "title": "Specials only",
            "type": "boolean",
            "description": "Only products on special or on a multi-buy deal.",
            "default": false
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "Leave out products Woolworths shows as unavailable.",
            "default": false
          },
          "includeEverydayMarket": {
            "title": "Include Everyday Market",
            "type": "boolean",
            "description": "Include Everyday Market listings (third-party sellers, shipped by the seller). Off = supermarket products only, as most buyers want.",
            "default": false
          },
          "minPrice": {
            "title": "Min price (A$)",
            "minimum": 0,
            "maximum": 100000,
            "type": "number",
            "description": "Lowest shelf price to keep, e.g. 2.5."
          },
          "maxPrice": {
            "title": "Max price (A$)",
            "minimum": 0,
            "maximum": 100000,
            "type": "number",
            "description": "Highest shelf price to keep, e.g. 20."
          },
          "minDiscountPercent": {
            "title": "Min discount %",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep products at least this far below their was price, e.g. 40 for 40% off or more."
          },
          "minRating": {
            "title": "Min rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep products with an average customer rating of at least this, 1-5, e.g. 4."
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Keep only these brands, e.g. \"Woolworths\", \"Cadbury\" (case-insensitive, partial match).",
            "items": {
              "type": "string"
            }
          },
          "dietary": {
            "title": "Dietary claims",
            "type": "array",
            "description": "Keep products that carry every one of these claims, e.g. \"Vegan\", \"Gluten Free\", \"High Protein\".",
            "items": {
              "type": "string"
            }
          },
          "allergenFree": {
            "title": "Allergen free",
            "type": "array",
            "description": "Keep products stated free of these allergens and not listing them, e.g. \"Gluten\", \"Peanut\", \"Milk\".",
            "items": {
              "type": "string"
            }
          },
          "minHealthStarRating": {
            "title": "Min Health Star Rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Keep products with at least this Health Star Rating, 0.5-5."
          },
          "excludeCategories": {
            "title": "Exclude categories",
            "type": "array",
            "description": "Leave out products in these departments or categories, e.g. \"Beer, Wine & Spirits\", \"Baby\".",
            "items": {
              "type": "string"
            }
          },
          "includeDetails": {
            "title": "➕ Product details",
            "type": "boolean",
            "description": "Add the product page's nutrition panel (per 100 g and per serve), serving size, country-of-origin label and Australian %, in-store aisle and department, health warnings and every product image. One extra request per product.",
            "default": false
          },
          "includeRatings": {
            "title": "Ratings",
            "type": "boolean",
            "description": "Average rating, rating count, review count and the 1-5 star breakdown on every product row. No extra charge.",
            "default": true
          },
          "includeReviews": {
            "title": "➕ Customer reviews",
            "type": "boolean",
            "description": "Customer reviews as their own rows (type \"review\"): rating, text, author, date, source.",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "How many reviews to read per product, newest first by default. 0 = all.",
            "default": 20
          },
          "reviewSort": {
            "title": "Review order",
            "enum": [
              "latest",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "Which reviews come first.",
            "default": "latest"
          },
          "postcodes": {
            "title": "📍 Postcodes",
            "type": "array",
            "description": "Australian postcodes, e.g. \"2000\", \"0800\". With products: in-store availability at the nearest supermarkets. With Store directory: the stores near each postcode.",
            "items": {
              "type": "string"
            }
          },
          "storeIds": {
            "title": "Store numbers",
            "type": "array",
            "description": "Woolworths store numbers (the number at the end of a store link, e.g. 1002 in /shop/storelocator/nsw-chatswood-1002). Used like Postcodes.",
            "items": {
              "type": "string"
            }
          },
          "inStoreAvailability": {
            "title": "➕ In-store availability",
            "type": "boolean",
            "description": "One row per product per nearby store (type \"storeStock\") saying whether that store has it on the shelf. On automatically when Postcodes or Store numbers are given without Store directory."
          },
          "maxStoresPerProduct": {
            "title": "Stores per postcode",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many of the nearest stores to check for each product and postcode.",
            "default": 3
          },
          "monitorMode": {
            "title": "🔁 Monitor mode",
            "type": "boolean",
            "description": "Remember every delivered product's price and deliver only new products and price / special / availability changes on later runs. Unchanged products are not delivered and not charged.",
            "default": false
          },
          "monitorOutput": {
            "title": "Monitor output",
            "enum": [
              "changes",
              "new",
              "all"
            ],
            "type": "string",
            "description": "What a monitor run delivers.",
            "default": "changes"
          },
          "monitorStoreName": {
            "title": "Monitor memory name",
            "type": "string",
            "description": "Named key-value store that holds the memory. Use one name per schedule, e.g. \"woolworths-milk-daily\".",
            "default": "woolworths-monitor"
          },
          "maxItems": {
            "title": "Max products",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Most product rows in the run (also caps directory and category rows). Woolworths shows up to a few thousand products per search; 0 = no limit.",
            "default": 1000
          },
          "maxResultsPerSource": {
            "title": "Max per search / link",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Most products from each search term, link, specials group or department. 0 = no per-source limit.",
            "default": 0
          },
          "deduplicate": {
            "title": "Remove duplicates",
            "type": "boolean",
            "description": "Deliver a product once per run even when several searches or categories return it.",
            "default": true
          },
          "compact": {
            "title": "Compact output",
            "type": "boolean",
            "description": "Core fields only (name, price, special, unit price, stock, category, rating, link) - smaller rows for AI agents and MCP.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Your own proxy is tried first; the built-in routes follow if it is refused.",
            "default": {
              "useApifyProxy": false
            }
          },
          "maxConcurrency": {
            "title": "Parallel sources",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many searches / links are read at the same time.",
            "default": 3
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}