# StockX Product Search Scraper (Pay per event) (`ecomscrape/stockx-product-search-scraper-ppe`) Actor

The StockX Product Search Scraper extracts detailed product data from StockX, including name, title, brand, description, condition, market statistics, etc., using search query URLs. This tool is perfect for market research, trend analysis, lead generation, and campaign planning.

- **URL**: https://apify.com/ecomscrape/stockx-product-search-scraper-ppe.md
- **Developed by:** [ecomscrape](https://apify.com/ecomscrape) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 21 total users, 3 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

## Contact

If you encounter any issues or need to exchange information, please feel free to contact us through the following link:
[My profile](https://apify.com/ecomscrape)

## **Professional StockX & Streetwear Data Extraction Tool**

### Introduction

StockX is a leading online marketplace for sneakers, streetwear, collectibles, and luxury goods, operating as "the stock market of things" since 2015. With its dynamic pricing model and authentication process, StockX has become essential for resellers, market analysts, and brands tracking streetwear trends.

The StockX Product Search Scraper addresses the critical need for automated data collection from this vast marketplace. Manual browsing through thousands of products is time-consuming and impractical for businesses requiring real-time market insights, competitive pricing analysis, or inventory management decisions.

### Scraper Overview

The StockX scraper is a robust data extraction tool designed to collect comprehensive product information from StockX.com's product listings. Every item on StockX is verified for authenticity, making the extracted data reliable for business intelligence and market analysis.

This scraper excels at handling StockX's complex product structure, extracting detailed information about sneakers, streetwear, and collectibles while respecting rate limits and anti-bot measures. It's ideal for resellers tracking market trends, brands monitoring competitor pricing, researchers analyzing consumer behavior, and developers building marketplace applications.

The tool supports various product categories including sneakers, apparel, accessories, and collectibles, making it versatile for different business needs across the fashion and collectibles industries.

### Input and Output Details

Example url 1: https://stockx.com/brands/adidas?category=sneakers\&gender=kids\&kids-age-group=infant%2Ctoddler

Example url 2: https://stockx.com/brands/apple

Example url 3: https://stockx.com/browse/kids?category=bags\&sort=featured

Example Screenshot of product information page:

![](https://i.ibb.co/RYrGbY7/Screenshot-from-2025-01-15-01-08-01.png)

#### Input Format

The scraper accepts JSON configuration with several key parameters:

##### Scrape with Urls:

```json
{
  "max_retries_per_url": 2, // Maximum waiting time when accessing the links you provided.
  "proxy": { // Add a proxy to ensure that during the data collection process, you are not detected as a bot.
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL" 
    ],
    "apifyProxyCountry": "SG" // You should choose an Country that coincides with the Country you want to collect data from
  },
  "max_items_per_url": 20,
  "ignore_url_failures": true,
  "urls": [ 
    "https://stockx.com/brands/adidas?category=sneakers&gender=kids&kids-age-group=infant%2Ctoddler", 
    "https://stockx.com/browse/kids?category=bags&sort=featured",
    "https://stockx.com/brands/apple"
    // // Links to product list by query page.
  ]
}
```

*When you provide a list of URLs from search result pages for scraping, all options in the "scrape with search filters" section will be disabled. The system will only collect data from the URLs you specified, and the "scrape with urls" method will use the options listed below:*

- **`ignore_url_failures`**\
  If set to `true`, the scraping process will skip URLs that fail to load (for example, due to connection issues or page not found errors), allowing the rest of the URLs to be processed without interruption.

- **`urls`**\
  A list of URLs pointing to StockX search or category result pages.\
  The scraper will visit each provided URL and collect all product data found on those pages.

##### Scrape with Filters options:

```json
{
  "max_retries_per_url": 2, // Maximum waiting time when accessing the links you provided.
  "proxy": { // Add a proxy to ensure that during the data collection process, you are not detected as a bot.
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL" 
    ],
    "apifyProxyCountry": "SG" // You should choose an Country that coincides with the Country you want to collect data from
  },
  "max_items_per_url": 20, // Total items you want scrape
  "keyword": "Shoe",           // The keyword to search for products (e.g., "Shoe" is the product, brand or category name)
  "sort_by": "featured",               // How to sort search results; "featured" means Featured. Other valid values: "most-active", "lowest_ask", "highest_bid", etc.
  "available_now": true,               // Only show products that are currently available
  "xpress_shipping": false,            // Only show products eligible for Xpress shipping
  "price_from": 0,                     // Minimum price to filter products (0 means no lower limit)
  "price_to": 0,                       // Maximum price to filter products (0 means no upper limit, max is 8000$)
  "page": 1                            // Starting page number for scraping (1 means the first results page)
}
```

*When using search filters for scraping, you need to leave the `urls` field in the configuration empty (or set it to null) for "scrape with urls". The "scrape with search filters" method will use the options listed below:*

- **`keyword`**\
  The keyword to search for products on stockx.com.\
  Example: entering `"Air Jordan"` or a product category will return relevant products.

- **`sort_by`**\
  Determines how search results are sorted. Possible values include:
  - `featured`: Featured items
  - `most-active`: Top selling or most viewed
  - `lowest_ask`: Products with the lowest asking price
  - `highest_bid`: Products with the highest bid
  - `recent_bids`: Products with recent high bids
  - `recent_asks`: Products with recent price drops
  - `deadstock_sold`: Products with the highest number of sales
  - `release_date`: Newest releases
  - `price_premium`: Products with the highest price premium
  - `last_sale`: Products sorted by highest last sale

- **`available_now`**\
  If set to `true`, only products currently available will be scraped.

- **`xpress_shipping`**\
  If set to `true`, only products that support Xpress shipping will be included.

- **`price_from`**\
  Minimum price for filtering search results.\
  Example: Set to `100` to show only products priced from $100 and above.

- **`price_to`**\
  Maximum price for filtering search results.\
  Example: Set to `500` to show only products priced at $500 and below.

- **`page`**\
  The starting page number for scraping.\
  Example: Set to `1` to begin scraping from the first page.

##### General options:

*Here are the general options that apply to all scraping modes:*

The `max_items_per_url` parameter controls how many business listings are extracted from each search results page. Setting this to 20 provides a manageable batch size while allowing for comprehensive data collection across multiple pages.

The `max_retries_per_url` parameter sets the maximum number of retry attempts for each URL or Search filters, ensuring robust data collection even when facing temporary network issues or server responses. Setting this to 2 provides a good balance between thoroughness and efficiency.

The `proxy` configuration is essential for maintaining anonymity and avoiding detection. The residential proxy option with Singapore as the country ensures that your scraping activities appear as legitimate Swedish business research, reducing the risk of being blocked or rate-limited.

#### Output Format

You get the output from the Stockx.com Product Search Scraper stored in a tab. The following is an example of the Information Fields collected after running the Actor.

```json
[ // List of product information
  {
    "id": "01410329-7ae7-43c9-99d8-16781009b5e1",
    "name": "Bone (Infants)",
    "url_key": "adidas-yeezy-boost-350-v2-bone-infants",
    "title": "adidas Yeezy Boost 350 V2 Bone (Infants)",
    "brand": "adidas",
    "description": "The adidas Yeezy Boost 350 V2 Bone (Infants) brings the iconic Yeezy profile to little feet with the same innovative design and premium materials. This neutral-toned pair blends style and comfort for infants and adds an exciting addition to the range.\n<br>\n<br>\nThe Bone Boost 350 V2 for Infants by adidas and Yeezy comes with a flexible Primeknit upper in a bone-white hue that offers a snug, sock-like fit for growing feet. The translucent rubber midsole is home to responsive Boost cushioning for exceptional comfort. A pull tab at the heel makes them easy to pull on and off, while the tonal laces complete the elegant design. Part of Kanye West's Yeezy collaboration, it shows off minimalist aesthetics and advanced technology in a design tailored for little ones.\n<br>\n<br>\nAs the experts, one thing we enjoy about the adidas Yeezy Boost 350 V2 Bone (Infants) is the monochrome aesthetic and chunky sole. Retailing at $140, this exclusive release debuted on May 27, 2024.",
    "model": "adidas Yeezy Boost 350 V2",
    "condition": "New",
    "product_category": "sneakers",
    "browse_verticals": [
      "sneakers"
    ],
    "listing_type": "STANDARD",
    "media": {
      "thumb_url": "https://images.stockx.com/images/adidas-Yeezy-Boost-350-V2-Bone-Infants.jpg?fit=fill&bg=FFFFFF&w=140&h=100&fm=webp&auto=compress&q=90&dpr=2&trim=color&updated_at=1716915467",
      "small_image_url": "https://images.stockx.com/images/adidas-Yeezy-Boost-350-V2-Bone-Infants.jpg?fit=fill&bg=FFFFFF&w=300&h=214&fm=webp&auto=compress&q=90&dpr=2&trim=color&updated_at=1716915467"
    },
    "traits": [
      {
        "name": "Release Date",
        "value": "2024-05-27"
      }
    ],
    "variants": [
      {
        "id": "3d71c131-db09-4add-9f45-dfba5fcea329"
      },
      {
        "id": "de704f9a-59a3-4588-927b-b1cf839c7052"
      },
      {
        "id": "6bc35ac6-6497-4fee-851f-24b32dbd426f"
      },
      {
        "id": "bde10ee1-ab62-48a0-96c4-dc97dc60e951"
      },
      {
        "id": "1b68f002-177a-4266-8a31-fdcfdc015e5f"
      },
      {
        "id": "d573b4f6-6e05-4e93-b41d-11048cff6bb2"
      },
      {
        "id": "86486824-5b64-462e-84be-6eefbbb388af"
      },
      {
        "id": "00ef2264-31bb-4646-8c85-8a12173826ff"
      },
      {
        "id": "175472b5-23f0-4769-91ac-526faff2c9c5"
      },
      {
        "id": "a7853ee9-a4ee-47e8-852a-fd5c29719e36"
      },
      {
        "id": "17b007de-cbea-4c60-b061-716d48553def"
      },
      {
        "id": "5a2db63c-818f-4aa7-aea8-8f2b6460af65"
      }
    ],
    "market_statistics": {
      "annual": {
        "average_price": 92,
        "volatility": 0.39448,
        "sales_count": 274,
        "price_premium": -0.357
      },
      "last72_hours": {
        "sales_count": 0
      },
      "last_sale": {
        "amount": 90
      }
    },
    "market_state": {
      "highest_bid": {
        "amount": 59,
        "updated_at": "2025-01-06T15:20:47Z"
      },
      "lowest_ask": {
        "amount": 90,
        "updated_at": "2025-01-08T20:55:54Z"
      },
      "ask_service_levels": {
        "express_expedited": {
          "count": 0,
          "lowest": null
        },
        "express_standard": {
          "count": 3,
          "lowest": {
            "amount": 100
          }
        }
      }
    },
    "page": 1,
    "from_url": "https://stockx.com/brands/adidas?category=sneakers&gender=kids&kids-age-group=infant%2Ctoddler"
  }, // ... Many other product details
]
```

The scraper returns comprehensive product data with 15 key fields:

**Core Identification:**

- **ID**: Unique StockX product identifier for database storage and API references
- **Name**: Official product name as displayed on StockX
- **URL Key**: Unique slug used in StockX URLs for direct product access
- **Title**: Full product title including brand and model information

**Product Information:**

- **Brand**: Manufacturer name (Nike, Adidas, Supreme, etc.)
- **Description**: Detailed product description including materials and features
- **Model**: Specific model name or code within the brand's catalog
- **Condition**: Product condition (typically "new" for StockX verified items)

**Categorization:**

- **Product Category**: Main category (sneakers, apparel, accessories, collectibles)
- **Browse Verticals**: StockX's internal categorization system for navigation
- **Listing Type**: Type of marketplace listing (auction, buy-now, etc.)

**Rich Content:**

- **Media**: Array of product images, videos, and 360-degree views
- **Traits**: Specific attributes like colorway, material, release year
- **Variants**: Available sizes, colors, and style variations with individual SKUs

**Market Data:**

- **Market Statistics**: Historical sales data, average prices, price trends
- **Market State**: Current market status, bid/ask spreads, recent sales activity

This comprehensive data structure enables detailed analysis of product performance, pricing trends, and market dynamics across StockX's entire catalog.

### Usage Guide

**Step 1: Configure Input**\
Set up your JSON input using one of two methods:

- **A. Scrape with URLs:**\
  Provide a list of product or category URLs from StockX to extract exactly the items you want.\
  When using this method, all search filter options will be disabled.

- **B. Scrape with Search Filters:**\
  Alternatively, you can search for products by keyword and filter options such as category, price range, sorting, and availability.\
  When using search filters, leave the `urls` field empty or set it to `null`.

Set up residential proxies and appropriate retry limits to ensure successful data extraction.

**Step 2: Execute Scraper**\
Run the scraper with your configuration. Monitor progress and adjust parameters as needed based on success rates and data quality.

**Step 3: Process Output**\
The extracted data arrives in structured JSON format, ready for database import, analysis tools, or API integration.

**Best Practices:**

- Use category-specific URLs or filter settings for focused data collection
- Implement proxy rotation to avoid IP blocking
- Set reasonable item limits to balance data volume with processing time
- Monitor for changes in StockX's site structure that might affect extraction

**Common Issues:**

- Rate limiting: Adjust delays and retry settings
- Blocked requests: Verify proxy configuration and geographic settings
- Missing data: Check if StockX has updated their product page structure

### Benefits and Applications

**Time Efficiency**: Automates hours of manual data collection into minutes of automated processing, allowing focus on analysis rather than data gathering.

**Market Intelligence**: Track pricing trends, identify emerging brands, monitor competitor strategies, and spot investment opportunities in the resale market.

**Business Applications**: Inventory management for resellers, competitive analysis for brands, market research for investors, and price monitoring for consumers.

**Data-Driven Decisions**: Access to comprehensive market statistics enables informed buying, selling, and investment decisions based on real market data rather than assumptions.

### Conclusion

The StockX Product Search Scraper provides essential market intelligence for anyone involved in the sneaker and streetwear ecosystem. With its comprehensive data extraction capabilities and respect for platform limitations, it's an indispensable tool for modern resale businesses.

Ready to gain competitive advantage in the streetwear market? Start extracting StockX data today and transform your approach to resale intelligence.

## Related Actors

- [**StockX Product Details Page Scraper**](https://apify.com/ecomscrape/stockx-product-page-details-scraper): A specialized data extraction solution engineered to harvest comprehensive product information from StockX's exclusive sneaker and streetwear marketplace.

## Your feedback

We are always working to improve Actors' performance. So, if you have any technical feedback about Stockx.com Product Search Scraper or simply found a bug, please create an issue on the Actor's Issues tab in Apify Console.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Product list page urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped after the maximum number of retries is reached.

## `keyword` (type: `string`):

Enter the keyword to search for businesses

## `sort_by` (type: `string`):

Select the order of search results

## `available_now` (type: `boolean`):

Show only items that are currently available

## `xpress_shipping` (type: `boolean`):

Show only items eligible for Xpress shipping

## `price_from` (type: `number`):

Minimum price to filter the search results

## `price_to` (type: `number`):

Maximum price to filter the search results

## `page` (type: `integer`):

Specify the page number to start scraping from

## `max_items_per_url` (type: `integer`):

Limit the number of items per URL or search filters you want to scrape

## `max_retries_per_url` (type: `integer`):

Limit the number of retries for each URL or search filters if the scrape is detected as a bot or the page fails to load

## Actor input object example

```json
{
  "urls": [
    "https://stockx.com/brands/adidas?category=sneakers&gender=kids&kids-age-group=infant%2Ctoddler"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20,
  "max_retries_per_url": 2
}
```

# 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 = {
    "urls": [
        "https://stockx.com/brands/adidas?category=sneakers&gender=kids&kids-age-group=infant%2Ctoddler"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20,
    "max_retries_per_url": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("ecomscrape/stockx-product-search-scraper-ppe").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 = {
    "urls": ["https://stockx.com/brands/adidas?category=sneakers&gender=kids&kids-age-group=infant%2Ctoddler"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
    "max_retries_per_url": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("ecomscrape/stockx-product-search-scraper-ppe").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://stockx.com/brands/adidas?category=sneakers&gender=kids&kids-age-group=infant%2Ctoddler"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20,
  "max_retries_per_url": 2
}' |
apify call ecomscrape/stockx-product-search-scraper-ppe --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ecomscrape/stockx-product-search-scraper-ppe",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/RNdbswrkEKu9qzJPf/builds/imdvj26fC8ommsmBX/openapi.json
