To get Sephora product data programmatically, use Scavio's Sephora API. POST /api/v1/sephora/search returns 60 products a page with price, list and sale price, rating, review count and bestseller and sale flags; /category pages every product in a sephora.com/shop/ category; and /product returns every shade and size of one product as its own sku with price, stock flags and ingredients, plus the rating and Sephora's review themes. Every call costs 1 credit, about $0.002 on the Growth plan billed yearly.
Sephora has no public developer API, and its product pages show one shade or size at a time, so reading prices across a catalogue is the work these three endpoints take off your hands.
Step 1: Search products
curl -s https://api.scavio.dev/api/v1/sephora/search \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "lipstick", "sort": "best_selling", "zip": "10001"}'On November 2, 2026 this returned 60 products of 169 (3 pages) in one call. The top row, as captured (image URL trimmed):
{
"position": 1,
"product_id": "P510799",
"sku_id": "2764421",
"brand": "MAC Cosmetics",
"name": "M·A·Cximal Silky Matte 12HR Wear Lipstick",
"url": "https://www.sephora.com/product/mac-cosmetics-m-a-cximal-silky-matte-lipstick-P510799?skuId=2764421",
"price": 16,
"list_price": 16,
"sale_price": null,
"value_price": null,
"price_range": { "min": 16, "max": 25 },
"price_text": "$16.00 - $25.00",
"rating": 4.5879,
"review_count": 774,
"more_colors": 27,
"on_sale": false,
"sale_scope": null,
"is_bestseller": true,
"is_new": false,
"is_sephora_exclusive": false,
"is_online_only": false,
"is_limited_edition": false,
"sponsored": false,
"same_day_eligible": true
}sort takes relevance, best_selling, rating, price_low, price_high or newest, and page goes up to 100. The zip fills same_day_eligible: 56 of these 60 lipsticks could be delivered same day to ZIP 10001. It does not change prices. The response also carries category facets (Makeup, 168 products; Mini Size, 7) and related searches such as "lip gloss" and "lip liner".
Note the price: price is 16 because price_text is a range. The $16 item is a mini; full-size shades cost $25.
Step 2: Page a whole category
curl -s https://api.scavio.dev/api/v1/sephora/category \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"category": "face-serum"}'Pass the name from any sephora.com/shop/ URL, or the URL itself. "face-serum" returned the category record, its parent and breadcrumbs, then 60 products in the search shape:
{
"category": {
"category_id": "cat60103",
"name": "Face Serums",
"seo_name": "face-serum",
"url": "https://www.sephora.com/shop/face-serum",
"page_type": "NthCategory"
},
"page": 1,
"total_results": 516,
"total_pages": 9,
"count": 60,
"parent_category": {
"category_id": "cat1230035",
"name": "Treatments",
"url": "https://www.sephora.com/shop/facial-treatments"
}
}The first product was Caudalie Vinoperfect Brightening Dark Spot Serum at "$82.00 - $119.00", rated 4.2655 from 4,275 reviews. Nine calls cover all 516 serums.
Step 3: Price every shade and size
curl -s https://api.scavio.dev/api/v1/sephora/product \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.sephora.com/product/libre-eau-de-parfum-P448102"}'Pass the url from a search or category row (it answers faster) or a product_id like P448102. YSL Libre Eau de Parfum returned 6 skus. Each one, as captured and trimmed to its price and stock fields:
[
{ "sku_id": "2249720", "size": "0.33 oz / 10 mL", "price": 38, "list_price": 38, "on_sale": false, "in_stock": true, "pickup_eligible": true, "same_day_eligible": true },
{ "sku_id": "2249779", "size": "1 oz / 30 mL", "price": 110, "list_price": 110, "on_sale": false, "in_stock": true, "pickup_eligible": true, "same_day_eligible": true },
{ "sku_id": "2249738", "size": "1.6 oz/50 mL", "price": 150, "list_price": 150, "on_sale": false, "in_stock": true, "pickup_eligible": true, "same_day_eligible": true },
{ "sku_id": "2249746", "size": "3.04 oz / 90 mL", "price": 185, "list_price": 185, "on_sale": false, "in_stock": true, "pickup_eligible": true, "same_day_eligible": true },
{ "sku_id": "2724417", "size": "3.4 oz / 100 mL", "price": 140, "list_price": 140, "on_sale": false, "in_stock": true, "pickup_eligible": false, "same_day_eligible": false },
{ "sku_id": "2371888", "size": "5.07 oz / 147 mL", "price": 225, "list_price": 225, "on_sale": false, "in_stock": true, "pickup_eligible": true, "same_day_eligible": true }
]The product's own price_min and price_max were 38 and 225, which is all a listing shows. The skus show the rest: $115.15 an ounce for the travel spray against $44.38 for the 5.07 oz bottle, and a 3.4 oz bottle at $140 that cost less than the 3.04 oz at $185 and was not eligible for pickup or same-day delivery. Each sku also carries only_few_left, sale_price, variation_description, highlights, the full ingredients text, images and a swatch. On a lipstick the skus are shades: a MAC lipstick returned 31, from its 0.12 oz shades at $25 to 0.06 oz minis at $16.
Step 4: Read what reviewers say
The same product response carries the review summary, so there is no second call:
{
"rating": 4.5309,
"review_count": 4543,
"loves_count": 437140,
"review_summary": "Customers often find the personal appeal and scent of this fragrance to be pleasant, and the bottle design receives favorable remarks. While some mention that personal preference can differ, and there are occasional comments about strength and longevity, these points appear less frequently.",
"review_sentiments": [
{ "sentiment": "Bottle", "type": "pros", "count": 70 },
{ "sentiment": "Longevity", "type": "cons", "count": 5 },
{ "sentiment": "Personal Appeal", "type": "pros", "count": 146 },
{ "sentiment": "Personal Preference", "type": "cons", "count": 18 },
{ "sentiment": "Scent", "type": "pros", "count": 82 },
{ "sentiment": "Strength", "type": "cons", "count": 9 }
]
}These are Sephora's own summary and theme counts. Individual review text is not returned, so if you need review bodies, see the options in the best Sephora product data APIs.
All three endpoints
| Endpoint | What it returns | Credits |
|---|---|---|
/api/v1/sephora/search | 60 products a page with price, list and sale price, price range, rating, review count and flags; category facets and related searches; same-day eligibility with a ZIP | 1 |
/api/v1/sephora/category | Every product in a sephora.com/shop/ category, 60 a page, plus the total, parent category, subcategories and breadcrumbs | 1 |
/api/v1/sephora/product | Every shade or size with price, stock flags and ingredients; rating, review count, loves, review summary and pro/con themes | 1 |
Responses are live from sephora.com (US) at the moment you call, in dollars, and each carries fetched_at. A product that does not exist returns 404 and is not charged. To find every product that lists one ingredient, page a category and filter the skus, as in searching Sephora by ingredient.
Getting started
- Sign up at dashboard.scavio.dev/sign-up: 50 free credits, no card required.
- Copy your API key from the dashboard.
- Send a POST to
/api/v1/sephora/searchwith your key in theAuthorizationheader.
Try the Sephora API free in the playground first, or call it from Claude and other agents through the MCP server.
Reference: Sephora API overview · search · category · product
Frequently asked questions
Does Sephora have an API for product data?
Not a public one. Sephora's developer portal serves its own teams and approved partners. Scavio's Sephora API returns the public sephora.com (US) catalogue as JSON with one API key: keyword search, category listings and product detail with every shade and size priced.
How do I get the price of each Sephora shade or size?
Call /api/v1/sephora/product with the product's url or product_id. Each shade or size is an entry in skus[] with its own price, list_price, sale_price and on_sale. The product itself only carries price_min and price_max, and a search row's price is the low end of the range, usually the smallest size.
Can I get Sephora ingredients through an API?
Yes. Every sku in a Scavio product response carries its full ingredients text, along with highlights, size, swatch and images. Ingredient lists can differ between sizes of the same product, so read the sku you are pricing rather than the first one.
How much does Sephora data cost with Scavio?
Every Sephora endpoint costs 1 credit: about $0.002 on the Growth plan billed yearly and $0.0043 on the $30 monthly Project plan. A search or category call returns up to 60 products, and a product call returns every shade and size. New accounts get 50 free credits with no card.
Does the API return Sephora reviews?
It returns the rating, review count and loves count, Sephora's written summary of its reviews, and the pro and con themes with counts, such as Personal Appeal (146 pros) and Strength (9 cons) for YSL Libre on November 2, 2026. It does not return individual review text.