Sephora Scraper (Global)
Apify actor that extracts complete Sephora product data — variants, prices, images, ingredients, and reviews — from Sephora storefronts in the US, Canada, 9 EU markets, 6 Middle East markets, the UK, India, and 10 Asia-Pacific markets, in a single normalized schema.
key features
One actor for the US, Canada, 9 EU markets, 6 Middle East markets, the UK, India, and 10 APAC markets
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 — each storefront's own currency (24 in all, from USD and EUR to AED and INR), as Sephora's own localization layer returns it
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 | required | Product or category URLs from any sephora.* storefront. Market is auto-detected from the hostname. |
market | string | optional | Optional market override (us, eu-fr, eu-it, eu-de, eu-es, eu-pl, eu-ro, eu-pt, eu-cz, eu-gr, mena-ae, mena-sa, mena-bh, mena-om, mena-kw, mena-qa, uk, in, sea-nz, sea-au, sea-sg, sea-my, sea-th, sea-id, sea-ph, sea-hk, sea-tw, sea-bn). |
locale | string | optional | Optional BCP 47 locale (e.g. fr-FR, en-NZ) — overrides the market default. |
categoryIds | array | optional | EU, Middle East, UK, and India. Category IDs in the market's own format (e.g. C479 on EU storefronts) — an alternative to pasting category URLs. |
onlyNewProducts | boolean | optional | Only recently added products: a server-side filter on US/Canada and FR, IT, DE, ES, PL, RO, PT; newest-first listing pages on SEA and India. Not supported elsewhere. |
newProductsPageLimit | number | optional | Listing pages per category when onlyNewProducts runs on SEA or India. Default 3. |
advancedFilter | string | optional | US/Canada category listings only: a raw refinement expression such as filters[isNew]=true. |
proxy | object | optional | Apify proxy config. Residential strongly recommended; pin apifyProxyCountry to the target market. |
maxConcurrency | number | optional | Concurrent requests. Default 5. US: 2-5. EU: 3. SEA: 8-16. |
maxRequestsPerCrawl | number | optional | 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 |
| Middle East | mena-ae | United Arab Emirates | AED | sephora.me/ae-en |
| Middle East | mena-sa | Saudi Arabia | SAR | sephora.me/sa-en |
| Middle East | mena-bh | Bahrain | BHD | sephora.me/bh-en |
| Middle East | mena-om | Oman | OMR | sephora.me/om-en |
| Middle East | mena-kw | Kuwait | KWD | sephora.me/kw-en |
| Middle East | mena-qa | Qatar | QAR | sephora.me/qa-en |
| UK | uk | United Kingdom | GBP | sephora.co.uk |
| India | in | India | INR | sephora.in |
| 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. 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.
faq
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 in ~/ecommerce
ASOS Scraper — Prices, Stock per Size, Reviews & Categories
Every ASOS product and category — prices, stock per size, barcodes and reviews in 12 storefronts.
openWooCommerce Scraper — Products, Prices, Stock & Reviews
Products, variations, stock and reviews from any WooCommerce store.
openTalabat Mart Scraper — Dubai Grocery Prices & SKUs
Grocery SKUs, prices, and live stock from Talabat Mart dark stores in Dubai.
open