{
  "openapi": "3.0.1",
  "info": {
    "title": "Luxury Sale Tracker: SSENSE Price Drop Alerts",
    "description": "SSENSE sale scraper and price tracker: every designer product on sale with sale price, retail price, discount % and category, one row per product. Filter by designer, discount or price, and get price-drop and new-on-sale alerts in Slack, Discord or Telegram. No login or API key.",
    "version": "1.0",
    "x-build-id": "jvCGSWGmLfNFXtEIn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~luxury-sale-price-lookup/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-luxury-sale-price-lookup",
        "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/accountable_eel~luxury-sale-price-lookup/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-luxury-sale-price-lookup",
        "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/accountable_eel~luxury-sale-price-lookup/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-luxury-sale-price-lookup",
        "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": {
          "designers": {
            "title": "Designers to keep (optional)",
            "type": "array",
            "description": "One designer per line, written as SSENSE spells it. Leave empty for the whole sale section. Each designer is read from SSENSE's own page for that designer (one search each, up to 20), and only that designer's products are kept. Accepted formats: Rick Owens, Acne Studios, Comme des Garçons Homme, A.P.C.. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "gender": {
            "title": "Section",
            "enum": [
              "men",
              "women"
            ],
            "type": "string",
            "description": "Which SSENSE sale section to read. Men's or women's sale; run twice (two tasks) for both.",
            "default": "men"
          },
          "locale": {
            "title": "SSENSE site version",
            "enum": [
              "en-us",
              "en-gb"
            ],
            "type": "string",
            "description": "en-us shows prices in US dollars, en-gb in British pounds (each site version has its own sale prices and page count).",
            "default": "en-us"
          },
          "minDiscountPct": {
            "title": "Minimum discount (%)",
            "type": "integer",
            "description": "Keeps only products whose discount against the retail price is at least this much (for example 50). Applied after the fetch."
          },
          "maxPricePerItem": {
            "title": "Maximum price per item",
            "type": "integer",
            "description": "Keeps only products priced at or below this amount, in the currency of the site version. Applied after the fetch."
          },
          "maxItems": {
            "title": "Most products to return",
            "type": "integer",
            "description": "Stops once this many products matched your filters. SSENSE lists 120 per page.",
            "default": 120
          },
          "maxPages": {
            "title": "Most pages to scan",
            "type": "integer",
            "description": "Each page of 120 sale products is one request. With narrow filters the actor keeps scanning pages until it has your products or reaches this limit (the sale list is up to 40 pages).",
            "default": 3
          },
          "deltaMode": {
            "title": "Track prices across runs",
            "type": "boolean",
            "description": "Turns the actor into a sale monitor. Each run compares every product with the previous run's and fills in 'Change since last run', previous price, change % and the lowest price seen. Schedule it daily and combine with 'Only return products that changed' and 'Send alerts to'.",
            "default": false
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Leave empty and one is derived from your section, site version and filters. Type your own name to keep one memory across changes, or to run several independent watchlists.",
            "default": ""
          },
          "alertOn": {
            "title": "Report and alert on",
            "enum": [
              "all",
              "drops-and-new",
              "price-drop",
              "new-on-sale",
              "gone"
            ],
            "type": "string",
            "description": "Which changes count. 'Everything' = new on sale, price drop, back in stock and gone. A price rise is returned but never alerted.",
            "default": "all"
          },
          "minPriceDropPct": {
            "title": "Price drop counts from (%)",
            "type": "integer",
            "description": "A price move smaller than this counts as unchanged.",
            "default": 5
          },
          "alertOnChangeOnly": {
            "title": "Only return products that changed",
            "type": "boolean",
            "description": "With monitoring on, only products matching 'Report and alert on' are returned and billed. A product whose price did not move writes no row and costs nothing.",
            "default": false
          },
          "skipFirstRun": {
            "title": "Seed silently (no rows on the first run)",
            "type": "boolean",
            "description": "The first run of a watchlist has nothing to compare with. Turn this on to remember it without returning or billing it, so alerts start from the second run.",
            "default": false
          },
          "notifyUrl": {
            "title": "Send alerts to (Discord or Slack webhook, Telegram bot link, or any URL)",
            "type": "string",
            "description": "Optional. After a product row is billed, each alert (as chosen above) is posted here as one message with the product, price, retail price and link. Discord or Slack: paste the channel's webhook URL. Telegram: https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat id>. Any other URL receives JSON. Messages are free, a failed message never fails the run, and the first run of a watchlist sends nothing (it is the baseline). Stored encrypted, never logged or written to the results."
          },
          "notifyFormat": {
            "title": "Message format",
            "enum": [
              "auto",
              "discord",
              "slack",
              "telegram",
              "json"
            ],
            "type": "string",
            "description": "Leave on 'Detect from the link': discord.com links get Discord messages, hooks.slack.com Slack, api.telegram.org Telegram, anything else JSON. Pick one only to override that.",
            "default": "auto"
          },
          "maxNotificationsPerRun": {
            "title": "Most alert messages per run",
            "type": "integer",
            "description": "Up to 100. After this, one 'more alerts' message says the rest are in the run's dataset. 0 sends only that one message.",
            "default": 20
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep rows containing",
            "type": "array",
            "description": "Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip rows containing",
            "type": "array",
            "description": "Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Stop after this many results",
            "minimum": 1,
            "type": "integer",
            "description": "Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit."
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "store",
                "gender",
                "brand",
                "name",
                "url",
                "currency",
                "price",
                "originalPrice",
                "discountPct",
                "category",
                "inStock",
                "checkedAt",
                "changeType",
                "previousPrice",
                "changePct",
                "lowestEverSeen",
                "firstSeenAt"
              ],
              "enumTitles": [
                "Store",
                "Section",
                "Brand",
                "Product",
                "Link",
                "Currency",
                "Sale price",
                "Retail price",
                "Discount (%)",
                "Category",
                "In stock",
                "Checked at",
                "Change since last run",
                "Previous price",
                "Change (%)",
                "Lowest price seen",
                "First seen at"
              ]
            },
            "default": [
              "store",
              "gender",
              "brand",
              "name",
              "url",
              "currency",
              "price",
              "originalPrice",
              "discountPct",
              "category",
              "inStock",
              "checkedAt",
              "changeType",
              "previousPrice",
              "changePct",
              "lowestEverSeen",
              "firstSeenAt"
            ]
          },
          "expandRows": {
            "title": "One row per sale product (recommended) — turn off for one row per sale product instead",
            "type": "boolean",
            "description": "When on, each sale product found gets its own row instead of being grouped under its sale product. You're still only charged once per sale product, no matter how many rows it produces.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 1,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 1
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. Residential recommended for anti-bot-sensitive targets.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}