Sephora Scraper: Prices, Sales & Ratings avatar

Sephora Scraper: Prices, Sales & Ratings

Pricing

from $4.00 / 1,000 results

Go to Apify Store
Sephora Scraper: Prices, Sales & Ratings

Sephora Scraper: Prices, Sales & Ratings

Scrape Sephora US category pages. One row per product: price, list price range, sale price and sale type, rating, review count, number of shades or sizes, New and Bestseller flags. Sort, filter by brand, price, sale and rating. Export JSON, CSV or Excel.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

reventadata

reventadata

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Sephora Scraper: Prices, Sales, Ratings and Shades by Category

Unofficial. This Actor is not affiliated with, authorised by, endorsed by, or in any way officially connected to Sephora. "Sephora" is a trademark of its respective owner and is used here only to describe what this tool reads. It reads the same public category pages a browser does.

Give it Sephora US category pages and get one clean row per product: price in US dollars, sale price and sale type, list-price range, set value, rating, review count, number of sizes or shades, and Sephora's own New, Bestseller, Limited Edition, Online Only and Exclusive flags.

What does it do?

For each start URL it walks the result pages of that Sephora US category (60 products per page), reads the product data each page embeds, and saves one row per product.

It reads category pages (https://www.sephora.com/shop/<category>, for example moisturizing-cream-oils-mists, lipstick, mascara, foundation-makeup, skincare). It does not read search result pages, /browse/ pages or product pages: Sephora's robots.txt disallows search and browse, and this Actor stays on the page type it leaves open. Only the US storefront (www.sephora.com) is supported.

Why use it?

  • Prices as shoppers see them. price is the lowest current price of the product in USD; salePrice is set when Sephora marks the shown size or shade down.
  • List price range kept whole. Many products list a range ("$20.00 - $32.00"): priceMin, priceMax and the original text listPriceText are all in the row.
  • Sale flags that tell the cases apart. onSale and saleType: FULL when every size or shade is marked down, PARTIAL when only some are.
  • Filters the site applies. Brands, price band and sort order (best selling, top rated, price low to high or high to low, new) are applied by Sephora before the Actor reads the page, so a small maxItems returns the top of the right list.
  • Filters the Actor applies. Only products on sale, a minimum rating, words the name, brand or category must or must not contain.
  • Polite by design. The Actor waits 5 seconds between page requests, the Crawl-delay in Sephora's robots.txt.

How to use it

  1. Put one or more Sephora category URLs in startUrls.
  2. Set maxItems (rows to save) and, if you want, a sort order, brands or filters.
  3. Run the Actor and download the dataset as JSON, CSV or Excel.

Input

FieldTypeDescription
startUrlsarrayCategory pages https://www.sephora.com/shop/<category>. Query strings are ignored: the Actor sets page, sort and filters itself.
maxItemsintegerTotal products to save across all start URLs, counted after the filters. Default 100.
maxPagesintegerResult pages per start URL, 60 products each. Default 5. 17 pages (about 1,000 products) take about 3 minutes: the 5-second delay plus the fetch (measured 2026-10-21: 1,000 products from 19 pages in 200 seconds).
sortstringRELEVANCE (the site's default), BEST_SELLING, TOP_RATED, PRICE_LOW_TO_HIGH, PRICE_HIGH_TO_LOW or NEW.
brandsarrayBrand names as Sephora shows them (for example Tatcha). Several brands are OR.
minPrice, maxPricenumberPrice band in USD, applied by the site to the whole list-price range: a product listed at $29.00 - $50.00 is dropped when maxPrice is 40.
onlyOnSalebooleanKeep only products Sephora flags as on sale (FULL or PARTIAL).
minRatingnumberMinimum average rating, 0 to 5. Unrated products are dropped when set.
includeKeywords, excludeKeywordsarrayWords the name, brand or category must / must not contain, ignoring case and accents.
proxyConfigurationobjectApify residential proxy in the United States (the default, and the transport measured to work). No proxy and datacenter proxies get an "Access Denied" page.

Sample input

{
"startUrls": [{"url": "https://www.sephora.com/shop/moisturizing-cream-oils-mists"}],
"maxItems": 20,
"maxPages": 1,
"sort": "RELEVANCE"
}

Output

One row per product:

FieldTypeDescription
idstringSephora product id (P followed by digits).
skuIdstring / nullId of the size or shade the tile shows.
title, brandstring / nullProduct name and brand.
urlstringProduct page URL with the shown skuId.
imageUrlstring / nullMain image of the shown size or shade.
pricenumber / nullLowest current price in USD: the sale price when on sale, else the low end of the list price.
priceMin, priceMaxnumber / nullLow and high end of the list price.
listPriceTextstring / nullThe list price as Sephora prints it.
salePricenumber / nullSale price of the shown size or shade.
valuePricenumber / nullValue Sephora states for the item, shown on sets and on some jumbo, mini and travel sizes.
onSale, saleTypeboolean, string / nullSale flag; FULL, PARTIAL or null.
currencystringAlways USD.
rating, reviewCountnumber / null, integer / nullAverage rating and review count. Unrated products have rating null.
variantCount, variationTypeinteger / null, string / nullNumber of sizes or shades and what they differ by.
isNew, isBestseller, isLimitedEdition, isOnlineOnly, isSephoraExclusivebooleanSephora's flags.
badgestring / nullAward or programme badge key, for example clean-at-sephora.
category, categoryUrl, categoryTotalstring / null, string / null, integer / nullThe category page read and the product count it holds under the sort and filters used.
page, position, sourceUrl, scrapedAtinteger, integer, string, stringWhere the row came from and when.

Sample output

One row from the 2026-10-21 test run. The start URL had moved, so sourceUrl is the old address and categoryUrl the category it led to:

{
"id": "P519160",
"skuId": "2898419",
"title": "Glazing Milk Hydrating Ceramide Facial Essence",
"brand": "rhode",
"url": "https://www.sephora.com/product/glazing-milk-P519160?skuId=2898419",
"imageUrl": "https://www.sephora.com/productimages/sku/s2898419-main-zoom.jpg?imwidth=270&pb=clean-at-sephora",
"price": 20,
"priceMin": 20,
"priceMax": 32,
"listPriceText": "$20.00 - $32.00",
"salePrice": null,
"valuePrice": null,
"onSale": false,
"saleType": null,
"currency": "USD",
"rating": 3.94,
"reviewCount": 2921,
"variantCount": 1,
"variationType": "Size",
"isNew": false,
"isBestseller": true,
"isLimitedEdition": false,
"isOnlineOnly": false,
"isSephoraExclusive": true,
"badge": "clean-at-sephora",
"category": "Moisturizers",
"categoryUrl": "https://www.sephora.com/shop/moisturizing-cream-oils-mists",
"categoryTotal": 727,
"page": 1,
"position": 1,
"sourceUrl": "https://www.sephora.com/shop/moisturizer-skincare",
"scrapedAt": "2026-10-21T18:08:30.068019+00:00"
}

What a row does not hold

A category page carries the product tile only. There is no description, ingredient list, size, full image gallery or per-shade price table: those live on product pages, which this Actor does not read.

Good to know

  • A product that belongs to several categories appears once per run (rows are de-duplicated by id across start URLs).
  • The Actor stops at the first empty page, or when the page count reaches the category total.
  • A start URL that Sephora has moved is followed (up to two hops) when it points to another /shop/ category; a category that does not exist is reported and skipped.
  • Rows are read from the page as Sephora serves it to a US visitor. Prices and sales change during the day.

How much does it cost to scrape Sephora?

Pay-per-event: $0.004 per result saved to the dataset ($4.00 per 1,000 results), plus $0.00005 charged once when the run starts. No subscription. The sale, rating and keyword filters run before a row is saved, so products they drop are not charged.

Privacy & Compliance

This Actor reads only publicly accessible category pages. Rows carry public product data: names, brands, prices and ratings. No account, login or personal data is involved. You are responsible for using the data in line with Sephora's terms and the law that applies to you.