๐ŸŽ‰ Premium Proxies ยท 24-Hour Free TrialClaim Now
Guides

How to Scrape StockX Data (Prices, Bids, Asks)

Learn how to scrape StockX data at the size level: pull product variants, live lowest ask and highest bid, and sales history past PerimeterX and Akamai.

S SparkProxy 0 17 min read
Share
How to Scrape StockX Data (Prices, Bids, Asks)

StockX is one of the harder e-commerce targets on the public web. Try to scrape StockX data with a plain requests.get() and you get an HTTP 403 in well under a second, served by PerimeterX before your code ever sees a price. This guide takes the read-only market-data route. You will find the JSON that StockX's own pages call, read the lowest ask, highest bid, and last sale for every size, pull the recent sales history, and run all of it through a real browser on residential IPs so the bot defense treats you like a shopper checking prices. No buying, no checkout bots, just market data.

What You Can Scrape from StockX

StockX is a bid-ask marketplace, not a fixed-price store. That changes what "product data" even means. A single sneaker is one catalog product with many size variants, and each size trades at its own price with its own buyers and sellers. The data worth collecting splits into four buckets.

Data categoryWhere it livesKey fields
Catalog / product`Product` object`title`, `brand`, `styleId`, `colorway`, `releaseDate`, `retailPrice`
Market (overall)`Product.market``lowestAsk`, `highestBid`, `lastSale`, `salesLast72Hours`, `deadstockSold`
Variants (per size)`Product.children[uuid]``shoeSize`, `market.lowestAsk`, `market.highestBid`, `uuid`
Sales history`/activity` and `/chart` endpoints`amount`, `createdAt`, `shoeSize`, price time series

One thing to settle early: StockX does not publish a general market-data API for the public. Approved sellers get a Seller API for managing their own catalog and listings, but there is no sanctioned feed that hands you live asks and bids for any product you name. The public market data comes from the same JSON the site's own front end reads on every product page. That is what we target here, and we target it read-only.


Free trial

Scraping at scale? Skip the blocks.

Fast, unblockable datacentre proxies with unlimited bandwidth.

Why StockX Is a Hard Target

Most sneaker resale sites lean on the same defenses, and StockX runs several at once. Knowing which is which tells you what your request has to look like.

DefenseSignal you will seeWhat passes it
PerimeterX / HUMAN`_px3`, `_pxvid` cookies; press-and-hold captcha; HTTP 403Real browser plus residential IP plus a sticky session
Akamai Bot Manager`_abck`, `bm_sz`, `ak_bmsc` cookiesConsistent TLS plus browser sensor data
TLS / JA3 fingerprintInstant 403 on raw HTTP clientsChromium via `render_js`, not a bare socket
IP reputationDatacenter ranges blocked earlyResidential IPs via `premium_proxy`

PerimeterX (now branded HUMAN Bot Defender) is the main gate. It fingerprints your TLS handshake, your JavaScript environment, and your mouse behavior, then decides in milliseconds whether to serve the page or a press-and-hold challenge. A bare Python request fails the TLS check alone, which is why the 403 arrives so fast. Our deeper walkthrough on how to bypass PerimeterX covers the challenge mechanics.

The IP dimension matters just as much. StockX scores datacenter ASNs low and blocks them early, so the same request that fails from an AWS box succeeds from a residential address. That is the practical reason this job needs residential rather than datacenter proxies. Two things together get you in: a browser fingerprint PerimeterX accepts, and an IP its reputation model trusts.


Find the StockX Product JSON

You do not parse StockX's HTML. The page is a React front end that hydrates from JSON, and rendering markup would be slow and brittle. Go straight to the data feed.

  1. Open a product page in Chrome, for example https://stockx.com/air-jordan-1-retro-high-og-chicago-reimagined.
  2. Open DevTools with F12, click the Network tab, then the Fetch/XHR filter.
  3. Reload. Watch for a request to /api/products/.... That is the market feed.

The endpoint follows a predictable shape:

https://stockx.com/api/products/{urlKey}?includes=market&currency=USD&country=US

The urlKey is the slug in the page URL. Three query parameters carry more weight than they look:

  • includes=market is the switch that attaches the live market block. Drop it and you get catalog fields only, no asks or bids.
  • currency and country localize the prices. A lowestAsk in USD/US is a different number than the same shoe in EUR/DE, because StockX runs a separate regional market. Pin both so your data set stays consistent.

There is a second route worth knowing. StockX also embeds a hydration payload in the page under a