~/ecommerce/sephora-scraper

Scraper de Sephora (Global)

Apify Actor que extrae datos completos de producto de Sephora — variantes, precios, imágenes, ingredientes y reseñas — de 21 tiendas en EE. UU., Canadá, 9 mercados de la UE y 10 mercados de Asia-Pacífico, en un único esquema normalizado.

belleza >99% de éxito PythonCrawleecurl_cffi Estados UnidosCanadáFranciaItaliaAlemaniaEspañaPoloniaChequiaGreciaRumaníaPortugalNueva ZelandaAustraliaSingapurMalasiaTailandiaIndonesiaFilipinasHong KongTaiwánBrunéi
proooxy/sephora-scraper — spec
categoríaecommerce / belleza
lenguajePython
stackPython, Crawlee, curl_cffi
mercadosEstados Unidos, Canadá, Francia, Italia, Alemania, España, Polonia, Chequia, Grecia, Rumanía, Portugal, Nueva Zelanda, Australia, Singapur, Malasia, Tailandia, Indonesia, Filipinas, Hong Kong, Taiwán, Brunéi
éxito>99%
salidaJSON limpio y listo para RAG

características clave

21 tiendas en un solo actor — EE. UU., Canadá, 9 mercados de la UE y 10 mercados de APAC cubiertos por un único SKU

Mercado autodetectado — pega cualquier URL sephora.* y el dispatcher la enruta al módulo correcto

Ejecuciones multimercado combinadas — URLs de US + EU + SEA en una sola lista startUrls, transmitidas a un único dataset etiquetado con `market`

Precios correctos por configuración regional — NZD, EUR, USD, AUD y otras 17 divisas devueltas por la propia capa de localización de Sephora

Esquema normalizado — cada mercado emite la misma forma `source / brand / title / options / variants / medias / stats`

Aislamiento de sesión por mercado — el estado de autenticación no puede contaminarse entre regiones

Circuit breaker global — 50 fallos consecutivos interrumpen la ejecución para no desperdiciar cómputo en un objetivo caído

casos de uso

  • Inteligencia de precios panregional en los mercados de belleza de EE. UU., la UE y APAC
  • Monitorización de disponibilidad y surtido de producto entre mercados
  • Análisis competitivo para marcas que se lanzan en nuevas regiones de Sephora
  • Comparación de ingredientes entre formulaciones regionales
  • Seguimiento de reseñas y valoraciones — incluyendo señales de wishlist de SEA y resúmenes de sentimiento por IA de US
  • Auditorías de precios de fidelización/membresía por mercado

parámetros de entrada

ParámetroTipoObligatorioDescripción
startUrlsarrayobligatorioURLs de producto o categoría de cualquier tienda sephora.*. El mercado se detecta automáticamente a partir del hostname.
marketstringopcionalAnulación opcional de mercado (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).
localestringopcionalConfiguración regional BCP 47 opcional (por ejemplo fr-FR, en-NZ) — anula el valor por defecto del mercado.
categoryIdsarrayopcionalSolo EU. IDs de categoría de SFCC como C479 — alternativa a pegar URLs de categoría.
proxyobjectopcionalConfiguración de Apify Proxy. Se recomienda encarecidamente residencial; fija apifyProxyCountry al mercado objetivo.
maxConcurrencynumberopcionalSolicitudes concurrentes. Por defecto 5. US: 2-5. EU: 3. SEA: 8-16.
maxRequestsPerCrawlnumberopcionalLímite máximo global en todos los mercados. 0 = sin límite.

Mercados admitidos

RegiónID de mercadoPaísDivisaHostname
AméricausEstados UnidosUSDsephora.com
AméricausCanadáCADsephora.ca
UEeu-frFranciaEURsephora.fr
UEeu-itItaliaEURsephora.it
UEeu-deAlemaniaEURsephora.de
UEeu-esEspañaEURsephora.es
UEeu-plPoloniaPLNsephora.pl
UEeu-czChequiaCZKsephora.cz
UEeu-grGreciaEURsephora.gr
UEeu-roRumaníaRONsephora.ro
UEeu-ptPortugalEURsephora.pt
APACsea-nzNueva ZelandaNZDsephora.nz
APACsea-auAustraliaAUDsephora.com.au
APACsea-sgSingapurSGDsephora.sg
APACsea-myMalasiaMYRsephora.com.my
APACsea-thTailandiaTHBsephora.co.th
APACsea-idIndonesiaIDRsephora.co.id
APACsea-phFilipinasPHPsephora.ph
APACsea-hkHong KongHKDsephora.hk
APACsea-twTaiwánTWDsephora.tw
APACsea-bnBrunéiBNDsephora.bn

Ejemplo de salida

 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}

Consejos

  • Fija el país del proxy al mercado objetivo. Una salida residencial en un país no coincidente es, con diferencia, la mayor fuente de errores 403 de la capa Akamai de Sephora. Establece apifyProxyCountry con el código ISO de la tienda (US, FR, NZ, etc.).
  • Haz primero una prueba de humo (smoke test). Establece maxRequestsPerCrawl=10 antes de tu primera ejecución de producción en un mercado nuevo.
  • Ajusta la concurrencia por región. US: 2-5. EU: 3. SEA: 8-16. Cada mercado obtiene su propio semáforo en las ejecuciones combinadas.

faq

¿Qué tiendas de Sephora admite este scraper?
21 tiendas: EE. UU. (sephora.com), Canadá (sephora.ca), 9 mercados de la UE (FR, IT, DE, ES, PL, CZ, GR, RO, PT) y 10 mercados de APAC (NZ, AU, SG, MY, TH, ID, PH, HK, TW, BN). El mercado se detecta automáticamente a partir del hostname — no hace falta cambiar el input al combinar mercados.
¿Puedo extraer varios mercados en una sola ejecución?
Sí. Combina URLs de sephora.com, sephora.fr y sephora.nz en una sola lista startUrls. El dispatcher las agrupa por mercado, ejecuta cada módulo de forma concurrente con la autenticación adecuada a cada mercado, y etiqueta cada elemento del dataset con un campo `market`.
¿Cómo gestiona el scraper la protección anti-bot?
Usa proxies residenciales para todos los mercados y curl_cffi para huella TLS de nivel navegador en el tráfico de EU y SEA, con el fin de evadir Akamai. El tráfico de US usa el HttpCrawler de Crawlee con un pool de sesiones que rota ante 403/429.
¿Seguirán funcionando mis configuraciones de ejecución v1.x de US existentes?
Sí. Los inputs anteriores a 2.0 — startUrls, maxConcurrency, proxy, maxRequestsPerCrawl — se comportan de forma idéntica. El único cambio en la salida es una nueva clave `market` en cada elemento, un cambio aditivo no disruptivo.
¿Por qué algunos campos son null en los datos de SEA?
La API de Sephora SEA no expone un contador `lovesCount`, así que los elementos de APAC tienen `stats.lovesCount = null`. Cada variante tiene en su lugar un campo booleano `wishlisted`. A la inversa, `sentiments` (resúmenes de reseñas por IA) y `source.crawlUrl` son exclusivos de US.
¿Necesito tokens de API o cuentas separadas por mercado?
No. Tu token de API de Apify existente funciona sin cambios. El actor gestiona internamente los tokens de invitado por mercado — no se requieren credenciales para EU/SEA, y US funciona con los proxies residenciales estándar de Apify.

relacionado en ~/ecommerce

Ejecuta Scraper de Sephora (Global), o consigue un desarrollo a medida

Empieza a extraer datos en Apify en minutos, o contrátame para construir un scraper a medida y un pipeline de datos RAG para tu fuente y esquema exactos.

ejecutar en Apify obtener datos a medida