{
  "data": {
    "id": "1bTRUB5lLuyXcDFn7",
    "actId": "Yhm8OsBrdtdtfG6wk",
    "userId": "tnBVjt3CXmcUrEE3L",
    "startedAt": "2026-10-31T22:05:40.520Z",
    "finishedAt": "2026-10-31T22:05:52.518Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 11896,
      "runTimeSecs": 11.896,
      "computeUnits": 0.013217777777777778,
      "imageSizeBytes": 358121984
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "F2Aeb3gE2syjqz9xC",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"StockX Market Data Input\",\n  \"description\": \"Choose what to collect from StockX: search results, a brand, a category, exact products, pasted URLs, or individual sales history.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to collect from StockX.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"byBrand\",\n        \"byCategory\",\n        \"byProduct\",\n        \"byUrl\",\n        \"salesHistory\"\n      ],\n      \"enumTitles\": [\n        \"Search products by keyword\",\n        \"Browse a brand\",\n        \"Browse a category\",\n        \"Fetch exact products by slug\",\n        \"Fetch pasted StockX URLs\",\n        \"Sales history for products\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\",\n      \"sectionCaption\": \"Mode & query\"\n    },\n    \"searchQueries\": {\n      \"title\": \"Search queries\",\n      \"type\": \"array\",\n      \"description\": \"One or more keywords for mode=search, e.g. 'jordan 4 retro', 'yeezy 350', 'rolex submariner'.\",\n      \"editor\": \"stringList\",\n      \"default\": [\n        \"jordan\"\n      ],\n      \"prefill\": [\n        \"jordan\"\n      ]\n    },\n    \"brand\": {\n      \"title\": \"Brand\",\n      \"type\": \"string\",\n      \"description\": \"Brand alias for mode=byBrand, e.g. 'jordan', 'nike', 'new-balance', 'casio'. When set in other modes it narrows the results to that brand.\",\n      \"editor\": \"textfield\"\n    },\n    \"category\": {\n      \"title\": \"Category\",\n      \"type\": \"string\",\n      \"description\": \"StockX category for mode=byCategory. When set in other modes it narrows the results to that category.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"sneakers\",\n        \"apparel\",\n        \"accessories\",\n        \"electronics\",\n        \"collectibles\",\n        \"trading-cards\",\n        \"watches\"\n      ],\n      \"enumTitles\": [\n        \"Sneakers\",\n        \"Apparel\",\n        \"Accessories\",\n        \"Electronics\",\n        \"Collectibles\",\n        \"Trading cards\",\n        \"Watches\"\n      ]\n    },\n    \"gender\": {\n      \"title\": \"Gender\",\n      \"type\": \"string\",\n      \"description\": \"Optional audience filter for search and browse modes.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"men\",\n        \"women\",\n        \"kids\"\n      ],\n      \"enumTitles\": [\n        \"Men\",\n        \"Women\",\n        \"Kids\"\n      ]\n    },\n    \"color\": {\n      \"title\": \"Color\",\n      \"type\": \"string\",\n      \"description\": \"Optional color filter for search and browse modes.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"black\",\n        \"white\",\n        \"red\",\n        \"blue\",\n        \"green\",\n        \"grey\",\n        \"brown\",\n        \"pink\",\n        \"yellow\",\n        \"multi\"\n      ],\n      \"enumTitles\": [\n        \"Black\",\n        \"White\",\n        \"Red\",\n        \"Blue\",\n        \"Green\",\n        \"Grey\",\n        \"Brown\",\n        \"Pink\",\n        \"Yellow\",\n        \"Multi\"\n      ]\n    },\n    \"sortBy\": {\n      \"title\": \"Sort order\",\n      \"type\": \"string\",\n      \"description\": \"Order of search and browse results.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"featured\",\n        \"most-active\",\n        \"lowest_ask\",\n        \"highest_bid\",\n        \"recent_bids\",\n        \"recent_asks\",\n        \"deadstock_sold\",\n        \"release_date\",\n        \"price_premium\",\n        \"last_sale\"\n      ],\n      \"enumTitles\": [\n        \"Featured\",\n        \"Top selling\",\n        \"Price: low to high\",\n        \"Bid: high to low\",\n        \"Recent high bids\",\n        \"Recent price drops\",\n        \"Total sold: high to low\",\n        \"Release date: newest first\",\n        \"Price premium: high to low\",\n        \"Last sale: high to low\"\n      ],\n      \"default\": \"featured\",\n      \"prefill\": \"featured\",\n      \"sectionCaption\": \"Filters\"\n    },\n    \"productSlugs\": {\n      \"title\": \"Product slugs or URLs\",\n      \"type\": \"array\",\n      \"description\": \"Products for mode=byProduct or mode=salesHistory. Paste a StockX product URL or the slug after stockx.com/, e.g. 'air-jordan-4-retro-white-cement-2025'.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"startUrls\": {\n      \"title\": \"StockX URLs\",\n      \"type\": \"array\",\n      \"description\": \"Search, category, brand, browse, or product URLs for mode=byUrl. Paste one URL per line.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"currency\": {\n      \"title\": \"Currency\",\n      \"type\": \"string\",\n      \"description\": \"Currency for all prices.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"USD\",\n        \"EUR\",\n        \"GBP\",\n        \"JPY\",\n        \"CAD\",\n        \"AUD\",\n        \"CHF\",\n        \"HKD\",\n        \"SGD\",\n        \"MXN\",\n        \"KRW\",\n        \"SEK\",\n        \"PLN\",\n        \"NZD\",\n        \"NOK\",\n        \"BRL\",\n        \"CLP\",\n        \"CNY\",\n        \"IDR\",\n        \"ILS\",\n        \"KWD\",\n        \"MOP\",\n        \"MYR\",\n        \"PEN\",\n        \"PHP\",\n        \"THB\",\n        \"TWD\",\n        \"VND\"\n      ],\n      \"enumTitles\": [\n        \"US Dollar (USD)\",\n        \"Euro (EUR)\",\n        \"British Pound (GBP)\",\n        \"Japanese Yen (JPY)\",\n        \"Canadian Dollar (CAD)\",\n        \"Australian Dollar (AUD)\",\n        \"Swiss Franc (CHF)\",\n        \"Hong Kong Dollar (HKD)\",\n        \"Singapore Dollar (SGD)\",\n        \"Mexican Peso (MXN)\",\n        \"South Korean Won (KRW)\",\n        \"Swedish Krona (SEK)\",\n        \"Polish Zloty (PLN)\",\n        \"New Zealand Dollar (NZD)\",\n        \"Norwegian Krone (NOK)\",\n        \"Brazilian Real (BRL)\",\n        \"Chilean Peso (CLP)\",\n        \"Chinese Yuan (CNY)\",\n        \"Indonesian Rupiah (IDR)\",\n        \"Israeli New Shekel (ILS)\",\n        \"Kuwaiti Dinar (KWD)\",\n        \"Macanese Pataca (MOP)\",\n        \"Malaysian Ringgit (MYR)\",\n        \"Peruvian Sol (PEN)\",\n        \"Philippine Peso (PHP)\",\n        \"Thai Baht (THB)\",\n        \"New Taiwan Dollar (TWD)\",\n        \"Vietnamese Dong (VND)\"\n      ],\n      \"default\": \"USD\",\n      \"prefill\": \"USD\",\n      \"sectionCaption\": \"Region & pricing\"\n    },\n    \"country\": {\n      \"title\": \"Market / region\",\n      \"type\": \"string\",\n      \"description\": \"Market that determines the order book and localized prices.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"US\",\n        \"GB\",\n        \"DE\",\n        \"FR\",\n        \"IT\",\n        \"ES\",\n        \"NL\",\n        \"JP\",\n        \"AU\",\n        \"CA\",\n        \"CH\",\n        \"HK\",\n        \"SG\",\n        \"MX\",\n        \"KR\",\n        \"BR\",\n        \"CL\",\n        \"CN\",\n        \"NZ\",\n        \"SE\",\n        \"PL\",\n        \"NO\",\n        \"DK\",\n        \"IL\"\n      ],\n      \"enumTitles\": [\n        \"United States\",\n        \"United Kingdom\",\n        \"Germany\",\n        \"France\",\n        \"Italy\",\n        \"Spain\",\n        \"Netherlands\",\n        \"Japan\",\n        \"Australia\",\n        \"Canada\",\n        \"Switzerland\",\n        \"Hong Kong\",\n        \"Singapore\",\n        \"Mexico\",\n        \"South Korea\",\n        \"Brazil\",\n        \"Chile\",\n        \"China\",\n        \"New Zealand\",\n        \"Sweden\",\n        \"Poland\",\n        \"Norway\",\n        \"Denmark\",\n        \"Israel\"\n      ],\n      \"default\": \"US\",\n      \"prefill\": \"US\"\n    },\n    \"minPrice\": {\n      \"title\": \"Minimum lowest ask\",\n      \"type\": \"integer\",\n      \"description\": \"Drop products whose lowest ask is below this value. Applies to fetched rows in the selected currency.\",\n      \"minimum\": 0,\n      \"maximum\": 10000000\n    },\n    \"maxPrice\": {\n      \"title\": \"Maximum lowest ask\",\n      \"type\": \"integer\",\n      \"description\": \"Drop products whose lowest ask is above this value. Applies to fetched rows in the selected currency.\",\n      \"minimum\": 0,\n      \"maximum\": 10000000\n    },\n    \"minSalesLast72Hours\": {\n      \"title\": \"Minimum sales in 72 hours\",\n      \"type\": \"integer\",\n      \"description\": \"Keep products that sold at least this many units in the last 72 hours. Products without a count are kept.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000\n    },\n    \"includeProductDetails\": {\n      \"title\": \"Fetch product details\",\n      \"type\": \"boolean\",\n      \"description\": \"When browsing or searching, fetch each product's full record: style ID, colorway, retail price, release date, traits, gallery, and market statistics. Off gives a fast, compact listing row.\",\n      \"default\": true,\n      \"prefill\": false,\n      \"sectionCaption\": \"Detail & sales\"\n    },\n    \"includeVariants\": {\n      \"title\": \"Include per-size order book\",\n      \"type\": \"boolean\",\n      \"description\": \"Add the per-size order book (asks, bids, spread, last sale, GTINs) to full product records.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"includeSalesHistory\": {\n      \"title\": \"Include recent sales\",\n      \"type\": \"boolean\",\n      \"description\": \"Add recent individual sales to each product record. Use mode=salesHistory to emit sales as separate rows.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"salesLimit\": {\n      \"title\": \"Sales per product\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum individual sales to collect per product (1-500).\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"default\": 50,\n      \"prefill\": 50\n    },\n    \"salesCondition\": {\n      \"title\": \"Sale condition\",\n      \"type\": \"string\",\n      \"description\": \"Condition filter for sales history. If StockX does not serve filtered sales for a product, all conditions are returned and the run says so.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"all\",\n        \"new-and-verified\",\n        \"new-other\",\n        \"used\"\n      ],\n      \"enumTitles\": [\n        \"All conditions\",\n        \"New & Verified\",\n        \"New - Other\",\n        \"Used\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max records\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on emitted records. StockX itself caps each query at 1,000 results.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 25,\n      \"prefill\": 1,\n      \"sectionCaption\": \"Limits\"\n    },\n    \"maxPages\": {\n      \"title\": \"Max pages\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum listing pages per query. Each page holds up to 40 products; StockX stops at 25 pages.\",\n      \"minimum\": 1,\n      \"maximum\": 25,\n      \"default\": 5,\n      \"prefill\": 1\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# StockX Market Price & Sales History Finder\n\nCollect live resale market data from **StockX** for sneakers, apparel, watches, handbags, electronics, collectibles, and trading cards. Search by keyword, browse a brand or category, paste StockX URLs, fetch exact products, or pull individual sales history — with per-size order books and prices in 28 currencies across 24 markets.\n\n## What this actor does\n\n- **Six modes:** keyword `search`, `byBrand`, `byCategory`, exact `byProduct` slugs or URLs, `byUrl` for pasted links, and `salesHistory` for individual transactions\n- **Full market snapshot:** lowest ask, highest bid, ask tiers and counts, last sale, 72-hour velocity, 90-day and annual averages, volatility, price premium, and the 12-month low/high\n- **Per-size order book:** every available size with its own ask, bid, spread, spread percentage, last sale, 72-hour sales, GTINs, and size conversions\n- **Product identity:** style ID, colorway, retail price, release date, description, traits, gallery images, and 360° views\n- **Honest limits:** StockX caps each query at 1,000 results, serves sales 50 at a time, and the actor tells you when a cap or filter affects the result\n- **Empty fields are omitted** from every record — no `null` placeholders or sentinel values\n\nNo StockX account, cookies, or proxy setup is required.\n\n## Output: per product\n\nUsed by `search`, `byBrand`, `byCategory`, `byProduct`, and `byUrl` product links.\n\n- `slug`, `productUrl`, `sourceUrl`, `productId` — identity and the listing page the row came from\n- `title`, `name`, `model`, `brand`, `brandSlug` — product naming\n- `category`, `subcategory`, `categories[]`, `categoryPath[]`, `productCategory`, `primaryCategory` — category path\n- `gender`, `condition`, `listingType` — audience and listing attributes\n- `styleId`, `colorway`, `retailPrice`, `releaseDate` — manufacturer and release data when StockX publishes it\n- `description` — plain-text description with markup removed\n- `traits[]` — visible product traits as `{name, value, format}` objects\n- `imageUrl`, `smallImageUrl`, `thumbUrl`, `gallery[]`, `gallery360[]`, `verticalImages[]` — image links\n- `lowestAsk`, `highestBid` — current best prices\n- `lowestAskUpdatedAt`, `highestBidUpdatedAt` — when each side last changed\n- `numberOfAsks`, `numberOfBids`, `askServiceLevels` — order-book depth and Standard / Express / Next-Day ask tiers\n- `lastSale`, `lastSaleChangePercentage`, `lastSaleChangeValue` — most recent transaction and its change\n- `salesLast72Hours` — units traded in the last 72 hours\n- `deadstockSold` — annual sales count (kept for compatibility with older integrations)\n- `annualLow`, `annualHigh`, `annualAveragePrice`, `annualSalesCount` — 12-month range and stats\n- `volatility`, `pricePremium`, `averageDeadstockPrice` — market character\n- `last90DaysAveragePrice`, `last90DaysSalesCount` — 90-day stats\n- `currency`, `region` — pricing currency and market used for this run\n- `variants[]` — per-size order book rows (below)\n- `recentSales[]` — recent individual sales when you enable sales enrichment\n- `sponsored` — present and `true` when StockX marks a listing as sponsored\n- `recordType: \"product\"`, `siteName: \"StockX\"`, `scrapedAt`\n\n### Variant object (`variants[]`)\n\n- `variantId`, `sku`, `size`, `sizeType`, `sizeConversions[]`, `gtins[]`\n- `lowestAsk`, `highestBid`, `numberOfAsks`, `numberOfBids`\n- `lastSale`, `salesLast72Hours`, `last90DaysAveragePrice`, `last90DaysSalesCount`\n- `spread`, `spreadPct` — only when both an ask and a bid exist\n- `currency`, `region`\n\n## Output: per sale (`salesHistory` mode and `recentSales[]`)\n\n- `amount`, `currency` — sale price and currency\n- `createdAt` — transaction timestamp\n- `orderType` — `EXPRESS` or `STANDARD`\n- `shoeSize`, `sizeType`, `sizeConversions[]`, `variantId` — the size that sold\n- `productSlug`, `productUrl`, `productTitle` — the product the sale belongs to\n- `saleKey` — deterministic key built from product, timestamp, price, and size\n- `region` — market used for this run\n- `recordType: \"sale\"`, `siteName: \"StockX\"`, `scrapedAt`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search`, `byBrand`, `byCategory`, `byProduct`, `byUrl`, or `salesHistory` |\n| `searchQueries` | array | `[\"jordan\"]` | One or more keywords (mode=`search`) |\n| `brand` | string | – | Brand alias for mode=`byBrand`, e.g. `jordan`, `nike`, `new-balance`; also filters other modes when set |\n| `category` | string | – | StockX category for mode=`byCategory`; also filters other modes when set |\n| `gender` | string | – | `men`, `women`, or `kids` |\n| `color` | string | – | Common color filter |\n| `sortBy` | string | `featured` | Ten StockX sort orders, including `lowest_ask`, `most-active`, and `release_date` |\n| `productSlugs` | array | – | Product slugs or StockX product URLs (mode=`byProduct` / `salesHistory`) |\n| `startUrls` | array | – | StockX search, category, brand, browse, or product URLs (mode=`byUrl`) |\n| `currency` | string | `USD` | One of 28 supported currencies |\n| `country` | string | `US` | One of 24 supported markets |\n| `minPrice` | integer | – | Drop products whose lowest ask is below this value |\n| `maxPrice` | integer | – | Drop products whose lowest ask is above this value |\n| `minSalesLast72Hours` | integer | – | Keep products with at least this many recent sales |\n| `includeProductDetails` | boolean | `true` | Fetch the full product record while browsing; off gives a compact listing row |\n| `includeVariants` | boolean | `true` | Add the per-size order book to full product records |\n| `includeSalesHistory` | boolean | `false` | Add `recentSales[]` to each product record |\n| `salesLimit` | integer | `50` | Maximum individual sales per product (1–500) |\n| `salesCondition` | string | `all` | `all`, `new-and-verified`, `new-other`, or `used` |\n| `maxItems` | integer | `25` | Hard cap on emitted records (1–1,000) |\n| `maxPages` | integer | `5` | Listing pages per query (1–25, 40 products per page) |\n\n### Example: search with sizes and full market stats\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"jordan 4 retro\"],\n  \"currency\": \"USD\",\n  \"country\": \"US\",\n  \"sortBy\": \"most-active\",\n  \"maxItems\": 25,\n  \"maxPages\": 2,\n  \"includeProductDetails\": true,\n  \"includeVariants\": true\n}\n```\n\n### Example: a brand within a price band\n\n```json\n{\n  \"mode\": \"byBrand\",\n  \"brand\": \"new-balance\",\n  \"gender\": \"men\",\n  \"minPrice\": 120,\n  \"maxPrice\": 400,\n  \"maxItems\": 50\n}\n```\n\n### Example: paste StockX links\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"startUrls\": [\n    \"https://stockx.com/category/watches\",\n    \"https://stockx.com/brands/casio\",\n    \"https://stockx.com/browse/women\",\n    \"https://stockx.com/air-jordan-5-retro-wolf-grey-2026\"\n  ],\n  \"currency\": \"EUR\",\n  \"country\": \"DE\",\n  \"maxItems\": 40\n}\n```\n\n### Example: individual sales history\n\n```json\n{\n  \"mode\": \"salesHistory\",\n  \"productSlugs\": [\"air-jordan-5-retro-wolf-grey-2026\"],\n  \"salesCondition\": \"all\",\n  \"salesLimit\": 200,\n  \"maxItems\": 200,\n  \"currency\": \"GBP\",\n  \"country\": \"GB\"\n}\n```\n\n## Use cases\n\n- **Resale price monitoring** — schedule daily runs and track lowest ask, highest bid, and last sale per product\n- **Sneaker and streetwear research** — compare colorways, release dates, retail prices, and 12-month ranges\n- **Watch and collectible dealers** — read per-size or per-variant order books, spreads, and ask depth\n- **Sales-ledger analysis** — pull individual transactions to study realized prices, size premiums, and volume\n- **Cross-market pricing** — request the same product in different currencies and markets to compare localized pricing\n- **Catalog enrichment** — collect style IDs, GTINs, colorways, traits, and image galleries for a product database\n\n## FAQ\n\n**Do I need a StockX account, cookies, or a proxy?**\nNo. The actor reads StockX's public product and market data directly. You do not need to log in, supply cookies, or configure a proxy.\n\n**How fresh is the data?**\nEach run requests current listings and market statistics, so prices, asks, bids, and recent sales reflect what StockX serves at run time.\n\n**Why is `lowestAsk` or `highestBid` missing for some products?**\nThose fields are omitted when no active seller or buyer exists for the product or size. Missing means \"nothing live right now\", not zero.\n\n**How many results can one query return?**\nStockX caps a single query at 1,000 products across 25 pages of 40. When the cap is reached, the run status suggests splitting by brand, category, or gender for wider coverage.\n\n**How deep is the sales history?**\nStockX serves 50 individual sales per request with a cursor for older pages. `salesLimit` controls how many sales the actor collects per product, up to 500.\n\n**Why did a sale-condition filter return all conditions?**\nStockX intermittently rejects condition-filtered sales requests. When that happens the actor retries, falls back to all conditions, and says so in the run status instead of returning nothing.\n\n**What does \"Price: high to low\" mean?**\nStockX does not serve a true descending price sort, so the actor collects the requested pages in ascending order and reverses those rows before emitting them. Increase `maxPages` to widen the range considered.\n\n**Why are `chainId` and `deadstockRangeLow` / `deadstockRangeHigh` not in the output?**\nStockX no longer exposes a transaction ID or a separate deadstock range. Existing output fields are preserved, but these are omitted rather than filled with placeholders; `annualLow` and `annualHigh` carry the 12-month range.\n\n**Is this affiliated with StockX?**\nNo. This is an independent, third-party actor that reads publicly available StockX data. It is not operated by or affiliated with StockX.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "stockx-market-price-and-sales-history-finder",
      "title": "StockX Market Price & Sales History Finder",
      "description": "Collect StockX listings, lowest asks, highest bids, per-size order books, market statistics, and individual sales history by keyword, brand, category, slug, or URL. Prices in 28 currencies and 24 markets.",
      "version": "1.1",
      "buildTag": "latest",
      "defaultMemoryMbytes": 1024,
      "minMemoryMbytes": 512,
      "input": {
        "title": "StockX Market Data Input",
        "description": "Choose what to collect from StockX: search results, a brand, a category, exact products, pasted URLs, or individual sales history.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to collect from StockX.",
            "editor": "select",
            "enum": [
              "search",
              "byBrand",
              "byCategory",
              "byProduct",
              "byUrl",
              "salesHistory"
            ],
            "enumTitles": [
              "Search products by keyword",
              "Browse a brand",
              "Browse a category",
              "Fetch exact products by slug",
              "Fetch pasted StockX URLs",
              "Sales history for products"
            ],
            "default": "search",
            "prefill": "search",
            "sectionCaption": "Mode & query"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "One or more keywords for mode=search, e.g. 'jordan 4 retro', 'yeezy 350', 'rolex submariner'.",
            "editor": "stringList",
            "default": [
              "jordan"
            ],
            "prefill": [
              "jordan"
            ]
          },
          "brand": {
            "title": "Brand",
            "type": "string",
            "description": "Brand alias for mode=byBrand, e.g. 'jordan', 'nike', 'new-balance', 'casio'. When set in other modes it narrows the results to that brand.",
            "editor": "textfield"
          },
          "category": {
            "title": "Category",
            "type": "string",
            "description": "StockX category for mode=byCategory. When set in other modes it narrows the results to that category.",
            "editor": "select",
            "enum": [
              "sneakers",
              "apparel",
              "accessories",
              "electronics",
              "collectibles",
              "trading-cards",
              "watches"
            ],
            "enumTitles": [
              "Sneakers",
              "Apparel",
              "Accessories",
              "Electronics",
              "Collectibles",
              "Trading cards",
              "Watches"
            ]
          },
          "gender": {
            "title": "Gender",
            "type": "string",
            "description": "Optional audience filter for search and browse modes.",
            "editor": "select",
            "enum": [
              "men",
              "women",
              "kids"
            ],
            "enumTitles": [
              "Men",
              "Women",
              "Kids"
            ]
          },
          "color": {
            "title": "Color",
            "type": "string",
            "description": "Optional color filter for search and browse modes.",
            "editor": "select",
            "enum": [
              "black",
              "white",
              "red",
              "blue",
              "green",
              "grey",
              "brown",
              "pink",
              "yellow",
              "multi"
            ],
            "enumTitles": [
              "Black",
              "White",
              "Red",
              "Blue",
              "Green",
              "Grey",
              "Brown",
              "Pink",
              "Yellow",
              "Multi"
            ]
          },
          "sortBy": {
            "title": "Sort order",
            "type": "string",
            "description": "Order of search and browse results.",
            "editor": "select",
            "enum": [
              "featured",
              "most-active",
              "lowest_ask",
              "highest_bid",
              "recent_bids",
              "recent_asks",
              "deadstock_sold",
              "release_date",
              "price_premium",
              "last_sale"
            ],
            "enumTitles": [
              "Featured",
              "Top selling",
              "Price: low to high",
              "Bid: high to low",
              "Recent high bids",
              "Recent price drops",
              "Total sold: high to low",
              "Release date: newest first",
              "Price premium: high to low",
              "Last sale: high to low"
            ],
            "default": "featured",
            "prefill": "featured",
            "sectionCaption": "Filters"
          },
          "productSlugs": {
            "title": "Product slugs or URLs",
            "type": "array",
            "description": "Products for mode=byProduct or mode=salesHistory. Paste a StockX product URL or the slug after stockx.com/, e.g. 'air-jordan-4-retro-white-cement-2025'.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "startUrls": {
            "title": "StockX URLs",
            "type": "array",
            "description": "Search, category, brand, browse, or product URLs for mode=byUrl. Paste one URL per line.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Currency for all prices.",
            "editor": "select",
            "enum": [
              "USD",
              "EUR",
              "GBP",
              "JPY",
              "CAD",
              "AUD",
              "CHF",
              "HKD",
              "SGD",
              "MXN",
              "KRW",
              "SEK",
              "PLN",
              "NZD",
              "NOK",
              "BRL",
              "CLP",
              "CNY",
              "IDR",
              "ILS",
              "KWD",
              "MOP",
              "MYR",
              "PEN",
              "PHP",
              "THB",
              "TWD",
              "VND"
            ],
            "enumTitles": [
              "US Dollar (USD)",
              "Euro (EUR)",
              "British Pound (GBP)",
              "Japanese Yen (JPY)",
              "Canadian Dollar (CAD)",
              "Australian Dollar (AUD)",
              "Swiss Franc (CHF)",
              "Hong Kong Dollar (HKD)",
              "Singapore Dollar (SGD)",
              "Mexican Peso (MXN)",
              "South Korean Won (KRW)",
              "Swedish Krona (SEK)",
              "Polish Zloty (PLN)",
              "New Zealand Dollar (NZD)",
              "Norwegian Krone (NOK)",
              "Brazilian Real (BRL)",
              "Chilean Peso (CLP)",
              "Chinese Yuan (CNY)",
              "Indonesian Rupiah (IDR)",
              "Israeli New Shekel (ILS)",
              "Kuwaiti Dinar (KWD)",
              "Macanese Pataca (MOP)",
              "Malaysian Ringgit (MYR)",
              "Peruvian Sol (PEN)",
              "Philippine Peso (PHP)",
              "Thai Baht (THB)",
              "New Taiwan Dollar (TWD)",
              "Vietnamese Dong (VND)"
            ],
            "default": "USD",
            "prefill": "USD",
            "sectionCaption": "Region & pricing"
          },
          "country": {
            "title": "Market / region",
            "type": "string",
            "description": "Market that determines the order book and localized prices.",
            "editor": "select",
            "enum": [
              "US",
              "GB",
              "DE",
              "FR",
              "IT",
              "ES",
              "NL",
              "JP",
              "AU",
              "CA",
              "CH",
              "HK",
              "SG",
              "MX",
              "KR",
              "BR",
              "CL",
              "CN",
              "NZ",
              "SE",
              "PL",
              "NO",
              "DK",
              "IL"
            ],
            "enumTitles": [
              "United States",
              "United Kingdom",
              "Germany",
              "France",
              "Italy",
              "Spain",
              "Netherlands",
              "Japan",
              "Australia",
              "Canada",
              "Switzerland",
              "Hong Kong",
              "Singapore",
              "Mexico",
              "South Korea",
              "Brazil",
              "Chile",
              "China",
              "New Zealand",
              "Sweden",
              "Poland",
              "Norway",
              "Denmark",
              "Israel"
            ],
            "default": "US",
            "prefill": "US"
          },
          "minPrice": {
            "title": "Minimum lowest ask",
            "type": "integer",
            "description": "Drop products whose lowest ask is below this value. Applies to fetched rows in the selected currency.",
            "minimum": 0,
            "maximum": 10000000
          },
          "maxPrice": {
            "title": "Maximum lowest ask",
            "type": "integer",
            "description": "Drop products whose lowest ask is above this value. Applies to fetched rows in the selected currency.",
            "minimum": 0,
            "maximum": 10000000
          },
          "minSalesLast72Hours": {
            "title": "Minimum sales in 72 hours",
            "type": "integer",
            "description": "Keep products that sold at least this many units in the last 72 hours. Products without a count are kept.",
            "minimum": 0,
            "maximum": 1000000
          },
          "includeProductDetails": {
            "title": "Fetch product details",
            "type": "boolean",
            "description": "When browsing or searching, fetch each product's full record: style ID, colorway, retail price, release date, traits, gallery, and market statistics. Off gives a fast, compact listing row.",
            "default": true,
            "prefill": false,
            "sectionCaption": "Detail & sales"
          },
          "includeVariants": {
            "title": "Include per-size order book",
            "type": "boolean",
            "description": "Add the per-size order book (asks, bids, spread, last sale, GTINs) to full product records.",
            "default": true,
            "prefill": false
          },
          "includeSalesHistory": {
            "title": "Include recent sales",
            "type": "boolean",
            "description": "Add recent individual sales to each product record. Use mode=salesHistory to emit sales as separate rows.",
            "default": false,
            "prefill": false
          },
          "salesLimit": {
            "title": "Sales per product",
            "type": "integer",
            "description": "Maximum individual sales to collect per product (1-500).",
            "minimum": 1,
            "maximum": 500,
            "default": 50,
            "prefill": 50
          },
          "salesCondition": {
            "title": "Sale condition",
            "type": "string",
            "description": "Condition filter for sales history. If StockX does not serve filtered sales for a product, all conditions are returned and the run says so.",
            "editor": "select",
            "enum": [
              "all",
              "new-and-verified",
              "new-other",
              "used"
            ],
            "enumTitles": [
              "All conditions",
              "New & Verified",
              "New - Other",
              "Used"
            ],
            "default": "all",
            "prefill": "all"
          },
          "maxItems": {
            "title": "Max records",
            "type": "integer",
            "description": "Hard cap on emitted records. StockX itself caps each query at 1,000 results.",
            "minimum": 1,
            "maximum": 1000,
            "default": 25,
            "prefill": 1,
            "sectionCaption": "Limits"
          },
          "maxPages": {
            "title": "Max pages",
            "type": "integer",
            "description": "Maximum listing pages per query. Each page holds up to 40 products; StockX stops at 25 pages.",
            "minimum": 1,
            "maximum": 25,
            "default": 5,
            "prefill": 1
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "StockX Market Price & Sales History Finder Output",
        "description": "StockX product rows with asks, bids, per-size order books, market statistics, and identity fields, plus individual sale rows in sales-history mode.",
        "properties": {
          "products": {
            "type": "string",
            "title": "StockX products and sales",
            "description": "Dataset containing StockX product records (recordType=product) and individual sales (recordType=sale).",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "./Dockerfile",
      "readme": "# StockX Market Price & Sales History Finder\n\nCollect live resale market data from **StockX** for sneakers, apparel, watches, handbags, electronics, collectibles, and trading cards. Search by keyword, browse a brand or category, paste StockX URLs, fetch exact products, or pull individual sales history — with per-size order books and prices in 28 currencies across 24 markets.\n\n## What this actor does\n\n- **Six modes:** keyword `search`, `byBrand`, `byCategory`, exact `byProduct` slugs or URLs, `byUrl` for pasted links, and `salesHistory` for individual transactions\n- **Full market snapshot:** lowest ask, highest bid, ask tiers and counts, last sale, 72-hour velocity, 90-day and annual averages, volatility, price premium, and the 12-month low/high\n- **Per-size order book:** every available size with its own ask, bid, spread, spread percentage, last sale, 72-hour sales, GTINs, and size conversions\n- **Product identity:** style ID, colorway, retail price, release date, description, traits, gallery images, and 360° views\n- **Honest limits:** StockX caps each query at 1,000 results, serves sales 50 at a time, and the actor tells you when a cap or filter affects the result\n- **Empty fields are omitted** from every record — no `null` placeholders or sentinel values\n\nNo StockX account, cookies, or proxy setup is required.\n\n## Output: per product\n\nUsed by `search`, `byBrand`, `byCategory`, `byProduct`, and `byUrl` product links.\n\n- `slug`, `productUrl`, `sourceUrl`, `productId` — identity and the listing page the row came from\n- `title`, `name`, `model`, `brand`, `brandSlug` — product naming\n- `category`, `subcategory`, `categories[]`, `categoryPath[]`, `productCategory`, `primaryCategory` — category path\n- `gender`, `condition`, `listingType` — audience and listing attributes\n- `styleId`, `colorway`, `retailPrice`, `releaseDate` — manufacturer and release data when StockX publishes it\n- `description` — plain-text description with markup removed\n- `traits[]` — visible product traits as `{name, value, format}` objects\n- `imageUrl`, `smallImageUrl`, `thumbUrl`, `gallery[]`, `gallery360[]`, `verticalImages[]` — image links\n- `lowestAsk`, `highestBid` — current best prices\n- `lowestAskUpdatedAt`, `highestBidUpdatedAt` — when each side last changed\n- `numberOfAsks`, `numberOfBids`, `askServiceLevels` — order-book depth and Standard / Express / Next-Day ask tiers\n- `lastSale`, `lastSaleChangePercentage`, `lastSaleChangeValue` — most recent transaction and its change\n- `salesLast72Hours` — units traded in the last 72 hours\n- `deadstockSold` — annual sales count (kept for compatibility with older integrations)\n- `annualLow`, `annualHigh`, `annualAveragePrice`, `annualSalesCount` — 12-month range and stats\n- `volatility`, `pricePremium`, `averageDeadstockPrice` — market character\n- `last90DaysAveragePrice`, `last90DaysSalesCount` — 90-day stats\n- `currency`, `region` — pricing currency and market used for this run\n- `variants[]` — per-size order book rows (below)\n- `recentSales[]` — recent individual sales when you enable sales enrichment\n- `sponsored` — present and `true` when StockX marks a listing as sponsored\n- `recordType: \"product\"`, `siteName: \"StockX\"`, `scrapedAt`\n\n### Variant object (`variants[]`)\n\n- `variantId`, `sku`, `size`, `sizeType`, `sizeConversions[]`, `gtins[]`\n- `lowestAsk`, `highestBid`, `numberOfAsks`, `numberOfBids`\n- `lastSale`, `salesLast72Hours`, `last90DaysAveragePrice`, `last90DaysSalesCount`\n- `spread`, `spreadPct` — only when both an ask and a bid exist\n- `currency`, `region`\n\n## Output: per sale (`salesHistory` mode and `recentSales[]`)\n\n- `amount`, `currency` — sale price and currency\n- `createdAt` — transaction timestamp\n- `orderType` — `EXPRESS` or `STANDARD`\n- `shoeSize`, `sizeType`, `sizeConversions[]`, `variantId` — the size that sold\n- `productSlug`, `productUrl`, `productTitle` — the product the sale belongs to\n- `saleKey` — deterministic key built from product, timestamp, price, and size\n- `region` — market used for this run\n- `recordType: \"sale\"`, `siteName: \"StockX\"`, `scrapedAt`\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search`, `byBrand`, `byCategory`, `byProduct`, `byUrl`, or `salesHistory` |\n| `searchQueries` | array | `[\"jordan\"]` | One or more keywords (mode=`search`) |\n| `brand` | string | – | Brand alias for mode=`byBrand`, e.g. `jordan`, `nike`, `new-balance`; also filters other modes when set |\n| `category` | string | – | StockX category for mode=`byCategory`; also filters other modes when set |\n| `gender` | string | – | `men`, `women`, or `kids` |\n| `color` | string | – | Common color filter |\n| `sortBy` | string | `featured` | Ten StockX sort orders, including `lowest_ask`, `most-active`, and `release_date` |\n| `productSlugs` | array | – | Product slugs or StockX product URLs (mode=`byProduct` / `salesHistory`) |\n| `startUrls` | array | – | StockX search, category, brand, browse, or product URLs (mode=`byUrl`) |\n| `currency` | string | `USD` | One of 28 supported currencies |\n| `country` | string | `US` | One of 24 supported markets |\n| `minPrice` | integer | – | Drop products whose lowest ask is below this value |\n| `maxPrice` | integer | – | Drop products whose lowest ask is above this value |\n| `minSalesLast72Hours` | integer | – | Keep products with at least this many recent sales |\n| `includeProductDetails` | boolean | `true` | Fetch the full product record while browsing; off gives a compact listing row |\n| `includeVariants` | boolean | `true` | Add the per-size order book to full product records |\n| `includeSalesHistory` | boolean | `false` | Add `recentSales[]` to each product record |\n| `salesLimit` | integer | `50` | Maximum individual sales per product (1–500) |\n| `salesCondition` | string | `all` | `all`, `new-and-verified`, `new-other`, or `used` |\n| `maxItems` | integer | `25` | Hard cap on emitted records (1–1,000) |\n| `maxPages` | integer | `5` | Listing pages per query (1–25, 40 products per page) |\n\n### Example: search with sizes and full market stats\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQueries\": [\"jordan 4 retro\"],\n  \"currency\": \"USD\",\n  \"country\": \"US\",\n  \"sortBy\": \"most-active\",\n  \"maxItems\": 25,\n  \"maxPages\": 2,\n  \"includeProductDetails\": true,\n  \"includeVariants\": true\n}\n```\n\n### Example: a brand within a price band\n\n```json\n{\n  \"mode\": \"byBrand\",\n  \"brand\": \"new-balance\",\n  \"gender\": \"men\",\n  \"minPrice\": 120,\n  \"maxPrice\": 400,\n  \"maxItems\": 50\n}\n```\n\n### Example: paste StockX links\n\n```json\n{\n  \"mode\": \"byUrl\",\n  \"startUrls\": [\n    \"https://stockx.com/category/watches\",\n    \"https://stockx.com/brands/casio\",\n    \"https://stockx.com/browse/women\",\n    \"https://stockx.com/air-jordan-5-retro-wolf-grey-2026\"\n  ],\n  \"currency\": \"EUR\",\n  \"country\": \"DE\",\n  \"maxItems\": 40\n}\n```\n\n### Example: individual sales history\n\n```json\n{\n  \"mode\": \"salesHistory\",\n  \"productSlugs\": [\"air-jordan-5-retro-wolf-grey-2026\"],\n  \"salesCondition\": \"all\",\n  \"salesLimit\": 200,\n  \"maxItems\": 200,\n  \"currency\": \"GBP\",\n  \"country\": \"GB\"\n}\n```\n\n## Use cases\n\n- **Resale price monitoring** — schedule daily runs and track lowest ask, highest bid, and last sale per product\n- **Sneaker and streetwear research** — compare colorways, release dates, retail prices, and 12-month ranges\n- **Watch and collectible dealers** — read per-size or per-variant order books, spreads, and ask depth\n- **Sales-ledger analysis** — pull individual transactions to study realized prices, size premiums, and volume\n- **Cross-market pricing** — request the same product in different currencies and markets to compare localized pricing\n- **Catalog enrichment** — collect style IDs, GTINs, colorways, traits, and image galleries for a product database\n\n## FAQ\n\n**Do I need a StockX account, cookies, or a proxy?**\nNo. The actor reads StockX's public product and market data directly. You do not need to log in, supply cookies, or configure a proxy.\n\n**How fresh is the data?**\nEach run requests current listings and market statistics, so prices, asks, bids, and recent sales reflect what StockX serves at run time.\n\n**Why is `lowestAsk` or `highestBid` missing for some products?**\nThose fields are omitted when no active seller or buyer exists for the product or size. Missing means \"nothing live right now\", not zero.\n\n**How many results can one query return?**\nStockX caps a single query at 1,000 products across 25 pages of 40. When the cap is reached, the run status suggests splitting by brand, category, or gender for wider coverage.\n\n**How deep is the sales history?**\nStockX serves 50 individual sales per request with a cursor for older pages. `salesLimit` controls how many sales the actor collects per product, up to 500.\n\n**Why did a sale-condition filter return all conditions?**\nStockX intermittently rejects condition-filtered sales requests. When that happens the actor retries, falls back to all conditions, and says so in the run status instead of returning nothing.\n\n**What does \"Price: high to low\" mean?**\nStockX does not serve a true descending price sort, so the actor collects the requested pages in ascending order and reverses those rows before emitting them. Increase `maxPages` to widen the range considered.\n\n**Why are `chainId` and `deadstockRangeLow` / `deadstockRangeHigh` not in the output?**\nStockX no longer exposes a transaction ID or a separate deadstock range. Existing output fields are preserved, but these are omitted rather than filled with placeholders; `annualLow` and `annualHigh` carry the 12-month range.\n\n**Is this affiliated with StockX?**\nNo. This is an independent, third-party actor that reads publicly available StockX data. It is not operated by or affiliated with StockX.\n",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "StockX products and sales",
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "title",
                  "brand",
                  "category",
                  "lowestAsk",
                  "highestBid",
                  "lastSale",
                  "salesLast72Hours",
                  "currency",
                  "productUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "brand": {
                    "label": "Brand",
                    "format": "text"
                  },
                  "category": {
                    "label": "Category",
                    "format": "text"
                  },
                  "lowestAsk": {
                    "label": "Lowest Ask",
                    "format": "number"
                  },
                  "highestBid": {
                    "label": "Highest Bid",
                    "format": "number"
                  },
                  "lastSale": {
                    "label": "Last Sale",
                    "format": "number"
                  },
                  "salesLast72Hours": {
                    "label": "Sales (72h)",
                    "format": "number"
                  },
                  "currency": {
                    "label": "Currency",
                    "format": "text"
                  },
                  "productUrl": {
                    "label": "URL",
                    "format": "link"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "1.1.1",
    "imageDigest": "d4de7c43bdf1e3a7e4ad6f747b47cde2ba5e4c3ef1a3c9bd86b71776c0851eed",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.013217777777777778
    }
  }
}