Sephora Scraper avatar

Sephora Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Sephora Scraper

Sephora Scraper

Extract Sephora product data at scale, including names, brands, prices, ratings, reviews, categories, images, availability, and product URLs. Ideal for beauty market research, price monitoring, competitor analysis, e-commerce intelligence, and product datasets.

Pricing

from $1.00 / 1,000 results

Rating

5.0

(4)

Developer

Shahid Irfan

Shahid Irfan

Maintained by Community

Actor stats

3

Bookmarked

22

Total users

3

Monthly active users

12 days ago

Last modified

Share

What does Sephora Scraper do?

Sephora Scraper collects product data from public pages on sephora.me. Paste a category, brand, search, or product URL, set a product limit, and receive a dataset with names, brands, prices, ratings, review counts, stock status, badges, images, and product links.

The default input collects new makeup products, and any other public Sephora Middle East listing or product page works the same way. The output supports beauty market research, price tracking, assortment analysis, launch monitoring, and merchandising reviews.

Why use Sephora Scraper?

  • One dataset for price and product research - Current price, previous price when discounted, currency, rating, and review count arrive in the same record.
  • Brand and category comparisons - Collect a single brand, a full category, or a search result set without changing tools.
  • Availability tracking - in_stock and is_low_stock show which products are currently buyable.
  • Launch monitoring - is_new and is_exclusive mark products with a new or Sephora-exclusive badge.
  • Predictable run size - results_wanted caps saved records and max_pages caps how deep a run goes.
  • Export and automation - Download JSON, CSV, Excel, or XML, or send the dataset to another service after a run.

What data can you extract from Sephora?

FieldTypeDescription
product_idStringSephora product identifier
brandStringBrand name
titleStringProduct name
image_urlStringProduct image URL
product_urlStringProduct detail page URL
current_priceNumberActive listed price
original_priceNumberEarlier price when a discount is shown
currencyStringCurrency for the storefront locale, such as AED for ae-en
ratingNumberAverage customer rating
review_countIntegerNumber of customer reviews
shadesStringVariant count label, such as 8 shades
is_newBooleanProduct carries a new badge
is_exclusiveBooleanProduct carries a Sephora-exclusive badge
in_stockBooleanProduct is currently in stock
is_low_stockBooleanProduct is marked as low stock
product_typeStringProduct type classification
product_natureStringProduct nature or formulation category
scraped_atStringISO timestamp for the collected record

A field is left out when Sephora does not publish that value for the product. This keeps records compact without filling gaps with guesses.

How to use Sephora Scraper

  1. Open Sephora Scraper in Apify Console.
  2. Paste a public Sephora category, brand, search, or product URL into startUrl, or keep the default new makeup URL.
  3. Set results_wanted to the number of products you need.
  4. Set max_pages to limit how many result pages the run reads.
  5. Leave the proxy setting as it is for normal runs, or provide your own proxy URLs for high-volume work.
  6. Start the run and check the dataset preview.
  7. Download the dataset or connect it to a spreadsheet, webhook, or automation.

Input Parameters

ParameterTypeRequiredDefaultDescription
startUrlStringNoNew makeup category URL on sephora.mePublic Sephora category, brand, search, or product URL. The locale comes from the URL prefix, such as ae-en or sa-en.
results_wantedIntegerNo20Maximum number of products to save
max_pagesIntegerNo10Maximum number of result pages to read. Each page holds up to 36 products.
proxyConfigurationObjectNoResidential Apify ProxyOptional proxy settings. Apify Proxy is used only on the Apify platform; custom proxy URLs also work locally.

Output Data

Each dataset item is one product. Numbers are numeric values, and stock and badge fields are booleans when the source supplies them.

FieldTypeDescription
product_idStringStable product identifier
brandStringBrand name
titleStringProduct title
current_priceNumberCurrent price
original_priceNumberEarlier price when discounted
currencyStringCurrency code
ratingNumberAverage rating
review_countIntegerReview total
shadesStringVariant or shade count
in_stockBooleanCurrent stock status
is_low_stockBooleanCurrent low-stock status
is_newBooleanNew product badge
is_exclusiveBooleanSephora-exclusive badge
product_typeStringProduct type
product_natureStringProduct nature or formulation category
product_urlStringProduct page link
image_urlStringProduct image link
scraped_atStringCollection timestamp

Usage Examples

Quick validation run

Use the default category with a small limit to check the dataset before a larger run.

{
"results_wanted": 20,
"max_pages": 3
}

Collect a category

Paste a category URL. The last path segment identifies the category.

{
"startUrl": "https://www.sephora.me/ae-en/shop/new/view-all/new-in-makeup/new-makeup",
"results_wanted": 100,
"max_pages": 10
}

Collect a brand

Paste a brand URL to collect that brand's products.

{
"startUrl": "https://www.sephora.me/ae-en/brands/dior/DIOR",
"results_wanted": 100,
"max_pages": 10
}

Search products

Paste a search URL with a q parameter.

{
"startUrl": "https://www.sephora.me/ae-en/search?q=lipstick",
"results_wanted": 50,
"max_pages": 3
}

Collect one product

Paste a product detail URL to save that single product.

{
"startUrl": "https://www.sephora.me/ae-en/p/l-heure-bleue-eau-de-parfum/P10064416",
"results_wanted": 1,
"max_pages": 1
}

Run a larger collection with your own proxy

Provide proxy URLs for a large snapshot or a frequent schedule.

{
"startUrl": "https://www.sephora.me/ae-en/shop/new/view-all/new-in-makeup/new-makeup",
"results_wanted": 500,
"max_pages": 20,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Sample Output

A real record from the default new makeup category. Optional fields such as original_price are absent when Sephora does not show an earlier price.

{
"product_id": "P1000215647",
"brand": "MAKEUP BY MARIO",
"title": "Soft Shimmer™ Long Wearing Cream Shadow",
"image_url": "https://img-product.sephora.me/dw/image/v2/BKWK_PRD/on/demandware.static/-/Sites-masterCatalog_Sephora/default/dw4dc33cd5/images/hi-res/SKU/SKU_7859/821357_swatch.jpg",
"product_url": "https://www.sephora.me/ae-en/p/soft-shimmertm-long-wearing-cream-shadow/P1000215647",
"current_price": 135,
"currency": "AED",
"rating": 4.7,
"review_count": 117,
"shades": "8 shades",
"is_new": true,
"is_exclusive": true,
"in_stock": true,
"is_low_stock": false,
"product_type": "master",
"scraped_at": "2026-10-23T07:24:35.400Z"
}

Tips for Best Results

  • Start small - Run 20 to 50 products to confirm the URL and output before raising the limit.
  • Use stable URLs - Permanent category pages work better than short-lived campaign links for scheduled runs.
  • Keep the locale consistent - Use the same country and language prefix when comparing datasets from different dates.
  • Set both limits - results_wanted controls saved products, and max_pages controls how deep the run goes.
  • Check the currency - Price currency follows the storefront locale in startUrl.
  • Read missing values as source data - A missing price, rating, shade count, or stock signal usually means Sephora did not publish it for that product.

Integrations and Export Formats

  • Google Sheets - Review category snapshots, price tables, and brand comparisons in a spreadsheet.
  • Airtable - Keep a searchable product catalog with brand and availability fields.
  • Webhooks - Notify another service when a run finishes.
  • Make or Zapier - Send product records to reporting and alerting workflows.
  • API access - Read dataset items from your own systems after a run.

Apify datasets can be exported as JSON, CSV, Excel, XML, and other supported formats.

Frequently Asked Questions

Can I collect products from a brand page?

Yes. Paste a brand URL such as https://www.sephora.me/ae-en/brands/dior/DIOR into startUrl.

Can I collect a single product?

Yes. Paste a product detail URL into startUrl and set results_wanted to 1.

Does the Actor collect categories other than new makeup?

Yes. Any public category URL on sephora.me works. The locale and category come from that URL.

Does the output include discounted prices?

Yes. current_price holds the active price, and original_price appears when a higher earlier price is available.

Why are some fields missing?

Sephora does not publish every field for every product. Missing values are omitted instead of filled with placeholders.

Does the Actor remove duplicate products?

Yes. Duplicates are dropped by product identifier or product URL before records are saved.

Can I schedule recurring Sephora monitoring?

Yes. Create an Apify schedule to run the Actor hourly, daily, or weekly, then compare datasets to track price, stock, and assortment changes.

Can I export the data to CSV or Excel?

Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML, and other formats.

You are responsible for complying with Sephora's terms, applicable laws, privacy requirements, and any limits on using or redistributing the data. Use this Actor for legitimate work with publicly available product information.

  • Sephora Reviews Scraper - Collect customer reviews and ratings for Sephora products for sentiment and product research.
  • Fragrantica.com Scraper - Collect perfume listings, ratings, fragrance notes, reviews, and price signals for fragrance research.

Support

For issues, feature requests, or reports about changed Sephora fields, use the Issues tab or the contact options on the Actor page in Apify Console.

This Actor is intended for legitimate collection and analysis of publicly available product information. You are responsible for complying with Sephora's terms of service and all applicable laws. Do not use collected data in ways that violate privacy, intellectual property, or redistribution requirements.