Sephora Product Scraper — Prices, Shades & Ratings
Pricing
from $4.50 / 1,000 products
Sephora Product Scraper — Prices, Shades & Ratings
Sephora US product scraper for search keywords, category URLs, and product URLs. Get brand, price, rating, review count, and shade images on one row per product. HTTP — no browser. Built for price monitoring and assortment research.
Pricing
from $4.50 / 1,000 products
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by Sephora USA, Inc. or its affiliates. Data is read from publicly accessible US search and category listings only. No login. You are responsible for complying with applicable law and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.
Search the US catalog by keyword, category URL, or product URL and save one row per product: brand, name, price, rating, review count, and shade images nested on that row. This Sephora scraper is an API alternative for beauty price monitoring and assortment research. Run it from Python, Node.js, or MCP; export JSON / CSV / dataset. HTTP only — no headless browser.
Crawloop Marketplace & E-commerce Suite — Sephora US listing cards, then Amazon, Walmart, or Flipkart for the same product outside this catalog.
| Sephora Product Scraper ◄── you are here | Amazon Search Scraper | Walmart Scraper | Flipkart Scraper | AliExpress Search Scraper |
|---|---|---|---|---|
| US keyword and category cards, price, rating, shade images | Amazon keyword SERP, badges, sponsored | Walmart ZIP-local prices | Flipkart INR price, MRP, Assured | AliExpress prices, sold count, Choice |
When to use this Actor
- US price checks — listed price or a price range on a keyword or category
- Assortment pulls — brand, name, rating, review count, and hero image
- Shade counts — how many color SKUs the listing exposes, with swatch image URLs when the category document includes them
- Scheduled refresh — same keyword, compare
priceandratingover time
When not to use this Actor
- Review text, ingredients, or store stock — those are not on the listing document this Actor reads
- Markets outside the US storefront — this card is the US catalog
- Amazon, Walmart, Flipkart, or AliExpress — use the sibling Actors in the table above
Key Features
- Keyword search —
queryor batchqueries - Category URLs — shop paths and category ids
- Product URLs — matched back to the listing that contains that product id (one row)
- Shades on the product row — SKU id and images nested in
variants. One saved product is one row - Pagination + caps — up to 20 pages per query, or stop at
maxItems - HTTP — Chrome TLS impersonation, 256 MB. US residential proxy
How to scrape Sephora products
- Set a keyword in
query, or paste US search, shop, or product URLs instartUrls. - Cap volume with
maxItemsandmaxPages. - Keep the default US residential proxy.
- Run the Actor. Download the default dataset as JSON, CSV, or Excel — or call it from Python, Node.js, or MCP.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
query | String | — | Primary US keyword |
queries | Array | — | Extra keywords (same page cap) |
startUrls | Array | — | US search, shop/category, or product URLs |
maxPages | Integer | 1 | Pages per query or URL (1–20) |
maxItems | Integer | — | Product cap per keyword or URL |
startPage | Integer | 1 | First page |
deduplicateIds | Boolean | true | One row per productId in the run |
maxConcurrency | Integer | 1 | Parallel queries (1–2) |
proxyConfiguration | Object | residential, US | Apify Proxy. Datacenter IPs are blocked |
Input example
{"query": "lipstick","maxPages": 1,"maxItems": 40,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Output
Each dataset item is one product. Shade SKUs sit in variants.
| Field | Description |
|---|---|
productId, skuId | Product id and the default SKU |
brand, name | Brand and product name |
price, priceMax, listPrice | Low price, high price when the card shows a range, and the original price text |
currency | USD when the card shows a dollar price |
rating, reviewCount | Average stars and review count |
variantCount, variants | Shade count, plus SKU id and images when the listing includes swatches |
isBestseller, isNew, isLimitedEdition, isSephoraExclusive | Flags on the default SKU |
imageUrl, url | Hero image and public product URL |
page, position, searchQuery | Where the row was found |
Output example
{"source": "sephora_us","searchQuery": "lipstick","page": 1,"position": 1,"productId": "P510799","skuId": "2837425","brand": "MAC Cosmetics","name": "M·A·Cximal Silky Matte Lipstick","price": 16.0,"priceMax": 25.0,"listPrice": "$16.00 - $25.00","currency": "USD","rating": 4.5926,"reviewCount": 761,"variantCount": 26,"variationType": "Color","isBestseller": true,"url": "https://www.sephora.com/product/mac-lipstick-P510799?skuId=2837425","variants": [{"skuId": "2837425","imageUrl": "https://www.sephora.com/productimages/sku/s2837425-main-zoom.jpg","swatchImageUrl": "https://www.sephora.com/productimages/sku/s2837425+sw.jpg"}],"scrapedAt": "2026-09-29T12:00:00Z"}
Use Cases
| Use case | What you get | Why it helps |
|---|---|---|
| Price monitoring | price, priceMax, listPrice | Track a keyword or category without opening each product |
| Assortment build | Brand, name, image, URL | Seed a sheet from search or a shop URL |
| Shade coverage | variantCount and variants | See how many color SKUs a listing exposes |
| Cross-catalog check | Same keyword on Amazon or Walmart | Compare a US beauty card with another retailer |
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/sephora-scraper').call({query: 'lipstick',maxPages: 1,maxItems: 40});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/sephora-scraper").call(run_input={"query": "lipstick", "maxPages": 1, "maxItems": 40})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item.get("productId"), item.get("brand"), item.get("name"), item.get("price"))
cURL
curl "https://api.apify.com/v2/acts/crawloop~sephora-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"query":"lipstick","maxPages":1,"maxItems":40}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by Store ID crawloop/sephora-scraper.
Example prompts:
- "Run Sephora Product Scraper for lipstick, 1 page, return productId, brand, name, price, rating, and reviewCount"
- "Scrape the US lipstick category and list bestsellers with more than 20 shades"
- "Chain Sephora Product Scraper then Amazon Search Scraper for the same keyword and compare US beauty prices with the Amazon SERP"
Suite next step
After a Sephora keyword pull, compare the same products on Amazon Search Scraper. For store prices by ZIP, use Walmart Scraper.
FAQ
Does this open product pages? No. Keyword and category rows come from the listing document. A product URL is resolved by searching for that product id on the same listing, not by fetching a separate product page.
Are review texts or ingredients included? No. The row has the rating and the review count shown on the listing. Review bodies, ingredients, and per-store stock are not collected.
What if the run saves nothing? An empty keyword or a blocked session finishes without rows and without a crash. US residential proxy is required; datacenter IPs are blocked.
Can I schedule it?
Yes. Save a task with the same keyword and run it on a schedule. Compare price across runs.