# Zalando Scraper - Products, Prices, Sizes & Stock (`scrapesage/zalando-scraper`) Actor

Scrape Zalando by category, brand or product URL: live price, original price & discount %, size availability, brand, colour, materials, all images & reviews. 15 EU markets. Monitor price drops & restocks. No login, no browser.

- **URL**: https://apify.com/scrapesage/zalando-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** E-commerce, Lead generation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 product scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Zalando Scraper — Products, Prices, Sizes & Stock (Brands, Discounts & Images)

Extract **complete Zalando product data** across **15 European markets** — including the fields other scrapers leave empty: **live price, original price & exact discount %, the full size matrix with per‑size availability, accurate brand & colour, materials, product description, delivery & return policy, rating, and every hi‑res image**. Track **price drops and restocks** with built‑in monitor mode.

No login, no cookies, no browser — fast JSON extraction straight from Zalando's own page data, with datacenter‑friendly reliability.

### Why this Zalando scraper?

Most Zalando scrapers parse the listing grid and return `null` for price, sizes, and stock. This actor pulls data from Zalando's internal hydration cache (the same data the site renders) and ships the **richest dataset in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| Live price + original price + discount % | partial | ✅ exact |
| Size matrix with **per‑size availability** | ❌ | ✅ |
| In‑stock / sold‑out (derived from sizes) | ❌ | ✅ |
| Brand + colour + colour variants | partial | ✅ |
| Materials / attributes | ❌ | ✅ |
| Product description | ❌ | ✅ |
| Delivery fee, return window, returnable | ❌ | ✅ |
| Rating + review count | ❌ | ✅ when present |
| All hi‑res images | partial | ✅ |
| 15 EU markets (DE/AT/CH/FR/IT/ES/NL/BE/PL/SE/DK/FI/CZ/UK/IE) | ❌ | ✅ |
| Price‑drop / restock monitor (`changeType`) | ❌ | ✅ |

### Use cases

- **Price & discount monitoring** — track live vs. original prices and sale velocity across categories and brands; get alerted on price drops with monitor mode + [Schedules](https://docs.apify.com/platform/schedules).
- **Stock / availability tracking** — watch per‑size availability and catch restocks and sell‑outs of the styles you care about.
- **Repricing & competitive intelligence** — benchmark your assortment against Zalando pricing in every market and currency.
- **Assortment & trend research** — pull entire categories or brands with brand, colour, materials, and images for catalog analysis and merchandising.
- **Affiliate & comparison feeds** — power price‑comparison sites and shopping feeds with clean, structured product data.
- **Dropshipping & sourcing** — find discounted, in‑stock styles by brand, price and market.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Zalando Scraper**, paste one or more **category / brand URLs** (e.g. `https://www.zalando.de/nike/`) into **Start URLs**, set a max, and click **Start**.
3. Watch products stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "startUrls": [
        { "url": "https://www.zalando.de/herrenschuhe-sneaker/" },
        { "url": "https://www.zalando.de/nike/" }
    ],
    "market": "de",
    "maxItems": 200,
    "onSaleOnly": true,
    "brandIncludes": ["nike", "adidas"],
    "includeProductDetails": true,
    "monitorMode": false
}
```

- **startUrls** — any Zalando **category**, **brand**, or **filtered listing** URL (paged automatically), or a **product (PDP)** URL for full detail. The market is read from each URL's domain (`.de`, `.fr`, `.it`, `.co.uk`, …).
- **searchTerms** — convenience brand/category names that map to a landing page in the chosen market (`nike` → `/nike/`). For anything that isn't a real Zalando slug, paste the exact URL (Zalando free‑text search is client‑side only and not server‑rendered).
- **productUrls** — Zalando product URLs to fetch full detail directly.
- **market** — default market & currency for `searchTerms` (DE/AT/CH/FR/IT/ES/NL/BE/PL/SE/DK/FI/CZ/UK/IE).
- **minPrice / maxPrice / onSaleOnly / brandIncludes** — filters.
- **includeProductDetails** *(default true)* — open each product for the full size matrix, materials, description, delivery/return policy, rating and all images.
- **maxItems / maxPagesPerUrl / maxConcurrency / deduplicateProducts** — run controls.
- **monitorMode / monitorKey** — emit only new or price/stock‑changed products across runs.

### Output

One record per product (`type: "product"`):

```json
{
    "type": "product",
    "sku": "NI112N022-A11",
    "name": "AIR FORCE 1 '07 - Sneaker low - white",
    "brand": "Nike Sportswear",
    "modelName": "AIR FORCE 1 '07",
    "color": "white",
    "colorVariants": [
        { "color": "black", "url": "https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-black-ni112n0a2-q11.html" }
    ],
    "silhouette": "SNEAKER",
    "price": 119.95,
    "priceOriginal": 119.95,
    "discountPercent": null,
    "currency": "EUR",
    "onSale": false,
    "inStock": true,
    "sizes": [
        { "size": "42", "available": true },
        { "size": "42.5", "available": false },
        { "size": "43", "available": true }
    ],
    "sizesAvailableCount": 11,
    "sizesTotalCount": 14,
    "attributes": { "Obermaterial": "Leder", "Schuhspitze": "rund" },
    "material": "Leder",
    "description": "Sneaker low von Nike Sportswear …",
    "rating": 4.7,
    "reviewCount": 1284,
    "deliveryFee": 0,
    "deliveryFeeCurrency": "EUR",
    "returnPolicyDays": 30,
    "isReturnable": true,
    "images": ["https://img01.ztat.net/article/…?imwidth=1080"],
    "image": "https://img01.ztat.net/article/…?imwidth=1080",
    "market": "de",
    "url": "https://www.zalando.de/nike-sportswear-air-force-1-07-sneaker-low-white-ni112n022-a11.html",
    "scrapedAt": "2026-06-18T12:00:00.000Z"
}
```

In **monitor mode**, each emitted record also carries a `changeType` (`new`, `price_drop`, `price_rise`, `back_in_stock`, `sold_out`).

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it hourly/daily to track prices and restocks; combine with `monitorMode` for change‑only alerts.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM, Slack, repricing job) the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/zalando-scraper').call({
    startUrls: [{ url: 'https://www.zalando.de/nike/' }],
    maxItems: 200,
    onSaleOnly: true,
    monitorMode: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} Zalando products`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push price drops straight into Slack or a sheet.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored category restocks or drops in price.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "track the price and size availability of Nike sneakers on Zalando" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **e‑commerce price & product intelligence stack**:

- **[Amazon Scraper](https://apify.com/scrapesage/amazon-scraper)** — products, prices, reviews & seller leads across 20 marketplaces.
- **[AliExpress Scraper](https://apify.com/scrapesage/aliexpress-scraper)** — products, SKUs, live prices, orders sold & reviews.
- **[Alibaba Scraper](https://apify.com/scrapesage/alibaba-scraper)** — B2B wholesale products, tiered prices & supplier leads.
- **[Flipkart Scraper](https://apify.com/scrapesage/flipkart-scraper)** — India's #1 consumer marketplace: products, prices & reviews.
- **[eBay Scraper](https://apify.com/scrapesage/ebay-scraper)** — listings, prices, sold comps & sellers.
- **[Banggood Scraper](https://apify.com/scrapesage/banggood-scraper)** — cross‑border dropshipping products, variants & reviews.
- **[Vinted Scraper](https://apify.com/scrapesage/vinted-scraper)** — Europe's #1 secondhand fashion marketplace, items & seller leads.
- **[Poshmark Scraper](https://apify.com/scrapesage/poshmark-scraper)** — fashion resale listings, sold comps & seller leads.
- **[Reverb Scraper](https://apify.com/scrapesage/reverb-scraper)** — musical‑instrument marketplace listings, price guide & sellers.

### Tips

- **Find category/brand URLs**: browse Zalando in your market and copy the URL of any category, brand, or filtered listing (e.g. `…/damen-kleider/?…`) straight into **Start URLs** — all of its filters are preserved.
- **Markets & currency**: the market (and currency) is taken from each Start URL's domain. Mix markets in one run by pasting URLs from `.de`, `.fr`, `.co.uk`, etc.
- **Cheaper discovery**: turn `includeProductDetails` off to collect price, discount, brand, colour, images and URL from catalog cards only (no per‑product fetch).
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to receive only new, price‑changed, or restocked products each run.
- **Proxies**: keep the default datacenter proxy; switch to RESIDENTIAL only if you see repeated empty‑shell warnings.

### FAQ

**How do I scrape a whole Zalando category or brand?** Paste its URL into **Start URLs** — e.g. `https://www.zalando.de/herrenschuhe-sneaker/` or `https://www.zalando.de/nike/`. The actor pages through it (`?p=2`, `?p=3`, …) up to `maxPagesPerUrl`.

**Can I search by keyword?** Zalando's free‑text search runs client‑side and isn't server‑rendered, so the reliable way to scrape a topic is to open it on Zalando and paste the resulting **category / brand / filtered‑listing URL**. Single brand and category names also work via `searchTerms` (`nike` → `/nike/`).

**Which countries are supported?** Germany, Austria, Switzerland, France, Italy, Spain, Netherlands, Belgium, Poland, Sweden, Denmark, Finland, Czechia, the UK and Ireland — each with its own currency.

**Does it get size availability?** Yes — with product detail on, each product includes a `sizes` array with a per‑size `available` flag, plus `sizesAvailableCount` / `sizesTotalCount` and a derived `inStock`.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor price drops and restocks?** Turn on `monitorMode`, give it a `monitorKey`, and run it on a [Schedule](https://docs.apify.com/platform/schedules). Only new, price‑changed, or restocked products are emitted, each with a `changeType`.

**Is scraping Zalando legal?** This actor collects publicly available product data only. You are responsible for using the data in compliance with applicable laws and Zalando's terms.

**A field is null — why?** Some products genuinely don't publish a rating, materials, or a discount. Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `startUrls` (type: `array`):

Zalando URLs to scrape. Paste any <b>category</b> page (<code>https://www.zalando.de/herrenschuhe-sneaker/</code>), <b>brand</b> page (<code>https://www.zalando.de/nike/</code>) or filtered listing — the actor pages through all of them. Product (PDP) URLs (<code>…-ni112n022-a11.html</code>) are scraped as full detail. The market (country) is taken from each URL's domain (.de, .fr, .it, .co.uk, …). This is the most reliable input — Zalando's free-text search is client-side only.

## `searchTerms` (type: `array`):

Convenience: brand or category names that map to a Zalando landing page in the chosen market — e.g. <code>nike</code> → <code>/nike/</code>, <code>damen-kleider</code> → <code>/damen-kleider/</code>. Works for real Zalando brand/category slugs; for anything else paste the exact URL into Start URLs (Zalando free-text search is not server-rendered).

## `productUrls` (type: `array`):

Zalando product (PDP) URLs to fetch full detail for directly (size matrix, materials, all images, rating). Equivalent to adding them under Start URLs.

## `market` (type: `string`):

Default market for Brand/category names and the fallback currency. Start URLs keep their own domain's market.

## `minPrice` (type: `integer`):

Only keep products whose price (in the market's currency) is at least this much.

## `maxPrice` (type: `integer`):

Only keep products whose price is at most this much.

## `onSaleOnly` (type: `boolean`):

Only keep products currently discounted (live price below the original price).

## `brandIncludes` (type: `array`):

Only keep products whose brand (or name) contains one of these terms, e.g. <code>nike</code>, <code>adidas</code>. Case-insensitive. Leave empty to keep all brands on the page.

## `maxItems` (type: `integer`):

Maximum number of product records to scrape across all URLs/terms. A catalog page yields ~25–35 products; pagination fetches more.

## `maxPagesPerUrl` (type: `integer`):

How many catalog pages (<code>?p=N</code>) to page through per category/brand URL.

## `includeProductDetails` (type: `boolean`):

Open each product to add the full size matrix with per-size availability, accurate brand & colour, materials, product description, delivery & return policy, rating and all hi-res images. The catalog card already carries price, discount, images and URL — turn this OFF for a faster/cheaper discovery run. Adds one request per product.

## `deduplicateProducts` (type: `boolean`):

Drop duplicate products (same SKU) that appear in more than one page/URL in the same run.

## `monitorMode` (type: `boolean`):

Remember products across runs in a named key-value store and emit ONLY products that are new OR whose price/stock changed since the last run (each carries a <code>changeType</code>: new / price\_drop / price\_rise / back\_in\_stock / sold\_out). Pair with Apify Schedules for price-drop & restock alerts — it complements the scheduler (the schedule starts the run; monitor mode dedupes against prior runs). Keep product detail ON so stock is compared.

## `monitorKey` (type: `string`):

Names the monitor's memory store so you can run several independent monitors (e.g. one per category). Reuse the same key to keep tracking the same feed.

## `maxConcurrency` (type: `integer`):

Parallel page/request fetches. Keep moderate (3–5) so Zalando's anti-bot doesn't serve empty shells.

## `proxyConfiguration` (type: `object`):

Proxies to use. Zalando serves cleanly to Apify datacenter proxies; keep the default. Switch to RESIDENTIAL only if you see repeated empty-shell / blocked warnings.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.zalando.de/herrenschuhe-sneaker/"
    }
  ],
  "market": "de",
  "onSaleOnly": false,
  "maxItems": 100,
  "maxPagesPerUrl": 10,
  "includeProductDetails": true,
  "deduplicateProducts": true,
  "monitorMode": false,
  "monitorKey": "default",
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped Zalando product records as JSON items in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.zalando.de/herrenschuhe-sneaker/"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/zalando-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.zalando.de/herrenschuhe-sneaker/" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/zalando-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.zalando.de/herrenschuhe-sneaker/"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapesage/zalando-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapesage/zalando-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Bj3HUMiRvhIUdqERu/builds/TPVApoeVLeMKvpOzg/openapi.json
