# Sephora Product Reviews Scraper (`automation-lab/sephora-product-reviews-scraper`) Actor

Extract individual Sephora customer reviews, ratings, reviewer attributes, verified purchase signals, helpful votes, photos, and product context.

- **URL**: https://apify.com/automation-lab/sephora-product-reviews-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Sephora Product Reviews Scraper

Extract individual public customer reviews from Sephora product pages and product IDs.

Turn Sephora feedback into structured data for sentiment analysis, launch monitoring, product research, and competitive intelligence—without copying reviews by hand.

- ⭐ Full ratings, titles, and review text
- 👤 Reviewer names, locations, and available beauty-profile attributes
- ✅ Recommendation, verified-purchase, incentivized, and syndicated signals
- 👍 Helpful and not-helpful vote counts
- 📷 Review photo and video URLs
- 🛍️ Product, brand, locale, and campaign context

The Actor accepts one product or a bulk list, follows Sephora product-family review relationships, paginates automatically, and saves one export-ready review per dataset row.

### What does Sephora Product Reviews Scraper do?

Sephora Product Reviews Scraper collects public customer review records for products listed on `sephora.com`.

Give it product page URLs such as:

```text
https://www.sephora.com/product/born-in-roma-P449116
````

Or provide P-number IDs such as `P449116`.

The Actor retrieves current review records, applies your locale, sort, and rating filters, removes duplicate review IDs, and exports the result as JSON, CSV, Excel, XML, or another Apify dataset format.

It extracts individual comments—not only the aggregate rating and review count shown in a product catalog.

### Who is it for?

**Beauty brands** use it to watch launches, reformulations, packaging changes, and recurring product complaints.

**Ecommerce and category analysts** compare customer response across competing fragrances, skincare, haircare, and makeup products.

**Product teams** identify requested improvements, common use cases, and changing customer language.

**Agencies** build repeatable voice-of-customer reports for multiple beauty clients.

**Researchers and data teams** create structured review corpora for sentiment, topic, and recommendation analysis.

**Customer experience teams** track low-rating feedback and highly helpful reviews that deserve attention.

### Why use this Sephora reviews scraper?

- ⚡ **Faster than manual collection** — paginate thousands of public review records automatically.
- 🧱 **Structured output** — receive stable fields instead of unstructured copied page text.
- 🎯 **Targeted extraction** — choose newest, most helpful, highest-rated, or lowest-rated reviews.
- 🌎 **Locale control** — collect all English reviews or focus on US or Canadian English.
- 🔁 **Automation-ready** — schedule recurring runs and connect results to your data stack.
- 💳 **Pay per result** — charges scale with the useful review rows saved.
- 🔍 **Product-family aware** — preserve both the requested ID and the actual reviewed product ID.

### What Sephora review data can I extract?

| Field | Description |
|---|---|
| `reviewId` | Stable public review identifier |
| `requestedProductId` | P-number supplied in the Actor input |
| `productId` | Actual reviewed product or family-member ID |
| `productTitle` | Sephora product name |
| `productUrl` | Canonical Sephora product page |
| `brandName` | Product brand when available |
| `reviewerName` | Public reviewer nickname |
| `reviewerLocation` | Public location when supplied |
| `reviewerAttributes` | Available age, skin, hair, eye, or fragrance preferences |
| `rating` | Star rating from 1 to 5 |
| `title` | Review headline |
| `reviewText` | Full public review body |
| `isRecommended` | Whether the reviewer recommends the product |
| `isVerifiedPurchase` | Public verified-purchaser badge |
| `isIncentivized` | Public incentivized-review disclosure when available |
| `isSyndicated` | Whether the review was syndicated |
| `submissionTime` | Review submission timestamp |
| `helpfulVotes` | Positive helpfulness votes |
| `notHelpfulVotes` | Negative helpfulness votes |
| `photos` / `videos` | Public review media URLs |
| `locale` | Review content locale |
| `scrapedAt` | UTC extraction timestamp |

### How to scrape Sephora reviews

1. Open the Actor input page.
2. Paste one or more Sephora product URLs, product IDs, or both.
3. Set a small `maxReviewsPerProduct` for your first run.
4. Choose the review order and locale.
5. Optionally set minimum and maximum ratings.
6. Click **Start**.
7. Open the **Dataset** tab to inspect or export results.

A prefilled run collects 20 recent reviews and normally completes well within two minutes.

### Input

```json
{
  "productUrls": [
    { "url": "https://www.sephora.com/product/born-in-roma-P449116" }
  ],
  "productIds": [],
  "maxReviewsPerProduct": 20,
  "sort": "newest",
  "locale": "allEnglish",
  "includeRatingsOnly": false
}
```

#### Input options

- `productUrls` — Sephora product page URLs. Only `sephora.com` targets are accepted.
- `productIds` — P-number IDs such as `P449116`.
- `maxReviewsPerProduct` — maximum saved rows for each requested product; 1–10,000.
- `sort` — `newest`, `mostHelpful`, `highestRating`, or `lowestRating`.
- `locale` — `allEnglish`, `en_US`, or `en_CA`.
- `minRating` — optional minimum rating from 1 to 5.
- `maxRating` — optional maximum rating from 1 to 5.
- `includeRatingsOnly` — include submissions with a rating but no written review.

You can submit up to 100 unique products per run.

### Output example

```json
{
  "reviewId": "397642911",
  "requestedProductId": "P449116",
  "productId": "P449117",
  "productTitle": "Donna Born In Roma Eau de Parfum Travel Spray with Bourbon Vanilla & Jasmine",
  "productUrl": "https://www.sephora.com/product/born-in-roma-travel-spray-P449117",
  "brandName": "Valentino",
  "reviewerName": "Beangrean",
  "reviewerLocation": null,
  "reviewerAttributes": {},
  "rating": 5,
  "title": "Great scent",
  "reviewText": "I love the notes of this perfume and always get compliments when wearing it.",
  "isRecommended": true,
  "isVerifiedPurchase": true,
  "isIncentivized": null,
  "isSyndicated": false,
  "submissionTime": "2026-07-11T01:36:21.000+00:00",
  "helpfulVotes": 1,
  "notHelpfulVotes": 0,
  "totalFeedback": 1,
  "photos": [],
  "videos": [],
  "campaignId": "iOS App",
  "locale": "en_US",
  "scrapedAt": "2026-07-21T13:30:00.000Z"
}
```

Null or empty values mean the reviewer or source did not publish that optional attribute.

### Product families and review IDs

Sephora may group multiple sizes, variants, or related listings into one review family.

That means a request for `P449116` can legitimately return a review whose actual `productId` is `P449117`.

Use `requestedProductId` to trace the input and `productId` to identify the exact reviewed family member.

The Actor deduplicates by `reviewId`, including when two supplied products overlap the same review family.

### Sorting and rating filters

Use `newest` for launch and change monitoring.

Use `mostHelpful` to find comments other customers considered useful.

Use `highestRating` for advocacy and positive-language research.

Use `lowestRating` for complaint discovery and product-risk analysis.

Set both `minRating` and `maxRating` to the same value to collect one star band—for example, 1-star reviews only.

Filters are applied before rows are saved and charged.

### How much does it cost to scrape Sephora reviews?

This Actor uses pay-per-event pricing:

- **Start:** $0.0005 per run
- **Review:** tiered by Apify subscription; the BRONZE reference price is $0.0000373 per saved review

You are charged only for the start event and review rows actually stored.

A small 20-review run at the BRONZE reference price is approximately $0.00125 before any platform-plan considerations.

Check the live Actor pricing tab for the current tier values before a large production run.

### Scheduling a Sephora review monitor

Create an Apify schedule to run the same input daily, weekly, or monthly.

Common monitoring pattern:

1. Run with `sort: "newest"`.
2. Store `reviewId` in your warehouse or automation tool.
3. Compare each new dataset against known IDs.
4. Notify a team only when unseen review IDs appear.

For lower-rating alerts, set `maxRating` to `2` or `3`.

For competitor voice-of-customer reporting, include several product IDs in one scheduled run.

### Sentiment and review intelligence workflows

Export the dataset to a notebook, warehouse, or language model to:

- classify positive, neutral, and negative themes;
- compare rating distributions across products;
- separate incentivized from non-incentivized feedback;
- identify repeated packaging, shade, scent, or performance complaints;
- summarize highly helpful reviews;
- track language changes after a reformulation or relaunch;
- compare verified-purchase and recommendation signals.

Always preserve review IDs and timestamps for traceability.

### Integrations

Connect the Actor to:

- **Google Sheets** for analyst-friendly review trackers;
- **Slack or email** for low-rating review alerts;
- **Make** for no-code scheduling and routing;
- **Zapier** for CRM or ticket automation;
- **Amazon S3** for durable review archives;
- **BigQuery, Snowflake, or PostgreSQL** for longitudinal analysis;
- **webhooks** for event-driven pipelines;
- **Apify API** for application integration.

A useful workflow is Actor schedule → dataset webhook → warehouse upsert keyed by `reviewId` → dashboard refresh.

### API usage with Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/sephora-product-reviews-scraper').call({
  productIds: ['P449116'],
  maxReviewsPerProduct: 100,
  sort: 'newest',
  locale: 'allEnglish',
  includeRatingsOnly: false,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### API usage with Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/sephora-product-reviews-scraper').call(run_input={
    'productIds': ['P449116'],
    'maxReviewsPerProduct': 100,
    'sort': 'mostHelpful',
    'locale': 'en_US',
    'includeRatingsOnly': False,
})

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

### API usage with cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~sephora-product-reviews-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "productIds": ["P449116"],
    "maxReviewsPerProduct": 20,
    "sort": "newest",
    "locale": "allEnglish",
    "includeRatingsOnly": false
  }'
```

Retrieve dataset items from the run's `defaultDatasetId` after it succeeds.

### Use with Apify MCP and AI agents

Connect this Actor to Claude, Cursor, or another MCP-compatible assistant through Apify MCP.

Claude Code setup:

```bash
claude mcp add --transport http apify https://mcp.apify.com/?tools=automation-lab/sephora-product-reviews-scraper
```

Claude Desktop setup:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=automation-lab/sephora-product-reviews-scraper"
    }
  }
}
```

Cursor setup: add the same Apify MCP URL as a remote HTTP MCP server in **Settings → Tools & MCP**.

VS Code setup: add the same remote HTTP URL to your workspace MCP server configuration, then enable the Apify server.

Example prompts:

- “Collect the 50 newest reviews for Sephora product P449116 and summarize recurring complaints.”
- “Compare verified-purchase feedback for these three Sephora product URLs.”
- “Find the most helpful one- and two-star reviews and group them by issue.”

### Tips for reliable runs

- Start with 10–20 rows while validating a new product.
- Use P-number IDs for compact bulk API inputs.
- Keep `includeRatingsOnly` disabled when you need written comments.
- Use all-English locale for broad family coverage.
- Use one locale when regional comparison matters.
- Schedule newest-first runs for monitoring.
- Deduplicate downstream by `reviewId`, not review text.
- Do not assume every optional reviewer attribute is present.

The Actor retrieves Sephora's current public review-display configuration automatically; users do not supply API keys or cookies.

### Limitations

- The Actor covers public English-language reviews exposed for Sephora product families.
- Sephora controls review family relationships, moderation, and available attributes.
- Deleted, pending, private, or unapproved reviews are not available.
- Some reviews contain ratings without text or omit recommendation and demographic fields.
- Review-family expansion can return a product ID different from the requested ID.
- Source changes or temporary upstream outages can interrupt extraction.
- This Actor does not post reviews, authenticate customers, or access private account data.

### Legal and responsible use

This Actor extracts information publicly displayed to Sephora visitors.

You are responsible for using the data lawfully and for complying with applicable terms, privacy rules, intellectual-property rights, and data-retention obligations.

Avoid republishing personal information, profiling individual reviewers, or using review text in misleading ways.

Use aggregate analysis where possible and retain source IDs for attribution and correction workflows.

This documentation is not legal advice.

### Troubleshooting

**The run says it cannot find a product ID.**

Use a full Sephora product page URL containing a P-number, or enter the P-number directly in `productIds`.

**The run returns no matching reviews.**

Check that the product is public and has reviews. Remove restrictive rating or locale filters and try a small run.

**The actual product ID differs from my input.**

This is normal for Sephora product families. See `requestedProductId` and `productId` together.

**Some reviewer attributes are missing.**

Those fields are optional and appear only when a reviewer published them.

**A run fails during a temporary source outage.**

Retry later. The Actor already performs three bounded retries and fails non-zero rather than reporting an empty success.

### FAQ

**Can I scrape several products in one run?**

Yes. Submit up to 100 unique URLs or IDs. Limits apply per requested product.

**Can I collect only one-star reviews?**

Yes. Set both `minRating` and `maxRating` to `1`.

**Does it need a Sephora login?**

No. It extracts public review records and does not accept customer credentials.

**Does it require a proxy?**

No. The implementation uses Sephora's public structured review display surface rather than the protected product HTML page.

**Can it monitor new reviews?**

Yes. Schedule newest-first runs and compare stable `reviewId` values downstream.

**Are review photos downloaded?**

No. Dataset rows contain public media URLs, which keeps runs fast and exports compact.

**What export formats are available?**

Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.

### Related scrapers

Need to discover product IDs before collecting reviews?

Use [Sephora Search Scraper](https://apify.com/automation-lab/sephora-search-scraper) to find Sephora products, prices, ratings, and aggregate review counts by keyword.

Then pass its `productId` values to this Actor for individual review records.

### Support

If a valid public Sephora product repeatedly fails, open an issue from the Actor page.

Include:

- the product URL or ID;
- a small reproducible input;
- the run ID;
- the expected review scope;
- any relevant log message.

Do not include account credentials or private customer information.

# Actor input Schema

## `productUrls` (type: `array`):

Full sephora.com product page URLs. The Actor extracts the P-number automatically.

## `productIds` (type: `array`):

Product P-numbers such as P449116. Useful for bulk and API workflows.

## `maxReviewsPerProduct` (type: `integer`):

Maximum review rows saved for each requested Sephora product family.

## `sort` (type: `string`):

Choose how Sephora reviews are ordered before the limit is applied.

## `locale` (type: `string`):

Collect all English reviews or restrict results to US or Canadian English.

## `minRating` (type: `integer`):

Only save reviews with this star rating or higher.

## `maxRating` (type: `integer`):

Only save reviews with this star rating or lower.

## `includeRatingsOnly` (type: `boolean`):

When enabled, include rating-only submissions even if review text is empty.

## Actor input object example

```json
{
  "productUrls": [
    {
      "url": "https://www.sephora.com/product/born-in-roma-P449116"
    }
  ],
  "productIds": [],
  "maxReviewsPerProduct": 20,
  "sort": "newest",
  "locale": "allEnglish",
  "includeRatingsOnly": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "productUrls": [
        {
            "url": "https://www.sephora.com/product/born-in-roma-P449116"
        }
    ],
    "maxReviewsPerProduct": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/sephora-product-reviews-scraper").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 = {
    "productUrls": [{ "url": "https://www.sephora.com/product/born-in-roma-P449116" }],
    "maxReviewsPerProduct": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/sephora-product-reviews-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "productUrls": [
    {
      "url": "https://www.sephora.com/product/born-in-roma-P449116"
    }
  ],
  "maxReviewsPerProduct": 20
}' |
apify call automation-lab/sephora-product-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/sephora-product-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Sephora Product Reviews Scraper",
        "description": "Extract individual Sephora customer reviews, ratings, reviewer attributes, verified purchase signals, helpful votes, photos, and product context.",
        "version": "0.1",
        "x-build-id": "GmJLLqgHviKQ3HSvL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~sephora-product-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-sephora-product-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/automation-lab~sephora-product-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-sephora-product-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/automation-lab~sephora-product-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-sephora-product-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "productUrls": {
                        "title": "Sephora product URLs",
                        "type": "array",
                        "description": "Full sephora.com product page URLs. The Actor extracts the P-number automatically.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL",
                                    "description": "A public Sephora product page URL containing a P-number."
                                }
                            }
                        }
                    },
                    "productIds": {
                        "title": "Sephora product IDs",
                        "type": "array",
                        "description": "Product P-numbers such as P449116. Useful for bulk and API workflows.",
                        "items": {
                            "type": "string",
                            "pattern": "^[Pp][0-9]{4,}$"
                        },
                        "default": []
                    },
                    "maxReviewsPerProduct": {
                        "title": "Maximum reviews per product",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum review rows saved for each requested Sephora product family.",
                        "default": 100
                    },
                    "sort": {
                        "title": "Review order",
                        "enum": [
                            "newest",
                            "mostHelpful",
                            "highestRating",
                            "lowestRating"
                        ],
                        "type": "string",
                        "description": "Choose how Sephora reviews are ordered before the limit is applied.",
                        "default": "newest"
                    },
                    "locale": {
                        "title": "Review locale",
                        "enum": [
                            "allEnglish",
                            "en_US",
                            "en_CA"
                        ],
                        "type": "string",
                        "description": "Collect all English reviews or restrict results to US or Canadian English.",
                        "default": "allEnglish"
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only save reviews with this star rating or higher."
                    },
                    "maxRating": {
                        "title": "Maximum rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only save reviews with this star rating or lower."
                    },
                    "includeRatingsOnly": {
                        "title": "Include ratings without text",
                        "type": "boolean",
                        "description": "When enabled, include rating-only submissions even if review text is empty.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
