{
  "openapi": "3.0.1",
  "info": {
    "title": "Zalando Scraper - Products, Prices, Sizes, Images, Reviews",
    "description": "Scrape Zalando products: name, brand, current and original price, discount, sizes, images, deal flags and rating, plus full description, colour, per-size availability and reviews on detail. Search by keyword with sort and filters, or paste any category, search or product URL.",
    "version": "1.0",
    "x-build-id": "GuFgp5MPjjA6OLliR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~zalando-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-zalando-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~zalando-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-zalando-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~zalando-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-zalando-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": "Choose Search to build queries from keywords and filters, or URL to scrape pasted category, search-result or product URLs directly.",
            "default": "search"
          },
          "searchTerms": {
            "title": "Search keywords",
            "type": "array",
            "description": "One or more keywords to search Zalando for, e.g. \"summer dress\", \"nike air max\".",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "domain": {
            "title": "Zalando country site",
            "enum": [
              "co.uk",
              "de",
              "fr",
              "nl",
              "be",
              "it",
              "es",
              "pl",
              "at",
              "ch",
              "se",
              "dk",
              "fi",
              "no",
              "ie",
              "cz",
              "com"
            ],
            "type": "string",
            "description": "Which Zalando country store to scrape. Affects language, currency and catalogue.",
            "default": "co.uk"
          },
          "specialsCategory": {
            "title": "Browse sale",
            "enum": [
              "none",
              "womens-sale",
              "mens-sale"
            ],
            "type": "string",
            "description": "Browse Zalando's sale section in addition to your keywords. Verified working only on the co.uk and ie stores; every other store's sale page 404s and is skipped with a log warning (no charge, no partial run). The sale page is walked with the same listing, pagination and cap as a keyword search, so it adds no extra cost per product. Off by default.",
            "default": "none"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "price_asc",
              "price_desc",
              "newest"
            ],
            "type": "string",
            "description": "Result ordering. Price ordering is enforced over the collected candidate set. Applies in both Search and URL mode, but only when you actually pick an ordering: choosing price_asc, price_desc or newest writes that order into a pasted category or search-result URL, replacing any order the URL already carried. Left at the default 'relevance' this input writes nothing, so a pasted URL keeps whatever ordering it came with.",
            "default": "relevance"
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep products with a current price at or above this value (store currency)."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep products with a current price at or below this value (store currency)."
          },
          "onSaleOnly": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Keep only products that are currently discounted (current price below original).",
            "default": false
          },
          "urls": {
            "title": "Category, search or product URLs",
            "type": "array",
            "description": "Paste Zalando category URLs, search-result URLs (?q=...), sale listing URLs or product URLs. Multi-URL supported. Pagination continues from the page number in the URL (?p=N). Leave empty to run the example list (one URL per supported shape). Filter fields other than price range, on-sale and sort are ignored in this mode.",
            "default": [
              "https://www.zalando.co.uk/womens-clothing-dresses/",
              "https://www.zalando.co.uk/catalog/?q=dress",
              "https://www.zalando.co.uk/womens-sale/",
              "https://www.zalando.co.uk/womens-clothing-dresses/?p=2&order=price",
              "https://www.zalando.co.uk/evenandodd-occasion-wear-black-ev421c1re-q11.html"
            ],
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Fetch full product details",
            "type": "boolean",
            "description": "Adds the full description, colour, per-size price and availability, every image, rating summary and individual reviews from each product page. Without it, runs already return name, brand, current and original price, discount, savings, sizes, images, deal flags and rating summary from the listing.",
            "default": false
          },
          "maxReviews": {
            "title": "Max reviews per product",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of individual reviews captured per product when Fetch full product details is on. Capped at 100 per product; 0 or empty uses 20.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Safety bound on result pages walked per keyword or URL. Leave empty or 0 for unlimited. This does NOT cap the number of products; the run still stops at Max items."
          },
          "maxListings": {
            "title": "Max items",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of products to return across the whole run. The single finite cap. Set 0 for unlimited.",
            "default": 20
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy. Works on every Apify plan by default; enable residential for more IP rotation.",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste the ID of a previous run of this actor to continue after an interruption without returning or charging for products that run already collected. For recurring 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 every matching product as NEW. Later runs return only NEW, UPDATED and REAPPEARED products, which is how a price cut or a stock change is spotted; each row says what changed in changedFields. Fields compared: every returned field except scrapedAt, reviews, productsFound (the listing total), sourceUrl and search_query (listing context) (a new review still shows through the rating fields). State is kept separately for each search, filter and detail setup; use State key to name or share a campaign. Max products still counts unchanged products, so raise it (or set 0) to cover the whole search.",
            "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 derive a key automatically from the search, filters and detail settings."
          },
          "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, rows you already have.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products seen in an earlier run that are no longer listed, marked EXPIRED. Only produced when a run scanned every page of the tracked search from page 1 (never when Max products, Max pages, a price sort window or a failed page cut it short, or when Resume was used). This returns, and bills, extra rows.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Output field names (for example promoLabel or sizes) that should NOT make a product count as UPDATED. scrapedAt, reviews, productsFound, sourceUrl and search_query are always ignored. Ignored fields are still returned in the output.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Export to your apps (MCP)",
            "type": "array",
            "description": "Optional. Pick connected apps (Notion, Airtable, Linear, Apify) to also push each scraped product to, in addition to the dataset.",
            "default": []
          },
          "notionParentPageUrl": {
            "title": "Notion parent page URL",
            "type": "string",
            "description": "Optional. When a Notion connector is selected, create one page per product under this parent page."
          },
          "maxNotifyListings": {
            "title": "Max items to export",
            "minimum": 0,
            "type": "integer",
            "description": "Optional cap on how many products are pushed to the selected MCP connectors."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}