Sephora Scraper (Global)
Apify actor that extracts complete Sephora product data — variants, prices, images, ingredients, and reviews — from 21 storefronts across the US, Canada, 9 EU markets, and 10 Asia-Pacific markets in a single normalized schema.
Key Features
21 storefronts in one actor — US, Canada, 9 EU markets, and 10 APAC markets covered by a single SKU
Auto-detected market — paste any sephora.* URL and the dispatcher routes it to the right module
Mixed multi-market runs — US + EU + SEA URLs in one startUrls list, streamed to a single dataset tagged with `market`
Locale-correct pricing — NZD, EUR, USD, AUD and 17 other currencies returned by Sephora's own localization layer
Normalized schema — every market emits the same `source / brand / title / options / variants / medias / stats` shape
Per-market session isolation — auth state cannot cross-contaminate between regions
Global circuit breaker — 50 consecutive failures abort the run to avoid burning compute on a downed target
Use Cases
- Pan-regional pricing intelligence across US, EU, and APAC beauty markets
- Cross-market product availability and assortment monitoring
- Competitive analysis for brands launching in new Sephora regions
- Ingredient comparisons across regional formulations
- Review and rating tracking — including SEA wishlist signals and US AI sentiment summaries
- Loyalty / membership pricing audits per market
Input Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
startUrls | array | Yes | Product or category URLs from any sephora.* storefront. Market is auto-detected from the hostname. |
market | string | No | Optional market override (us, eu-fr, eu-it, eu-de, eu-es, eu-pl, eu-cz, eu-gr, eu-ro, eu-pt, sea-nz, sea-au, sea-sg, sea-my, sea-th, sea-id, sea-ph, sea-hk, sea-tw, sea-bn). |
locale | string | No | Optional BCP 47 locale (e.g. fr-FR, en-NZ) — overrides the market default. |
categoryIds | array | No | EU-only. SFCC category IDs like C479 — alternative to pasting category URLs. |
proxy | object | No | Apify proxy config. Residential strongly recommended; pin apifyProxyCountry to the target market. |
maxConcurrency | number | No | Concurrent requests. Default 5. US: 2-5. EU: 3. SEA: 8-16. |
maxRequestsPerCrawl | number | No | Global hard cap across all markets. 0 = unlimited. |
Supported markets
| Region | Market ID | Country | Currency | Hostname |
|---|---|---|---|---|
| Americas | us | United States | USD | sephora.com |
| Americas | us | Canada | CAD | sephora.ca |
| EU | eu-fr | France | EUR | sephora.fr |
| EU | eu-it | Italy | EUR | sephora.it |
| EU | eu-de | Germany | EUR | sephora.de |
| EU | eu-es | Spain | EUR | sephora.es |
| EU | eu-pl | Poland | PLN | sephora.pl |
| EU | eu-cz | Czech Republic | CZK | sephora.cz |
| EU | eu-gr | Greece | EUR | sephora.gr |
| EU | eu-ro | Romania | RON | sephora.ro |
| EU | eu-pt | Portugal | EUR | sephora.pt |
| APAC | sea-nz | New Zealand | NZD | sephora.nz |
| APAC | sea-au | Australia | AUD | sephora.com.au |
| APAC | sea-sg | Singapore | SGD | sephora.sg |
| APAC | sea-my | Malaysia | MYR | sephora.com.my |
| APAC | sea-th | Thailand | THB | sephora.co.th |
| APAC | sea-id | Indonesia | IDR | sephora.co.id |
| APAC | sea-ph | Philippines | PHP | sephora.ph |
| APAC | sea-hk | Hong Kong | HKD | sephora.hk |
| APAC | sea-tw | Taiwan | TWD | sephora.tw |
| APAC | sea-bn | Brunei | BND | sephora.bn |
Output Example
1{
2 "market": "sea-nz",
3 "source": {
4 "id": 58792,
5 "canonicalUrl": "https://www.sephora.nz/products/rare-beauty-true-to-myself-natural-matte-longwear-foundation",
6 "retailer": "SEPHORA",
7 "currency": "NZD"
8 },
9 "brand": "Rare Beauty",
10 "title": "True To Myself Natural Matte Longwear Foundation",
11 "description": "<p>A self-priming and self-setting foundation...</p>",
12 "ingredients": "Aqua/Water, Cyclopentasiloxane, Glycerin...",
13 "currentSku": "770225",
14 "categories": ["makeup/face/foundation"],
15 "options": [
16 { "name": "shade", "id": "66488", "values": [{"value": "1 Fair Neutral", "orderable": true}] }
17 ],
18 "variants": [
19 {
20 "id": "276343",
21 "sku": "770225",
22 "price": { "current": 77.0, "original": 77.0, "stockStatus": "IN_STOCK" },
23 "options": [{"name": "shade", "value": "1 Fair Neutral"}],
24 "highlights": ["NEW", "Only at Sephora"],
25 "wishlisted": null
26 }
27 ],
28 "medias": [{ "url": "https://www.sephora.nz/.../foundation-shade.jpg", "type": "image" }],
29 "stats": { "reviewCount": 971, "rating": 4.8, "lovesCount": null }
30}
Tips
- Pin proxy country to the target market. A residential exit in a mismatched country is the single largest source of 403s from Sephora’s Akamai layer. Set
apifyProxyCountryto the storefront’s ISO code (US,FR,NZ, etc.). - Smoke-test first. Set
maxRequestsPerCrawl=10before your first production run in a new market. - Tune concurrency per region. US: 2-5. EU: 3. SEA: 8-16. Each market gets its own semaphore in mixed runs.
Frequently Asked Questions
Which Sephora storefronts does this scraper support?
Can I scrape multiple markets in a single run?
How does the scraper handle anti-bot protection?
Will my existing v1.x US run configs keep working?
Why are some fields null in SEA data?
Do I need separate API tokens or accounts per market?
Related Tools
Boohoo Scraper
Scrape Boohoo product data across 7 regional stores.
Learn moreFarfetch Scraper
Scrape luxury fashion products from Farfetch with multi-currency support.
Learn moreLululemon Scraper
Extract product data with variants and media from Lululemon.
Learn more