Sephora API: Search products
Searches Sephora US beauty products in Sephora's order, with brand and USD price filters and shopper sort options. Loves counts are null when a product page cannot be loaded.
Unofficial. Not affiliated with or endorsed by Sephora.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Sort optional
sort Order products by relevance, popularity, rating, newest, or price; for example top_rated.
top_rated
One of
relevance,best_selling,top_rated,newest,price_low_to_high,price_high_to_low. Defaultrelevance.- Brand optional
brand Only show this brand, for example Drunk Elephant.
Not set
- Query, required
query Words describing what to find, for example vitamin C serum.
moisturizer
- Max Price optional
max_price Highest price in USD, for example 90.
Not set
Number 0 or more.
- Min Price optional
min_price Lowest price in USD, for example 20.
Not set
Number 0 or more.
- Max Results optional
max_results Maximum number of products to return, for example 24.
60
Whole number from 1 to 60. Default
24.
Input as JSON
{ "sort": "top_rated", "query": "moisturizer", "max_results": 60}Output
{ "products": [ { "brand": "Arencia", "price": 24, "sku_id": "3039666", "currency": "USD", "image_link": "https://www.sephora.com/productimages/sku/s3039666-main-zoom.jpg?imwidth=270&pb=olive-young-kbeauty" , "product_id": "P521609", "loves_count": null, "star_rating": 5, "product_link": "https://www.sephora.com/product/arencia-deep-water-surge-soothing-cream-P521609?skuId=3039666" , "product_name": "Deep Water Surge Hydrating Cream Moisturizer with Cica PDRN, Hyaluronic Acid, and Ceramide", "review_count": 5, "price_display": "$24.00" }, { "brand": "Dieux", "price": 49, "sku_id": "3009321", "currency": "USD", "image_link": "https://www.sephora.com/productimages/sku/s3009321-main-zoom.jpg?imwidth=270" , "product_id": "P526366", "loves_count": null, "star_rating": 5, "product_link": "https://www.sephora.com/product/holiday-set-instant-angel-h-a-P526366?skuId=3009321" , "product_name": "Hydration-on-Loop – Instant Angel Firming Moisturizer Gift Set", "review_count": 30, "price_display": "$49.00" }, { "brand": "Tatcha", "price": 28, "sku_id": "3027786", "currency": "USD", "image_link": "https://www.sephora.com/productimages/sku/s3027786-main-zoom.jpg?imwidth=270" , "product_id": "P527312", "loves_count": null, "star_rating": 5, "product_link": "https://www.sephora.com/product/tatcha-the-longevity-youth-restoring-cream-moisturizer-for-elasticity-brightness-P527312?skuId=3027786" , "product_name": "The Mini Longevity Youth Restoring Cream Moisturizer for Elasticity & Brightness", "review_count": 1, "price_display": "$28.00" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"sephora.com/search_products","input":{"sort":"top_rated","query":"moisturizer","max_results":60}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "sephora.com/search_products" , "input": { "sort": "top_rated", "query": "moisturizer", "max_results": 60 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "sephora.com/search_products" , "input": { "sort": "top_rated", "query": "moisturizer", "max_results": 60 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run sephora.com/search_products# with {"sort":"top_rated","query":"moisturizer","max_results":60}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "query" ], "properties": { "sort": { "enum": [ "relevance", "best_selling", "top_rated", "newest", "price_low_to_high", "price_high_to_low" ], "type": "string", "default": "relevance", "description": "Order products by relevance, popularity, rating, newest, or price; for example top_rated." }, "brand": { "type": "string", "description": "Only show this brand, for example Drunk Elephant." }, "query": { "type": "string", "minLength": 1, "description": "Words describing what to find, for example vitamin C serum." }, "max_price": { "type": "number", "minimum": 0, "description": "Highest price in USD, for example 90." }, "min_price": { "type": "number", "minimum": 0, "description": "Lowest price in USD, for example 20." }, "max_results": { "type": "integer", "default": 24, "maximum": 60, "minimum": 1, "description": "Maximum number of products to return, for example 24.", "x-fous-developer": true } }, "additionalProperties": false}Output schema
{ "type": "object", "required": [ "products" ], "properties": { "products": { "type": "array", "items": { "type": "object", "required": [ "product_name", "brand", "price", "currency", "price_display", "star_rating", "review_count", "loves_count", "image_link", "product_link", "product_id", "sku_id" ], "properties": { "brand": { "type": [ "string", "null" ], "description": "Brand name." }, "price": { "type": [ "number", "null" ], "description": "Lowest listed size price in USD." }, "sku_id": { "type": [ "string", "null" ], "description": "Sephora displayed SKU ID.", "x-fous-developer": true }, "currency": { "type": "string", "description": "Currency of the price." }, "image_link": { "type": [ "string", "null" ], "description": "Product image link." }, "product_id": { "type": [ "string", "null" ], "description": "Sephora product ID.", "x-fous-developer": true }, "loves_count": { "type": [ "integer", "null" ], "description": "Number of shoppers who loved this product; null if unavailable." }, "star_rating": { "type": [ "number", "null" ], "description": "Average star rating, from 0 to 5." }, "product_link": { "type": "string", "description": "Sephora product page link." }, "product_name": { "type": "string", "description": "Product name." }, "review_count": { "type": [ "integer", "null" ], "description": "Number of reviews." }, "price_display": { "type": [ "string", "null" ], "description": "Price shown on Sephora, including a size range when applicable." } }, "additionalProperties": false }, "description": "Products in Sephora search order." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
sephora.com/search_products- Returns
- product name, brand, price, rating, review count, loves count, image, product link, product and SKU IDs
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method sephora.com/search_products with the inputs above.
Ask your agent
- Find hydrating moisturizers under $40 on Sephora, sorted by top rated
- Show me the best selling vitamin C serums between $15 and $60
- I need a Drunk Elephant cleanser, newest arrivals first
- Search for sunscreen SPF 50 priced under 30 dollars, lowest price first
- List 10 top rated retinol products from any brand, max 90 dollars
See more
All Sephora methodsFinds a Sephora US product by name or Sephora link and returns its review summary and customer reviews, sorted and optionally filtered by skin type.
sephora.com/get_product_reviewsGets a Sephora US product's full details from its name (optionally narrowed by brand) or its Sephora product link: price, sizes and shades with stock, highlights, description, ingredients, usage, ratings and images.
sephora.com/get_productSearches Ulta Beauty products by keyword, brand, USD price range and sort order, and returns each product with its starting prices.
ulta.com/search_productsSearch Nordstrom products by words, price, sale status and sort order. Prices are the lowest listed price. Available sizes may be empty when a product page is unavailable.
nordstrom.com/search_productsSearches Macy's products in the site's order with optional USD price bounds, sale-only results and sorting. Prices for products with a range use the lowest shown price.
macys.com/search_productsSearches Kohl's products in site order and returns prices, offers, ratings and links for each result.
kohls.com/search_productsLooks up one Ulta Beauty product by name or product link and returns its details, prices, sizes or shades, ingredients, directions, ratings and images. Prices and availability may change.
ulta.com/get_productSearch Chewy products by words, pet type, and sort order. Returns up to 72 products in Chewy's order, including listed and first-order Autoship prices when shown.
chewy.com/search_products