Sephora Product Scraper — Prices, Shades & Ratings avatar

Sephora Product Scraper — Prices, Shades & Ratings

Pricing

from $4.50 / 1,000 products

Go to Apify Store
Sephora Product Scraper — Prices, Shades & Ratings

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

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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 hereAmazon Search ScraperWalmart ScraperFlipkart ScraperAliExpress Search Scraper
US keyword and category cards, price, rating, shade imagesAmazon keyword SERP, badges, sponsoredWalmart ZIP-local pricesFlipkart INR price, MRP, AssuredAliExpress 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 price and rating over 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 — query or batch queries
  • 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

  1. Set a keyword in query, or paste US search, shop, or product URLs in startUrls.
  2. Cap volume with maxItems and maxPages.
  3. Keep the default US residential proxy.
  4. Run the Actor. Download the default dataset as JSON, CSV, or Excel — or call it from Python, Node.js, or MCP.

Input Parameters

ParameterTypeDefaultDescription
queryString—Primary US keyword
queriesArray—Extra keywords (same page cap)
startUrlsArray—US search, shop/category, or product URLs
maxPagesInteger1Pages per query or URL (1–20)
maxItemsInteger—Product cap per keyword or URL
startPageInteger1First page
deduplicateIdsBooleantrueOne row per productId in the run
maxConcurrencyInteger1Parallel queries (1–2)
proxyConfigurationObjectresidential, USApify 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.

FieldDescription
productId, skuIdProduct id and the default SKU
brand, nameBrand and product name
price, priceMax, listPriceLow price, high price when the card shows a range, and the original price text
currencyUSD when the card shows a dollar price
rating, reviewCountAverage stars and review count
variantCount, variantsShade count, plus SKU id and images when the listing includes swatches
isBestseller, isNew, isLimitedEdition, isSephoraExclusiveFlags on the default SKU
imageUrl, urlHero image and public product URL
page, position, searchQueryWhere 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 caseWhat you getWhy it helps
Price monitoringprice, priceMax, listPriceTrack a keyword or category without opening each product
Assortment buildBrand, name, image, URLSeed a sheet from search or a shop URL
Shade coveragevariantCount and variantsSee how many color SKUs a listing exposes
Cross-catalog checkSame keyword on Amazon or WalmartCompare 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 ApifyClient
client = 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.