~/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 tiendas de Sephora en EE. UU., Canadá, 9 mercados de la UE, 6 mercados de Oriente Medio, el Reino Unido, India y 10 mercados de Asia-Pacífico, en un único esquema normalizado.

belleza PythonCrawlee Estados UnidosCanadáFranciaItaliaAlemaniaEspañaPoloniaChequiaGreciaRumaníaPortugalEmiratos Árabes UnidosArabia SauditaBaréinOmánKuwaitCatarReino UnidoIndiaNueva ZelandaAustraliaSingapurMalasiaTailandiaIndonesiaFilipinasHong KongTaiwánBrunéi
proooxy/sephora-scraper — spec
categoríaecommerce / belleza
lenguajePython
stackPython, Crawlee
mercadosEstados Unidos, Canadá, Francia, Italia, Alemania, España, Polonia, Chequia, Grecia, Rumanía, Portugal, Emiratos Árabes Unidos, Arabia Saudita, Baréin, Omán, Kuwait, Catar, Reino Unido, India, Nueva Zelanda, Australia, Singapur, Malasia, Tailandia, Indonesia, Filipinas, Hong Kong, Taiwán, Brunéi
salidaJSON limpio y listo para RAG

características clave

Un solo actor para EE. UU., Canadá, 9 mercados de la UE, 6 mercados de Oriente Medio, el Reino Unido, India y 10 mercados de APAC

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 — la divisa propia de cada tienda (24 en total, desde USD y EUR hasta AED e INR), tal como la devuelve 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-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).
localestringopcionalConfiguración regional BCP 47 opcional (por ejemplo fr-FR, en-NZ) — anula el valor por defecto del mercado.
categoryIdsarrayopcionalEU, Oriente Medio, Reino Unido e India. IDs de categoría en el formato propio de cada mercado (p. ej. C479 en las tiendas de la UE) — alternativa a pegar URLs de categoría.
onlyNewProductsbooleanopcionalSolo productos añadidos recientemente: un filtro del lado del servidor en US/Canadá y FR, IT, DE, ES, PL, RO, PT; páginas de listado ordenadas por más nuevo primero en SEA e India. No es compatible en el resto.
newProductsPageLimitnumberopcionalPáginas de listado por categoría cuando onlyNewProducts se ejecuta en SEA o India. Por defecto 3.
advancedFilterstringopcionalSolo listados de categoría de US/Canadá: una expresión de refinamiento en bruto como filters[isNew]=true.
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
Oriente Mediomena-aeEmiratos Árabes UnidosAEDsephora.me/ae-en
Oriente Mediomena-saArabia SauditaSARsephora.me/sa-en
Oriente Mediomena-bhBaréinBHDsephora.me/bh-en
Oriente Mediomena-omOmánOMRsephora.me/om-en
Oriente Mediomena-kwKuwaitKWDsephora.me/kw-en
Oriente Mediomena-qaCatarQARsephora.me/qa-en
Reino UnidoukReino UnidoGBPsephora.co.uk
IndiainIndiaINRsephora.in
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. 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?
EE. UU. (sephora.com), Canadá (sephora.ca), 9 mercados de la UE (FR, IT, DE, ES, PL, CZ, GR, RO, PT), 6 mercados de Oriente Medio en sephora.me (AE, SA, BH, OM, KW, QA), el Reino Unido (sephora.co.uk), India (sephora.in), y 10 mercados de APAC (NZ, AU, SG, MY, TH, ID, PH, HK, TW, BN). El mercado se detecta automáticamente a partir de la URL — el hostname, o el prefijo de ruta al estilo /ae-en/ en sephora.me — así que las ejecuciones con mercados mixtos no requieren ningún input adicional.
¿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?
Todos los mercados pasan por proxies residenciales, con reintentos automáticos en una sesión nueva cuando se bloquea una petición. Fija el país del proxy al mercado de la tienda para obtener la mejor tasa de éxito.
¿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