Zalando APIen.zalando.de ↗
Access Zalando's en.zalando.de catalog via API. Search products, browse categories, get product details, autocomplete suggestions, and list brands.
What is the Zalando API?
This API exposes 5 endpoints covering Zalando's English-language German storefront (en.zalando.de), returning product listings, detailed variant data, brand directories, and search autocomplete. The search_products endpoint accepts a keyword query and returns paginated results including price, SKU, brand, thumbnail URL, and per-product variant arrays. The get_product_detail endpoint resolves a single product URL to its full size variant list, current and original EUR prices, and color-inclusive product title.
curl -X GET 'https://api.parse.bot/scraper/6fe2b064-20ba-45ea-af26-c8dc78f75a30/get_category_products?page=1&category_slug=womens-clothing' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace en-zalando-de-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Zalando SDK — search, browse, detail, suggestions."""
from parse_apis.zalando_product_api import Zalando, Product, Brand, Category, ProductNotFound
zalando = Zalando()
# Search for products by keyword, capped at 5 total items
for product in zalando.products.search(query="red dress", limit=5):
print(product.product_title, product.brand, product.price_eur)
# Drill into one search result for full details
product = zalando.products.search(query="nike air max", limit=1).first()
if product:
detail = zalando.products.get(product_url=product.product_url)
print(detail.product_title, detail.brand, detail.price_eur)
for variant in detail.variants:
print(variant.size, variant.sku)
# Browse a category by constructing it from its slug
womens = zalando.category("womens-clothing")
for item in womens.products(limit=3):
print(item.product_title, item.brand, item.price_eur, item.status)
# Get autocomplete suggestions for a partial query
for suggestion in zalando.products.suggest(query="adi", limit=5):
print(suggestion)
# List available brands
for brand in zalando.brands.list(limit=5):
print(brand.name, brand.url)
# Handle a product-not-found error
try:
zalando.products.get(product_url="/nonexistent-product-xyz123.html")
except ProductNotFound as exc:
print(f"Product not found: {exc.product_url}")
print("exercised: products.search / products.get / category.products / products.suggest / brands.list")
Retrieve product listings from a Zalando category page. Returns a paginated list of products with pricing, brand, variant, and status information. Each page returns up to ~100 products depending on category size. Use category slugs like 'womens-clothing', 'shoes', or 'mens-clothing'.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| category_slugrequired | string | Category URL slug (e.g., 'womens-clothing', 'shoes', 'mens-clothing') |
{
"type": "object",
"fields": {
"page": "integer current page number",
"products": "array of product objects with product_id, sku, product_title, brand, price_eur, original_price_eur, currency, thumbnail_url, product_url, status, and variants",
"total_count": "integer total number of products returned on this page",
"brands_on_page": "array of unique brand name strings found on this page"
},
"sample": {
"data": {
"page": 1,
"products": [
{
"sku": "6CA51H1H2-G11",
"brand": "Calvin Klein",
"status": "Mix and match",
"currency": "EUR",
"variants": [
{
"sku": "6CA51H1H2-G110ONE000",
"size": "One Size",
"variant_id": "6CA51H1H2-G110ONE000"
}
],
"price_eur": 99.95,
"product_id": "6CA51H1H2-G11",
"product_url": "https://en.zalando.de/calvin-klein-small-shoulder-bag-handbag-alluring-pink-6ca51h1h2-g11.html",
"product_title": "SMALL SHOULDER BAG - Handbag - alluring pink",
"thumbnail_url": "https://img01.ztat.net/article/spp-media-p1/example.jpg",
"product_handle": "calvin-klein-small-shoulder-bag-handbag-alluring-pink-6ca51h1h2-g11",
"original_price_eur": 99.95
}
],
"total_count": 69,
"brands_on_page": [
"Anna Field",
"Bershka",
"Calvin Klein"
]
},
"status": "success"
}
}About the Zalando API
Product Search and Category Browsing
The search_products endpoint takes a query string (e.g., 'nike shoes', 'red dress') and an optional page integer, returning an array of product objects. Each object includes product_id, sku, product_title, brand, price_eur, original_price_eur, currency, and thumbnail_url. The get_category_products endpoint works the same way but accepts a category_slug (e.g., 'womens-clothing', 'shoes') instead of a keyword, and additionally returns a brands_on_page array listing every unique brand name found in that page of results.
Product Detail and Variants
The get_product_detail endpoint accepts a full product URL or URL path and returns a richer record: all variants as an array of objects with variant_id, sku, and size; price_eur and original_price_eur for discount delta calculation; and product_title which includes the color variant name. This endpoint is the right choice when you need size-level availability data rather than the summary fields returned by search and category listings.
Brands and Autocomplete
The get_brands_list endpoint requires no inputs and returns the full catalog of brands available on Zalando, with each entry containing name, url, and internal id. The get_search_suggestions endpoint takes a partial query string (e.g., 'nik', 'adid') and returns a suggestions array of autocomplete phrase strings, which is useful for building typeahead interfaces or expanding keyword coverage for scraping pipelines.
Pagination and Currency
Both search_products and get_category_products return a page integer and total_count reflecting products on the current page (not a grand total across all pages). All price fields are denominated in EUR. The currency field in product objects confirms the denomination.
The Zalando API is a managed, monitored endpoint for en.zalando.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when en.zalando.de changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official en.zalando.de API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track price drops on specific Zalando products by polling
get_product_detailand comparingprice_euragainstoriginal_price_eur. - Build a brand-filtered product feed by combining
get_brands_listbrand IDs withsearch_productskeyword queries. - Monitor which brands appear in a category using the
brands_on_pagefield fromget_category_products. - Populate a typeahead search box with Zalando suggestions by calling
get_search_suggestionson partial user input. - Aggregate size availability across a product line by collecting
variantsarrays from multipleget_product_detailcalls. - Compare current vs. original EUR prices across a category page to identify discount patterns in a fashion segment.
- Index Zalando's brand directory for competitor or market research using the
name,url, andidfields fromget_brands_list.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Zalando have an official developer API?+
What does `get_category_products` return that `search_products` does not?+
get_category_products endpoint returns a brands_on_page array listing every unique brand name found in the current page of category results. The search_products endpoint does not include this field. Both return the same core product object structure including sku, price_eur, original_price_eur, thumbnail_url, and brand.Does the API return stock availability or inventory counts?+
get_product_detail endpoint returns size variants with variant_id, sku, and size, but does not include a stock count or in-stock boolean per size. You can fork this API on Parse and revise it to add an availability field if that data is present on the product page.Does `total_count` in search and category results reflect the full catalog count for a query?+
total_count field reflects the number of products returned on the current page, not the grand total across all pages. To estimate full result set size, you need to paginate through multiple pages using the page parameter.