{
  "openapi": "3.0.1",
  "info": {
    "title": "THE ICONIC Scraper - Fashion Products, Sizes, Stock & Reviews",
    "description": "Scrape THE ICONIC (theiconic.com.au) fashion products: name, brand, price, sale price, sizes with stock and price per size, images, colour variants, category path, materials, care and customer reviews. Search by keyword, category or brand, or paste product, search and sale links.",
    "version": "0.1",
    "x-build-id": "OihAakLyKcWh5tikm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~theiconic-com-au-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-theiconic-com-au-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/abotapi~theiconic-com-au-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-theiconic-com-au-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/abotapi~theiconic-com-au-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-theiconic-com-au-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search: build the lists to read from keywords, category pages and brand pages below. URL: paste product, search, category, brand and sale links, or the product sitemap, and read exactly those.",
            "default": "search"
          },
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "Words to search for, for example t-shirt or running shoes. One search per entry. Search mode only.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Category pages",
            "type": "array",
            "description": "Category pages by plain name, for example Women's dresses, Men's shoes or Beauty skincare. A category address such as womens-clothing-dresses or a pasted category link works too. One list per entry, read alongside the keywords. Search mode only.",
            "items": {
              "type": "string"
            }
          },
          "brands": {
            "title": "Brand pages",
            "type": "array",
            "description": "Brand pages by plain name, for example Nike, Country Road or AERE. A brand address such as aere or a pasted brand link works too. One list per entry, read alongside the keywords. Search mode only.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "popularity",
              "new",
              "price_low",
              "price_high",
              "brand_asc",
              "brand_desc"
            ],
            "type": "string",
            "description": "Order of each list. Also fills the sort of pasted listing links that do not already carry one.",
            "default": "popularity"
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep products priced at or above this whole amount (in the store currency). Applied by the site's own price filter to searches and listings. Does not apply to a pasted product link."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep products priced at or below this whole amount (in the store currency). Applied by the site's own price filter to searches and listings. Does not apply to a pasted product link."
          },
          "gender": {
            "title": "Gender",
            "enum": [
              "",
              "female",
              "male"
            ],
            "type": "string",
            "description": "Optionally narrow listings to one gender. Leave empty for all.",
            "default": ""
          },
          "size": {
            "title": "Size",
            "type": "string",
            "description": "Optionally narrow listings to one size, for example M or 10 (written for you as AU M or AU 10), or exactly as the site writes it, for example AU 10 or One Size."
          },
          "colour": {
            "title": "Colour",
            "type": "string",
            "description": "Optionally narrow listings to one colour as the site writes it, for example black."
          },
          "onSaleOnly": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Only keep products that are currently reduced. Applies to searches and listings.",
            "default": false
          },
          "urls": {
            "title": "Links",
            "type": "array",
            "description": "Paste links from theiconic.com.au (or theiconic.co.nz): product pages, search results, category pages, brand pages, the sale and new arrivals pages, or the product sitemap index. Filters you ticked on the site and carried in the link (price, gender, size, sort, sale) are applied, and a link that starts at a later page continues from that page. Search filters set above only fill in what a link does not already say. Links the actor does not recognise are skipped with a warning in the log. URL mode only.",
            "default": [
              "https://www.theiconic.com.au/catalog/?q=t-shirt",
              "https://www.theiconic.com.au/womens-clothing-dresses/",
              "https://www.theiconic.com.au/womens-clothing-dresses/?page=2&sort=new",
              "https://www.theiconic.com.au/womens-clothing-dresses/?special_price=1&sort=popularity",
              "https://www.theiconic.com.au/catalog/?q=t-shirt&price=10-50&gender=female&size=M",
              "https://www.theiconic.com.au/aere",
              "https://www.theiconic.com.au/aere/?page=1&sort=popularity&special_price=1",
              "https://www.theiconic.com.au/leigh-boxy-tshirt-2498829.html",
              "https://www.theiconic.com.au/leigh-boxy-tshirt-2498829.html?utm_source=x&utm_medium=y",
              "https://www.theiconic.com.au/sale/",
              "https://www.theiconic.com.au/new-arrivals/",
              "https://www.theiconic.co.nz/leigh-boxy-tshirt-2498829.html",
              "https://sitemap.theiconic.com.au/sitemap_index_product.xml"
            ],
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Fetch full product details",
            "type": "boolean",
            "description": "On: open every product page to add all sizes with stock and price, every image, colour variants, description, materials, care, category path and more. Off: return only what the list shows (name, brand, price, image, colour message, wishlist count), which is much lighter.",
            "default": true
          },
          "fetchReviews": {
            "title": "Fetch customer reviews",
            "type": "boolean",
            "description": "Attach each returned product's customer reviews to its row as a nested list, with the rating average, review count, per-star counts and recommended count. Works with or without full product details. Charged once per product row that has at least one review, never for products without reviews, for unchanged rows left out in incremental mode, or when switched off.",
            "default": true
          },
          "maxReviews": {
            "title": "Max reviews per product",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "How many reviews to attach to each product, newest first, when Fetch customer reviews is on. Use 0 to skip reviews entirely (no review reads, no rating summary, no review charge). Up to 100 reviews are read per request, so higher values read more pages per product.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per list",
            "minimum": 0,
            "type": "integer",
            "description": "Optional limit on result pages read per list (60 products per page). Leave empty or 0 for no page limit. This does not cap the run: it defers to Max items, which is the only default cap (20)."
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Total products to scan across all searches and links. 0 = unlimited, up to the built-in traffic limit (roughly 5,500 detailed products per run). With several searches or links the budget is shared fairly between them. In incremental mode this counts products scanned, not only changed rows returned.",
            "default": 20
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Connection used to load pages. Residential Apify Proxy (the default) gives the most reliable results; datacenter exits are refused by this site. Choosing your own proxy URLs or no proxy is respected as-is.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (delta)",
            "type": "string",
            "description": "Optional. Id of an earlier run of this Actor (or a dataset id). Products already in that dataset are skipped, so this run returns only new products. For recurring monitoring of the same setup use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring monitoring)",
            "type": "boolean",
            "description": "Turn on for daily or scheduled monitoring. The first run returns every matching product as NEW. Later runs compare each product with the last run (price, special price, final price, on-sale flag, availability and per-size stock and price, plus name, brand, colour, description, materials, category and sizes) and return only NEW, UPDATED and REAPPEARED products; an UPDATED row's changedFields names what moved. Images, the wishlist count, listing position, keyword and scrape time are never compared. Turn on Emit unchanged or Emit expired only when you also want those rows (they are billed). State is kept per search, link and filter setup; use State key to name or share a campaign.",
            "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 share state across differently configured runs. Leave empty to derive a key from the search, links and filters so different setups never mix."
          },
          "baselineDatasetId": {
            "title": "Start from an existing dataset (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Pick the dataset of an earlier full run of this Actor as the starting point so your first incremental run returns only products that changed since then. Pick it unedited. Used only on the first run for a state key; cannot be combined with Resume."
          },
          "emitUnchanged": {
            "title": "Emit unchanged products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Also return products that did not change, marked UNCHANGED. This returns and bills rows you already have.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Also return products that were present before but are no longer found in the list, marked EXPIRED. Only after a complete scan (not when Max items or Max pages capped it, a link started after page 1, or product links or the sitemap were used). A product leaving a list is not proof it is unavailable; use the stock fields for availability.",
            "default": false
          },
          "changeScope": {
            "title": "What counts as a change (incremental mode only)",
            "enum": [
              "all",
              "priceAndStock"
            ],
            "type": "string",
            "description": "All fields (default): any change to the product record other than the always-ignored fields returns an UPDATED row. Price and availability only: only price, special price, final price, on-sale flag, overall availability and each size's price and stock return UPDATED; descriptions, images, materials and other details never do. Switching this on an existing campaign continues from its saved baseline.",
            "default": "all"
          },
          "compactUpdates": {
            "title": "Compact update rows (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. UPDATED and EXPIRED rows become short: ids, link, name, current price and stock, plus priceChanges and variantChanges with the old and new value of each moved price or stock field per size. NEW rows always carry the full record. Extra detail fees are not charged 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. A product is marked EXPIRED only after it was 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 list is not reported. A product that comes back resets the count.",
            "default": 1
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Optional. Field names to leave out of UPDATED detection, in addition to the built-in handling (images, wishlist count, position, keyword, scrape time and the review fields never count). To ignore a field inside each size while still tracking size price and stock, use a dotted name such as size_details.dispatch_time. Ignoring size_details itself would hide size price and stock changes.",
            "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 then Settings then API & Integrations, then select it here. Notion gets a page-per-item export; other connectors get a best-effort write. Leave empty to skip. Supported: Notion, Linear, Airtable, Apify."
          },
          "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 only for the Notion export."
          },
          "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}