{
  "openapi": "3.0.1",
  "info": {
    "title": "BIG W Marketplace Scraper Lite",
    "description": "Scrape BIG W products & specials from bigw.com.au: name, title, brand, seller, price, was/original price, discount %, offer label, unit price, images, specs, GTIN/EAN, variants, rating & reviews. Filter by specials (on-special, clearance, flash deals), keyword, category & price, or paste URLs.",
    "version": "1.0",
    "x-build-id": "p88YozJcLG1pX04sF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~bigw-marketplace-scraper-lite/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-bigw-marketplace-scraper-lite",
        "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/abotapi~bigw-marketplace-scraper-lite/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-bigw-marketplace-scraper-lite",
        "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/abotapi~bigw-marketplace-scraper-lite/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-bigw-marketplace-scraper-lite",
        "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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Choose 'search' to use keywords and filters, or 'url' to scrape specific product or search URLs you paste below.",
            "default": "search"
          },
          "queries": {
            "title": "Search keywords",
            "type": "array",
            "description": "One or more keywords to search, for example 'piano keyboard' or 'garage shelving'. Each keyword is searched separately. Leave empty to browse the whole marketplace.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "BIG W URLs",
            "type": "array",
            "description": "Product or search URLs to scrape, for example https://www.bigw.com.au/product/x/p/9900004603, https://www.bigw.com.au/search?text=piano (add &page=2 to start on page 2; the m. mobile host works too) or a category link such as https://www.bigw.com.au/toys/lego/c/6822101. Multiple URLs supported. Left untouched, URL mode scrapes these examples.",
            "default": [
              "https://www.bigw.com.au/search?text=piano",
              "https://www.bigw.com.au/search?text=piano&page=2",
              "https://m.bigw.com.au/search?text=lego",
              "https://www.bigw.com.au/product/x/p/9900004603",
              "https://www.bigw.com.au/toys/lego/c/6822101"
            ],
            "items": {
              "type": "string"
            }
          },
          "marketplaceOnly": {
            "title": "Marketplace sellers only",
            "type": "boolean",
            "description": "Keep only listings sold by third-party marketplace sellers (exclude items sold directly by BIG W). On by default.",
            "default": true
          },
          "soldBy": {
            "title": "Sold by",
            "enum": [
              "",
              "all",
              "bigw",
              "marketplace"
            ],
            "type": "string",
            "description": "Optional. Who sells the products: all, BIG W only, or marketplace sellers only. When set it overrides 'Marketplace sellers only'; leave on 'Not set' to keep that toggle in charge.",
            "default": ""
          },
          "fulfilment": {
            "title": "Collection",
            "enum": [
              "",
              "any",
              "pickup"
            ],
            "type": "string",
            "description": "Optional. 'Click and collect only' keeps products that can be collected in store. Marketplace products are never collectable, so combining it with marketplace sellers returns nothing.",
            "default": ""
          },
          "brand": {
            "title": "Brand",
            "type": "string",
            "description": "Optional. Keep only products whose brand matches this value, for example 'Alpha' or 'Giantz'."
          },
          "category": {
            "title": "Category (name or id)",
            "type": "string",
            "description": "Optional. Restrict results to a BIG W category: either its name as shown on the site (e.g. LEGO), which is looked up on the store, or its id (the trailing number in a category URL, e.g. 6822101 in /toys/lego/c/6822101). A name that cannot be found stops the run with a clear error."
          },
          "specialsCategory": {
            "title": "Specials / offers",
            "enum": [
              "",
              "special",
              "clearance",
              "flashDeal",
              "lowestPrice7",
              "lowestPrice14",
              "new"
            ],
            "type": "string",
            "description": "Optional. Show only products in one of BIG W's on-site specials views. 'On special / reduced' covers half-price and percentage-off deals; also clearance, flash deals, recent price drops and new arrivals. Leave as 'Any' for no specials filter. Combine with a keyword to find specials in a topic, or leave the keyword empty to browse all specials.",
            "default": ""
          },
          "deal": {
            "title": "Deal type (advanced)",
            "type": "string",
            "description": "Optional, advanced. Filter by a raw BIG W deal label, for example 'Clearance', 'Flash Deal' or 'Special'. Most users should use the 'Specials / offers' selector above instead. Combined with it when both are set."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "priceAsc",
              "priceDesc",
              "ratingDesc",
              "nameAsc",
              "newDesc"
            ],
            "type": "string",
            "description": "Ordering applied to the collected results.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Only keep products priced at or above this amount (AUD)."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Only keep products priced at or below this amount (AUD)."
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Optional. Only keep products with an average customer rating at or above this value (1 to 5)."
          },
          "includeOutOfStock": {
            "title": "Include out-of-stock products",
            "type": "boolean",
            "description": "Include products that are currently out of stock. On by default; turn off to keep only in-stock products.",
            "default": true
          },
          "fetchReviews": {
            "title": "Fetch customer reviews",
            "type": "boolean",
            "description": "Also collect customer reviews for each product (review text, star rating, author, date, pros/cons, photos) plus an aggregate rating summary. Adds requests per product. Reviews consume additional platform usage; there is no enrichment event fee.",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on reviews collected per product when 'Fetch customer reviews' is on. Use 0 for the hard limit of 1000 reviews per product (enforced in code).",
            "default": 20
          },
          "maxItems": {
            "title": "Max products",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of products to return across the whole run. Use 0 for unlimited.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Optional safety cap on result pages walked per keyword / URL. 0 = unlimited (default); the walk still stops naturally once the storefront's own result total is reached, a page repeats with no new products, or Max products is hit.",
            "default": 0
          },
          "deliveryPostcode": {
            "title": "Delivery postcode",
            "pattern": "^[0-9]{4}$",
            "type": "string",
            "description": "Four-digit postcode, for example 4209. Requires 'Verify home delivery'."
          },
          "verifyHomeDelivery": {
            "title": "Verify home delivery",
            "type": "boolean",
            "description": "Check delivery availability to the postcode above for every returned product. Off by default.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is recommended for reliable results. On the free plan, coverage may be limited and some runs may return no results.",
            "default": {
              "useApifyProxy": true
            }
          },
          "allowBackupConnection": {
            "title": "Allow the backup connection for delivery checks",
            "type": "boolean",
            "description": "Home delivery checks only, on runs that use Apify Proxy with proxy group: RESIDENTIAL. When the default connection is unavailable, the checks continue over the backup connection, which is slower and uses more of your proxy allowance per check (about 3 seconds more per product); very large runs may reach the run timeout, and the products not yet checked are then returned with an unknown delivery answer. Turn off to keep the default connection only (checks may then come back unknown).",
            "default": true
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (delta)",
            "type": "string",
            "description": "Optional. ID of a previous run of this actor (or a dataset ID). Products already in that dataset are skipped, so this run returns only NEW products (a delta). Combine both runs' datasets for the full set. Max products then counts only the new products. For recurring daily monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those products returned (and billed). State is kept separately for each distinct search/filter setup (or by State key below). Off by default.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from your search/filter settings - different searches then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns - and bills - extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search - not when Max products or Max pages capped it, or when Resume was used. This returns - and bills - extra synthetic rows.",
            "default": false
          },
          "changeScope": {
            "title": "What counts as a change (incremental mode only)",
            "enum": [
              "all",
              "priceAndStock",
              "sellingPriceAndStock"
            ],
            "type": "string",
            "description": "All fields (default): any change to the product record, except reviews and the rating, returns an UPDATED row. Price and availability only: only price changes (price, was price, RRP, saving, special and clearance flags) and availability changes (in stock, listing status, deliverable, collectable, and each size or colour variant being added, removed or changing its listing status) return an UPDATED row; changes to descriptions, images, categories or other details never do. Selling price and availability only: like Price and availability only, but a price change counts only when the selling price (price) moves; was price, RRP, savings and promotion flags never return a row on their own. In every option, a home delivery availability change at your delivery postcode (for the product or one of its sizes or colours) returns an UPDATED row when Verify home delivery is on. Changing this option or Fetch reviews on a search with no State key continues from that search's saved state instead of starting over.",
            "default": "all"
          },
          "compactUpdates": {
            "title": "Compact update rows (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. When on, UPDATED rows (and EXPIRED rows) are short: article id, url, name, brand, seller type, current price and stock, previousPrice, plus priceChanges (old and new value of each moved price or availability field) and variantChanges (each size or colour variant added, removed or changed, with old and new values). With Verify home delivery on, the row also carries the delivery answer and deliveryChanges / variantDeliveryChanges. NEW rows always carry the complete product record. Review text is not fetched for compact rows.",
            "default": false
          },
          "expireAfterMissedScans": {
            "title": "Expire after N missed full scans (incremental mode only)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Only used with Emit expired products. A product is marked EXPIRED only after it has been missing from this many complete scans in a row (default 1). Raise it (for example 3) so a product that briefly drops out of a search is not reported as gone. A product that comes back resets the count. A product URL whose lookup could not be read never counts as missing.",
            "default": 1
          },
          "baselineDatasetId": {
            "title": "Start from an existing dataset (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Pick the dataset of an earlier run of this Actor to use as your starting point, so your first incremental run returns only products that changed since then instead of the whole set again. Pick the dataset unedited: it must be this Actor's own product output. Only used on the first run for a state key; ignored once that state key already tracks products. Cannot be combined with Resume from a previous run. If the dataset is old, everything that changed since is returned as UPDATED or NEW."
          },
          "earlierHistoryStoreId": {
            "title": "Continue from the BIG W Marketplace Scraper's history (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Pick the saved-history store of the BIG W Marketplace Scraper (named bigw-com-au-incremental-state) so your first Lite run for a State key, or for the same search settings, continues from the history that scraper already tracked, instead of returning the whole set as NEW. The store is only read, never changed. Only used on the first run for a state key; ignored once that state key already tracks products, or when Start from an existing dataset or Resume is set."
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Optional. Field names that must not count as a change, so a product is not returned as UPDATED just because of them. Use a top-level name (for example `rating`) or a dotted path for a nested field (for example `fulfilment.eta`; inside lists the path applies to every element). The fields are still returned in the output - they are only left out of change detection and `changedFields`. Changing this list never re-reports products already tracked. Incremental mode only.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}