Scrape StockX sneaker & streetwear search results as clean, structured JSON — product title, colorway, brand, model, gender, condition, category, description, images and product URL — for any query and market.
Powered by ScrapeUnblocker:
the getPageSource parsed_data API renders each StockX search page in a real
browser (past anti-bot walls) and returns AI-parsed JSON, so you never touch raw
HTML or CSS selectors.
$ stockx-scraper "jordan 1" --limit 3 --pretty
[
{
"productId": "9a4d44f9-4b16-4abc-ba58-c0db340ee791",
"title": "Jordan 1 Retro High OG Chicago Lost and Found",
"colorway": "Chicago Lost and Found",
"brand": "Jordan",
"model": "Jordan 1 Retro High OG",
"gender": "men",
"condition": "New",
"category": "sneakers",
"primaryCategory": "Air Jordan",
"description": "The original Air Jordan 1 Chicago colorway ...",
"image": "https://images.stockx.com/images/Air-Jordan-1-...-Product.jpg",
"thumbnail": "https://images.stockx.com/images/Air-Jordan-1-...-Product.jpg",
"url": "https://stockx.com/air-jordan-1-retro-high-og-chicago-reimagined-lost-and-found"
}
]- 🧾 Clean JSON — every result normalised to a stable schema (see below).
- 🌍 Any market — route through a proxy country with
--country(defaultUS). - 🔁 Multi-query collection — merge several related queries, de-duplicated by product id, for a broad catalogue in one run.
- 📤 JSON or CSV — print to stdout or write to a file.
- 🧱 Library + CLI — use the
StockXScraperclass in code or thestockx-scrapercommand in your shell. - 🛡️ Resilient — automatic retries with exponential backoff on transient errors, and empty skeleton rows are filtered out for you.
- 🧪 Tested — offline unit tests (the API is mocked, so no credits are spent).
# clone and install
git clone https://github.com/ScrapeUnblocker/stockx-scraper.git
cd stockx-scraper
npm install
# optional: install the CLI globally
npm install -g .Requires Node.js 18+.
Set your ScrapeUnblocker API key in the SCRAPEUNBLOCKER_KEY environment
variable (copy .env.example for reference):
export SCRAPEUNBLOCKER_KEY="your_key_here"Get a key at scrapeunblocker.com.
# single query -> JSON on stdout
stockx-scraper "jordan 1"
# several queries, capped, exported to CSV
stockx-scraper "yeezy 350" "yeezy slide" --limit 50 --format csv --output yeezy.csv
# target a specific market and pretty-print
stockx-scraper -q "new balance 550" -q "new balance 2002r" --country GB --prettyUSAGE:
stockx-scraper <query> [more queries...] [options]
OPTIONS:
-q, --query <text> Add a search query (repeatable; may also be positional)
-l, --limit <n> Stop after N unique products
-c, --country <cc> Proxy country ISO code (default: US)
-f, --format <fmt> Output format: json | csv (default: json)
-o, --output <file> Write output to a file instead of stdout
--pretty Pretty-print JSON output
-h, --help Show this help
-v, --version Show version
const { StockXScraper } = require('stockx-scraper');
const scraper = new StockXScraper({ proxyCountry: 'US' });
// one query
const products = await scraper.search('jordan 4');
console.log(products.length, products[0]);
// several queries, de-duplicated by product id
const catalogue = await scraper.collect(
['dunk low panda', 'dunk low retro'],
{ limit: 100, onProgress: ({ query, total }) => console.error(query, total) },
);The library also exports the pure helpers used internally — buildSearchUrl,
shapeProduct, toCsv, withRetry and friends — if you want to build your own
pipeline.
Each product record has the following fields:
| Field | Description |
|---|---|
productId |
StockX product UUID |
title |
Full product title |
colorway |
Colorway / release name |
brand |
Brand (e.g. Jordan) |
model |
Silhouette / model line |
gender |
Audience (men, women, ...) |
condition |
Listing condition (e.g. New) |
category |
Product category (e.g. sneakers) |
primaryCategory |
Primary category / collection |
description |
Product description (markup stripped) |
image |
Product image URL |
thumbnail |
Thumbnail image URL |
url |
Absolute StockX product URL |
Note on pagination. StockX search pages do not expose a reliable "next page" link, so this tool gathers breadth by running several related queries and de-duplicating by
productId(viacollect(...)/ multiple positional queries) rather than walking pages.
Runnable scripts live in examples/:
node examples/search-json.js "jordan 4" # single query -> JSON
node examples/export-csv.js "yeezy 350" out.csv # single query -> CSV file
node examples/multi-query.js # multi-query, de-duplicatedstockx-scraper/
├── src/
│ ├── index.js # package exports
│ └── client.js # StockXScraper class + parsing / retry / CSV helpers
├── bin/
│ └── cli.js # command-line interface
├── examples/ # runnable example scripts
├── test/ # offline unit tests (SDK mocked)
├── .github/workflows/ # CI (lint + tests on Node 18/20/22)
├── package.json
├── .eslintrc.json
├── .env.example
└── LICENSE
npm install # install deps
npm test # run the offline test suite (node --test)
npm run lint # eslint
npm run lint:fix # eslint --fixTests mock the ScrapeUnblocker SDK, so they run offline and spend no API credits.
This project is an independent, unofficial example and is not affiliated with or
endorsed by StockX. Scrape responsibly: respect StockX's Terms of Service and
robots.txt, only collect publicly available data, and use the results in line
with applicable laws.
MIT © 2026 ScrapeUnblocker