# Sephora Product Details & Reviews Scraper (with Demographics) (`sian.agency/best-sephora-product-information-extractor`) Actor

Sephora reviews and product detail scraper. Look up by Sephora product ID, single or bulk. Returns reviews with rating, title, text, nickname, verified purchase, helpfulness and reviewer demographics — skin type, skin tone, eye colour, hair colour — plus full product specs, prices and images.

- **URL**: https://apify.com/sian.agency/best-sephora-product-information-extractor.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** E-commerce, Marketing
- **Stats:** 49 total users, 7 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.00 / 1,000 extracted products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Sephora Product Details & Reviews Scraper (with Demographics) 💬

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Sephora Catalog](https://img.shields.io/badge/Store-Sephora%20Catalog%20Scraper-E91E63)](https://apify.com/sian.agency/best-sephora-product-catalog-extractor?fpr=sian) [![Beauty](https://img.shields.io/badge/Vertical-Beauty%20%26%20Cosmetics-FF4081)](https://apify.com/sian.agency?fpr=sian)

#### 🎉 Sephora reviews scraper + product details extractor — pull reviews with demographics (skin type, age, verified purchase) OR full product specs by Sephora Product ID

##### Built for beauty research teams, sentiment-analysis platforms, brand monitors, and product-intelligence pipelines who need Sephora.com reviews + ingredient + variant data — no Sephora API, no setup

***

### 📋 Overview

**Two modes in one actor:**

- 💬 **Product Reviews** — full BazaarVoice review records with **skin type, skin tone, eye color, hair color, age range, verified purchase, helpfulness score, and photo URLs** for any Sephora product ID
- 📋 **Product Details** — full SKU + variants + ingredients + descriptions + highlights + images + videos for any Sephora product ID

Paste one or more Sephora Product IDs (e.g. `P507574`), choose a mode, and get a flat structured dataset. One run, one tidy dataset out.

**Why teams choose SIÁN for Sephora reviews + product data:**

- ✅ **Demographic filters on reviews** — `skinType`, `skinTone`, `eyeColor`, `hairColor`, `ageRange` populated per review (the input-shape moat — no other Sephora actor exposes these)
- ✅ **Two modes, one actor** — `productReviews` and `productDetails` cover both major buy-side queries in a single listing
- ✅ **Verified-purchase + helpfulness filters** — surface the reviews that actually move conversion
- ✅ **Bulk Product IDs supported** — process a list of productIds from your catalog dataset in one run
- 🧼 **HTML stripped from descriptions** — long descriptions, suggested usage, ingredient lists arrive as clean text, not raw `<br><p>` markup
- ⚡ **23-field review records** (rating, title, text, demographics, photos, helpfulness, verified-purchase, recommendation rate)
- ⚡ **35+ field product detail records** (SKUs, variants, prices, ingredients, descriptions, highlights, images, videos)
- 💰 **Pay-per-result pricing** — only charged for successful extractions
- 💎 **No Sephora API key, no setup, no proxies** — paste a product ID and run
- 📊 **HTML run report** — rating distribution pie, top reviews, success stats

***

### ✨ Features

#### Product Reviews Mode (`action: "productReviews"`)

- 💬 **Full review records** — rating (1–5★), title, body, username, submission time
- 👤 **Demographics** — `skinType` (Combination / Dry / Normal / Oily), `skinTone`, `eyeColor`, `hairColor`, `ageRange`
- ✅ **Verified purchase flag** — separate genuine buyers from anonymous reviewers
- 👍 **Helpfulness score** + positive/negative feedback counts + total feedback count
- 📷 **Photo URLs** — array of reviewer-uploaded photos (when present)
- ⭐ **Rating filter** — only return reviews at or above N stars (1–5)
- 🔄 **Sort by** — MOST_HELPFUL (default), HIGHEST_RATING, LOWEST_RATING, NEWEST, OLDEST
- 📄 **Pagination** — `limit` (1–1000 per call) + `offset` for full review-history pulls

#### Product Details Mode (`action: "productDetails"`)

- 📦 **All SKUs / variants** — full size + price + stock arrays
- 💰 **Min / max price range** computed across variants
- 🧪 **Ingredients list** — `currentSku.ingredientDesc`, HTML-stripped to clean text
- 📝 **Descriptions** — `shortDescription`, `longDescription`, `suggestedUsage` all HTML-stripped
- ⭐ **Highlights** — `["Good for: Dry Skin", "Clean at Sephora", "Cruelty-Free", ...]`
- 🖼️ **Hero image + alternate images** array (HTTPS URLs)
- 🎥 **Product video URLs** when present
- 🏷️ **Stock + availability flags** — `isOutOfStock`, `isOnlineOnly`, `isLimitedEdition`
- 🗂️ **Parent category** — links back to the catalog taxonomy
- 📊 **Variant count** + flattened `allVariants` array (skuId, size, price, stock)

***

### 🎬 Quick Start

Paste any Sephora Product ID (find it in any Sephora URL after `/product/`).

```json
{
  "productId": "P507574",
  "action": "productReviews"
}
```

Returns the top 10 most-helpful reviews for that product with full demographics and photo URLs.

***

### 🚀 Getting Started (4 Simple Steps)

#### Step 1: Find a Sephora Product ID

Open any product page on sephora.com — the URL ends with `-P{ID}` (e.g. `https://www.sephora.com/product/the-dewy-skin-cream-P441101` → `P441101`).

You can also pipe IDs straight from the [Sephora Product Catalog Scraper](https://apify.com/sian.agency/best-sephora-product-catalog-extractor?fpr=sian) — every row has `productId` ready to paste.

#### Step 2: Pick a mode

- `productReviews` — customer reviews with demographics
- `productDetails` — full product spec, variants, ingredients, media

#### Step 3: (Reviews) Add filters

Minimum rating, sort order, limit (1–1000), offset for pagination.

#### Step 4: Click "Start"

Reviews or details stream into the Apify dataset. JSON, CSV, Excel ready.

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `productId` | string | Either this or `bulkProductIds` | Single Sephora Product ID (e.g. `P507574`). |
| `bulkProductIds` | array of strings | Either this or `productId` | Multiple Product IDs in one run (e.g. `["P507574", "P441101", "P393151"]`). |
| `action` | string (enum) | Yes | `productReviews` (default) or `productDetails`. |
| `reviewRating` | integer | No (reviews only) | 1–5★ floor. Use 1 for all reviews. |
| `reviewSortBy` | string (enum) | No (reviews only) | `MOST_HELPFUL` (default), `HIGHEST_RATING`, `LOWEST_RATING`, `NEWEST`, `OLDEST`. |
| `reviewLimit` | integer | No (reviews only) | Max reviews per product (1–1000). Default 10. |
| `reviewOffset` | integer | No (reviews only) | Skip the first N reviews (for pagination). Default 0. |

**Example — Top 50 most-helpful 4★+ reviews for a product:**

```json
{
  "productId": "P441101",
  "action": "productReviews",
  "reviewRating": 4,
  "reviewSortBy": "MOST_HELPFUL",
  "reviewLimit": 50
}
```

**Example — Full product details for one Sephora SKU:**

```json
{
  "productId": "P507574",
  "action": "productDetails"
}
```

**Example — Bulk reviews for an entire bestseller list:**

```json
{
  "bulkProductIds": ["P507574", "P441101", "P393151", "P520773"],
  "action": "productReviews",
  "reviewLimit": 20,
  "reviewRating": 1
}
```

***

### 📤 Output

#### Reviews Mode (`itemType: "product-review"`)

| Field | Type | Example |
|---|---|---|
| `reviewId` | string | `336871156` |
| `productId` | string | `P507574` |
| `productName` | string | `2% Stem Cell H-2 Grow Complex Scalp Serum` |
| `brandName` | string | `Act+Acre` |
| `productUrl` | URL | sephora.com canonical link |
| `productImage` | URL | hero image |
| `rating` | number | `4` |
| `reviewTitle` | string | `"Definitely helps appearance"` |
| `reviewText` | string | full review body |
| `userNickname` | string | `Jackson404` |
| `submissionTime` | ISO 8601 | `"2025-02-07T15:19:01.000+00:00"` |
| `isRecommended` | boolean | `true` |
| `helpfulness` | number | `95.65` (percent positive of total feedback) |
| `totalFeedback` | number | `23` |
| `positiveFeedback` | number | `22` |
| `negativeFeedback` | number | `1` |
| `verifiedPurchase` | boolean | `false` |
| `skinType` | string | `"Combination"` |
| `skinTone` | string | `"Light"` / `"Medium"` / `"Deep"` |
| `eyeColor` | string | `"Brown"` |
| `hairColor` | string | `"Black"` |
| `ageRange` | string | `"25 to 34"` |
| `hasPhotos` | boolean | `true` |
| `photoUrls` | array of URLs | reviewer-uploaded photos |
| `moderationStatus` | string | `"APPROVED"` |
| `processedAt` | ISO 8601 | `"2026-05-23T15:19:57.530Z"` |

#### Details Mode (`itemType: "product-detail"`)

35+ fields per product. Key fields:

| Field | Type | Example |
|---|---|---|
| `productId` | string | `P507574` |
| `productName` | string | `2% Stem Cell H-2 Grow Complex` |
| `brandName` | string | `Act+Acre` |
| `rating` | number | `4.39` |
| `reviewCount` | number | `1872` |
| `lovesCount` | number | `12500` |
| `shortDescription` | string (HTML-stripped) | `"What it is: Powered by 2% Apple Stem Cells..."` |
| `longDescription` | string (HTML-stripped) | full marketing copy |
| `suggestedUsage` | string (HTML-stripped) | application instructions |
| `ingredients` | string (HTML-stripped) | full INCI list |
| `highlights` | array | `["Good for: Flaky/Dry Scalp", "Clean at Sephora", ...]` |
| `currentSize` / `currentPrice` | string | `"4.6 oz/ 130mL"` / `"$55.00"` |
| `minPrice` / `maxPrice` | string | `"$25.00"` / `"$93.00"` |
| `variantCount` | number | `3` |
| `allVariants` | array | `[{skuId, size, price, isOutOfStock}, ...]` |
| `alternateImages` | array | additional hero images |
| `videoUrls` | array | product videos |
| `isOutOfStock` / `isOnlineOnly` / `isLimitedEdition` | boolean | stock flags |
| `category` | string | parent category name |

Plus an HTML run report saved to the key-value store.

***

### 💼 Use Cases & Examples

- **Scrape Sephora reviews for sentiment analysis** — Pull reviews by skin type or age range, then run NLP over `reviewText`
- **Sephora reviews API alternative** — Programmatic access to BazaarVoice review data without a vendor contract
- **Sephora ingredient data extraction** — Pull `ingredients` field for INCI auditing, allergen detection, formulation research
- **Sephora product details API** — Full SKU + variant + price spec for catalog enrichment
- **Extract Sephora customer reviews with skin type filter** — Build a "reviews from people with my skin type" tool
- **Sephora verified purchase reviews** — Filter for `verifiedPurchase: true` to discard non-buyers
- **Sephora review sentiment analysis pipeline** — Schedule daily pulls, run sentiment scoring, surface trending issues
- **Sephora rating data export** — Per-product rating distribution for retail dashboards
- **Sephora SKU and variant data export** — Full variant matrix for retail allocation planning
- **Beauty review aggregator alternative** — Build your own review aggregator from a clean Sephora data feed
- **Influencer marketing research** — Pair with our [Catalog Scraper](https://apify.com/sian.agency/best-sephora-product-catalog-extractor?fpr=sian) — find bestsellers in a category, then pull their reviews to see what real buyers say
- **Product launch monitoring** — Track review velocity and rating trajectory in the first 30 days after launch

***

### 📊 Performance & Pricing

- **Speed**: ~3–8 seconds per Product ID (single upstream call + transform)
- **Throughput**: bulk-paste up to hundreds of Product IDs per run
- **Reviews limit**: up to 1000 reviews per product per call (paginate beyond with `reviewOffset`)
- **FREE tier**: 5 products per run for evaluation
- **PAID tier**: unlimited products, priority infrastructure
- **Pay-per-result**: only charged for successful extractions

🔗 [View current pricing](https://apify.com/sian.agency/best-sephora-product-information-extractor?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: Does Sephora have a reviews API?**
A: Sephora doesn't publish a public reviews API. This actor reads from a structured Sephora-data feed and exposes both review and product-detail surfaces.

**Q: How do I find a Sephora Product ID?**
A: Open any product page on sephora.com — the URL ends with `-P{ID}` (e.g. `P441101`). Or pipe IDs directly from our [Sephora Product Catalog Scraper](https://apify.com/sian.agency/best-sephora-product-catalog-extractor?fpr=sian).

**Q: Can I scrape all reviews for a product?**
A: Yes — set `reviewLimit: 1000` and paginate via `reviewOffset` if a product has more than 1000 reviews.

**Q: What demographic data is exposed?**
A: `skinType`, `skinTone`, `eyeColor`, `hairColor`, `ageRange` — populated when the reviewer filled them in on Sephora's site (most reviews do).

**Q: Is there a free Sephora reviews scraper?**
A: This actor's FREE tier returns 5 products per run with full feature access — enough for evaluation and small audits. Upgrade for unlimited.

**Q: How much does the Sephora reviews scraper cost?**
A: Pay-per-result pricing. You're billed per successful review or product detail extracted. See the current rate on the [actor page](https://apify.com/sian.agency/best-sephora-product-information-extractor?fpr=sian).

**Q: Can I scrape Sephora data legally?**
A: We only extract data Sephora has chosen to publish publicly (no user logins, no private contact data). See the Legal section below.

**Q: Are HTML tags stripped from descriptions?**
A: Yes — `shortDescription`, `longDescription`, `suggestedUsage`, and `ingredientDesc` arrive as clean text with `<br>`/`<p>` normalized to line breaks and HTML entities decoded.

**Q: What output formats are available?**
A: JSON, CSV, Excel, RSS, HTML, XML — export directly from the Apify dataset UI or via API.

**Q: Where can I find a Sephora review dataset on GitHub?**
A: Most GitHub Sephora review datasets are months-stale snapshots. This actor returns live reviews on demand — schedule it for fresh data daily.

***

### 🐛 Troubleshooting

**Empty review dataset**

- The product may have no reviews at or above your `reviewRating` floor. Set `reviewRating: 1` to fetch all reviews.
- Some new products have zero reviews — verify on sephora.com.

**Only 5 results when I expected more**

- You're on the FREE tier. Upgrade for unlimited.

**HTML tags appearing in description fields**

- Should never happen on `shortDescription` / `longDescription` / `suggestedUsage` / `ingredients` — they're stripped automatically. If you see tags in another field, open an Issue.

**`productId` not found**

- The product may have been delisted. Open the URL `https://www.sephora.com/product/anything-{productId}` in a browser to confirm.

**Pagination cuts off early**

- `reviewLimit` caps at 1000 per call. For >1000 reviews, increment `reviewOffset` across multiple runs.

***

### ⚠️ Trademark Disclaimer

This actor is an **independent scraping tool** and is not affiliated with, endorsed by, or sponsored by Sephora USA, Inc. or any of its subsidiaries. "Sephora" is used solely in a descriptive sense to identify the public data source the actor reads from. **Sephora®** and all brand names appearing in product records are trademarks of their respective owners. All other trademarks are the property of their respective owners.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or contact information. They only extract what Sephora has chosen to share publicly on sephora.com. Review data is published publicly by reviewers who explicitly consented to public display. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union, the **CCPA** in California, and by other regulations around the world. Review demographics (`skinType`, `ageRange`, etc.) are non-PII but the combination of nickname + photo + demographics may raise privacy considerations in some jurisdictions. Consult your lawyers when processing review data at scale.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### ✨ More by SIÁN Agency

Part of the SIÁN Agency Apify portfolio — production-grade scrapers used by agencies, research teams, and brands. A few that pair well with this Sephora reviews actor:

**Beauty & E-commerce**

- [Sephora Product Catalog Scraper — Brands, Categories & Filters](https://apify.com/sian.agency/best-sephora-product-catalog-extractor?fpr=sian) — Pull catalog by brand / category / keyword, then pipe productIds here for full enrichment
- [Taobao & Tmall Product Scraper](https://apify.com/sian.agency/taobao-tmall-product-scraper?fpr=sian) — China's #1 beauty marketplace
- [TikTok Shop Scraper](https://apify.com/sian.agency/tiktok-shop-scraper?fpr=sian) — TikTok Shop beauty product reviews

**Social Discovery & Sentiment**

- [Best TikTok AI Transcript Extractor](https://apify.com/sian.agency/best-tiktok-ai-transcript-extractor?fpr=sian) — Find creator-mentioned Sephora bestsellers
- [Instagram AI Transcript Extractor](https://apify.com/sian.agency/instagram-ai-transcript-extractor?fpr=sian) — Reels + Stories transcription
- [YouTube AI Comments Scraper](https://apify.com/sian.agency/youtube-ai-comments-scraper-and-questions-extractor?fpr=sian) — Beauty influencer comment sentiment

[Browse all SIÁN actors →](https://apify.com/sian.agency?fpr=sian)

***

### ⭐ Leave a 5-Star Review

Love this actor? **[Leave a 5-star review here](https://apify.com/sian.agency/best-sephora-product-information-extractor/reviews)** — it helps us build more features and lets other beauty data teams find it.

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue in the actor's Apify Console Issues tab
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/best-sephora-product-information-extractor/changelog.md

# Actor input Schema

## `productId` (type: `string`):

Enter a single Sephora Product ID (e.g., 'P507574'). For multiple IDs, use bulk mode below.

## `bulkProductIds` (type: `array`):

Process multiple Product IDs at once. Enter one Product ID per line (e.g., P507574, P393151).

## `action` (type: `string`):

Select **Product Intelligence** type. **💬 Reviews** = Customer reviews with filtering. **📋 Details** = Full product specifications.

## `reviewRating` (type: `integer`):

Only reviews with this rating or higher will be returned (1-5 stars). Use 1 for all ratings.

## `reviewSortBy` (type: `string`):

Sort order for reviews. Choose how reviews should be ordered.

## `reviewLimit` (type: `integer`):

Maximum number of reviews to return per product.

## `reviewOffset` (type: `integer`):

Skip this many reviews before returning results (for pagination). Use 0 for first page.

## Actor input object example

```json
{
  "productId": "P507574",
  "bulkProductIds": [
    "P507574",
    "P393151"
  ],
  "action": "productReviews",
  "reviewRating": 1,
  "reviewSortBy": "MOST_HELPFUL",
  "reviewLimit": 10,
  "reviewOffset": 0
}
```

# Actor output Schema

## `results` (type: `string`):

Complete dataset with product intelligence data.

## `htmlReport` (type: `string`):

Visual dashboard with metrics, charts, and top items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "productId": "P507574",
    "bulkProductIds": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/best-sephora-product-information-extractor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "productId": "P507574",
    "bulkProductIds": [],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/best-sephora-product-information-extractor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "productId": "P507574",
  "bulkProductIds": []
}' |
apify call sian.agency/best-sephora-product-information-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/best-sephora-product-information-extractor"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/boYcn4NfSgLshHX7d/builds/tw154tMSLp7aaDytN/openapi.json
