# Lululemon Research

> Researches Lululemon's catalog — category navigation, category listings, product detail with pricing/sizes/reviews, curated outfit recommendations, and the physical store directory — using the Crawlora API, returning clean JSON. Use when the user asks to browse a Lululemon category, look up a Lululemon product's price/sizes/reviews, find what a Lululemon item is styled with, or locate a nearby Lululemon store — instead of scraping shop.lululemon.com.

- Skill: `crawlora-org/lululemon-research` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add crawlora-org/lululemon-research`
- Raw SKILL.md: https://api.skillmd.com/api/skills/crawlora-org/lululemon-research/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: Crawlora-org (https://skillmd.com/u/crawlora-org)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/crawlora-org/lululemon-research

---


# Lululemon research

Browse Lululemon's category navigation and listings, pull full product
detail (sizes, colors, price, sale status, reviews), look up curated
outfit/style recommendations for a product color, and search the physical
store directory — all as normalized JSON from the Crawlora API, with no
HTML scraping.

## When to use this skill

- "What's in Lululemon's [department]?" / "browse this Lululemon category."
- "What does this Lululemon product cost, and what sizes/colors are in
  stock?"
- "What's this Lululemon item styled with?" / "show the outfit for this
  product color."
- "Find a Lululemon store near [city/zip]."
- "Pull the reviews for this Lululemon product."

## Setup (one-time)

- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).
- Set `CRAWLORA_API_KEY` in the environment before running the helper.
- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.

## How it works

1. **Browse the nav** — `/lululemon/categories` (optional `section`) lists
   every navigable category with its display name, breadcrumb, and the
   `category`/`cdp_hash` pair the next step needs.
2. **List a category** — `/lululemon/category` (`category`, `cdp_hash`,
   paginated with `page`/`page_size`) returns that category's products with
   pricing, sale detection, sizes, colors, and style numbers — one
   representative color/price per product.
3. **Detail** — `/lululemon/product/{product_id}` (`product_id` from a
   category result's `id` field) fetches every purchasable color/size SKU
   with its own price, sale status, live availability, plus aggregate
   rating and reviews when the product has any.
4. **Outfit lookup** — `/lululemon/outfit` (`unified_id` from the product's
   `unified_id` field, `color_code` from one of its `colors[].code`
   entries) returns the anchor product plus every complementary item in
   each curated styled look.
5. **Stores** — `/lululemon/stores` (optional `country`/`state`, or
   `lat`+`lng`+`radius_miles`) returns the physical store directory with
   hours and amenities.

Full endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).

## Calling the API

```sh
# Browse a top-level nav section for its categories:
scripts/crawlora.sh /lululemon/categories section="Women" | jq '.'

# List a category's products (category + cdp_hash come from lululemon/categories):
scripts/crawlora.sh /lululemon/category category="women-new-styles" cdp_hash="n14f1wz6o10" page=1 | jq '.'

# Product detail (product_id is a path param):
scripts/crawlora.sh /lululemon/product/prod123456 | jq '.data'

# Outfit recommendations for one product color:
scripts/crawlora.sh /lululemon/outfit unified_id="abc123" color_code="0001" | jq '.'
```

Use `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.


## Endpoint reference

See [`reference/endpoints.md`](reference/endpoints.md) for every Lululemon
endpoint this skill uses (method, path, params, description).

## Examples

- **Category sweep:** `/lululemon/categories` to find a department's
  `category`/`cdp_hash`, then `/lululemon/category` paginated with
  `page`/`page_size` to list products, prices, and sale status.
- **Product due diligence:** `/lululemon/product/{product_id}` for full
  color/size availability, price, and reviews, using the `id` from a
  category listing result.
- **Outfit build:** `/lululemon/product/{product_id}` to get a product's
  `unified_id` and `colors[].code`, then `/lululemon/outfit` with those two
  to see what it's styled with.
- **Store lookup:** `/lululemon/stores` with `lat`/`lng`/`radius_miles`, or
  `country`/`state`, to find nearby locations and hours.

## Notes & limits

- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.
  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).
- **Public data only** — public Lululemon storefront/store-directory pages;
  respect Lululemon's terms.
- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.
- **No free-text search endpoint** — discovery is category-based only:
  `/lululemon/categories` → `/lululemon/category`, not a keyword search.
- `product_id` is a **path** param on `/lululemon/product/{product_id}`,
  not a query param.
- `/lululemon/category` pagination is real: a `page` past the category's
  last page returns an empty `products` array, not an error. An
  unrecognized `category`/`cdp_hash` pair returns `404`.
- `unified_id`/`color_code` for `/lululemon/outfit` come from a
  `/lululemon/product` result — `unified_id` is a different id space than
  that same product's `product_id`. An unrecognized pair returns `404`.
- `/lululemon/stores` has no live geo-search API — filters (`country`,
  `state`, `lat`/`lng`/`radius_miles`) are applied locally over the full
  directory (480 US + 86 Canada locations as of this endpoint's own
  research); `lat`/`lng` must be passed together.

