Lululemon APIshop.lululemon.com ↗
Access lululemon's product catalog via API: browse categories, list products with filters, get product details, new arrivals, sale items, and recommendations.
What is the Lululemon API?
The lululemon API exposes 6 endpoints covering product discovery across shop.lululemon.com, from browsing category listings with faceted filtering to retrieving full SKU-level product details. get_category_products returns up to 40 products per page with price, swatch, highlight, and pagination data. get_product_details delivers variant-level information including all SKUs, colors, inseam options, and availability for a single product ID.
curl -X GET 'https://api.parse.bot/scraper/d591fba8-3d9a-475c-b36b-1a0982d0c854/get_category_products?page=1&sort=Top+Rated&limit=5&n_value=n1udsq&category=women-leggings' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace shop-lululemon-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.lululemon_api import Lululemon, Category, Sort
client = Lululemon()
# Discover available categories
for category in client.categories.list():
print(category.label, category.slug, category.n_value)
# Browse products in a specific category sorted by new arrivals
leggings = Category(_api=client, slug="women-leggings", n_value="n1udsq")
for product in leggings.products(sort=Sort.NEW_ARRIVALS, limit=5):
print(product.displayName, product.listPrice, product.pdpUrl)
# Get top recommended products
for rec in client.recommendedproducts.list(limit=5):
print(rec.displayName, rec.listPrice, rec.salePrice)
# Check latest new arrivals
new_arrivals = client.newarrivals.get()
print(new_arrivals.total_products, new_arrivals.total_pages)
for product in new_arrivals.products:
print(product.displayName, product.productSalePrice)
# Check sale items
sale = client.salecollections.get()
print(sale.total_products, sale.total_pages)
for product in sale.products:
print(product.displayName, product.listPrice, product.productSalePrice)
List products in a category with pagination and sorting. Requires a category slug and its corresponding navigation state ID (n_value). Use get_categories to discover valid category/n_value pairs. Returns up to 40 products per page with facets for further filtering.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number |
| sort | string | Sort option. |
| limit | integer | Number of products per page (page size) |
| n_value | string | Navigation state ID for the category (e.g., 'n1udsq' for women-leggings). Required for most categories to return results. Obtain from get_categories endpoint. |
| categoryrequired | string | Category slug (e.g., 'women-leggings', 'whats-new', 'we-made-too-much') |
{
"type": "object",
"fields": {
"facets": "array of filter facets with refinements",
"products": "array of product objects with displayName, listPrice, productSalePrice, pdpUrl, productId, unifiedId, highlights, swatches",
"breadcrumbs": "array of breadcrumb navigation items",
"total_pages": "integer total number of pages",
"total_products": "integer total number of products in category"
},
"sample": {
"data": {
"facets": [
{
"name": "Size",
"type": "RefinementMenu",
"refinements": [
{
"count": 546,
"label": "0",
"isSelected": false,
"navigationState": "/women-leggings/n12ufqzudsq"
}
],
"dimensionName": "product.sizes",
"selectedCount": 0
}
],
"products": [
{
"pdpUrl": "/p/lululemon-align-no-line-high-rise-pant-25-waist/gavgesv386",
"swatches": [
{
"url": "/p/lululemon-align-no-line-high-rise-pant-25-waist/gavgesv386?color=33476",
"colorId": "33476",
"hoverImage": "https://images.lululemon.com/is/image/lululemon/LW5IZ3S_033476_2",
"primaryImage": "https://images.lululemon.com/is/image/lululemon/LW5IZ3S_033476_1"
}
],
"listPrice": [
"118"
],
"productId": "gavgesv386",
"unifiedId": "lululemon-Align-No-Line-High-Rise-Pant-25-Waist",
"highlights": [],
"displayName": "lululemon Align No Line High-Rise Pant 25\" *Waist",
"productSalePrice": []
}
],
"breadcrumbs": [
{
"label": "Women's Clothes",
"contentPath": "/c",
"navigationState": "/women-clothes/n14uwk"
}
],
"total_pages": 4,
"total_products": 147
},
"status": "success"
}
}About the Lululemon API
Browsing Categories and Products
get_categories returns a curated list of category objects, each with a label, slug, and n_value. That n_value is a navigation state ID required by get_category_products to return correctly scoped results for most categories. get_category_products accepts a category slug (e.g. women-leggings) and the corresponding n_value, and supports page, limit, and sort parameters. Each response includes a products array with fields like displayName, listPrice, productSalePrice, pdpUrl, productId, unifiedId, highlights, and swatches, alongside facets for filter refinement, breadcrumbs, total_pages, and total_products.
Product Details and Variants
get_product_details takes a product_id (e.g. prod11020158) and returns a product object containing productSummary, skus, variants, colors, highlights, category, allInseam, and allLocalePids. This is the endpoint to use when you need size/color availability, exact SKU codes, or per-variant pricing for a known product.
Specialized Feeds
get_whats_new and get_sale_products are pre-scoped category feeds. get_whats_new returns the current new arrivals with the same product fields and facets as get_category_products. get_sale_products returns markdown items from the "We Made Too Much" section — useful for tracking discounted inventory since each product exposes both listPrice and productSalePrice. get_related_products returns site-wide recommended products with id, productId, displayName, listPrice, salePrice, and pdpUrl, and accepts a limit parameter to control result count.
The Lululemon API is a managed, monitored endpoint for shop.lululemon.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when shop.lululemon.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official shop.lululemon.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price comparison tool that tracks
listPricevsproductSalePriceacross theget_sale_productsfeed over time. - Populate a product search index by iterating
get_categoriesand paging throughget_category_productsfor each slug. - Monitor new arrivals daily using
get_whats_newand alert when specific product types or colors appear in theswatchesfield. - Display variant-level size and color availability in a third-party shopping app using
get_product_detailsSKU data. - Surface personalized product picks in a fitness content app by pulling
get_related_productsrecommendations. - Filter athletic wear by facet values returned from
get_category_productsto narrow results by size, color, or feature. - Aggregate
highlightsfield content across categories to analyze how lululemon describes product features and technologies.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does lululemon have an official public developer API?+
What does get_product_details return beyond basic pricing?+
get_product_details returns the full skus array with variant-level data, colors, allInseam options, allLocalePids for locale-specific product IDs, and highlights. This makes it suitable for building size/color selectors or checking per-variant availability, not just top-level price and name.How does pagination work in get_category_products?+
total_pages and total_products in every response. Use the page parameter to step through results and limit to set page size up to 40 products. Combine with n_value and a valid category slug — omitting n_value may return incomplete or empty results for most category pages.Does the API return customer reviews or ratings for products?+
displayName, listPrice, highlights, skus, and swatches, but does not expose review text, star ratings, or review counts. You can fork this API on Parse and revise it to add an endpoint targeting product review data.Is inventory or stock status available at the SKU level?+
get_product_details returns the skus object which includes variant data, but real-time in-stock/out-of-stock flags are not guaranteed to be present for every SKU. The API reflects catalog-level data; live fulfillment availability may not be fully exposed. You can fork this API on Parse and revise it to surface stock status fields if they appear in the product response.