Sephora API: Get product reviews
Finds a Sephora US product by name or Sephora link and returns its review summary and customer reviews, sorted and optionally filtered by skin type.
Unofficial. Not affiliated with or endorsed by Sephora.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Sort optional
sort Order reviews, for example newest.
highest_rating
One of
most_helpful,newest,highest_rating,lowest_rating. Defaultmost_helpful.- Brand optional
brand Optional brand to distinguish products, for example LANEIGE.
LANEIGE
- Product, required
product Product name or Sephora product link, for example Lip Sleeping Mask or https://www.sephora.com/product/lip-sleeping-mask-P420652.
Lip Sleeping Mask
- Skin Type optional
skin_type Reviewer skin type to include, for example dry.
any (default)
One of
any,dry,oily,combination,normal.- Max Results optional
max_results Maximum number of reviews, for example 20.
100
Whole number from 1 to 100. Default
20.
Input as JSON
{ "sort": "highest_rating", "brand": "LANEIGE", "product": "Lip Sleeping Mask", "max_results": 100}Output
{ "reviews": [ { "date": "2026-10-22", "title": "Everyday NEED", "page_link": "https://www.sephora.com/product/lip-sleeping-mask-P420652#ratings-reviews-container" , "skin_tone": null, "skin_type": "Normal", "review_text": "I love this product - wear it every night. It leaves my lips feeling very smooth and hydrated when I wake up.", "star_rating": 5, "helpful_votes": 0, "reviewer_nickname": "gduc", "verified_purchase": false, "received_free_product": false }, { "date": "2026-10-21", "title": "Must buy", "page_link": "https://www.sephora.com/product/lip-sleeping-mask-P420652#ratings-reviews-container" , "skin_tone": null, "skin_type": "Dry", "review_text": "My favourite forever. I’ve purchased the Berry sleeping mask 4 times and it never disappoints. Smells like a sweet strawberry banana smoothie, the color is beautiful and the texture is 10/10" , "star_rating": 5, "helpful_votes": 0, "reviewer_nickname": "HCT24", "verified_purchase": true, "received_free_product": false }, { "date": "2026-10-19", "title": "Your lips are gonnna be so smooth", "page_link": "https://www.sephora.com/product/lip-sleeping-mask-P420652#ratings-reviews-container" , "skin_tone": null, "skin_type": null, "review_text": "Thank you for giving my lips an other chance you always would be in my priority products to used keep and refill", "star_rating": 5, "helpful_votes": 0, "reviewer_nickname": "k4t0", "verified_purchase": false, "received_free_product": false } ], "page_link": "https://www.sephora.com/product/lip-sleeping-mask-P420652" , "product_name": "Lip Sleeping Mask – Intense Hydration Lip Treatment with Vitamin C", "review_count": 22464, "overall_rating": 4.315571581196581, "percent_who_recommend": 82.7}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"sephora.com/get_product_reviews","input":{"sort":"highest_rating","brand":"LANEIGE","product":"Lip Sleeping Mask","max_results":100}}' # 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/get_product_reviews" , "input": { "sort": "highest_rating", "brand": "LANEIGE", "product": "Lip Sleeping Mask", "max_results": 100 }})# 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/get_product_reviews" , "input": { "sort": "highest_rating", "brand": "LANEIGE", "product": "Lip Sleeping Mask", "max_results": 100 } }), 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/get_product_reviews# with {"sort":"highest_rating","brand":"LANEIGE","product":"Lip Sleeping Mask","max_results":100}"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": [ "product" ], "properties": { "sort": { "enum": [ "most_helpful", "newest", "highest_rating", "lowest_rating" ], "type": "string", "default": "most_helpful", "description": "Order reviews, for example newest." }, "brand": { "type": "string", "description": "Optional brand to distinguish products, for example LANEIGE." }, "product": { "type": "string", "description": "Product name or Sephora product link, for example Lip Sleeping Mask or https://www.sephora.com/product/lip-sleeping-mask-P420652." }, "skin_type": { "enum": [ "any", "dry", "oily", "combination", "normal" ], "type": "string", "default": "any", "description": "Reviewer skin type to include, for example dry." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Maximum number of reviews, for example 20." } }}Output schema
{ "type": "object", "required": [ "product_name", "overall_rating", "review_count", "percent_who_recommend", "page_link", "reviews" ], "properties": { "reviews": { "type": "array", "items": { "type": "object", "required": [ "star_rating", "title", "review_text", "date", "reviewer_nickname", "skin_type", "skin_tone", "verified_purchase", "received_free_product", "helpful_votes", "page_link" ], "properties": { "date": { "type": [ "string", "null" ], "format": "date" }, "title": { "type": [ "string", "null" ] }, "page_link": { "type": "string" }, "skin_tone": { "type": [ "string", "null" ] }, "skin_type": { "type": [ "string", "null" ] }, "review_text": { "type": [ "string", "null" ] }, "star_rating": { "type": [ "integer", "null" ] }, "helpful_votes": { "type": "integer" }, "reviewer_nickname": { "type": [ "string", "null" ] }, "verified_purchase": { "type": "boolean" }, "received_free_product": { "type": "boolean" } }, "additionalProperties": false } }, "page_link": { "type": "string" }, "product_name": { "type": "string" }, "review_count": { "type": "integer" }, "overall_rating": { "type": [ "number", "null" ] }, "percent_who_recommend": { "type": [ "number", "null" ] } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
sephora.com/get_product_reviews- Returns
- product name, overall rating, review count, percent who recommend, reviews
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/get_product_reviews with the inputs above.
Ask your agent
- Show me the newest reviews for the Lip Sleeping Mask from LANEIGE, filtered to dry skin reviewers, up to 15 entries
- What's the overall rating and percent who recommend the Fenty Beauty Pro Filt'r foundation? Pull the lowest-rated reviews first
- I have oily skin. Can you find the most helpful reviews for the CeraVe Hydrating Cleanser on Sephora?
- Get the review count and top 10 highest-rated reviews for https://www.sephora.com/product/the-ordinary-niacinamide-10-zinc-1-P427312 with combination skin filter
- Look up the Tatcha The Dewy Skin Cream and give me 25 normal skin reviews sorted by highest rating
See more
All Sephora methodsSearches 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.
sephora.com/search_productsGets 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_productLooks 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_productSearches Ulta Beauty products by keyword, brand, USD price range and sort order, and returns each product with its starting prices.
ulta.com/search_productsGets customer reviews for an iPhone or iPad app, found by name or App Store link, from the selected country's App Store.
apps.apple.com/get_app_reviewsGets the newest public G2 reviews for a software product, with reviewer details and review text, plus the product's overall rating and review count when G2's profile shows them. The public feed exposes up to 25 recent reviews.
g2.com/get_product_reviewsSearch 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_productsGets public user reviews for an Android app on Google Play. The app can be given by name, Play Store link, or app ID.
play.google.com/get_app_reviews