Beauty retail pricing and assortment research
Use Sephora endpoints to turn beauty retail pricing and assortment research into repeatable API requests with documented inputs and JSON responses.
Turn Sephora's public storefront into structured beauty-retail data — keyword product search with real pagination, and full per-product detail with every color/shade variant's own price and availability, rating, review count, and a sample of recent reviews, all as normalized JSON. Credential-free.
Search Sephora's product catalog and get full product detail with every color/shade variant, pricing, and reviews as structured JSON.
Endpoint families
5
Documented params
36
Examples
7
Live catalog snapshot
Active endpoints
7
Methods
GET
Required params
15
Schema refs
7
{
"platform": "Sephora",
"endpoint": "sephora-search",
"method": "GET",
"path": "/sephora/search",
"auth": "apiKey"
}Use cases
Search Sephora's product catalog and get full product detail with every color/shade variant, pricing, and reviews as structured JSON.
Use Sephora endpoints to turn beauty retail pricing and assortment research into repeatable API requests with documented inputs and JSON responses.
Use Sephora endpoints to turn product and review monitoring into repeatable API requests with documented inputs and JSON responses.
Use Sephora endpoints to turn shade/variant availability tracking into repeatable API requests with documented inputs and JSON responses.
Managed execution
Every figure below is read from the live Sephora endpoint catalog — 7 endpoints, 36 documented request parameters, and 7 published response schemas — the same catalog Docs and Playground run against.
7 documented Sephora endpoints, grouped into 5 request families — Product, Category and Search, plus 2 more.
36 request parameters are documented across those Sephora endpoints, 15 of them required — the full input contract is public before you write any integration code.
7 of the 7 Sephora endpoints ship a recorded example response, and 7 carry a documented response schema — you can code against the real JSON before the first request.
Sephora endpoints document their error responses (400, 404, 429 and 503) alongside the success schema, so a block, a rate limit, or a missing record comes back as a typed error rather than silently empty data.
7 hosted MCP tools back the Sephora endpoints, so an agent can call the same routes with the same parameters and the same JSON contract, with no custom glue.
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.
/sephora/product
/sephora/category
/sephora/search
/sephora/stores
/sephora/suggest
Endpoint catalog
/sephora/searchSearches Sephora's product catalog by keyword, with real page-based pagination. Returns normalized products with brand, pricing, rating, and review count. Sephora's own search never returns a genuine zero-result state for a nonempty keyword -- an unrecognized/nonsense keyword still returns a full, unrelated fallback result set rather than an empty one. price_min/price_max must be provided together (whole dollars) -- upstream silently ignores a one-sided price range rather than filtering or erroring, so this endpoint rejects a one-sided range as invalid instead of passing it through. brand and filter each accept multiple values (OR'd together within the same facet); brand/rating_min/is_new/filter/price_min/price_max can all be combined with each other (AND'd together across different facets).
Response notes
- Sephora's own search never returns a genuine zero-result state for a nonempty keyword -- an unrecognized/nonsense keyword still returns a full, unrelated fallback result set rather than an empty one. `total_products` and `count` reflect whatever the upstream actually returned. - `list_price`/`value_price` are kept as Sephora's own display-formatted strings (e.g. `"$16.00 - $30.00"`) since a search card's price is often a range across a product's own color/shade variants -- only `/sephora/product` (scoped to one specific product) exposes fully resolved per-variant pricing. - `related_searches` lists Sephora's own suggested related keywords, when present. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "mascara", "page": 1, "page_size": 60, "sort_by": "featured", "total_products": 180, "count": 2, "related_searches": ["foundation", "highlighter"], "products": [ { "product_id": "P520769", "sku_id": "2948230", "brand_name": "tarte", "product_name": "Mini Shape Tape Concealer + Tubing Mascara Set", "list_price": "$25.00", "value_price": "$30.00", "rating": 5, "review_count": 2, "more_colors": 8, "image_url": "https://www.sephora.com/productimages/sku/s2948230-main-zoom.jpg", "url": "https://www.sephora.com/product/travel-size-shape-tape-tubing-set-P520769?skuId=2948230" }, { "product_id": "P446676", "sku_id": "1234567", "brand_name": "Lancôme", "product_name": "Lash Idôle Lengthening & Volumizing Mascara", "list_price": "$29.00", "rating": 4.5, "review_count": 9021, "sponsored": true, "image_url": "https://www.sephora.com/productimages/sku/s1234567-main-zoom.jpg", "url": "https://www.sephora.com/product/lash-idole-P446676" } ], "source_url": "https://www.sephora.com/api/v2/catalog/search/?...", "fetched_at": "2026-08-15T12:00:00Z" } } ```
MCP tool sephora_search
/sephora/productReturns one Sephora product's full detail (every color/shade variant with its own price and availability, rating, review count, and a sample of recent reviews), from Sephora's credential-free public JSON-LD. `product_id` is the full product-page slug, e.g. `lip-sleeping-mask-P420652` -- copy it from the path segment after sephora.com/product/ on any product page; unlike some other retailers, an arbitrary or partial slug does not resolve.
Response notes
- `variants` lists every purchasable color/shade of the product, each with its own `sku`, `price`, `currency_code`, and `availability` (`InStock` or `OutOfStock`). - `review_sample` is a small sample of recent reviews embedded on the product page itself, not the full review set -- there is currently no separate paginated reviews endpoint for this family. - An unresolved or malformed `product_id` returns `404`. Example response: ```json { "code": 200, "msg": "OK", "data": { "product_group_id": "P420652", "name": "Lip Sleeping Mask – Intense Hydration Lip Treatment with Vitamin C", "description": "Shop LANEIGE's Lip Sleeping Mask at Sephora.", "brand": "LANEIGE", "category": "lip-balm-lip-care", "image": "https://www.sephora.com/productimages/sku/s2961324-main-hero.jpg", "url": "https://www.sephora.com/product/lip-sleeping-mask-P420652", "rating": 4.32, "review_count": 22324, "variants": [ { "sku": "2961324", "name": "Lip Sleeping Mask - Acai Mango Smoothie", "color": "Acai Mango Smoothie", "image": "https://www.sephora.com/productimages/sku/s2961324-main-hero.jpg", "price": "25.00", "currency_code": "USD", "availability": "InStock" }, { "sku": "2743243", "name": "Lip Sleeping Mask - Watermelon Pop", "color": "Watermelon Pop", "price": "24.00", "currency_code": "USD", "availability": "OutOfStock" } ], "review_sample": [ { "id": "400508718", "author": "megankiers", "title": "Love this!!!", "body": "This is my favorite product I've got at Sephora!", "rating": 5, "date_published": "2026-08-15" } ], "source_url": "https://www.sephora.com/product/lip-sleeping-mask-P420652", "fetched_at": "2026-08-15T12:00:00Z" } } ```
MCP tool sephora_product
/sephora/categoryReturns one page of a Sephora category/browse listing (e.g. Makeup, Skincare), with the same sort and facet filters as /sephora/search. slug is the path segment after sephora.com/shop/, e.g. makeup-cosmetics. The response uses Sephora's public catalog search to keep browse listings available when the category page's legacy embedded data is absent.
Response notes
- `display_name` is derived from the supplied category slug. - `related_categories` lists related catalog searches when present. - `category_id` is omitted when Sephora's catalog search does not supply a stable category identifier. Example response: ```json { "code": 200, "msg": "OK", "data": { "slug": "makeup-cosmetics", "display_name": "makeup cosmetics", "page": 1, "page_size": 60, "sort_by": "featured", "total_products": 2492, "count": 2, "related_categories": ["Face", "Fragrance"], "products": [ { "product_id": "P467208", "sku_id": "2417145", "brand_name": "Lancôme", "product_name": "Lash Idôle Lengthening & Volumizing Mascara", "list_price": "$16.00 - $30.00", "rating": 4.5012, "review_count": 10757, "more_colors": 2, "image_url": "https://www.sephora.com/productimages/sku/s2417145-main-zoom.jpg", "url": "https://www.sephora.com/product/lancome-lash-idole-lash-lifting-volumizing-mascara-P467208?skuId=2417145" } ], "source_url": "https://www.sephora.com/shop/makeup-cosmetics?currentPage=1", "fetched_at": "2026-08-15T12:00:00Z" } } ```
MCP tool sephora_category
/sephora/product/questionsReturns one page of a Sephora product's customer Q&A: each question plus every answer it received (text, author, whether it's a brand answer, helpful votes). product_id is the Sephora productGroupID, e.g. P420652 -- the same value /sephora/product returns as product_group_id.
Response notes
- `answer_count` is the platform's own total answer count for a question; `answers` lists the answers this page's response actually included. - `has_best_answer` marks a question where one answer has been flagged as the best/accepted one. - `is_brand_answer` marks an answer posted by the brand/retailer rather than a fellow customer. - A well-formed but unrecognized `product_id` returns a normal, empty result (`total_questions: 0`, `questions: []`) rather than an error. Example response: ```json { "code": 200, "msg": "OK", "data": { "product_id": "P420652", "page": 1, "page_size": 10, "total_pages": 102, "total_questions": 1016, "count": 1, "questions": [ { "id": "8563880", "text": "Is this good one for all types of skins?", "submitted_at": "2026-08-11T18:33:54Z", "answer_count": 1, "answers": [ { "id": "8939279", "text": "yes it works on my skin tone", "author": "soumya345", "submitted_at": "2026-08-11T19:14:45Z" } ] } ], "source_url": "https://api.bazaarvoice.com/data/questions.json?...", "fetched_at": "2026-08-15T12:00:00Z" } } ```
MCP tool sephora_product_questions
/sephora/product/reviewsReturns one page of a Sephora product's full customer reviews (title, body, rating, author, helpful votes, secondary ratings, photos), plus the product's site-wide rating rollup (average rating, recommended ratio, star-count histogram). product_id is the Sephora productGroupID, e.g. P420652 -- the same value /sephora/product returns as product_group_id.
Response notes
- `rating_count`, `average_rating`, `recommended_ratio`, and `rating_histogram` are the product's site-wide aggregate rating summary, not just this page -- absent (zero-valued) for a product with no reviews yet. `rating_histogram` is ordered ascending: index 0 is 1-star, index 4 is 5-star. - A well-formed but unrecognized `product_id` returns a normal, empty result (`total_reviews: 0`, `reviews: []`) rather than an error -- the review platform does not distinguish an unknown product id from a real, reviewless one. - `secondary_ratings` and `photo_urls` are only present when a given review carries them. Example response: ```json { "code": 200, "msg": "OK", "data": { "product_id": "P420652", "page": 1, "page_size": 10, "total_pages": 1778, "total_reviews": 17771, "rating_count": 22324, "average_rating": 4.316251567819387, "recommended_ratio": 0.8268623183155309, "rating_histogram": [1432, 1238, 1533, 2756, 15365], "count": 1, "reviews": [ { "id": "399903844", "rating": 5, "recommended": true, "title": "", "body": "Noticed the difference within days. Super hydrating and made it easier for my lip stain to peel off since my lips weren't dry!", "author": "paigesephora26", "submitted_at": "2026-08-07T17:42:33Z", "helpful_votes": 1 } ], "source_url": "https://api.bazaarvoice.com/data/reviews.json?...", "fetched_at": "2026-08-15T12:00:00Z" } } ```
MCP tool sephora_product_reviews
/sephora/storesReturns Sephora physical store locations near a coordinate (address, hours, BOPIS/curbside/same-day flags). Renders through a JS-executing browser backend, unlike every other Sephora endpoint -- the store-locator data call itself is plain HTTP, but it requires a per-visit access token minted by an endpoint gated behind a bot-management JS challenge, so responses may take longer.
Response notes
- Unlike every other Sephora endpoint, this one renders through a JS-executing browser backend rather than a plain HTTP request -- the store-locator data call itself is plain HTTP, but it requires a per-visit access token minted by an endpoint gated behind a bot-management JS challenge. Responses may take noticeably longer than other Sephora endpoints as a result. - `hours` are Sephora's own display-formatted strings per day (e.g. `"10:00AM - 08:00PM"`), plus the store's own IANA time zone. - This endpoint takes coordinates, not a free-text city/zip -- resolve a city or zip to a latitude/longitude first (e.g. via this API's own `/geocoding/*` endpoints) if you have text input rather than coordinates. Example response: ```json { "code": 200, "msg": "OK", "data": { "latitude": 41.88325, "longitude": -87.6323879, "radius": 50, "count": 1, "stores": [ { "store_id": "0662", "store_type": "SEPHORA", "display_name": "STATE STREET", "distance_miles": 0.2, "latitude": 41.88382, "longitude": -87.62816, "address": { "address1": "108 N STATE ST", "address2": "STE 134", "city": "CHICAGO", "state": "IL", "postal_code": "60602-1609", "country": "US", "phone": "3122638688", "mall_name": "BLOCK 37" }, "hours": { "monday": "10:00AM - 08:00PM", "tuesday": "10:00AM - 08:00PM", "wednesday": "10:00AM - 08:00PM", "thursday": "10:00AM - 08:00PM", "friday": "10:00AM - 08:00PM", "saturday": "10:00AM - 08:00PM", "sunday": "11:00AM - 06:00PM", "time_zone": "America/Chicago" }, "same_day_delivery_enabled": true, "is_bopisable": true, "is_online_reservation_enabled": true, "url": "https://www.sephora.com/happening/stores/chicago-state-street" } ], "source_url": "https://www.sephora.com/gway/v1/dotcom-sys/stores?...", "fetched_at": "2026-08-15T12:00:00Z" } } ```
MCP tool sephora_stores
/sephora/suggestReturns Sephora's own search-box type-ahead suggestions for a partial keyword: keyword-completion terms, matching products, and trending/related categories. Sephora's own upstream never returns a genuine zero-result state for a nonempty query -- a deliberately nonsense query still returns unrelated product suggestions.
Response notes
- Sephora's own upstream never returns a genuine zero-result state for a nonempty query -- a deliberately nonsense query still returns unrelated product suggestions rather than an empty result. Only a literally empty query returns Sephora's own genuine empty state (`terms`, `products`, and `categories` all empty). - `terms` are keyword completions (e.g. `mascara`, `mascara volume`). - `products` are direct product matches, each with brand, rating, review count, and a thumbnail image. - `categories` are trending/related category suggestions with their own browse URL. Example response: ```json { "code": 200, "msg": "OK", "data": { "query": "masc", "terms": [ {"term": "mascara"}, {"term": "mascara smudge proof"} ], "products": [ { "product_id": "P431750", "sku_id": "2850378", "brand_name": "ILIA", "product_name": "Limitless Lash Mascara - Clean Lengthening Mascara", "rating": 4.1361, "review_count": 7773, "image_url": "https://www.sephora.com/productimages/sku/s2850378-main-thumb-50.jpg" } ], "categories": [ {"name": "Mascara", "url": "https://www.sephora.com/shop/mascara"} ], "source_url": "https://www.sephora.com/api/v2/catalog/search/?...", "fetched_at": "2026-08-15T12:00:00Z" } } ```
MCP tool sephora_suggest
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 Sephora
Crawlora's Sephora endpoints return product search and full product detail as normalized JSON with one API key — no Sephora account required.
Send a keyword to /sephora/search for normalized products with brand, pricing, rating, and review count, with real page-based pagination.
Pass a product's full page slug (e.g. lip-sleeping-mask-P420652, copied from the sephora.com/product/ path) to /sephora/product for every color/shade variant's own price and availability, rating, review count, and a sample of recent reviews.
FAQ
Send a keyword to Crawlora's /sephora/search endpoint and get normalized products — brand, pricing, rating, review count — as structured JSON, with real page-based pagination.
No Sephora account or login is required from the caller — only your Crawlora API key.
Yes — /sephora/product returns each color/shade variant with its own price and availability, plus the product's aggregate rating, review count, and a sample of recent reviews.
No — Sephora's own search never returns an empty result for a nonempty keyword. An unrecognized or nonsense keyword still returns a full, unrelated fallback result set rather than a genuine zero-result response.