# StockX Universal Scraper (`scrapifier/stockx-universal-scraper`) Actor

👟 Scrape StockX by keyword or URL: sneakers, streetwear, cards, watches and more. Get lowest ask, highest bid, last sale, sales volume, volatility and price premium per product and per size, in any currency. Product details, GTINs and color family. Cookies optional, pay per result.

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

## Pricing

$3.00 / 1,000 results

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## StockX Scraper

Scrape StockX by keyword or by pasting any StockX product, search or category URL, and export sneakers, streetwear, trading cards, watches, handbags and electronics with their full resale market as JSON, CSV or Excel, or pull them straight from the API.

⚡ For every product you get the **title, brand, model, style ID (SKU), release date, retail price**, image and **product URL**, plus the live market in the currency you choose: **lowest ask, highest bid, number of asks and bids, last sale**, and sales analytics over **72 hours, 90 days and a full year** with average price, sales volume, **volatility** and **price premium**. Turn on the detail options and each row also carries the **full size run**, where every single size has its own lowest ask, highest bid, ask and bid counts and last sale, the complete **product details** (size conversions US / UK / EU / CM / KR, GTIN / UPC codes, description, 360 images, categories), and the **color family**. Read prices in **any market and currency**. Login is optional. You **pay per product**.

[![Apify Actor](https://apify.com/actor-badge?actor=scrapifier/stockx-universal-scraper)](https://apify.com/scrapifier/stockx-universal-scraper)

### 🎯 Why scrape StockX?

- **Reseller pricing and repricing**: read the lowest ask and highest bid per size to price your own listings and spot the spread you can capture.
- **Buy-low signals**: filter to products trading **below retail**, or sort by biggest movers, to find flips before they trend.
- **Sell-timing and analytics**: last sale, 72-hour and 90-day sales volume, annual average price, volatility and price premium turn "is this a good time to sell?" into a one-line check.
- **Inventory and portfolio tracking**: watch your own SKUs on a schedule and log ask, bid and last sale over time.
- **Market and drop research**: search any brand, model or category and compare demand, liquidity and premiums across the catalog.
- **Sneaker and collectible datasets**: titles, style IDs, GTINs, release dates, images and prices at scale for matching, enrichment or machine learning.

### 📊 What data does StockX Scraper extract?

| Field | Description |
|---|---|
| `productId`, `urlKey` | StockX's unique product id and URL slug |
| `title`, `name` | Full product title and short colorway / edition name |
| `brand`, `model` | Brand (Jordan, Nike, adidas...) and model / silhouette |
| `styleId` | Manufacturer style ID / SKU (e.g. `DD1391-100`) |
| `gender`, `productCategory`, `primaryCategory` | Segment and category classification |
| `releaseDate`, `retailPrice`, `colorway` | Release date, original retail price and colorway |
| `market` | Live market: `lowestAsk`, `highestBid`, `numberOfAsks`, `numberOfBids`, `lastSale`, `salesLast72Hours`, `averagePrice90Days`, `salesCount90Days`, `averagePriceAnnual`, `salesCountAnnual`, `volatility`, `pricePremium`, last-sale change |
| `sizes` | Full size run: each size with `size`, size conversions, `gtins`, `lowestAsk`, `highestBid`, `numberOfAsks`, `numberOfBids`, `lastSale`, 90-day sales |
| `sizeConversions` | Available size systems for the product (US M, US W, UK, EU, CM, KR) |
| `description` | Product description |
| `images360`, `imageUrl` | 360-degree image URLs and main product image |
| `categories`, `breadcrumbs`, `seo` | Category path, breadcrumb trail and SEO metadata |
| `colorFamily` | Other colorways in the same family with their markets |
| `url`, `searchInput`, `position` | Product page URL and which input produced the row |

### 🚀 How to scrape StockX

1. Type your **search keywords** (`jordan 1`, `dunk low panda`, a brand, a model, or a style ID like `DD1391-100`), one per line.
2. Or paste **StockX URLs**: a product page, a search results page, or a category page with your filters already applied. Product pages always return their full details and the complete size market.
3. Pick your **currency** (USD, EUR, GBP, JPY and more) and **country / market**, so every price matches the market you sell in.
4. Optionally **sort** (most active, release date, lowest ask, last sale), keep only a **gender**, filter to **below retail**, or set a **min / max ask price**.
5. Turn on the detail options you need: **per-size market**, **full product details**, **color family**.
6. Set **Max products** and click **Start**. Open the **Storage** tab to preview the rows and export them as JSON, CSV, Excel or XML, or read them from the dataset API.

The same run can be started from the Apify API, the Python or JavaScript client, or put on a schedule for continuous market tracking.

### 📥 Input parameters

| Field | Key | Type | Default | Description |
|---|---|---|---|---|
| Search keywords | `queries` | array | `jordan 1` (prefill) | One search per line. Brand, model, category words or a style ID. |
| Start URLs | `startUrls` | array of URLs | none | StockX product, search or category / filtered URLs. |
| Currency | `currency` | select | `USD` | Currency for every price: USD, EUR, GBP, CAD, AUD, JPY, CHF, HKD, KRW, SGD, MXN, NZD. |
| Country / market | `country` | string | `US` | Two-letter market code (US, GB, FR, DE, JP...). Counts and availability are market-specific. |
| Sort order | `sort` | select | `relevance` | Relevance, featured, most active, release date, lowest ask, highest bid, last sale, number of asks / bids. |
| Gender | `gender` | select | any | Keep only men, women, youth, infant, preschool, toddler or unisex. |
| Below retail only | `belowRetail` | boolean | `false` | Keep only products whose lowest ask is under retail. |
| Min / max lowest ask | `minPrice`, `maxPrice` | integer | none | Keep products whose lowest ask falls in the range. |
| Max products (total) | `maxItems` | integer | `100` | Hard cap across all searches. This is also your cost cap. |
| Max products per search | `maxItemsPerQuery` | integer | none | Optional cap per keyword or URL. |
| Include full product details | `includeProductDetails` | boolean | `false` | Attach sizes with conversions and GTINs, style ID, description, 360 images, categories, SEO. |
| Include per-size market | `includeSizeMarket` | boolean | `false` | Attach each size's own ask, bid, counts, last sale and 90-day sales. |
| Include color family | `includeColorFamily` | boolean | `false` | Attach the other colorways in the same family. |
| Account cookies | `sessionCookies` | array | none | Optional. Paste your account cookies to run logged in when your account has more access. |
| Proxy configuration | `proxyConfiguration` | object | Residential | Residential proxies are recommended for reliable runs. |

### 📤 Output example

```json
{
  "productId": "019cfdb4-3545-7b24-8773-11f7411145fb",
  "urlKey": "nike-dunk-low-retro-white-black-2021",
  "title": "Nike Dunk Low Retro White Black Panda",
  "name": "White Black",
  "brand": "Nike",
  "model": "Dunk Low",
  "styleId": "DD1391-100",
  "gender": "men",
  "productCategory": "sneakers",
  "primaryCategory": "Nike Dunk",
  "releaseDate": "2021-03-10",
  "retailPrice": 110,
  "imageUrl": "https://images.stockx.com/images/Nike-Dunk-Low-Retro-White-Black-2021-Product.jpg",
  "url": "https://stockx.com/nike-dunk-low-retro-white-black-2021",
  "market": {
    "currency": "USD",
    "lowestAsk": 58,
    "highestBid": 120,
    "numberOfAsks": 1234,
    "numberOfBids": 886,
    "lastSale": 58,
    "salesLast72Hours": 75,
    "averagePrice90Days": 70,
    "salesCount90Days": 2541,
    "averagePriceAnnual": 68,
    "salesCountAnnual": 12878,
    "volatility": 0.3283,
    "pricePremium": -0.496
  },
  "sizes": [
    {
      "variantId": "019cfdb6-e638-7200-92ea-bee038c4b85f",
      "size": "10",
      "sizeConversions": {"us m": "US M 10", "uk": "UK 9", "eu": "EU 44", "cm": "CM 28"},
      "gtins": ["195237406739"],
      "lowestAsk": 83,
      "highestBid": 62,
      "numberOfAsks": 24,
      "numberOfBids": 31,
      "lastSale": 80,
      "averagePrice90Days": 84
    }
  ],
  "sizesCollected": 24,
  "searchInput": "nike dunk low panda",
  "position": 1
}
```

### 💡 Ready-to-run examples

- **Full size market for a product**: paste the product URL in `startUrls`. One row with every size's lowest ask, highest bid, counts and last sale. Product URLs always include full details and the size market.
- **Below-retail deal radar**: `queries: ["jordan 1"]`, `belowRetail: true`, `sort: "lowest_ask"`. Only products trading under their original retail.
- **Most active movers**: `queries: ["dunk low"]`, `sort: "most-active"`, `includeSizeMarket: true`. The hottest models with per-size liquidity.
- **Price in your selling market**: `queries: ["yeezy slide"]`, `currency: "EUR"`, `country: "FR"`. Asks, bids and last sale in euros for the French market.
- **New releases watch**: `queries: ["nike"]`, `sort: "release_date"`, scheduled daily, to catch drops early.
- **Category watch with your own filters**: filter a category on StockX in your browser (brand, size, price), paste the resulting URL, and schedule the run.
- **Portfolio tracking**: put your style IDs in `queries` (e.g. `DD1391-100`), turn on `includeSizeMarket`, and log ask / bid / last sale over time.

### 💰 Pricing: how much does it cost to scrape StockX?

You pay **per product row**, nothing else: no subscription, no starting fee. A product with its full size run, details and color family attached still counts as **one** result. The detail options make runs slower, not more expensive per row. A typical market watch (200 products with per-size data on) costs well under a dollar per run. Set `maxItems` to control your spend exactly.

### ⚙️ Performance, proxies and limits

- **40 products per results page** are collected in one request, so keyword searches are fast even at thousands of products.
- Each detail option adds one or two requests per product; expect roughly 1 to 2 seconds per product with all options on. The base search rows already include the full product-level market at no extra request.
- **Residential** proxies are recommended for reliable runs. If a run reports `blocked` in its output, confirm residential proxies are selected and retry; the Actor also rotates sessions automatically.
- Search results are capped by StockX itself at around **1,000 products per search** (25 pages). Split a broad query into narrower searches, or use category URLs with filters, to go beyond that.
- Rows are deduplicated by product id within a run, so overlapping searches never produce duplicates or double charges.
- Prices are read live at run time in the currency and market you select.

### 🔌 Integrations and API

Start the Actor from the [Apify API](https://docs.apify.com/api/v2), the [Python](https://docs.apify.com/api/client/python/) or [JavaScript](https://docs.apify.com/api/client/js/) client, or a webhook, and connect the dataset to Google Sheets, Slack, Make, Zapier or your own pipeline through [Apify integrations](https://apify.com/integrations).

Run synchronously and get the products in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapifier~stockx-universal-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["nike dunk low panda"], "currency": "USD", "maxItems": 20, "includeSizeMarket": true}'
```

Schedule it (hourly, daily, weekly) from the **Schedules** tab to build your own market tracker.

### ❓ FAQ

**Is it legal to scrape StockX?**
The Actor collects publicly available product and market data, the same information any visitor sees. You are responsible for how you use the data; respect applicable laws and StockX's terms.

**Do I need a StockX account or API key?**
No. You can scrape the public market anonymously with no login. Providing your account cookies is optional and only useful when your account unlocks additional access.

**How do I run it as my own account?**
Paste your StockX account cookies into the **Account cookies** field, as a browser cookie export or as `name=value` lines. Leave it empty to run anonymously.

**Can I get prices in my own currency and market?**
Yes. Set the **Currency** and **Country / market** fields. Every ask, bid, last sale and statistic is returned in that currency for that market, including the per-size numbers.

**How do I get every size's price for a product?**
Turn on **Include per-size market**, or paste the product URL directly; pasted product pages always return the full size run with ask, bid, counts and last sale per size.

**What is the price premium and volatility?**
Price premium is how much the market trades above (or below) retail, and volatility measures how much the price moves. Both come straight from StockX's own annual statistics, alongside average price and sales count.

**Can I filter by brand, size or other category filters?**
Yes. Apply any filters on StockX in your browser and paste the resulting category URL as a start URL; the Actor scrapes exactly that filtered view.

**Which categories are supported?**
Everything StockX sells: sneakers, streetwear and apparel, trading cards, watches, handbags, electronics and collectibles.

**What does the `blocked` error in the run output mean?**
The site refused the connection for the IP used. Confirm residential proxies are selected and run again; the Actor also rotates sessions automatically.

### 🔗 Related scrapers

- [Vinted Scraper](https://apify.com/scrapifier/vinted-universal-scraper): second-hand fashion listings and prices.
- [Idealo Price Comparison Scraper](https://apify.com/scrapifier/idealo-price-comparison-universal-scraper): shop prices and price history across Europe.
- [Trustpilot Scraper](https://apify.com/scrapifier/trustpilot-universal-scraper): company reviews and ratings.
- [Leboncoin Scraper](https://apify.com/scrapifier/leboncoin-universal-scraper): listings from France's biggest marketplace.
- [Indeed Jobs Scraper](https://apify.com/scrapifier/indeed-jobs-universal-scraper): job listings with salaries on 20 country sites.

### 💬 Support

Found a bug, missing a field, need another market or a custom feature? Open an **Issue** on the Actor page and I usually answer within a day. If this scraper saves you time, a ⭐ review on the Actor page helps a lot.

# Actor input Schema

## `queries` (type: `array`):

Products to search for, one per line (e.g. <code>jordan 1</code>, <code>dunk low panda</code>, a brand, a model, a SKU/style ID like <code>DD1391-100</code>). Each keyword becomes one StockX search.

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

StockX URLs to scrape directly: a product page (returns full product details and the live market), a search results page, or a category / filtered browse page (paginated automatically).

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

Currency for every price in the output.

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

Two-letter country code of the market to read prices from (e.g. US, GB, FR, DE, JP). Ask and bid counts and availability are market-specific.

## `sort` (type: `string`):

How to order search results before the cap is applied.

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

Keep only products of this gender.

## `belowRetail` (type: `boolean`):

Keep only products whose lowest ask is under their original retail price (deals).

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

Keep only products whose lowest ask is at or above this value (in the selected currency).

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

Keep only products whose lowest ask is at or below this value (in the selected currency).

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

Hard cap on the total number of products across all searches and URLs. You pay per result, so this is also your cost cap.

## `maxItemsPerQuery` (type: `integer`):

Optional cap per individual keyword or URL. Leave empty to only use the total cap.

## `includeProductDetails` (type: `boolean`):

Attach full product data: every size with its size conversions (US, UK, EU, CM, KR) and GTIN/UPC codes, style ID, description, 360 images, categories and SEO. Adds one request per product.

## `includeSizeMarket` (type: `boolean`):

Attach the full size run with each size's own lowest ask, highest bid, number of asks and bids, last sale and 90-day sales. This is the core reseller data. Adds requests per product.

## `includeColorFamily` (type: `boolean`):

Attach the other colorways in the same product family, with their markets.

## `sessionCookies` (type: `array`):

Optional. Paste your StockX account cookies (as a browser cookie export array, or name=value lines) to run as your logged-in account, which can unlock account-specific access. Leave empty to scrape the public market anonymously.

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

Proxy settings. Residential proxies are recommended for reliable runs.

## `verbose` (type: `boolean`):

Log progress details for every search.

## Actor input object example

```json
{
  "queries": [
    "jordan 1"
  ],
  "currency": "USD",
  "country": "US",
  "sort": "relevance",
  "gender": "",
  "belowRetail": false,
  "maxItems": 50,
  "includeProductDetails": false,
  "includeSizeMarket": false,
  "includeColorFamily": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "verbose": true
}
```

# Actor output Schema

## `products` (type: `string`):

All StockX products extracted by this run.

# 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 = {
    "queries": [
        "jordan 1"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapifier/stockx-universal-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 = {
    "queries": ["jordan 1"],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapifier/stockx-universal-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 '{
  "queries": [
    "jordan 1"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapifier/stockx-universal-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapifier/stockx-universal-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/mZgadgVEVDX5uvvne/builds/mK5oteqDHh4YXMH6I/openapi.json
