{
  "openapi": "3.0.1",
  "info": {
    "title": "Zara Products Scraper",
    "description": "Zara catalogue products from any country store: price and currency, previous price and discount, colours, images and category path. The store that answered is verified on every run -- an unknown country code is served by Zara's Spanish store, at euro prices, without an error.",
    "version": "0.1",
    "x-build-id": "RMgW6tGAciNfQXzPW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapyx~zara-products-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapyx-zara-products-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/scrapyx~zara-products-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapyx-zara-products-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/scrapyx~zara-products-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapyx-zara-products-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": {
          "country": {
            "title": "Country store",
            "type": "string",
            "description": "Two-letter country code exactly as it appears in a Zara URL - us, gb, de, fr, es, it, jp, kr, br, mx, cn. Prices, currency and the assortment all differ per store. IMPORTANT: Zara does not reject an unrecognised two-letter code; it serves the SPANISH store instead, with HTTP 200 and real products at euro prices. This Actor reads back which store actually answered and stops the run if it is not the one you asked for.",
            "default": "us"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language segment for the same store, e.g. en, de, fr, ja, ko, pt. A pair Zara does not serve (for example gb/de) is refused upstream rather than guessed at.",
            "default": "en"
          },
          "categoryIds": {
            "title": "Category IDs",
            "type": "array",
            "description": "Zara's internal numeric category ids. Leave this and Category URLs empty to run a discovery pass that lists every category in the store with its id, name and full path - then paste the ids you want back in here.",
            "items": {
              "type": "string"
            }
          },
          "categoryUrls": {
            "title": "Category URLs",
            "type": "array",
            "description": "Zara category pages, e.g. https://www.zara.com/us/en/woman-tshirts-l1362.html. The number in the URL is the SEO id, which is NOT the id the products endpoint takes - it is resolved through the store's own category tree, and a URL that does not resolve is reported instead of guessed.",
            "items": {
              "type": "string"
            }
          },
          "sections": {
            "title": "Sections (discovery only)",
            "type": "array",
            "description": "Narrow a discovery run to sections such as WOMAN, MAN, KIDS, BEAUTY, HOME. Ignored when you pass category ids or URLs.",
            "items": {
              "type": "string"
            }
          },
          "onlyProductGrids": {
            "title": "Discovery: only categories that hold products",
            "type": "boolean",
            "description": "Zara's menu mixes real product grids with editorial pages (layout 'marketing-content-view') that may hold no products at all. On by default so a discovery run returns ids that are actually worth harvesting.",
            "default": true
          },
          "onlyDiscounted": {
            "title": "Only discounted products",
            "type": "boolean",
            "description": "Keep only products with a previous price. Note that Zara's top-level price field is already the reduced one - the original lives one level down, per colour, which is where this Actor reads it from.",
            "default": false
          },
          "includeBundles": {
            "title": "Include bundles",
            "type": "boolean",
            "description": "Zara mixes 'Bundle' components into category responses (213 of 1,670 across four measured categories). They carry no price at all. They are excluded by default so the dataset does not fill with price-less rows that read downstream as free items.",
            "default": false
          },
          "maxItems": {
            "title": "Max rows",
            "minimum": 1,
            "type": "integer",
            "description": "Overall cap on product rows across every category, or on category rows in a discovery run. Summary rows are always emitted and do not count against it.",
            "default": 500
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "Categories fetched in parallel. Keep this low: Zara does not paginate, so one category arrives as a single response - the largest measured was 4.5 MB for 802 products - and the memory cost is per concurrent category.",
            "default": 2
          },
          "minRequestInterval": {
            "title": "Min seconds between requests",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Politeness delay between request starts. It paces starts only and does not hold a concurrency slot, so raising it slows the run without idling workers.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Zara did not challenge any of five TLS profiles from a plain IP, so this is off by default. If you enable it, leave the pool unpinned: the store is chosen by the country segment in the URL, not by the exit IP, and every run verifies which store answered anyway.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}