Piotr VassevPiotr Vassev

How to Export StockX Market Data for a Product Shortlist

StockX's lowest ask, highest bid, and last sale describe different parts of a product's market. A useful comparison keeps them separate and checks whether the figures apply to the whole product or a particular size.

The StockX Listings Scraper returns product-level market figures from search, brand, and category pages. It can add style, colorway, retail price, and size-chart details from product pages. I maintain it. This guide uses a small Vaporfly search to show what those figures can support.

How to Export StockX Market Data for a Product Shortlist

Collect product-level figures first

Open the Actor on Apify and select the JSON view of Input:

{
  "searches": ["vaporfly"],
  "includePdpDetails": false,
  "maxItems": 20
}

At least one of searches, brands, categories, or productUrls must be supplied. maxItems caps the run; leaving it empty allows collection through available results, up to the source's 1,000-result ceiling per browse query. Search pages hold up to forty products.

The first pass leaves detail enrichment off because market figures are already in browse records. Click Start, then inspect source, sourceValue, model, and title in the dataset. A keyword can match multiple generations and colorways, so the entire returned sample is not automatically one comparable product group.

Interpret the spread without inventing a trade

A shortened historical README sample shows:

{
  "urlKey": "nike-zoomx-vaporfly-3-multi-color",
  "model": "Nike ZoomX Vaporfly 3",
  "lowestAsk": 109,
  "highestBid": 90,
  "lastSale": 104,
  "avgPrice90d": 131,
  "salesCount90d": 132,
  "salesCount72h": 3
}

The difference between 109 and 90 is 19. That is the gap between the reported product-level ask and bid, not a realizable profit. The two sides may concern different sizes, and fees, shipping, and execution conditions are not part of that subtraction.

lastSale is a reported historical sale value, while lowestAsk is an offer to sell. The 90-day average summarizes another window again. A last sale below that average is a fact about these reported figures, not proof that the price will rebound.

StockX product dataset with market figures

Earlier StockX output shows product-level market figures; it is not a current size-specific quote.

Make a comparison sheet with explicit scope

Export CSV with urlKey, productUrl, title, brand, model, gender, condition, releaseDate, and the market fields. Preserve lowestAskAt and highestBidAt when returned. Add the run time yourself as collection context instead of substituting an offer timestamp for the whole row's date.

Deduplicate by urlKey, then group by model generation, colorway, and condition. Keep sales counts beside averages so a thinly observed product does not look as well supported as one with many reported sales. Leave missing values blank rather than assigning a zero bid or sale.

The documented sample does not include an explicit currency field. Confirm the market/currency context before interpreting amounts, particularly if joining another marketplace's export. Label the row “product-level” so it cannot be mistaken for a size-specific quote.

Use detail mode for identification, not size prices

Set includePdpDetails to true to enrich discovered products, or supply selected productUrls for direct detail collection. Direct product URLs always use product-page extraction. Details add styleId, colorway, retailPrice, variants, gallery, and fullDescription where available.

The variants array contains size labels and sizeChart conversions. It does not include per-size asks or bids. Do not copy the product's lowestAsk into each size row. For a decision involving a specific size, open productUrl and verify that exact offer separately.

Export JSON when retaining variants. Use styleId and colorway to resolve products with confusingly similar names, while preserving urlKey as the source identity.

Price the collection you actually need

Pricing as of September 6, 2026: a browse listing costs $0.002, while a detailed record costs $0.006. These are alternative record events, with no separate Actor-start event in the active configuration. Twenty basic products cost $0.04; twenty detailed products cost $0.12. Check live pricing before broad brand crawls.

If variants are absent, verify that you requested detail mode. If variant prices are absent, that is the documented limitation rather than a failed export. For a separate source of resale observations, the eBay listing guide explains why listing status and price need their own checks.

The Node.js example shows how to run this Actor from code and retrieve its dataset.

Frequently asked questions

Does the size matrix include an ask and bid for every size?

No. variants contains size labels and sizeChart conversions. The returned lowestAsk and highestBid are product-level figures and must not be assigned to individual sizes.

Are listing and detail event fees cumulative?

The documented billing examples use one record event: $0.002 for a browse listing or $0.006 for a detailed record at the rates as of September 6, 2026.

Piotr Vassev

Piotr Vassev

Founder of FalconScrape. Building production-grade web scraping systems and data automation pipelines for businesses worldwide.

Connect on LinkedIn