# StockX Scraper - Sneaker Prices, Bids, Asks & Sales by Size (`scrapersdelight/stockx-scraper`) Actor

Scrape StockX by keyword, style ID, product URL or category: style ID, colorway, retail price, release date, lowest ask, highest bid and last sale for every size, UPCs, 72h/90d/12-month sales, volatility, price premium, price history and individual sales. No login, no browser.

- **URL**: https://apify.com/scrapersdelight/stockx-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.67 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does StockX Scraper do?

**StockX Scraper** turns stockx.com into a resale market data feed: sneakers, streetwear, trading cards, collectibles, watches, handbags and electronics, with the style ID, colorway, retail price and release date of every product and the live market for every size — lowest ask, highest bid, spread, last sale, sales in the last 72 hours, ask and bid counts and the UPC barcode. Search by keyword, style ID, product URL, brand or category, or pull one row per completed sale.

Also known as: StockX scraper, StockX API, StockX price scraper, sneaker resale price data, StockX market data.

- 👟 **One row = one product, every size inside it** — detail record + the book for every size in a single result.
- 🔎 **Search, browse, look up** — keywords, style IDs/SKUs (exact-match verified), product URLs/slugs/IDs, or any stockx.com search, brand or category URL.
- 📊 **Market depth** — 72-hour, 90-day and 12-month sales and averages, 12-month high/low, volatility, StockX's price premium, premium over retail per size.
- 📈 **History on demand** — the all-time price chart (up to 400 points), the 50 latest sales and the order book, at no extra charge per product.
- 🧾 **Sales feed** — one row per completed sale, newest first, with size and express/standard.
- 🔁 **Changes-only monitor** — schedule it and get only products whose ask, bid or last sale moved.
- 🌍 **Any market and 30 currencies.** No login, no cookies, no browser.

### What data can you get from StockX?

<table>
<tr><td>🆔 Product id, slug + URL</td><td>🏷️ Title, name, brand, model</td><td>🔢 Style ID (SKU)</td></tr>
<tr><td>🎨 Colorway</td><td>💵 Retail price (USD)</td><td>📅 Release date</td></tr>
<tr><td>📉 Lowest ask · 📈 highest bid</td><td>🧾 Last sale + time + change</td><td>📦 Ask count · bid count</td></tr>
<tr><td>⚡ Xpress asks: count + lowest</td><td>🔥 Sales in the last 72 hours</td><td>📆 90-day average, count, range</td></tr>
<tr><td>🗓️ 12-month high and low</td><td>〰️ Volatility · price premium</td><td>➕ Premium over retail ($ and %)</td></tr>
<tr><td>📏 Every size: ask, bid, spread, last sale</td><td>🏷️ UPC / GTIN per size</td><td>🔁 Size conversions (US M/W, UK, EU, CM, KR)</td></tr>
<tr><td>🖼️ Image, thumbnail, 360° frames</td><td>🗂️ Category, gender, condition, breadcrumbs</td><td>📝 Description (plain text)</td></tr>
<tr><td>📈 Price history chart*</td><td>🧾 50 latest sales*</td><td>📚 Order book: ask + bid levels*</td></tr>
</table>

\* when you turn it on (same charge per product).

### How to scrape StockX with StockX Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) — it comes with monthly platform credit.
2. Open **StockX Scraper** and type a search term (`jordan 4`), a style ID (`FV5029-010`) or paste product URLs.
3. Optional: pick a category, brands, gender, sort and a market/currency.
4. Set **Max results** (the prefilled demo reads 10 products).
5. Click **Start**, then download JSON, CSV or Excel, or read the dataset over the API.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| `searchTerms` | array | Words you would type in StockX's search box; each is searched separately. Empty input runs the demo search `jordan 4`. |
| `productUrls` | array | Product URLs (`https://stockx.com/...`, `/en-gb/...` works), slugs or StockX product UUIDs. |
| `styleIds` | array | Style codes such as `FV5029-010`; delivered only when the product carries exactly that style ID. |
| `startUrls` | array | stockx.com search, brand or category URLs (`/search?s=dunk`, `/brands/nike?gender=women`, `/category/watches`). |
| `outputMode` | select | `products` (default) or `sales` (one row per completed sale). |
| `includeDetails` | boolean | Default **on**: search results become full product rows. Off: the cheaper search-result row (no style ID, colorway, retail or sizes). |
| `priceHistoryPoints` | integer | 0-400 points of the all-time price chart per product. Default 0. |
| `includeRecentSales` | boolean | Add the 50 latest sales to each product. |
| `includeOrderBook` | boolean | Add ask and bid price levels per size; `maxOrderBookLevels` per side (default 100). |
| `onlySizes` | array | Keep only these sizes: `10`, `10.5`, or a conversion like `EU 44`, `UK 9`. |
| `maxSalesPerProduct` · `salesPerSize` · `salesSince` | | Sales output: sales per product (default 50, 0 = all read), also read 50 per size, drop older sales. |
| `category` · `brands` · `gender` · `activity` · `color` | | StockX's own filters, with or without a search term. |
| `newOnly` · `belowRetailOnly` · `xpressShipOnly` · `availableNowOnly` · `hasLiveBidOnly` | boolean | Condition, below retail, Xpress, live ask, live bid. |
| `minPrice` · `maxPrice` · `minSalesLast72Hours` | integer | Lowest-ask range and minimum 72 h sales, checked **before billing**. |
| `sortBy` | select | featured, most-active, lowest_ask, highest_bid, recent_bids, recent_asks, deadstock_sold, release_date, price_premium, last_sale. |
| `country` · `currency` | | Market whose book is quoted (default `US`) and one of 30 currencies (default `USD`). |
| `maxItems` | integer | Max rows; default 100, 0 = no limit. |
| `maxPagesPerQuery` | integer | 40 products per page, up to 26 pages; 0 = until results run out. |
| `onlyChanged` · `monitorKey` | | Changes-only monitor and an optional shared memory name. |
| `maxConcurrency` · `useResidentialFallback` · `proxyConfiguration` | | Parallel products (default 8); residential fallback; your own proxies. Not needed for normal runs. |

#### Input JSON

```json
{
  "searchTerms": ["jordan 4"],
  "styleIds": ["DZ5485-612"],
  "productUrls": ["https://stockx.com/adidas-yeezy-boost-350-v2-onyx"],
  "priceHistoryPoints": 100,
  "country": "US",
  "currency": "USD",
  "maxItems": 50
}
```

#### Search by style ID when you know the shoe

A style ID is the most precise key: `FV5029-010` returns exactly the Jordan 4 Black Cat (2025). Codes that match no product are listed in the run summary and never billed.

#### Use filters instead of one huge search

StockX serves about **1,000 products per query** (26 pages of 40). For a whole brand or category, run several narrower searches or add `category`, `gender`, `sortBy` — the filters are applied by StockX, so they narrow the result set itself.

#### Market and currency are two different things

`country` picks whose order book is quoted; `currency` only denominates it. The same shoe on the same day had a $160 lowest ask in `US`/`USD` and a £117 lowest ask in `GB`/`GBP` (Jordan 4 Toro Bravo, 2026-10-16). Retail price is StockX's US retail in USD, so premium over retail is computed only for USD runs.

### ⬆️ Output

Each product row (real values from our run on 2026-10-16, abridged):

```json
{
  "title": "Jordan 4 Retro Toro Bravo (2026)",
  "styleId": "FQ8138-600",
  "colorway": "Black/White-Red",
  "retailPrice": 220,
  "releaseDate": "2026-05-30",
  "lowestAsk": 160,
  "highestBid": 421,
  "lastSale": 161,
  "lastSaleDate": "2026-10-16T23:15:05.943Z",
  "salesLast72Hours": 301,
  "last90DaysAveragePrice": 179,
  "last90DaysSalesCount": 14615,
  "annualHigh": 580,
  "annualLow": 96,
  "volatility": 0.102247,
  "pricePremium": -0.268,
  "premiumOverRetailPct": -26.82,
  "variantSizes": [
    { "size": "10", "sizeConversions": { "usMen": "10", "uk": "9", "eu": "44", "cm": "28" }, "upc": "198729807984",
      "lowestAsk": 166, "highestBid": 164, "spread": 2, "lastSale": 166, "salesLast72Hours": 38,
      "numberOfAsks": 224, "numberOfBids": 27, "expressLowestAsk": 176, "premiumOverRetail": -54 }
  ],
  "productUrl": "https://stockx.com/air-jordan-4-retro-toro-bravo-2026"
}
```

A search-result row (`includeDetails: false`):

```json
{ "title": "New Balance 9060 Triple Black", "brandName": "New Balance", "releaseDate": "2023-09-22",
  "lowestAsk": 80, "lastLowestAskTime": "2026-10-16T18:39:27Z", "highestBid": 171, "lastSale": 98,
  "numberOfAsks": 1433, "expressAskCount": 1047, "salesLast72Hours": 131, "annualSalesCount": 26552,
  "volatility": 0.165824, "pricePremium": -0.347, "sizeCount": 24,
  "productUrl": "https://stockx.com/new-balance-9060-triple-black" }
```

A sale row (`outputMode: "sales"`):

```json
{ "productName": "Jordan 4 Retro Black Cat (2025)", "styleId": "FV5029-010", "amount": 313,
  "soldAt": "2026-10-16T23:34:02.935Z", "size": "11", "orderType": "EXPRESS", "currency": "USD" }
```

#### How to read the prices

`lowestAsk` and `highestBid` on the product are StockX's headline numbers across **all sizes**, so the bid can sit above the ask (they come from different sizes). The spread you can trade on is per size: `variantSizes[].spread` is that size's own ask minus its own bid.

#### Fields and fill rates

Measured on a 100-product run (`nike dunk low`, 2,026 sizes) on 2026-10-16:

| Field | Fill |
|---|---|
| `id`, `productSlug`, `productUrl`, `title`, `brandName`, `model`, `styleId`, `colorway`, `retailPrice`, `releaseDate`, `lowestAsk`, `highestBid`, `lastSale`, `lastSaleDate`, `numberOfAsks`, `numberOfBids`, `salesLast72Hours`, `last90Days*`, `annualHigh`, `annualLow`, `volatility`, `pricePremium`, `premiumOverRetail*`, `imageUrl`, `variantSizes` | 100% |
| `description`, `images360` | 98% |
| per size: `size`, `sizeConversions`, `highestBid`, `numberOfAsks`, `numberOfBids`, `salesLast72Hours` | 100% |
| per size: `lowestAsk`, `spread`, `lastSale`, `premiumOverRetail` | 93% (sizes nobody is selling have no ask) |
| per size: `upc` / `gtins` | 92% |
| per size: `last90DaysAveragePrice`, `expressLowestAsk` | 84% |

On a 100-product `jordan 4` run: `colorway` 99%, `releaseDate` 99%. Search-result rows (867 `new balance` results, 26 pages): `lowestAsk` 98.6%, `highestBid` 98.4%, `lastSale` 99.8%, `releaseDate` 98.3%, `last90DaysAveragePrice` 93.7%, `expressLowestAsk` 89.7%, `description` 58.5%, the rest 100%. Sales rows: every field 100% (865 sales of one shoe with `salesPerSize`).

Not available: the all-time "deadstock sold" total and the 72-hour average price — StockX's website does not load them, so they are not in the rows.

### Use cases

- 💸 **Resellers and flippers** — find sizes where the bid is close to the ask, or shoes trading below retail.
- 🏪 **Sneaker shops and consignment stores** — price inventory against live asks and last sales, per size.
- 📊 **Market researchers** — 72-hour, 90-day and 12-month volume by brand, model and category.
- 🤖 **Price-comparison apps and bots** — style ID + UPC per size to join StockX with other stores.
- 📈 **Trading cards and collectibles** — the same book for Pokémon, sports cards, figures and sealed boxes.
- 🛎️ **Price alerts** — changes-only monitor on a schedule.

### How much does it cost to scrape StockX?

Pay per result, no start fee:

| Row | Price |
|---|---|
| Product row (detail + every size; history, latest sales and order book included when asked) | **$0.00067** |
| Search-result row (`includeDetails` off) | **$0.00027** |
| Sale row (`outputMode: "sales"`) | **$0.0017** |

| Run | Rows | Cost |
|---|---|---|
| Demo (prefill) | 10 products | $0.0067 |
| One search, full detail | 100 products | $0.067 |
| Broad scan | 1,000 search results | $0.27 |

Filtered, duplicate, unchanged (monitor mode), not-found and unreachable products are never charged.

### Integrations, API, scheduling & MCP

- **Schedule** the actor hourly or daily with **Changes only** on to get a price-change feed.
- **Webhooks**, **Make**, **Zapier**, **n8n**, **Google Sheets**, **Slack** and **Airtable** from the Integrations tab.
- **API**: call it from [Python](https://apify.com/scrapersdelight/stockx-scraper/api/python) or [JavaScript](https://apify.com/scrapersdelight/stockx-scraper/api/javascript) with `apify-client`, then read the dataset.
- **MCP**: use it as a tool in Claude, ChatGPT or Cursor through the [MCP tab](https://apify.com/scrapersdelight/stockx-scraper/api/mcp).

### More resale and marketplace scrapers

<table>
<tr><td>📚 <a href="https://apify.com/scrapersdelight/hipcomic-scraper"><b>HipComic Scraper</b></a><br>Comic prices, listings and sellers.</td><td>✉️ <a href="https://apify.com/scrapersdelight/hipstamp-scraper"><b>HipStamp Scraper</b></a><br>Stamp prices and listings.</td><td>🛍️ <a href="https://apify.com/scrapersdelight/trendyol-scraper"><b>Trendyol Scraper</b></a><br>Products, prices, sellers, reviews.</td></tr>
<tr><td>🏷️ <a href="https://apify.com/scrapersdelight/shopgoodwill-scraper"><b>ShopGoodwill Scraper</b></a><br>Auction lots, bids and monitor.</td><td>🔨 <a href="https://apify.com/scrapersdelight/hibid-scraper"><b>HiBid Auction Scraper</b></a><br>Lots, bids and prices.</td><td>📦 <a href="https://apify.com/scrapersdelight/maxsold-scraper"><b>MaxSold Scraper</b></a><br>Estate auction lots and bids.</td></tr>
</table>

See every actor on our [profile](https://apify.com/scrapersdelight).

### Limits & empty runs

- StockX serves about **1,000 products per search or category** (26 pages of 40); pages of broad searches overlap, and the actor removes duplicates. Split big jobs by keyword or filter.
- StockX shows the **50 latest sales** per product; `salesPerSize` adds up to 50 per size (865 sales for one 26-size Jordan 4 in our run). Older individual sales are not published.
- A search with no matches ends with **0 rows and nothing charged**; `RUN_SUMMARY` lists pages read, products seen, filtered, not found and unchanged per source.
- If StockX cannot be reached at all, the run **fails loudly** instead of returning an empty dataset.
- Speed: 100 full products in about 10-40 seconds; 1,000 search results in about 15-60 seconds.

### ❓ FAQ

#### How does StockX Scraper get the data?

From the same data API the stockx.com website loads its prices from — plain HTTP, no browser, so runs are fast and small (256 MB).

#### Do I need a StockX account, cookies or an API key?

No. StockX Scraper reads what any visitor sees. No login, no cookies, no key.

#### Can StockX Scraper give prices for one shoe size?

Yes. Every product row carries `variantSizes` with the ask, bid, spread, last sale and 72 h sales of each size; `onlySizes` keeps just the sizes you want (`10`, `EU 44`, `UK 9`).

#### Can StockX Scraper find a product by SKU or style ID?

Yes — put codes in **Style IDs**. A product is delivered only when its StockX record carries exactly that style ID.

#### Does StockX Scraper return sales history?

Yes, three ways: `priceHistoryPoints` adds the all-time price chart, `includeRecentSales` adds the 50 latest sales to each product, and `outputMode: "sales"` gives one row per sale (plus 50 per size with `salesPerSize`).

#### Can I get UK, EU or Japanese prices with StockX Scraper?

Yes. Set `country` (the market whose book is quoted) and `currency` (30 supported).

#### Can StockX Scraper track price changes over time?

Yes. Schedule it with **Changes only**: each run delivers only products that are new or whose ask, bid, last sale or ask/bid count moved since the previous run.

#### Does it cover trading cards, watches and handbags?

Yes — every StockX category: sneakers, shoes, apparel, accessories, collectibles, trading cards and electronics, with sub-categories like `watches`, `bags`, `figures`, `sealed-boxes`.

#### Why did my StockX Scraper run return no results?

The search matched nothing, a style ID matched no product, or your price/sales filters removed everything. `RUN_SUMMARY` says which. Nothing is charged for an empty run.

#### Can I use StockX Scraper with the Apify API or an MCP server?

Yes — Python or JavaScript `apify-client`, Make/Zapier/n8n, or as a tool in Claude, ChatGPT or Cursor over MCP.

#### Your feedback

Something missing or wrong? Open an issue on the [Issues tab](https://apify.com/scrapersdelight/stockx-scraper/issues/open) — we read every one.

# Actor input Schema

## `searchTerms` (type: `array`):

What you would type in StockX's search box: a model ("jordan 4", "yeezy 350"), a brand, a collaboration or a style ID. Each term is searched separately. Leave everything empty to run the demo search "jordan 4".

## `productUrls` (type: `array`):

Products you already know: a stockx.com product URL (https://stockx.com/air-jordan-4-retro-white-cement-2025, /en-gb/... works too), the slug (air-jordan-4-retro-white-cement-2025) or StockX's product UUID.

## `styleIds` (type: `array`):

Manufacturer style codes such as FV5029-010 or DZ5485-612. Each one is searched on StockX and delivered only when the product record carries exactly that style ID (unmatched codes are listed in the run summary, never billed).

## `startUrls` (type: `array`):

Any stockx.com listing page: https://stockx.com/search?s=dunk, https://stockx.com/brands/nike, https://stockx.com/sneakers, https://stockx.com/category/watches?gender=men\&sort=most-active. Product URLs work here too.

## `outputMode` (type: `string`):

"products" = one row per product. "sales" = one row per completed sale (amount, time, size, express or standard) for every product found.

## `includeDetails` (type: `boolean`):

On: every search result becomes a full product row (style ID, colorway, retail price, release date, 12-month high/low, and the ask, bid, spread, last sale, 72 h sales and UPC of every size). Off: the search-result row only (prices, ask count, 72 h / 90 day / 12 month sales and averages, volatility, premium - no style ID, colorway, retail price or sizes); billed as the cheaper search-result event. Products given by URL, slug or style ID always get the full row.

## `priceHistoryPoints` (type: `integer`):

Add StockX's all-time sales price chart to each product row (date + price), with this many points (0 = off, up to 400). Same charge per product.

## `includeRecentSales` (type: `boolean`):

Add the product's 50 most recent sales (amount, time, size, standard or express) to each product row. Same charge per product.

## `includeOrderBook` (type: `boolean`):

Add the price levels asks and bids stand at, per size, with how many stand at each price (best price first). Same charge per product.

## `maxOrderBookLevels` (type: `integer`):

How many ask levels and how many bid levels to read per product with "Add the order book".

## `onlySizes` (type: `array`):

Keep only these sizes in the per-size data (and, in sales output, only sales in these sizes). Match StockX's size ("10", "10.5", "M", "7Y") or any conversion ("EU 44" as "44", UK "9"). Empty = every size.

## `maxSalesPerProduct` (type: `integer`):

Sales output: newest first, at most this many sales per product (0 = every sale read). StockX shows the 50 latest per product; turn on "Also read sales per size" for up to 50 more per size.

## `salesPerSize` (type: `boolean`):

Sales output: also read the 50 latest sales of every size, so a product with 26 sizes yields up to 1,300 recent sales instead of 50.

## `salesSince` (type: `string`):

Sales output: drop sales older than this date, e.g. 2026-10-01.

## `category` (type: `string`):

StockX category: sneakers, apparel, accessories, collectibles, shoes, trading-cards, electronics, or a sub-category such as watches, bags, t-shirts, hoodies-and-sweatshirts, figures, sealed-boxes. Works with or without a search term.

## `brands` (type: `array`):

StockX brand names or slugs: nike, jordan, adidas, new-balance, asics, supreme, pokemon, louis-vuitton, rolex... A brand also matches its collaborations.

## `gender` (type: `string`):

StockX's gender filter.

## `activity` (type: `string`):

StockX's activity filter (sneakers).

## `color` (type: `string`):

StockX's color filter.

## `newOnly` (type: `boolean`):

Only products in StockX's New & Verified condition.

## `belowRetailOnly` (type: `boolean`):

Only products whose resale price is below retail (StockX's own filter).

## `xpressShipOnly` (type: `boolean`):

Only products with at least one Xpress (ships-now) ask.

## `availableNowOnly` (type: `boolean`):

Only products with a live lowest ask.

## `hasLiveBidOnly` (type: `boolean`):

Only products with a live highest bid.

## `minPrice` (type: `integer`):

Keep products whose lowest ask is at least this, in the chosen currency. Checked before billing: a product removed here costs nothing.

## `maxPrice` (type: `integer`):

Keep products whose lowest ask is at most this, in the chosen currency. Checked before billing.

## `minSalesLast72Hours` (type: `integer`):

Keep only products that sold at least this many pairs in the last 72 hours. Checked before billing.

## `sortBy` (type: `string`):

StockX's own result order (applied to the whole result set, not the page).

## `country` (type: `string`):

Two-letter country code of the market whose order book is quoted: US, GB, DE, FR, IT, ES, NL, JP, AU, CA, CH, HK, SG, KR, MX...

## `currency` (type: `string`):

Currency the prices are expressed in. Retail price is StockX's US retail in USD; premium over retail is computed only for USD runs.

## `maxItems` (type: `integer`):

Stop after this many rows (products, search results or sales). 0 = no limit. Each search/category query returns up to about 1,040 products (a StockX limit); split big jobs into narrower terms or filters.

## `maxPagesPerQuery` (type: `integer`):

40 products per page; 0 = until the results run out (up to 26 pages).

## `onlyChanged` (type: `boolean`):

Deliver (and bill) only products that are new or whose lowest ask, highest bid, last sale or ask/bid count moved since the previous run with the same input (or the same monitor key). Schedule it to get a price-change feed.

## `monitorKey` (type: `string`):

Optional name for the changes-only memory, so several inputs share one feed. Empty = derived from the input.

## `maxConcurrency` (type: `integer`):

How many products are read at the same time.

## `useResidentialFallback` (type: `boolean`):

If StockX refuses the run's own connection, retry through Apify's residential proxy (US), within a per-run cost limit. Off = stop instead.

## `proxyConfiguration` (type: `object`):

Not needed: StockX's data API answers Apify's own connection. Your own proxy URLs are tried after it; an Apify residential group/country you pick replaces the default US residential fallback.

## Actor input object example

```json
{
  "searchTerms": [
    "jordan 4"
  ],
  "outputMode": "products",
  "includeDetails": true,
  "priceHistoryPoints": 0,
  "includeRecentSales": false,
  "includeOrderBook": false,
  "maxOrderBookLevels": 100,
  "maxSalesPerProduct": 50,
  "salesPerSize": false,
  "newOnly": false,
  "belowRetailOnly": false,
  "xpressShipOnly": false,
  "availableNowOnly": false,
  "hasLiveBidOnly": false,
  "sortBy": "featured",
  "country": "US",
  "currency": "USD",
  "maxItems": 10,
  "maxPagesPerQuery": 0,
  "onlyChanged": false,
  "maxConcurrency": 8,
  "useResidentialFallback": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One item per product (detail + per-size market), per search result, or per sale.

## `summary` (type: `string`):

Per-source pages and products seen, rows delivered per event, products not found / unreachable / filtered / unchanged, and the route used.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "jordan 4"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/stockx-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["jordan 4"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/stockx-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "jordan 4"
  ],
  "maxItems": 10
}' |
apify call scrapersdelight/stockx-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/stockx-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Wb29PjLQukABxW3YH/builds/GaqSBLCWHb1xGReOx/openapi.json
