# Nike Product Catalog, Colorway & Price Scraper (`vexaloom-labs/nike-product-catalog-colorway-and-price-scraper`) Actor

Search Nike.com by keyword or style code, browse 40 shoe/clothing categories across 18 marketplaces, or fetch full product-page detail including sizes, stock status and every colorway of a style.

- **URL**: https://apify.com/vexaloom-labs/nike-product-catalog-colorway-and-price-scraper.md
- **Developed by:** [vexaloom-labs](https://apify.com/vexaloom-labs) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Nike Product Catalog, Colorway & Price Scraper

Pull Nike.com product data straight from Nike's own public catalog feeds. Search by keyword or style code, browse 40 curated categories in 18 marketplaces, paste any Nike search/category/product URL, or ask for full product pages with size stock, all colorways, images and review summaries. No account, cookies, API key or proxy setup is required.

### Modes

| Mode | What it does |
|---|---|
| `search` | Run one or more keyword searches (`air max`, `dunk low`, `CW2288-111`) against a chosen marketplace. |
| `browseCategory` | Walk one of 40 curated catalog categories: men's, women's and kids' shoes, clothing, accessories, Jordan, running, basketball, soccer, sale and more. |
| `productDetails` | Fetch full detail for product URLs or bare style/style-color codes. Both `/t/` product pages and `/u/` Nike By You pages are accepted. |
| `startUrls` | Paste Nike search (`/w?q=...`), category (`/w/...`) or product (`/t/...`, `/u/...`) links and the actor routes each one automatically. Locale prefixes such as `/gb/` set the marketplace. |

`startUrls` takes precedence over `mode` when non-empty, so a mixed list of search, category and product links works in one run.

### Inputs

| Field | Type | Default | Notes |
|---|---|---|---|
| `mode` | select | `search` | `search` / `browseCategory` / `productDetails` / `startUrls`. |
| `searchQueries` | string list | `["air max"]` | Keywords, product names or style codes; one search task per entry. |
| `country` | select | `US` | US, GB, DE, FR, JP, MX, ES, IT, NL, SE, KR, SG, TH, TW, ID, PH, MY, ZA. Applies to search, category and non-prefixed URLs. |
| `category` | select | – | Curated category for `browseCategory`. Works in every supported country. |
| `startUrls` | URL list | `[]` | Nike search, category or product links; overrides `mode`. |
| `productUrls` | string list | `[]` | Full product-page URLs for `productDetails`. |
| `styleCodes` | string list | `[]` | Style or style-color codes such as `CW2288-111` or `CW2288`. For Nike By You products use the 10-digit style-color code (e.g. `6484638358`). |
| `minPrice` / `maxPrice` | integer | – | Keep products inside a price range in the marketplace's currency. |
| `minDiscount` | integer | `0` | Keep products discounted by at least this percentage. |
| `onSaleOnly` | boolean | `false` | Only emit products with an active discount. |
| `includeAllColorways` | boolean | `false` | Emit every colorway as its own record instead of one representative card per style. |
| `includeProductDetails` | boolean | `false` | Enrich listing records with detail-page data (description, sizes, stock, images, all colorways). |
| `includeReviews` | boolean | `false` | Add rating, review count, review summary and the three most recent reviews. Requires product-detail data. |
| `gender` | select | `ANY` | Men / Women facet for search and pasted search URLs. Nike rejects this facet for TH and TW, so it is skipped there. |
| `productType` | select | `ANY` | Footwear / Apparel / Accessories / Equipment. |
| `attributeFilter` | select | `ANY` | Just In, Coming Soon, Best Seller or Sustainable Materials. |
| `filters` | string list | `[]` | Nike's own facet labels, e.g. `Sports: Running`, `Color: Black`, `Brand: Nike`, `Width: Wide`, `Size: 10`. Resolved against the live facet panel for each search/category. |
| `sortBy` | select | `featured` | Featured, Newest, Price low→high, Price high→low, Discount high→low. |
| `maxItems` | integer | `24` | Hard cap across all queries, categories and URLs (1–5000). |

Older task inputs are still accepted: `searchQuery`/`query`/`queries`, `categories`, `startUrl`, `productUrl`/`urls`, `styleColors`/`styleCode`/`sku`/`skus`, `maxProducts`/`maxResults`/`maxResultsPerScrape`/`results_wanted`/`max_items`/`limit`, `marketplace`/`market`, `sort`, `onSale`, `allColorways`, `audience`, `product_type`, `attribute`, `facets`/`filter`/`facet`, `includeDetails`/`fetchProductDetails`/`fetchDetails`/`scrapeProductDetails`, `reviews` and `scrapeMode` are mapped in code. They are intentionally not shown in the input form.

### Output fields

Listing records carry `recordType`, `sourceUrl`, `scrapedAt`, `marketplace`, `language` and the query/category/URL that produced them (`sourceQuery`). Product-detail records carry `recordType`, `sourceUrl`, `scrapedAt` and `styleColor`.

#### Listing records (`search`, `browseCategory`, `startUrls`)

- Identifiers: `productCode`, `styleCode`, `colorCode`, `styleGroupId`, `globalProductId`, `internalPid`, `merchProductId`
- Copy: `title`, `subtitle`, `fullTitle`
- Product type: `productType`, `productSubType`, `isCustomizable`
- Color: `colorLabel`, `colorHex`, `colorDescription`, `colorwayCount` (with `includeProductDetails`, this matches the length of the detail `colorways[]`; otherwise it is the number of buyable colorways in Nike's grid grouping)
- Price: `currentPrice`, `initialPrice`, `currency`, `discountPercentage`, `onSale`, `employeePrice`, `employeeDiscountPercentage`
- Media: `imageUrl`, `portraitImageUrl`
- Merchandising: `badgeLabel`, `featuredAttributes`, `isNew`, `isComingSoon`, `isBestSeller`, `isSustainableMaterials`, `newUntilDate`, `promotionTitle`
- Links: `productUrl`, `sourceUrl`

#### Product-detail records

All listing fields that Nike publishes on the product page, plus:

- `styleColor`, `pdpUrl`, `canonicalUrl`
- `description`, `featuresAndBenefits`, `productDetails`
- `brands`, `genders`, `sportTags`, `taxonomyProductTypes`, `taxonomy`
- `sizes` with `label`, `localizedLabel`, `status`, `merchSkuId`, `gtin`
- `inStock`, `availableSizeCount`
- `images` (up to 12), `imageUrl`
- `colorways` with each color's `styleColor`, `colorCode`, `colorDescription`, `imageUrl`, `portraitImageUrl`, `productUrl`, `statusModifier`
- `colorwayCount`
- `availabilityDate`, `isLaunchProduct`, `consumerReleaseType`, `statusModifier`
- `badge`, `featuredAttributes`, `isNBY`, `isMemberProduct`, `netQuantity`, `manufacturingCountriesOfOrigin`
- `fitRecommendation`, `sizeChartUrl`, `isSustainableMaterials`

#### Review fields (when `includeReviews=true`)

`averageRating`, `reviewCount`, `averageSizeRating`, `averageComfortRating`, `reviewSummary`, and `reviews[]` with `rating`, `title`, `text`, `author`, `createdAt`, `verifiedPurchase`, `purchasedFrom`.

Empty values are omitted at every depth. A field is present only when Nike actually publishes it for that product.

### Examples

Search two keywords, sort by price and keep the 60 cheapest matches:

```json
{
  "mode": "search",
  "searchQueries": ["air max", "pegasus"],
  "country": "US",
  "sortBy": "priceLowToHigh",
  "maxItems": 60
}
```

Browse the UK men's running category and enrich each listing with sizes and stock:

```json
{
  "mode": "browseCategory",
  "category": "mensRunningShoes",
  "country": "GB",
  "includeProductDetails": true,
  "maxItems": 40
}
```

Fetch two products by URL and one by style code, with colorways and reviews:

```json
{
  "mode": "productDetails",
  "productUrls": [
    "https://www.nike.com/t/air-force-1-07-mens-shoes-jBrhbr/CW2288-111",
    "https://www.nike.com/u/custom-air-max-95-big-bubble-by-you-10002422/6484638358"
  ],
  "styleCodes": ["CT8529-108"],
  "includeReviews": true
}
```

Process a mixed list of saved Nike links:

```json
{
  "mode": "startUrls",
  "startUrls": [
    {"url": "https://www.nike.com/w?q=jordan"},
    {"url": "https://www.nike.com/gb/w/mens-sale-shoes-3yaepznik1zy7ok"},
    {"url": "https://www.nike.com/t/air-force-1-07-mens-shoes-jBrhbr/CW2288-111"}
  ],
  "maxItems": 100
}
```

Use Nike's own facets to narrow a category to one sport, colour and size:

```json
{
  "mode": "browseCategory",
  "category": "mensShoes",
  "filters": ["Sports: Running", "Color: Black", "Size: 10"],
  "maxItems": 40
}
```

Track discounted footwear:

```json
{
  "mode": "search",
  "searchQueries": ["running shoes"],
  "onSaleOnly": true,
  "minDiscount": 20,
  "productType": "FOOTWEAR",
  "sortBy": "discountHighToLow",
  "maxItems": 50
}
```

### What people use it for

- Price and discount monitoring across Nike's catalog and 18 storefronts
- Colorway and assortment tracking for sneaker releases
- Size and stock checks before buying or restocking
- Building product feeds for comparison pages and affiliate sites
- Review and rating snapshots for product research

### Data source and reliability

The actor reads the same public APIs that power Nike's own search, category and product pages. It does not log in, store cookies, solve challenges or depend on a proxy. Requests are retried on 403/429/5xx with backoff, and the run reports a clean empty result or a clear status message instead of inventing rows.

Nike's wall API has no working public sort parameter, so `sortBy` is applied to the fetched records locally. For very large categories, raise `maxItems` and let the actor page through the source until it runs out or hits the cap.

### FAQ

**Do I need cookies, an account or a proxy?** No. Every supported field is public and cookieless. The actor never asks for credentials.

**Why does `browseCategory` now work outside the US?** The curated category paths are stable US catalog paths, and Nike's public wall API accepts them with any supported marketplace/language pair. Prices and URLs come back localized.

**What is the difference between `productCode` and `styleCode`?** `productCode` identifies a single style-color (for example `CW2288-111`); `styleCode` is the style family (`CW2288`) shared by its colorways.

**How do I get every colorway?** Set `includeAllColorways=true` in listing modes, or use `productDetails` where `colorways` is always included.

**How fresh is stock data?** `productDetails` reflects the product page at scrape time, including per-size `ACTIVE`/`OUT_OF_STOCK` status and the available-size count. Nike can change stock between requests.

**Can I search by a style code or style-color code?** Yes. Put it in `searchQueries` or `styleCodes`; both resolve through Nike's public search and return the matching product. Nike By You pages are matched by their 10-digit style-color code (for example `6484638358`), not by the shorter style code shown on the page.

**Why are only three reviews returned?** Nike's public review endpoint exposes a rating summary, an AI summary and the three most recent reviews per style. The separate review actor in the Store covers deep review pagination.

**Why is a field missing from one record?** Nike does not publish every attribute for every product (for example, a size chart on an accessory). Empty values are omitted rather than pushed as null or sentinel text.

**What happens when a filter leaves nothing?** The run succeeds with an empty dataset and a status message explaining that no records matched; it never fabricates a placeholder row.

**Does the daily test hit the cheapest path?** Yes. The saved prefill is a two-item `air max` search with detail and review enrichment off.

# Actor input Schema

## `mode` (type: `string`):

What to fetch. `startUrls` auto-detects each pasted Nike search, category or product URL and overrides the other modes when provided.

## `searchQueries` (type: `array`):

One or more keywords, product names or style codes (e.g. `air max`, `dunk low`, `CW2288-111`). Used with mode=search.

## `country` (type: `string`):

Nike storefront market for search, category browsing and non-prefixed URLs. Prices are returned in the marketplace's local currency.

## `category` (type: `string`):

Curated Nike catalog category to browse. Works in every supported country; pass several categories by using `startUrls` with category links instead.

## `startUrls` (type: `array`):

Paste any nike.com search (`/w?q=...`), category (`/w/...`) or product (`/t/...` or `/u/...`) URLs. Locale-prefixed links such as `nike.com/gb/t/...` set the marketplace automatically. When supplied, these URLs override `mode`.

## `productUrls` (type: `array`):

Full Nike.com product page URLs, e.g. `https://www.nike.com/t/air-force-1-07-mens-shoes-jBrhbr/CW2288-111`. `/u/` Nike By You URLs are accepted too.

## `styleCodes` (type: `array`):

Nike style or style-color codes, e.g. `CW2288-111` or `CW2288`. The actor resolves each code to its Nike product page and returns full detail. For Nike By You products use the 10-digit style-color code (e.g. `6484638358`).

## `minPrice` (type: `integer`):

Drop products priced below this amount (current price, in the marketplace's currency).

## `maxPrice` (type: `integer`):

Drop products priced above this amount (current price, in the marketplace's currency).

## `minDiscount` (type: `integer`):

Keep only products discounted by at least this percentage. 0 disables the filter.

## `onSaleOnly` (type: `boolean`):

Only emit products with an active discount.

## `includeAllColorways` (type: `boolean`):

By default only the representative colorway shown on Nike's grid is emitted per style. Enable to emit every available colorway as its own record, each with its own real price, color, image and product URL.

## `includeProductDetails` (type: `boolean`):

For search, category and URL modes, fetch each listed product's detail page and add description, features, sizes, stock, images and all colorways. Adds one HTTP request per emitted record.

## `includeReviews` (type: `boolean`):

Add the product's rating, review count, AI review summary and the three most recent reviews. Applies to product details, or to listings when `includeProductDetails` is enabled.

## `gender` (type: `string`):

Filter to a single gender facet in search and pasted search URLs. Not supported by Nike's API for country=TH or TW; ignored there.

## `productType` (type: `string`):

Filter to a single Nike product type.

## `attributeFilter` (type: `string`):

Keep only products carrying a specific Nike merchandising tag. Applies to search, category and URL modes.

## `filters` (type: `array`):

Optional Nike facet labels, exactly as shown in the site's filter panel. Use `Group: Value` for an exact group, e.g. `Sports: Running`, `Color: Black`, `Brand: Nike`, `Width: Wide`, `Size: 10`, or a bare value such as `Running`. Unknown labels are skipped with a log warning.

## `sortBy` (type: `string`):

Order results. Nike's public wall API has no reliable server-side sort, so the actor sorts the fetched records locally.

## `maxItems` (type: `integer`):

Hard cap on emitted records across all queries, categories and URLs.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "air max"
  ],
  "country": "US",
  "startUrls": [],
  "productUrls": [],
  "styleCodes": [],
  "minDiscount": 0,
  "onSaleOnly": false,
  "includeAllColorways": false,
  "includeProductDetails": false,
  "includeReviews": false,
  "gender": "ANY",
  "productType": "ANY",
  "attributeFilter": "ANY",
  "filters": [],
  "sortBy": "featured",
  "maxItems": 2
}
```

# Actor output Schema

## `products` (type: `string`):

Dataset containing every scraped Nike product, one record per style-color (or per colorway with includeAllColorways).

# 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 = {
    "mode": "search",
    "searchQueries": [
        "air max"
    ],
    "country": "US",
    "startUrls": [],
    "productUrls": [],
    "styleCodes": [],
    "minDiscount": 0,
    "onSaleOnly": false,
    "includeAllColorways": false,
    "includeProductDetails": false,
    "includeReviews": false,
    "gender": "ANY",
    "productType": "ANY",
    "attributeFilter": "ANY",
    "filters": [],
    "sortBy": "featured",
    "maxItems": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("vexaloom-labs/nike-product-catalog-colorway-and-price-scraper").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 = {
    "mode": "search",
    "searchQueries": ["air max"],
    "country": "US",
    "startUrls": [],
    "productUrls": [],
    "styleCodes": [],
    "minDiscount": 0,
    "onSaleOnly": False,
    "includeAllColorways": False,
    "includeProductDetails": False,
    "includeReviews": False,
    "gender": "ANY",
    "productType": "ANY",
    "attributeFilter": "ANY",
    "filters": [],
    "sortBy": "featured",
    "maxItems": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("vexaloom-labs/nike-product-catalog-colorway-and-price-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "mode": "search",
  "searchQueries": [
    "air max"
  ],
  "country": "US",
  "startUrls": [],
  "productUrls": [],
  "styleCodes": [],
  "minDiscount": 0,
  "onSaleOnly": false,
  "includeAllColorways": false,
  "includeProductDetails": false,
  "includeReviews": false,
  "gender": "ANY",
  "productType": "ANY",
  "attributeFilter": "ANY",
  "filters": [],
  "sortBy": "featured",
  "maxItems": 2
}' |
apify call vexaloom-labs/nike-product-catalog-colorway-and-price-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vexaloom-labs/nike-product-catalog-colorway-and-price-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/rAtHpbmP3D6ZggkWJ/builds/37MRgzu9wsaOALrOH/openapi.json
