Tony Wang7 min de lecturaCómo hacer scraping de Zalando en 2026 (API y Python)
Tres formas de extraer datos de Zalando en 25 mercados europeos en 2026 — DIY, sin código o una API estructurada.
La forma más rápida de hacer scraping de Zalando en 2026 es llamar a una API estructurada que devuelva JSON normalizado — búsqueda por palabra clave, navegación por categoría y marca, detalle de producto y autocompletado del buscador — en lugar de analizar el HTML de Zalando por tu cuenta. Puedes construir un scraper propio en Python, pero las tiendas por país de Zalando, las páginas hidratadas por GraphQL y las defensas anti-bot lo vuelven costoso de mantener.
Zalando no ofrece una API pública de autoservicio para leer su catálogo de productos. Sí opera un Partner Program (zDirect) para marcas y minoristas que ya venden en Zalando, que les permite gestionar listados, precios y pedidos — pero es una herramienta para comercios con acceso controlado, no una forma de que equipos externos busquen o investiguen la tienda. Una API de scraping estructurada es la vía práctica para el monitoreo de precios, la investigación de surtido y las comparaciones entre mercados.
¿Por qué hacer scraping de datos de Zalando?
- Monitoreo de precios — rastrea cómo cambian con el tiempo el precio, el descuento y la disponibilidad de un SKU específico en una tienda.
- Comparación de precios entre mercados — el mismo producto puede tener precios distintos en los 25 dominios de país de Zalando; compara de vs. fr vs. gb para la misma marca.
- Investigación de categorías y tendencias — observa qué marcas, siluetas y categorías ganan volumen de listados o mayor profundidad de descuento.
- Seguimiento de competidores y surtido — mira qué marcas incluye la categoría de un competidor y cómo cambia su catálogo a lo largo de una temporada.
- Pipelines de IA y datos — alimenta listados normalizados de moda y calzado a modelos de precios, herramientas de surtido o dashboards de inteligencia de retail.
¿Es legal hacer scraping de Zalando?
Los términos y condiciones estándar de Zalando se reservan el derecho de rechazar o cancelar un pedido "realizado mediante el uso de software, robot, rastreador, spider o cualquier sistema automatizado o comportamiento programado" — esa cláusula apunta al checkout automatizado (bots comprando lanzamientos limitados), no a una prohibición general de navegar o leer páginas públicas. El robots.txt de Zalando prohíbe un conjunto específico de rutas — /api/*, /cart/*, /wardrobe/*, /myaccount/*, /reco-catalog/, /assistant, /opinions* — pero no incluye una prohibición general sobre páginas de catálogo, búsqueda o producto, y no tiene reglas específicas para rastreadores de IA. En Estados Unidos, los tribunales han sostenido repetidamente que hacer scraping de páginas de acceso público no viola la Computer Fraud and Abuse Act, incluso cuando los términos de un sitio lo restringen (ver hiQ Labs v. LinkedIn, citado más abajo) — pero infringir los términos de servicio igualmente puede provocar el baneo de una cuenta o una IP, y los usuarios de la UE además están cubiertos por el RGPD cuando hay datos personales involucrados.
En la práctica:
- Recolecta solo datos públicos de búsqueda, categoría, producto y autocompletado — nada de páginas con inicio de sesión requerido, como carrito, armario (wardrobe) o cuenta.
- Respeta el robots.txt y los límites de tasa; no satures la tienda de un mercado con solicitudes concurrentes.
- Los precios y el stock de Zalando varían según el dominio de país y la moneda; trata cada mercado como un conjunto de datos separado en lugar de asumir que un precio aplica en todas partes.
- No reutilices fotos de producto ni textos de marketing más allá de lo que tu caso de uso y la ley de derechos de autor permitan; el precio, la marca, el SKU y la disponibilidad de talla son hechos, pero las imágenes y descripciones son contenido de Zalando o de la marca.
Opción 1: Hacerlo tú mismo en Python (y por qué se rompe)
El enfoque ingenuo consiste en obtener una página de resultados de búsqueda y analizar las tarjetas de producto:
import csv, requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://en.zalando.de/catalogue/",
params={"q": "running shoes"},
headers={"User-Agent": "Mozilla/5.0", "Accept-Language": "en-US,en;q=0.9"},
)
soup = BeautifulSoup(resp.text, "html.parser")
rows = []
for card in soup.select("article[data-testid='catalog-article']"):
name = card.select_one("h3")
price = card.select_one("[data-testid='price-formatted']")
rows.append({"name": name.get_text(strip=True) if name else None,
"price": price.get_text(strip=True) if price else None})
with open("zalando.csv", "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=["name", "price"]); w.writeheader(); w.writerows(rows)
# ...luego hay que mantener vivos estos selectores, manejar el contenido hidratado por GraphQL y elegir el dominio de mercado correcto
Funciona una vez, y luego empieza el mantenimiento:
- Renderizado del lado del cliente e hidratado por GraphQL. Los resultados de búsqueda y sugerencias están respaldados por una API interna de GraphQL (
/api/graphql/), así que un simplerequests.get()a menudo devuelve solo una cáscara vacía — necesitas un navegador headless o el payload exacto de GraphQL para obtener datos reales de producto. - 25 tiendas de país separadas.
en.zalando.de,www.zalando.fr,www.zalando.co.uk,www.zalando.it, y 21 más, cada una con su propio dominio, moneda y — en muchas categorías — su propio slug de URL en el idioma local para la misma categoría. - Defensas anti-bot. Las IP de datacenter reciben limitación de tasa o bloqueos, así que necesitas proxies residenciales rotativos y encabezados realistas.
- Variantes multi-talla. Una sola página de producto abarca varias tallas, cada una con su propio SKU, GTIN, precio y estado de stock — analizar "el precio" implica elegir la variante correcta para tu caso de uso.
- Cambios en los selectores. Zalando rediseña periódicamente su cuadrícula y sus páginas de producto, lo que rompe los selectores CSS escritos a mano sin previo aviso.
Opción 2: Herramientas sin código / listas para usar
Las extensiones de navegador y los scrapers de apuntar y hacer clic pueden exportar una página de resultados de búsqueda, pero el monitoreo de precios y la comparación entre mercados implican volver a ejecutar la misma consulta en un cronograma a través de múltiples dominios de país y almacenar el historial. Eso es un trabajo de pipeline recurrente, mejor servido por una API que puedas llamar desde un script o un cron job que por una herramienta de exportación manual.
Opción 3: Una API estructurada de Zalando
La API de Zalando de Crawlora envuelve el manejo de solicitudes, el renderizado y el parseo detrás de endpoints documentados para búsqueda, navegación por categoría y marca, detalle de producto, autocompletado y la lista de mercados soportados. Cada endpoint de catálogo requiere un market explícito.
Empieza con la lista de mercados, ya que es la referencia para cada otra llamada:
curl "https://api.crawlora.net/api/v1/zalando/markets" \
-H "x-api-key: $CRAWLORA_API_KEY"
{"code":200,"msg":"OK","data":{"count":25,"markets":[
{"code":"de","domain":"en.zalando.de"},
{"code":"fr","domain":"www.zalando.fr"},
{"code":"gb","domain":"www.zalando.co.uk"},
{"code":"it","domain":"www.zalando.it"}
]}}
Luego, busca en un mercado específico por palabra clave:
import requests
BASE = "https://api.crawlora.net/api/v1/zalando"
headers = {"x-api-key": "YOUR_API_KEY"}
resp = requests.get(f"{BASE}/search", headers=headers, params={"q": "running shoes", "market": "de"})
for p in resp.json()["data"]["products"]:
print(p["sku"], p["brand"], p["name"], p["price"], p["currency"])
Una respuesta es JSON normalizado (confirma los campos exactos en la documentación):
{
"code": 200,
"msg": "OK",
"data": {
"query": "running shoes",
"market": "de",
"count": 24,
"total_count": 4911,
"source_url": "https://en.zalando.de/catalogue/?q=running+shoes",
"fetched_at": "2026-07-01T12:00:00Z",
"products": [
{
"sku": "N1241A1HR-I11",
"name": "PEGASUS 42 SE - Road running shoes",
"brand": "Nike Performance",
"url": "https://en.zalando.de/nike-performance-pegasus-42-se-road-running-shoes-n1241a1hr-i11.html",
"image": "https://img01.ztat.net/article/spp-media-p1/example.jpg?imwidth=400",
"silhouette": "LOW_SHOE",
"price": 97.95,
"original_price": 149.95,
"discount_percent": 52,
"currency": "EUR"
}
]
}
}
A partir de un resultado de búsqueda o categoría, pasa el mismo sku y market a product para obtener el detalle completo, incluyendo las variantes por talla:
product = requests.get(f"{BASE}/product", headers=headers, params={"sku": "N1241A1HR-I11", "market": "de"}).json()["data"]["product"]
for v in product["variants"]:
print(v["size"], v["sku"], v["price"], v["availability"])
{"sku":"ONM11A03W-A12","name":"CLOUD 6 - Trainers - white white","brand":"On","color":"white white/white",
"price":160,"currency":"EUR",
"variants":[{"size":"36","sku":"ONM11A03W-A120005000","gtin":"7615537206202","price":160,"currency":"EUR","availability":"InStock"}]}
Navega por un slug de categoría o marca (los slugs son específicos de cada mercado — shoes en de/gb, chaussures en fr, scarpe en it), y autocompleta una consulta parcial:
category = requests.get(f"{BASE}/category", headers=headers, params={"category": "shoes", "market": "de"}).json()["data"]
suggest = requests.get(f"{BASE}/suggest", headers=headers, params={"q": "running sho", "market": "de"}).json()["data"]["suggestions"]
# suggest -> ["running shoes", "running shoes nike", "running shoes adidas", ...]
search y category devuelven ambos total_count, el conteo total de coincidencias del proveedor, junto con la primera página de resultados — la paginación profunda aún no está disponible, así que trata total_count como una señal de tendencia y no como algo que puedas recorrer por completo.
Qué puedes recolectar
- Resultados de búsqueda: SKU, nombre, marca, precio, precio original, porcentaje de descuento, silueta e imagen, delimitados por mercado
- Listados de categoría y marca, más el
total_countdel proveedor para esa categoría - Detalle de producto: marca, color, descripción, todas las imágenes y variantes por talla (SKU, GTIN, precio, moneda, disponibilidad)
- Completados de autocompletado del buscador para una consulta parcial
- La lista completa de los 25 mercados soportados con sus dominios
Limitaciones
- No hay API pública de catálogo. La Shop Public API de Zalando fue archivada sin un lanzamiento público; su API zDirect Partner es solo para comercios, así que el acceso completo al catálogo desde afuera todavía implica hacer scraping.
- Fragmentación por mercado. El precio, la moneda e incluso los slugs de categoría son por país; comparar mercados implica consultar cada uno por separado y normalizar la moneda tú mismo.
- Solo resultados de la primera página. Las llamadas de búsqueda y categoría devuelven la primera página que renderiza Zalando más el
total_count— la paginación profunda aún no está soportada. - Renderizado anti-bot e hidratado por GraphQL. Las solicitudes HTTP simples contra la tienda de Zalando no son confiables; una API estructurada maneja encabezados, renderizado y reintentos detrás de una sola clave.
- El contenido multimedia tiene derechos de autor. El precio, la marca, el SKU y el estado de stock son hechos que puedes recolectar; las fotos de producto y los textos de marketing tienen derechos de autor — no los republiques más allá de lo que permitan tu caso de uso y la ley.
Dónde se usa esto
- Monitoreo de precios y descuentos para una marca o categoría específica en una o más tiendas
- Comparación de precios de moda entre mercados e investigación de arbitraje
- Seguimiento de surtido y tendencias segmentado por marca, categoría o silueta
- Pipelines de enriquecimiento que alimentan datos normalizados de ropa y calzado a herramientas de precios o inteligencia de retail
Fuentes
Empieza a recolectar
Pruébalo primero, gratis: ejecuta cualquier URL pública con el Free Web Scraper, o revisa si un sitio bloquea bots con el Anti-Bot Checker — sin necesidad de registro.
Los datos de Zalando combinan bien con otras APIs de marketplaces de moda para investigación entre plataformas — mira cómo hacer scraping de Vinted para precios de moda de segunda mano, cómo hacer scraping de Etsy para productos artesanales y vintage, o cómo hacer scraping de Target para una comparación de mercancía general en Estados Unidos. Empieza probando el endpoint en el Playground, lee el esquema de solicitud y respuesta en la documentación de la API, y revisa los costos en créditos en la página de precios. ¿No estás seguro de si esto es legal para tu caso de uso? Lee primero ¿Es legal el web scraping en 2026?.
Parte de nuestra serie de guías how-to-scrape — todas las plataformas que cubrimos, en un solo índice.
Preguntas frecuentes
Does Zalando have a public API for product or search data?
No. Zalando's Shop Public API was archived without ever being opened to the public, and its zDirect Partner Program API is scoped to merchants that already sell on Zalando managing their own listings, prices, and orders — not to outside teams searching or researching the catalog.
How do I search Zalando products with an API?
Send a keyword and a market code (e.g. de, fr, gb) to Crawlora's /zalando/search endpoint and get normalized product results — SKU, name, brand, price, discount, and image — as structured JSON.
Why does every Zalando endpoint need a market parameter?
Zalando runs a fully separate storefront per European country — 25 markets in total — each with its own domain, currency, and often its own local-language category slugs. There is no default storefront, so search, category, and product calls all require an explicit market, and prices for the same product can differ by market.
Can I compare Zalando prices across different countries?
Yes, but each market has to be queried separately. Call the same search or product endpoint once per market code (e.g. de, fr, it) and compare the returned price and currency fields yourself — Crawlora doesn't merge markets into one response.
Is it legal to scrape Zalando?
Zalando's terms reserve the right to refuse or cancel orders placed by bots or scripted automation, and its robots.txt disallows a specific set of paths (like /api/*, /cart/*, and /myaccount/*) without a blanket disallow on catalog or product pages. Collecting public search, category, and product data is a lower-risk starting point than anything login-gated, but this isn't legal advice — read Is Web Scraping Legal in 2026? for the fuller picture.
Does the Zalando API require a Zalando account or API key?
No Zalando account or API key is required from the caller — only your Crawlora API key.
Can I get every size and price variant for a Zalando product?
Yes. The /zalando/product endpoint returns a variants array with one entry per available size, each carrying its own SKU, GTIN, price, currency, and availability status.