Scrape public Zalando search and category pages into product rows with verified names, SKU-scoped prices, optional brands, source pages, and parser diagnostics. Rows lacking a real card name or price are skipped.
Use it for ecommerce monitoring, assortment research, merchandising reports, competitor price checks, and API-driven catalog workflows.
At a glance
- Primary job: Extract priced Zalando products from public country-domain search, category, and product pages. Product-page inputs return only the requested SKU, never substitute recommendations.
- Input: Start URLs, optional search keyword/domain, result limit, proxy settings, and debug mode.
- Output: One dataset row per valid priced product, deduplicated by Zalando SKU/product ID.
- Best for: Small-to-medium recurring price and assortment checks where empty extraction should fail loudly.
Common workflows
- Keyword research: Run a Zalando keyword such as
cap,sneakers, orrunning shoesand export products to CSV or Excel. - Category monitoring: Paste a Zalando category URL and schedule repeat runs to compare prices over time; availability is included only when Zalando exposes it.
- Catalog enrichment: Feed product URLs, image URLs, IDs, prices, and brands into BI, pricing, or marketplace systems.
- Automation: Trigger runs through the Apify API, webhooks, MCP tools, or dataset integrations.
Input recipes
- Small smoke test:
startUrls: [{"url":"https://www.zalando.at/herren/?q=cap"}],maxItems: 3, residential proxy countryATif needed. - Keyword run: Set
query: "cap",domain: "zalando.at", andmaxItems: 25. - Category monitor: Paste a stable Zalando category URL, keep
maxItemsfocused, and schedule the Actor daily or weekly.
What data can you extract?
| Field | Description |
|---|---|
productId, sku |
Zalando article identifier parsed from product data or URL. |
url, pageUrl, sourceDomain |
Product URL, source listing/detail page, and Zalando country domain. |
brand, name |
Product brand and name when exposed in page data. |
price, originalPrice, currency, discount |
Current price and optional price metadata. |
color, sizes, availability |
Optional variant and availability data when exposed. |
imageUrls, description, breadcrumbs, categoryPath |
Product media and optional descriptive fields. |
scrapedAt, detailStatus, missingFields, parserVersion |
Run timestamp and diagnostics for monitoring parser quality; Listing runs mark detailStatus as not_requested; parsed product-page rows use enriched and include brand and image when exposed. |
Example input
{
"startUrls": [{ "url": "https://www.zalando.at/herren/?q=cap" }],
"query": "cap",
"domain": "zalando.at",
"maxItems": 3,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "AT"
}
}
Example output
{
"productId": "UR622E08F-A11",
"sku": "UR622E08F-A11",
"url": "https://www.zalando.at/urban-classics-loose-stoffhose-whitesand-ur622e08f-a11.html",
"sourceDomain": "zalando.at",
"query": "cap",
"pageUrl": "https://www.zalando.at/herren/?q=cap",
"brand": "Urban Classics",
"name": "Loose - Trousers",
"categoryPath": [],
"price": 34.99,
"originalPrice": null,
"currency": "EUR",
"discount": null,
"color": null,
"sizes": [],
"availability": null,
"imageUrls": [],
"description": null,
"breadcrumbs": [],
"scrapedAt": "2026-07-18T08:50:00.000Z",
"detailStatus": "not_requested",
"missingFields": [],
"parserVersion": "zalando-products-v1"
}
Tips for best results
- Start small: Use
maxItems: 3-10until the target domain and proxy settings are verified. - Use country-matched proxies: For country domains such as
.at, a matching residential country can improve consistency. - Avoid empty-success monitoring: The Actor fails when no priced products are extracted, so scheduled jobs do not silently produce empty datasets.
API usage
Node.js:
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/zalando-products-scraper").call({
startUrls: [{ url: "https://www.zalando.at/herren/?q=cap" }],
maxItems: 3
});
console.log(run.defaultDatasetId);
Python:
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/zalando-products-scraper").call(run_input={
"startUrls": [{ "url": "https://www.zalando.at/herren/?q=cap" }],
"maxItems": 3,
})
print(run["defaultDatasetId"])
cURL:
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~zalando-products-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"startUrls":[{"url":"https://www.zalando.at/herren/?q=cap"}],"maxItems":3}'
MCP and AI agents
Use this Actor from MCP-compatible tools through the official Apify MCP Server.
claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/zalando-products-scraper"
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/zalando-products-scraper"
}
}
}
Example prompt: "Run Zalando Products Scraper for a small Zalando Austria cap search and summarize product IDs, prices, and brands."
Limits and caveats
- Coverage: Zalando country pages differ; validate a small run before scheduling large jobs.
- Freshness: Prices and availability can change after a run finishes.
- Blocking: Some domains can return edge pages or sparse HTML; use debug mode for reproducible issue reports.
- Detail fields: V1 prioritizes stable priced product rows; optional fields are left empty when not exposed.
Legality and responsible use
Scrape only public data you are allowed to access. Follow Zalando terms, Apify terms, robots guidance where applicable, and privacy/data-protection laws.
Support
Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or URL, input JSON, expected output, actual output, and one reproducible public URL from Zalando.