Skip to content

Repository files navigation

stockx-scraper

CI Node.js License: MIT

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"
  }
]

Features

  • 🧾 Clean JSON — every result normalised to a stable schema (see below).
  • 🌍 Any market — route through a proxy country with --country (default US).
  • 🔁 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 StockXScraper class in code or the stockx-scraper command 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).

Install

# 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+.

Configuration

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.

CLI usage

# 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 --pretty
USAGE:
  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

Library usage

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.

Output schema

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 (via collect(...) / multiple positional queries) rather than walking pages.

Examples

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-duplicated

Project layout

stockx-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

Development

npm install       # install deps
npm test          # run the offline test suite (node --test)
npm run lint      # eslint
npm run lint:fix  # eslint --fix

Tests mock the ScrapeUnblocker SDK, so they run offline and spend no API credits.

Links

Legal

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.

License

MIT © 2026 ScrapeUnblocker

About

Scrape StockX sneaker & streetwear search results as clean JSON (title, colorway, brand, model, condition, images, product URL) via the ScrapeUnblocker parsed_data API. CLI + Node library.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages