# Foot Locker Product Scraper (`crawlerbros/footlocker-product-scraper`) Actor

Scrape live sneaker, apparel, and accessory listings from Footlocker.com - search by keyword, browse by department/category or brand, or look up full product detail (price, rating, colors, images) by URL. No login required.

- **URL**: https://apify.com/crawlerbros/footlocker-product-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Foot Locker Product Scraper

Scrape **Footlocker.com, Footlocker.ca, and Footlocker.com.au** — live sneaker, apparel, and accessory listings across all 3 storefronts. Search by keyword, browse by department/category or brand, or fetch full product detail (price, rating, colors, sizes, images) by URL. No login required.

### What this actor does

- **Four modes:** `search`, `browseByCategory`, `browseByBrand`, `productDetail`
- **3 markets:** United States (`footlocker.com`), Canada (`footlocker.ca`), Australia (`footlocker.com.au`) — identical URL/data structure across all 3
- **9 department/category shortcuts** — Men's, Women's, and Kids' shoes, clothing, and accessories
- **28 curated brands** — Nike, Jordan, adidas, New Balance, ASICS, and more
- **Filters:** price range, minimum rating, on-sale-only, new-arrivals-only
- **Sort:** relevance, price (low/high), new arrivals, name/brand (A-Z), rating, most reviewed — price/new-arrivals/name/brand are genuinely ranked by Foot Locker's own server across the full catalog for `search`/`browseByBrand` (not just a re-shuffle of one fetched page)
- **Full product detail:** all color variants, description, image, plus gender/category, style code, width, and in-stock sizes parsed from the page's own product-state data
- **Empty fields are omitted**

### Output per product

- `sku` — Foot Locker's product SKU
- `productName`, `brandName`
- `price` — current selling price (local currency)
- `originalPrice`, `percentOff`, `onSale`
- `averageRating` (1–5), `reviewCount`
- `gender` (Men's / Women's / Kids')
- `color`, `availableColors[]` (product detail only)
- `description` (product detail only)
- `productCategory`, `productSubCategory` (product detail only — e.g. `Shoes` / `Casual Sneakers`)
- `styleCode`, `width` (product detail only)
- `isNewProduct`, `isSaleProduct` (product detail only)
- `availableSizes[]` — in-stock sizes only (product detail only)
- `inStock`, `availability`
- `imageUrl`
- `productUrl`
- `recordType: "product"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `market` | string | `US` | `US` (footlocker.com) / `CA` (footlocker.ca) / `AU` (footlocker.com.au) |
| `mode` | string | `search` | `search` / `browseByCategory` / `browseByBrand` / `productDetail` |
| `searchQuery` | string | `running shoes` | Free-text keyword search (mode=search) |
| `category` | string | `mens-shoes` | Department + category to browse (mode=browseByCategory) |
| `brand` | string | `Nike` | Brand to browse (mode=browseByBrand) |
| `productUrls` | array | – | Foot Locker product page URLs from any of the 3 markets (mode=productDetail) |
| `minPrice` / `maxPrice` | int | – | Price range in local currency |
| `minRating` | int | – | Drop products rated below this (1–5) |
| `onSaleOnly` | bool | `false` | Only emit discounted products (server-side for search/browseByBrand) |
| `newArrivalsOnly` | bool | `false` | Only emit new-arrival products (search/browseByBrand only) |
| `sortBy` | string | `relevance` | Result sort order — see FAQ for which options are server-ranked vs. client-side |
| `maxItems` | int | `20` | Hard cap (1–300) — see FAQ for a real per-query ceiling of ~48 products |

#### Example: search with price and rating filters

```json
{
  "mode": "search",
  "searchQuery": "Jordan 1",
  "minPrice": 80,
  "maxPrice": 250,
  "minRating": 4,
  "maxItems": 30
}
````

#### Example: browse a category, on sale only

```json
{
  "mode": "browseByCategory",
  "category": "womens-shoes",
  "onSaleOnly": true,
  "sortBy": "priceLowToHigh",
  "maxItems": 50
}
```

#### Example: browse a brand

```json
{
  "mode": "browseByBrand",
  "brand": "New Balance",
  "maxItems": 30
}
```

#### Example: product detail by URL

```json
{
  "mode": "productDetail",
  "productUrls": [
    "https://www.footlocker.com/product/asics-gel-1130-mens/1A906001.html"
  ]
}
```

#### Example: browse Canada, cheapest genuinely-cheapest-first

```json
{
  "mode": "browseByBrand",
  "market": "CA",
  "brand": "Nike",
  "sortBy": "priceLowToHigh",
  "maxItems": 30
}
```

`priceLowToHigh` here is ranked by Foot Locker's own server across Nike's *entire* catalog — not just re-sorted among whatever one page happened to return.

#### Example: new arrivals only, in the US

```json
{
  "mode": "search",
  "searchQuery": "running shoes",
  "newArrivalsOnly": true,
  "sortBy": "newArrivals",
  "maxItems": 30
}
```

### Use cases

- **Price monitoring** — track Foot Locker sale prices and discount depth over time
- **Assortment research** — see which brands and models dominate each category
- **Sneaker release tracking** — monitor new arrivals and restocks by brand
- **Review analytics** — pull rating and review-count trends by brand or shoe model
- **Competitive intelligence** — compare footwear pricing/ratings against other retailers

### FAQ

**Is this affiliated with Foot Locker?** No — this is an independent, third-party actor that reads Foot Locker's public website. It is not endorsed by or affiliated with Foot Locker, Inc.

**Do I need a Foot Locker account or cookies?** No. All modes work against publicly browsable pages — no login required.

**How is `brandName` determined on listing records?** Foot Locker's search/category cards don't expose brand as a separate field, only inside the product name (e.g. "ASICS® GEL-1130"). The actor matches the product name against a curated list of known Foot Locker brands. On `productDetail`, brand comes directly from Foot Locker's own structured product data instead.

**Why does `browseByBrand` use search internally?** Foot Locker doesn't expose a stable, crawlable brand-only listing URL, so the actor searches the brand name plus "shoes" (a bare brand-name query like "New Balance" reliably returns an empty product grid on Foot Locker's own search) and keeps only records whose `brandName` matches.

**What counts as "on sale"?** Any product where Foot Locker displays a discounted price below the original listed price. For `search`/`browseByBrand`, `onSaleOnly` is also applied as a genuine server-side catalog filter before fetching, in addition to the client-side check — the client-side check is the final authority, so a record is only ever emitted with `onSale: true` if its card actually shows a markdown. Note this means `onSaleOnly` combined with `newArrivalsOnly` can legitimately return 0 records even when Foot Locker reports a non-zero match count server-side: Foot Locker's discount-eligibility facet is broader than "currently showing a markdown" (it also includes items only eligible for checkout promo codes), and the intersection with new arrivals is often small.

**Which `sortBy` options are truly catalog-wide vs. just re-sorting one page?** For `search` and `browseByBrand`, `priceLowToHigh`, `priceHighToLow`, `newArrivals`, `nameAtoZ`, and `brandAtoZ` are passed straight to Foot Locker's own search ranking and reflect the full matching catalog. `ratingHighToLow` and `mostReviewed` have no working server-side equivalent on Foot Locker's search (confirmed live — several plausible rating-sort codes were tested and all silently fall back to relevance order), so those two remain a client-side re-sort of the fetched page only. For `browseByCategory`, **every** `sortBy` option is client-side only — Foot Locker's category pages ignore both the sort-suffix search syntax and a `?sort=` query parameter (confirmed live).

**Why is `newArrivalsOnly` scoped to `search`/`browseByBrand` only?** Foot Locker's category pages (`/category/<dept>/<type>.html`) don't support the same query-based facet syntax that search does; there's no confirmed working way to filter new arrivals server-side on `browseByCategory`, and there's no reliable per-item "new" signal on category listing cards to filter client-side either. Use `mode=search` with a category-like keyword (e.g. `"running shoes"`) plus `newArrivalsOnly: true` instead.

**What markets are supported?** United States (`footlocker.com`), Canada (`footlocker.ca`), and Australia (`footlocker.com.au`) — all three use the identical page structure. `footlocker.eu` is a thin redirect page with no real storefront and is not supported. Note: Foot Locker Australia's own search engine is inconsistent with single-word queries (e.g. `"shoes"` or `"nike"` alone can return 0 results) — use multi-word phrases (e.g. `"nike shoes"`, `"running sneakers"`) for reliable AU search results; `browseByCategory` and `browseByBrand` are unaffected.

**What does `productDetail` enrichment add beyond the basic fields?** Foot Locker product pages embed a second data block (their internal page-state snapshot) alongside the standard structured product data. The actor parses it to add `gender`, `productCategory`/`productSubCategory`, `styleCode`, `width`, `isNewProduct`, `isSaleProduct`, and `availableSizes` (in-stock sizes only — impossible to derive from the standard structured data, which has no size information at all). This is purely additive: if that data block is ever missing or malformed on a given page, the standard fields still populate exactly as before with no missing/broken output. Release date and related/cross-sell products were investigated but are not present in either data source, so they're not included.

**How fresh is the data?** Real-time — every run loads the live Foot Locker page.

**Why do I get at most ~48 products from a single `search`/`browseByCategory`/`browseByBrand` run, even with a higher `maxItems`?** Foot Locker's own listing pages serve a single fixed-size page of roughly 48 products per query/category/brand, and there's no working server-side pagination for non-browser clients — every page-number/page-size variant Foot Locker's own site uses returns that identical first set of products. `maxItems` caps how many of that page's products are emitted (useful for narrowing down), but it cannot pull in more than Foot Locker itself returns for that one query. To collect more products, run additional queries — a more specific keyword, a different category, or a different brand — and merge the results, or use `productDetail` with a list of specific URLs.

# Actor input Schema

## `market` (type: `string`):

Which Foot Locker storefront to scrape. All 3 markets use the identical search/category/product URL structure. Applies to every mode.

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

What to fetch from Foot Locker.

## `searchQuery` (type: `string`):

Free-text keyword search, e.g. `running shoes`, `Jordan 1`, `hoodie`.

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

Department + product type to browse.

## `brand` (type: `string`):

Brand name to browse, e.g. `Nike`, `Jordan`, `adidas`, `New Balance`.

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

Foot Locker product page URLs from any of the 3 supported markets, e.g. `https://www.footlocker.com/product/asics-gel-1130-mens/1A906001.html` (US) or `https://www.footlocker.ca/en/product/jordan-retro-5-mens/41587008.html` (CA). A URL's own market always overrides the `market` field above; only bare SKUs / relative paths resolve against `market`.

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

Drop products cheaper than this.

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

Drop products pricier than this.

## `minRating` (type: `integer`):

Drop products rated below this.

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

Only emit products currently discounted below the original price. For `search`/`browseByBrand`, this is applied as a genuine catalog-wide server-side filter (not just a page-1 filter); a client-side check is also kept as a safety net for all modes.

## `newArrivalsOnly` (type: `boolean`):

Only emit products Foot Locker currently flags as new arrivals. Applied as a genuine catalog-wide server-side filter for `search` and `browseByBrand` only — Foot Locker's category pages don't support this filter, so it has no effect on `browseByCategory`.

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

Result sort order. For `search`/`browseByBrand`, `priceLowToHigh`/`priceHighToLow`/`newArrivals`/`nameAtoZ`/`brandAtoZ` are ranked by Foot Locker's own server across the FULL catalog (not just the fetched page); `ratingHighToLow`/`mostReviewed` have no working server equivalent and are applied client-side to the fetched page only. For `browseByCategory`, every option is applied client-side only (Foot Locker's category pages ignore both the sort-suffix and `?sort=` query param).

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

Hard cap on emitted records. NOTE: footlocker.com's search/browse pages serve a single fixed-size page of ~48 products per query with no working server-side pagination for non-browser clients (confirmed: the `currentPage` URL parameter its own "next page" links use, and common pageSize/limit variants, are all silently ignored — every value returns the identical first 48 results). A single search/browseByBrand/browseByCategory call is capped at that page's real product count regardless of this setting; request a more specific query/category or a different sort to see a different set of ~48 products.

## `proxyConfiguration` (type: `object`):

Optional Apify proxy. The actor does not require a proxy for normal operation; you can enable the free Datacenter (AUTO) group if you see blocked runs.

## Actor input object example

```json
{
  "market": "US",
  "mode": "search",
  "searchQuery": "running shoes",
  "category": "mens-shoes",
  "brand": "Nike",
  "productUrls": [],
  "onSaleOnly": false,
  "newArrivalsOnly": false,
  "sortBy": "relevance",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Dataset containing all scraped Foot Locker products.

# 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 = {
    "market": "US",
    "mode": "search",
    "searchQuery": "running shoes",
    "category": "mens-shoes",
    "brand": "Nike",
    "productUrls": [],
    "onSaleOnly": false,
    "newArrivalsOnly": false,
    "sortBy": "relevance",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/footlocker-product-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 = {
    "market": "US",
    "mode": "search",
    "searchQuery": "running shoes",
    "category": "mens-shoes",
    "brand": "Nike",
    "productUrls": [],
    "onSaleOnly": False,
    "newArrivalsOnly": False,
    "sortBy": "relevance",
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/footlocker-product-scraper").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 '{
  "market": "US",
  "mode": "search",
  "searchQuery": "running shoes",
  "category": "mens-shoes",
  "brand": "Nike",
  "productUrls": [],
  "onSaleOnly": false,
  "newArrivalsOnly": false,
  "sortBy": "relevance",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call crawlerbros/footlocker-product-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Foot Locker Product Scraper",
        "description": "Scrape live sneaker, apparel, and accessory listings from Footlocker.com - search by keyword, browse by department/category or brand, or look up full product detail (price, rating, colors, images) by URL. No login required.",
        "version": "1.0",
        "x-build-id": "ghk5wFOxMqkeEdLwU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~footlocker-product-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-footlocker-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/crawlerbros~footlocker-product-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-footlocker-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/crawlerbros~footlocker-product-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-footlocker-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "market": {
                        "title": "Market",
                        "enum": [
                            "US",
                            "CA",
                            "AU"
                        ],
                        "type": "string",
                        "description": "Which Foot Locker storefront to scrape. All 3 markets use the identical search/category/product URL structure. Applies to every mode.",
                        "default": "US"
                    },
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "browseByCategory",
                            "browseByBrand",
                            "productDetail"
                        ],
                        "type": "string",
                        "description": "What to fetch from Foot Locker.",
                        "default": "search"
                    },
                    "searchQuery": {
                        "title": "Search query (mode=search)",
                        "type": "string",
                        "description": "Free-text keyword search, e.g. `running shoes`, `Jordan 1`, `hoodie`.",
                        "default": "running shoes"
                    },
                    "category": {
                        "title": "Category (mode=browseByCategory)",
                        "enum": [
                            "mens-shoes",
                            "mens-clothing",
                            "mens-accessories",
                            "womens-shoes",
                            "womens-clothing",
                            "womens-accessories",
                            "kids-shoes",
                            "kids-clothing",
                            "kids-accessories"
                        ],
                        "type": "string",
                        "description": "Department + product type to browse.",
                        "default": "mens-shoes"
                    },
                    "brand": {
                        "title": "Brand (mode=browseByBrand)",
                        "enum": [
                            "Nike",
                            "Jordan",
                            "adidas",
                            "New Balance",
                            "ASICS",
                            "PUMA",
                            "Reebok",
                            "Converse",
                            "Vans",
                            "Under Armour",
                            "Champion",
                            "FILA",
                            "Timberland",
                            "Skechers",
                            "Crocs",
                            "On",
                            "HOKA",
                            "Birkenstock",
                            "Saucony",
                            "Brooks",
                            "The North Face",
                            "Columbia",
                            "Levi's",
                            "Dr. Martens",
                            "UGG",
                            "Kappa",
                            "New Era",
                            "Mitchell & Ness"
                        ],
                        "type": "string",
                        "description": "Brand name to browse, e.g. `Nike`, `Jordan`, `adidas`, `New Balance`.",
                        "default": "Nike"
                    },
                    "productUrls": {
                        "title": "Product URLs (mode=productDetail)",
                        "type": "array",
                        "description": "Foot Locker product page URLs from any of the 3 supported markets, e.g. `https://www.footlocker.com/product/asics-gel-1130-mens/1A906001.html` (US) or `https://www.footlocker.ca/en/product/jordan-retro-5-mens/41587008.html` (CA). A URL's own market always overrides the `market` field above; only bare SKUs / relative paths resolve against `market`.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "minPrice": {
                        "title": "Min price (USD)",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Drop products cheaper than this."
                    },
                    "maxPrice": {
                        "title": "Max price (USD)",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Drop products pricier than this."
                    },
                    "minRating": {
                        "title": "Min product rating (1-5)",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Drop products rated below this."
                    },
                    "onSaleOnly": {
                        "title": "On sale only",
                        "type": "boolean",
                        "description": "Only emit products currently discounted below the original price. For `search`/`browseByBrand`, this is applied as a genuine catalog-wide server-side filter (not just a page-1 filter); a client-side check is also kept as a safety net for all modes.",
                        "default": false
                    },
                    "newArrivalsOnly": {
                        "title": "New arrivals only (mode=search, browseByBrand)",
                        "type": "boolean",
                        "description": "Only emit products Foot Locker currently flags as new arrivals. Applied as a genuine catalog-wide server-side filter for `search` and `browseByBrand` only — Foot Locker's category pages don't support this filter, so it has no effect on `browseByCategory`.",
                        "default": false
                    },
                    "sortBy": {
                        "title": "Sort results by",
                        "enum": [
                            "relevance",
                            "priceLowToHigh",
                            "priceHighToLow",
                            "ratingHighToLow",
                            "mostReviewed",
                            "newArrivals",
                            "nameAtoZ",
                            "brandAtoZ"
                        ],
                        "type": "string",
                        "description": "Result sort order. For `search`/`browseByBrand`, `priceLowToHigh`/`priceHighToLow`/`newArrivals`/`nameAtoZ`/`brandAtoZ` are ranked by Foot Locker's own server across the FULL catalog (not just the fetched page); `ratingHighToLow`/`mostReviewed` have no working server equivalent and are applied client-side to the fetched page only. For `browseByCategory`, every option is applied client-side only (Foot Locker's category pages ignore both the sort-suffix and `?sort=` query param).",
                        "default": "relevance"
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Hard cap on emitted records. NOTE: footlocker.com's search/browse pages serve a single fixed-size page of ~48 products per query with no working server-side pagination for non-browser clients (confirmed: the `currentPage` URL parameter its own \"next page\" links use, and common pageSize/limit variants, are all silently ignored — every value returns the identical first 48 results). A single search/browseByBrand/browseByCategory call is capped at that page's real product count regardless of this setting; request a more specific query/category or a different sort to see a different set of ~48 products.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify proxy. The actor does not require a proxy for normal operation; you can enable the free Datacenter (AUTO) group if you see blocked runs.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
