Tony Wang6 min readHow to Scrape Nike in 2026 (API & Python)
Scrape Nike in 2026 — product search, full detail per colorway, and the Men/Women/Kids/Jordan category tree — DIY, no-code, or a structured API.
The fastest way to scrape Nike in 2026 is to call a structured API that returns normalized JSON for keyword search, full product detail per colorway, and the complete Men/Women/Kids/Jordan category taxonomy — instead of parsing Nike.com's pages yourself. Nike.com is browsable without an account, but there's no self-serve public API, real bot-detection infrastructure fronts the storefront, and Nike's Terms of Use name scraping directly and enforce bot bans unusually aggressively on SNKRS. This guide covers all three approaches, what each returns, where DIY breaks, and the legal reality up front.
Why scrape Nike?
Nike's product and catalog data powers:
- Pricing and drop intelligence — track how a model's price and colorway lineup moves over time, including ahead of a new release.
- Size and stock monitoring — watch a specific colorway's size run for restocks or sellouts.
- Colorway and retro tracking — Jordan retros and limited colorways move fast; catalog which
style_colorcombinations exist and when new ones appear. - Assortment research — map product coverage across the Men, Women, Kids, and Jordan lines.
- Competitive benchmarking — compare Nike's catalog and pricing against other athletic and sneaker retailers.
Is it legal to scrape Nike?
Option 1: DIY in Python (and why it breaks)
Nike's product pages render from embedded page state rather than a stable public JSON endpoint, so a DIY scraper has to fetch and parse the rendered page:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.nike.com/t/air-force-1-07-mens-shoes-jBrhbr/DD1391-100",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Price, size availability, and every other colorway live in embedded
# page state, not consistently exposed as selectable markup
It demos and then breaks:
- The Terms of Use are explicit. Nike names "data mining, robots, scraping, or similar data gathering and extraction methods" directly and requires honoring robots.txt — this isn't an ambiguous case.
- Real bot-detection infrastructure fronts the site. A routine, unauthenticated scraper gets challenged quickly, and a browser-based approach needs ongoing upkeep as the defense updates — and SNKRS specifically bans bots through interaction analysis, account verification, and IP reputation checks.
- Every colorway is its own product record. A single page fetch gets you one
style_color's data; the full picture — every size, every other available color — means resolving each variant separately, and the slug/style_colorpairing isn't obvious from the URL alone. - No self-serve public API. There's no official developer program to request programmatic access as an outside developer.
Option 2: No-code tools
Marketplace scraper actors for Nike exist and suit a one-off pull of a product page or a short list, but they inherit the same bot-detection fragility as DIY and don't give you a stable, versioned schema to build a pipeline on.
Option 3: A structured Nike API
For a repeatable workflow, Crawlora's Nike API returns normalized JSON for search, product detail, and categories — no page parsing or bot-defense upkeep. Search by keyword:
curl "https://api.crawlora.net/api/v1/nike/search?query=air%20force%201" \
-H "x-api-key: $CRAWLORA_API_KEY"
Then resolve a slug and style_color from a search hit's colors[] array and pull full detail in Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/nike"
hits = requests.get(f"{base}/search", headers=h, params={"query": "air force 1"}).json()["data"]["products"]
product = hits[0]
slug = product["slug"]
style_color = product["colors"][0]["style_color"]
detail = requests.get(
f"{base}/product",
headers=h,
params={"slug": slug, "style_color": style_color},
).json()["data"]
categories = requests.get(f"{base}/categories", headers=h).json()["data"]["categories"]
A search response is normalized JSON with pricing and every colorway per product (real fields — check the docs):
{
"code": 200,
"msg": "OK",
"data": {
"query": "air force 1",
"page": 1,
"total": 214,
"products": [
{
"slug": "nike-air-force-1-07",
"title": "Nike Air Force 1 '07",
"subtitle": "Men's Shoes",
"price": { "current": 115, "original": 115, "currency": "USD" },
"colors": [
{
"style_color": "DD1391-100",
"color_description": "White",
"image_url": "https://static.nike.com/a/images/t_default/af1-07-white.png"
},
{
"style_color": "CW2288-111",
"color_description": "White/White",
"image_url": "https://static.nike.com/a/images/t_default/af1-07-triple-white.png"
}
]
}
]
}
}
Product detail resolves one exact slug + style_color pair into every size and every other available color for that variant:
{
"data": {
"slug": "nike-air-force-1-07",
"style_color": "DD1391-100",
"title": "Nike Air Force 1 '07",
"color_description": "White",
"price": { "current": 115, "original": 115, "currency": "USD" },
"sizes": [
{ "size": "7", "available": true, "sku": "DD1391-100-070" },
{ "size": "7.5", "available": true, "sku": "DD1391-100-075" },
{ "size": "8", "available": false, "sku": "DD1391-100-080" }
],
"other_colors": [
{ "style_color": "CW2288-111", "color_description": "White/White" },
{ "style_color": "315122-111", "color_description": "White/Black" }
]
}
}
/nike/categories returns the full taxonomy — every Men, Women, Kids, and Jordan category and subcategory as a browsable slug:
{
"data": {
"categories": [
{
"name": "Men",
"slug": "men",
"subcategories": [
{ "name": "Shoes", "slug": "men/shoes" },
{ "name": "Jordan", "slug": "men/jordan" }
]
},
{
"name": "Jordan",
"slug": "jordan",
"subcategories": [
{ "name": "Retro", "slug": "jordan/retro" }
]
}
]
}
}
Store one row per slug/style_color pair and re-run on a schedule to track price moves and size-availability changes ahead of a drop.
What you can collect
Public storefront data per endpoint: paginated, normalized search results keyed by slug, with pricing and every colorway in colors[] (style_color, color_description, image_url); full product detail for one color variant given slug and style_color — every offered size, pricing, and every other available color; and the complete Men/Women/Kids/Jordan category and subcategory tree, each with a browsable slug. Public product-page data only — not SNKRS release-entry mechanics, account information, or order data.
Limitations and common challenges
- Search isn't a guaranteed keyword match. Nike's own search index falls back to recommended results for an obscure or nonsense query instead of returning empty, and the API mirrors that behavior — treat a non-empty result as "closest match," not confirmation the keyword exists in the catalog. Only a punctuation-only query returns a genuine empty result.
- Colorway fan-out. Full detail requires both a
slugand astyle_color, both sourced from a search hit — there's no single call that returns every size for every colorway of a product at once. - Real bot-detection infrastructure on the front end. Expect challenges on naive or high-volume automated requests to nike.com directly, and expect SNKRS specifically to enforce bot bans through interaction analysis, account verification, and IP reputation checks.
- No self-serve public API. There's no official developer program to request programmatic access to Nike's storefront data as an outside developer.
- Public data only. This is what a product page already shows publicly — never a way to automate a SNKRS entry or purchase, or reach account or order information.
Where this gets used
- Pricing and drop intelligence — track price and colorway lineup changes on key models over time.
- Size and stock monitoring — watch a colorway's size run for restocks or sellouts.
- Catalog and taxonomy mapping — mirror Nike's Men/Women/Kids/Jordan category tree for internal search or competitive benchmarking.
Sources
Start collecting
Try it first, free: run any public URL through the Free Web Scraper, or check whether a site blocks bots with the Anti-Bot Checker — no signup.
Test the search, product, and category endpoints in the Playground, check the schema in the API docs, and review pricing. For the same single-brand-retailer pattern on fast fashion, see how to scrape Zara; for the general-merchandise version of this problem, see how to scrape Target and how to scrape Walmart. See also how to choose a web scraping API and is web scraping legal.
Part of our how-to-scrape guide series — every platform we cover, in one index.
Frequently asked questions
How do I search Nike products with an API?
Send a keyword to Crawlora's /nike/search endpoint and get paginated, normalized product groups with pricing and colorway images as structured JSON, no Nike account required.
Can I get every size and color for a Nike product?
Yes — /nike/product returns every offered size for one color variant plus every other available color, given the slug and style_color from a search result.
Is Nike's search a guaranteed keyword match?
No — Nike's own search index falls back to recommended results for an obscure or nonsense keyword instead of returning empty, and the API mirrors that behavior. A punctuation-only query does return a genuine empty result.