Apparel catalog and pricing monitoring
Use J.Crew endpoints to turn apparel catalog and pricing monitoring into repeatable API requests with documented inputs and JSON responses.
Turn J.Crew's and J.Crew Factory's own storefront data into structured apparel data — category browsing, keyword search with live facets, full product detail with every color+size SKU, size charts with real body measurements, customer reviews, and store locator data, all as normalized JSON. Credential-free.
Search J.Crew or J.Crew Factory products and get full product detail — pricing, size charts, reviews, and store locations — as structured JSON.
Endpoint families
6
Documented params
31
Examples
8
Live catalog snapshot
Active endpoints
8
Methods
GET
Required params
14
Schema refs
8
{
"platform": "J.Crew",
"endpoint": "jcrew-search",
"method": "GET",
"path": "/jcrew/search",
"auth": "apiKey"
}Use cases
Search J.Crew or J.Crew Factory products and get full product detail — pricing, size charts, reviews, and store locations — as structured JSON.
Use J.Crew endpoints to turn apparel catalog and pricing monitoring into repeatable API requests with documented inputs and JSON responses.
Use J.Crew endpoints to turn size and fit data collection into repeatable API requests with documented inputs and JSON responses.
Use J.Crew endpoints to turn store locator and review tracking into repeatable API requests with documented inputs and JSON responses.
Managed execution
Crawlora's J.Crew API is designed around J.Crew's own data surface, not a generic fetch endpoint — combining endpoint-specific request logic, managed infrastructure, parsing, normalization, billing, and Playground-tested examples.
Request behavior for J.Crew endpoints is tuned to the platform's own response shapes and edge cases.
Supported J.Crew endpoints can use managed proxy routing to improve reliability and reduce infrastructure work.
Dynamic J.Crew pages can be routed through managed browser instances where JavaScript rendering is required.
Challenge pages and unusable J.Crew responses are detected and surfaced clearly, not silently returned as empty data.
J.Crew results are returned as documented JSON instead of raw HTML.
Test the same J.Crew route from Docs and Playground before production integration.
Coverage map
These cards are generated from the active endpoint catalog, so the landing page reflects the same API surface used by Docs and Playground.
/jcrew/product
/jcrew/categories
/jcrew/category
/jcrew/search
/jcrew/size-chart
/jcrew/stores
Endpoint catalog
/jcrew/searchSearches the product catalog for either storefront (select with site, default jcrew). Returns normalized product summaries with USD pricing, gender, and a description, plus the search index's own facets (gender, fabric, category, size, color, price range, and others) with live per-option counts. sort selects relevance (default), price_asc, or price_desc. filter narrows results by one or more facet name:value pairs (comma-separated, e.g. productGender:Men,styleFabric:Cashmere) taken from a prior response's own facets[].name/facets[].options[].value fields -- not curated against a fixed list, since the facet set is large and can change. This is best-effort relevance, not a guaranteed keyword match: for an obscure alphanumeric keyword the upstream search index falls back to its own semantically-related results instead of an empty list, and there is no reliable field in the response to distinguish a true keyword match from that fallback.
Response notes
- This search is best-effort relevance, not a guaranteed keyword match. For an obscure alphanumeric keyword, the upstream search index falls back to its own semantically-related results (Constructor.io's own "embeddings match" fallback) instead of an empty list, and there is no reliable field in the response to distinguish a true keyword match from that fallback. A genuine empty result was only reproduced with a symbols-only query. - `total_products` and `total_pages` reflect the upstream's own result count for the current `keyword`/`site`/`filter` combination. - Each product's `id` is the value to pass as `pid` to `jcrew-product-reviews`, `jcrew-product`, or `jcrew-size-chart` (with the same `site`). - `price_min`/`price_max` and `sale_price_min`/`sale_price_max` are USD, aggregated across every fit the style is offered in. - `facets` lists the search index's own available filters (gender, fabric, category, size, color, price range, and others) with live per-option result counts. A range facet (only `price` observed) sets `is_range` true and carries `range_min`/`range_max` instead of `options`. - `site=factory` uses J.Crew Factory's own independent search index (Constructor.io key, separate from the flagship site) -- results, facets, and product ids are entirely separate from `site=jcrew`. Example response: ```json {"code":200,"msg":"OK","data":{"keyword":"sweater","site":"jcrew","sort":"relevance","page":1,"per_page":24,"total_pages":15,"total_products":338,"count":1,"products":[{"id":"CX415","family_id":"ME617","name":"2025 Rollneck sweater","description":"A J.Crew icon since the '80s, refreshed for right now...","gender":"Women","image_url":"http://www.jcrew.com/s7-img-facade/CX415_NA6434?fmt=jpeg&qlt=90,0","orderable":true,"price_min":98,"price_max":128,"sale_price_min":98,"sale_price_max":98,"url":"https://www.jcrew.com/p/CX415"}],"facets":[{"name":"productGender","label":"Gender","type":"multiple","options":[{"label":"Women","value":"Women","count":208}]},{"name":"price","label":"Price","type":"range","is_range":true,"range_min":28,"range_max":429.99}]}} ```
/jcrew/categoriesLists every category and subcategory from the storefront's own header navigation, flattened into department/section/category triples -- resolves the category-discovery gap jcrew-category's own category parameter otherwise leaves as "find one from a storefront URL". Each entry's category value is exactly what jcrew-category's own category parameter accepts. Filter to one department with department (e.g. women, men); omit for every department. Departments vary slightly by site (jcrew.com has an extra "home" department factory.jcrew.com doesn't) -- see the response's own departments field for the live list.
Response notes
- `departments` lists every department the storefront's own navigation exposes. This varies slightly by site: `jcrew.com` has an extra `home` department `factory.jcrew.com` doesn't. - `section` groups entries the way the storefront's own nav does (typically `clothing`, `accessories`, `shoes`), matching the department tabs and sub-columns visible on the real site. - Some entries are hub-level (e.g. `womens/categories/clothing`, the section's own "All Clothing" link) rather than a true leaf subcategory -- passing one to `jcrew-category` returns a well-formed empty result, not an error, same as browsing that hub page on the real site. Example response: ```json { "code": 200, "msg": "OK", "data": { "site": "jcrew", "departments": ["women", "men", "boys", "girls", "home", "shoes", "accessories"], "categories": [ {"department": "women", "section": "clothing", "category": "womens/categories/clothing/sweaters", "label": "sweaters"}, {"department": "women", "section": "clothing", "category": "womens/categories/clothing/jeans", "label": "jeans"} ] } } ```
/jcrew/categoryReturns one page (up to 60 products) of a category/browse listing for a category path. category is the slash-separated path segment after the storefront's own /plp/ (e.g. womens/categories/clothing/sweaters) -- use jcrew-categories to discover every valid value instead of guessing from storefront URLs. site selects the storefront (default jcrew). page selects the SFCC-native page (default 1); result_count reports the upstream's true total regardless of page size. A hub-level (non-leaf) category path returns a well-formed empty result rather than an error.
Response notes
- Pagination uses the upstream's own SFCC-native page mechanism -- `result_count` reports the true total and `total_pages` is computed from it at the upstream's fixed 60-per-page size. - A hub-level (non-leaf) category path, e.g. `womens/categories/clothing`, returns a well-formed empty result (`count: 0`) rather than an error -- those pages render subcategory tiles instead of a product listing, and there is no reliable marker to distinguish that from a genuinely empty leaf category. - `price`/`currency` on each product always reflect J.Crew's own US pricing in USD, regardless of the requester's own location. On the rare chance the US price can't be determined, a price in a different currency is converted to USD using an approximate, periodically-refreshed exchange rate instead. - Each product's `id` is the value to pass as `pid` to `jcrew-product`, `jcrew-product-reviews`, or `jcrew-size-chart` (with the same `site`). Example response: ```json { "code": 200, "msg": "OK", "data": { "category": "womens/categories/clothing/sweaters", "site": "jcrew", "label": "sweaters", "gender": "Women", "page": 1, "result_count": 142, "total_pages": 3, "count": 1, "products": [ { "id": "CX432", "family_id": "MQ186", "name": "Rollneck reversible cardigan", "default_color_code": "PR5252", "color_codes": ["SX0172", "SX0001", "PR5252", "NA6434", "GR6794", "BL8133", "BK0001"], "price": 1193, "currency": "USD", "badge": "new color", "average_rating": 4.73, "review_count": 52, "url": "https://www.jcrew.com/p/womens/categories/clothing/sweaters/cardigan/rollnecktrade-reversible-cardigan/MQ186" } ] } } ```
/jcrew/productReturns full product detail for one style: name, brand, description, category, list price, aggregate rating, every purchasable color, and every color+size combination as a separate priced/stocked SKU. pid is a style id (e.g. CX415), as returned by jcrew-search's products[].id field. site must match the storefront the pid belongs to (default jcrew). A single call covers every color and size of the style -- no per-color lookup needed.
Response notes
- `skus` lists every color+size combination as its own entry, each with its own `orderable` stock flag and `price`. This is the granular unit a caller would use to check whether a specific size in a specific color is in stock. - `list_price`, `skus[].price`, and `currency` always reflect J.Crew's own US pricing in USD, regardless of the requester's own location. On the rare chance the US price can't be determined, a price in a different currency is converted to USD using an approximate, periodically-refreshed exchange rate instead. - `average_rating`/`rating_count` are a summary only -- use `jcrew-product-reviews` for the actual review list. - An unrecognized `pid` returns `404`. - A `pid` that doesn't match the required shape (letters followed by digits) returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "pid": "CI906", "site": "jcrew", "name": "Arden shirt-dress in cotton poplin", "brand": "J.Crew", "gender": "women", "description": "A modern take on the classic shirt-dress...", "fit_description": ["A-line silhouette.", "Midi length, 50\" from high point of shoulder."], "category_id": "womens|categories|clothing|dresses-and-jumpsuits", "list_price": 1800, "currency": "USD", "average_rating": 4.75, "rating_count": 105, "colors": [ {"code": "BR8840", "name": "AGED PINE", "image_url": "https://www.jcrew.com/s7-img-facade/CI906_BR8840?..."}, {"code": "BL8133", "name": "NAVY", "image_url": "https://www.jcrew.com/s7-img-facade/CI906_BL8133?..."} ], "sizes": ["00", "0", "2", "4", "6", "8", "10", "12", "14", "16"], "skus": [ {"color_code": "BR8840", "color_name": "AGED PINE", "size": "4", "orderable": true, "price": 1259, "currency": "USD"} ], "url": "https://www.jcrew.com/p/womens/categories/clothing/dresses-and-jumpsuits/arden-shirt-dress-in-cotton-poplin/CI906" } } ```
/jcrew/size-chartReturns real body measurements per size (chest, waist, hip, sleeve, length, or a subset depending on the style/category), in both inches and centimeters. pid is a style id, as returned by jcrew-search's products[].id field. site must match the storefront the pid belongs to (default jcrew). A measurement value of 0 means that column doesn't apply to this style (e.g. hip on a top) -- the upstream itself doesn't distinguish that from a genuine zero, so this endpoint passes it through as-is.
Response notes
- `columns` lists the measurement names present for this style (varies by category -- a dress may include `Hip`, a top may not). - Each entry in `sizes` carries the same measurement names in both `imperial` (inches) and `metric` (centimeters). - A measurement value of `0` means that column doesn't apply to this style (e.g. `Hip` on a top) -- the upstream itself doesn't distinguish that from a genuine zero, so this endpoint passes it through as-is. - An unrecognized `pid` returns `404`. - A `pid` that doesn't match the required shape (letters followed by digits) returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "pid": "CI906", "site": "jcrew", "columns": ["Chest", "Waist", "Hip", "Sleeve", "Length"], "sizes": [ { "size": "4", "imperial": {"Chest": 39, "Waist": 29.5, "Hip": 0, "Sleeve": 15.63, "Length": 0}, "metric": {"Chest": 99.06, "Waist": 74.93, "Hip": 0, "Sleeve": 39.69, "Length": 0} } ], "source_url": "https://www.jcrew.com/size-chart/CI906", "fetched_at": "2026-08-19T10:00:00Z" } } ```
/jcrew/product/reviewsReturns one page of a product's customer reviews (author, location, date, rating, headline, body, and verified-purchase flag), plus the product's overall rating summary (average rating, rating count, per-star histogram, and recommended ratio). pid is a style id (e.g. CX415), as returned by jcrew-search's products[].id field. site must match the storefront the pid belongs to (default jcrew). A product with no reviews yet, or a well-formed but unrecognized pid, returns a well-formed empty result, not an error.
Response notes
- A product with no reviews yet, or a well-formed but unrecognized `pid`, returns a well-formed empty result (`total_reviews: 0`, `reviews: []`), not an error. - `rating_histogram` is the count of ratings per star, ascending: index `0` is 1-star, index `4` is 5-star. It is omitted along with `rating_count`/`average_rating`/`recommended_ratio` when the product has no reviews at all. - `total_reviews`/`total_pages` describe the full review set, independent of how many reviews are returned on this page. - A `pid` that doesn't match the required shape (letters followed by digits) returns `400` before any upstream request is made. Example response: ```json { "code": 200, "msg": "OK", "data": { "pid": "CI906", "site": "jcrew", "page": 1, "page_size": 10, "total_pages": 11, "total_reviews": 105, "rating_count": 105, "average_rating": 4.752380952380952, "rating_histogram": [0, 2, 1, 18, 84], "count": 1, "reviews": [ { "id": "278912347", "rating": 5, "headline": "Unique Dress", "body": "The color and style of the dress is very unique. The material is great quality...", "author": "Seasun", "location": "Miami, FL", "verified_purchase": false, "created_at": "2026-08-14T15:07:23Z", "updated_at": "2026-08-14T15:31:00Z" } ] } } ```
/jcrew/suggestReturns the storefront's own search-box suggestions (typeahead) for a partial query -- a flat list of suggested search phrases, each with its own live total result count on the search index. Select the storefront with site (default jcrew). Not product data.
Response notes
- Up to 10 suggestions, no pagination. - Each suggestion carries `total_results`, the suggested phrase's own live result count on that storefront's search index. - A partial query with no real matches returns a normal, empty result (`count: 0`, empty `suggestions`) rather than an error. Example response: ```json {"code":200,"msg":"OK","data":{"query":"dress","site":"jcrew","count":5,"suggestions":[{"query":"dress","total_results":243},{"query":"maxi dress","total_results":22},{"query":"linen dress","total_results":23},{"query":"petite dresses","total_results":52},{"query":"white dress","total_results":99}],"source_url":"https://ac.cnstrc.com/autocomplete/dress?...","fetched_at":"2026-08-19T10:00:00Z"}} ```
/jcrew/storesReturns one storefront's full open-store directory (address, phone, coordinates, services, weekly hours). site selects the storefront and accepts jcrew or factory; defaults to jcrew. Give lat and lng together to sort by distance from that point (each store's distance_miles is then populated); omit both for the upstream's own order.
Response notes
- Closed locations are excluded. - `hours` is keyed by lowercase weekday name (`monday`..`sunday`); a day with no configured hours is omitted from the map. - `services` lists what that location offers (e.g. `In-Store Pickup`, `Same Day Delivery`, `Women's`, `Collection`) -- not every store offers every service. - Without `lat`/`lng`, `distance_miles` is omitted on every store. Example response: ```json { "code": 200, "msg": "OK", "data": { "site": "jcrew", "count": 114, "stores": [ { "id": "731", "name": "1035 Madison Ave", "address": "1035 Madison Ave", "city": "New York", "region": "NY", "postal_code": "10075", "country": "US", "phone": "+13323343487", "latitude": 40.7764377, "longitude": -73.9618084, "services": ["Women's", "Collection", "In-Store Pickup", "Same Day Delivery"], "hours": { "monday": {"open_intervals": [{"start": "10:00", "end": "19:00"}]}, "sunday": {"open_intervals": [{"start": "11:00", "end": "18:00"}]} } } ] } } ```
Related APIs
Marketplaces & Retail
Collect marketplace product signals from Amazon without building brittle storefront scrapers.
Marketplaces & Retail
Build resale, pricing, and marketplace workflows from structured eBay data.
Marketplaces & Retail
Turn public Shop.app product and merchant pages into structured JSON for e-commerce product intelligence, price research, shop monitoring, and marketplace discovery workflows.
How to scrape J.Crew
Crawlora's J.Crew endpoints return category, search, product, size-chart, review, and store data as normalized JSON with one API key — pass site=jcrew or site=factory to select the storefront, no J.Crew account required.
Call /jcrew/categories for the full department/section/category taxonomy, then pass a category path to /jcrew/category for one page of that category's product grid.
Send a free-text term to /jcrew/search for normalized products with live facets (gender, fabric, category, size, color, price range), or /jcrew/suggest for search-box typeahead.
Pass a style id (pid) to /jcrew/product for full detail — every color and size combination as its own priced/stocked SKU — plus /jcrew/size-chart for real body measurements and /jcrew/product/reviews for customer reviews.
Call /jcrew/stores for the full open-store directory; give lat and lng together to sort results by distance from that point.
FAQ
Yes — every endpoint accepts a site parameter (jcrew or factory, default jcrew) to select the storefront; a pid or category value must match the storefront it came from.
No — it's best-effort relevance from J.Crew's own search index. For an obscure alphanumeric keyword the index can fall back to semantically related results instead of an empty list, and there's no field that distinguishes a true match from that fallback.
Yes — /jcrew/size-chart returns chest, waist, hip, sleeve, and length measurements per size in inches and centimeters, when the style/category carries them. A value of 0 means that column doesn't apply to the style, not a genuine zero measurement.
Yes — pass lat and lng together to /jcrew/stores and each result includes a distance_miles field sorted by proximity; omit both for the upstream's own default order.