# Zalando Scraper - Products, Prices, Sizes, Images, Reviews (`abotapi/zalando-scraper`) Actor

Scrape Zalando products: name, brand, current and original price, discount, sizes, images, deal flags and rating, plus full description, colour, per-size availability and reviews on detail. Search by keyword with sort and filters, or paste any category, search or product URL.

- **URL**: https://apify.com/abotapi/zalando-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 18 total users, 9 monthly users, 98.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Zalando Scraper: Prices, Sizes, Deals and Reviews

Zalando Scraper turns Zalando's catalogue into structured product data. Get name, brand, current and original price, savings, every size, all images, deal flags and rating from each listing, plus the full description, colour, per-size availability and individual reviews when you turn on detail enrichment. Search by keyword with sorting and a price range, browse the sale section, or paste any Zalando category, search-result or product URL. Covers 17 Zalando country stores, and results export to JSON, CSV or Excel, or read straight through the API.

### Why This Scraper?

- **Full page coverage.** Every product on a category or search page is collected, not just the first screen.
- **Rich price data on every record.** Current price, was price, savings amount and percent, discount percent, an on-special flag and the listing's own deal badge.
- **Keyword search with filters.** Search terms, sort order (relevance, price, newest) and a price range, applied consistently whether you search by keyword or paste a URL.
- **Browse the sale section.** Pick the women's or men's sale collection and it's walked with the same listing machinery as a keyword search, currently on the co.uk and ie stores.
- **Optional detail enrichment.** Full description, colour, per-size price and availability, every image, rating summary and individual reviews.
- **17 country stores.** One input switches the store, language, currency and catalogue.
- **Optional export to your other apps.** Push scraped products into Notion, Airtable or Linear through MCP connectors, alongside the dataset.

### Use Cases

- **Price monitoring teams:** track current price, was price and discount percent across products to catch markdowns.
- **Competitor and market research:** compare brand assortment, pricing and sizes across Zalando's country stores.
- **Deal and sale trackers:** browse the sale section or filter search results to on-sale products only.
- **Catalogue and marketplace builders:** pull structured product data, images, sizes and descriptions, to power a storefront or feed.
- **Review and rating analysis:** collect individual reviews and rating summaries when detail enrichment is on.

### Data You Get

> Sample shape: values are illustrative placeholders, not from a live listing.

| Field | Example |
| --- | --- |
| `sku` | `AB123C4D5-E11` |
| `name` | `Sample Jersey Dress` |
| `brand` | `Sample Brand` |
| `title` | `Sample Brand Sample Jersey Dress` |
| `url` | `https://www.zalando.co.uk/sample-dress-ab123c4d5-e11.html` |
| `domain` | `co.uk` |
| `targetGroup` | `WOMEN` |
| `category` | `DRESS` |
| `price` | `14.0` |
| `originalPrice` | `15.99` |
| `wasPrice` | `15.99` |
| `savingsAmount` | `1.99` |
| `savingsPercent` | `12` |
| `discountPercentage` | `12` |
| `isOnSpecial` | `true` |
| `onSale` | `true` |
| `currency` | `GBP` |
| `dealFlag` | `-12%` |
| `sizes` | `["XS","S","M","L","XL"]` |
| `images` | `["https://img01.ztat.net/article/00000000-500x700.jpg"]` |
| `rating` | `4.6` |
| `available` | `true` |
| `scrapedAt` | `2026-01-01T00:00:00.000Z` |
| `item` | the complete upstream product-card object |

Full-price products return `wasPrice: null`, `savingsAmount: null` and `isOnSpecial: false`; these fields are never fabricated when there is no genuine reduction. All prices are in the store's own currency and in whole units, not cents. When `fetchDetails` is on, the same record also carries `description`, `color`, `variants` (one entry per size, with its own price and availability), `reviews`, `reviewCount`, `shipping` and `returnPolicy`; without it those fields are absent rather than empty. Records also carry `brandName`, `colorName`, `discountAmount`, `inStock`, `availabilityStatus`, `imageUrl`, `imageUrls`, `videoUrl`, `silhouette` and `group` where the product has them, plus `unitPrice` (whole currency units, with the per-unit text such as the volume or weight in `unitPriceLabel`), `comingSoon`, `sizeAdvice` and `lowerPriceLabel`, which are filled only for the product itself, never from another colour of it, and only for products whose Zalando card carries them and are otherwise null. The dataset has four views: Overview (listing fields), Detail (description, colour and per-size variants), Reviews (one row per review) and Changes (incremental mode: changeType, changedFields, firstSeenAt, lastSeenAt).

### How to Use

1. Pick a **mode**: `search` (build queries from keywords) or `url` (paste category, search-result or product links).
2. Fill in the fields for that mode: keywords, country store, sort and price range, or the URLs to scrape.
3. Turn on **Fetch full product details** if you want description, colour, per-size availability and reviews.
4. Set **Max items** to control run size and cost, then click **Start**. Max items has a finite default of 20 and accepts up to 100000 products per run; reviews per product are capped at 100 even if you enter more.

**Basic keyword search:**

```json
{
  "mode": "search",
  "searchTerms": ["summer dress"],
  "domain": "co.uk",
  "maxListings": 50
}
```

**Search with sorting and a price range:**

```json
{
  "mode": "search",
  "searchTerms": ["trainers"],
  "domain": "de",
  "sortBy": "price_asc",
  "minPrice": 30,
  "maxPrice": 80,
  "onSaleOnly": true,
  "maxListings": 100
}
```

**Browse the women's sale (co.uk or ie store):**

```json
{
  "mode": "search",
  "searchTerms": [],
  "domain": "co.uk",
  "specialsCategory": "womens-sale",
  "maxListings": 50
}
```

**Category URL with detail enrichment:**

```json
{
  "mode": "url",
  "urls": ["https://www.zalando.co.uk/womens-clothing-dresses/"],
  "fetchDetails": true,
  "maxPages": 3,
  "maxListings": 200
}
```

#### Run it from your code

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/zalando-scraper").call(run_input={
    "mode": "search",
    "searchTerms": ["summer dress"],
    "domain": "co.uk",
    "maxListings": 50,
})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(product["name"], product["price"])
```

JavaScript:

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/zalando-scraper').call({
  mode: 'search',
  searchTerms: ['summer dress'],
  domain: 'co.uk',
  maxListings: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the **Integrations** tab.

### Send results into your apps (MCP connectors)

Optionally pipe the scraped products into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

**What gets written to the connector:** a condensed, human-readable summary of each product, not the full JSON. Each product becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

1. Authorize a connector once under **Apify, Settings, Integrations** (Notion, Linear, Airtable, or Apify).
2. Select it in the **"Export to your apps (MCP)"** input field. If the picker is empty, you have not authorized a connector yet.
3. For **Notion**, also set `notionParentPageUrl` to the page where product pages should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to write only to the dataset.

### Input Parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `search` | `search` to build queries from keywords and filters, or `url` to scrape pasted category, search-result or product URLs directly. |
| `searchTerms` | array | `[]` (prefill: `["dress"]`) | Keywords to search Zalando for, e.g. "summer dress", "nike air max". Search mode only. |
| `domain` | string | `co.uk` | Zalando country store: co.uk, de, fr, nl, be, it, es, pl, at, ch, se, dk, fi, no, ie, cz, com. Used in search mode; URL mode reads the store from the pasted URL. |
| `specialsCategory` | string | `none` | Browse the sale section in addition to keywords: `womens-sale` or `mens-sale`. Verified working only on the co.uk and ie stores; other stores are skipped with a log warning, no charge. Search mode only. |
| `sortBy` | string | `relevance` | `relevance`, `price_asc`, `price_desc` or `newest`. Applies in both search and URL mode; choosing an order other than relevance replaces any order a pasted URL already carried. |
| `minPrice` | integer | none | Keep only products with a current price at or above this value (store currency). Applies in both search and URL mode. |
| `maxPrice` | integer | none | Keep only products with a current price at or below this value (store currency). Applies in both search and URL mode. |
| `onSaleOnly` | boolean | `false` | Keep only products that are currently discounted. Applies in both search and URL mode. |
| `urls` | array | one example URL per supported shape (see URL shapes) | Category, search-result, sale or product URLs to scrape. If left empty, the example list runs. URL mode only; the price range and on-sale filters still apply, other search-only fields are ignored. |
| `fetchDetails` | boolean | `false` | Add full description, colour, per-size price and availability, every image, rating summary and individual reviews from each product page. |
| `maxReviews` | integer | `20` | Maximum individual reviews captured per product when Fetch full product details is on. Reviews are included in detail enrichment, with no separate charge. 0 or empty uses the default of 20; the hard ceiling is 100. |
| `maxPages` | integer | none (unlimited) | Safety bound on result pages walked per keyword or URL. Leave empty or 0 for unlimited; this does not cap the number of products, Max items still does. |
| `maxListings` | integer | `20` | Maximum number of products to return across the whole run. Set 0 for unlimited. |
| `proxy` | object | Apify Proxy (`useApifyProxy: true`) | Connection settings. Works by default; enable the residential group for more IP rotation. |
| `resumeFromRunId` | string | none | ID of an interrupted run of this actor to continue from; products it already collected are skipped and not billed again. |
| `incrementalMode` | boolean | `false` | For scheduled runs: return only NEW, UPDATED and REAPPEARED products, each with `changeType` and `changedFields`. |
| `stateKey` | string | auto | Optional name for the monitoring campaign; by default derived from the search, filters and detail settings. |
| `emitUnchanged` | boolean | `false` | Incremental mode only: also return UNCHANGED products (billed like any returned row). |
| `emitExpired` | boolean | `false` | Incremental mode only: also return EXPIRED products no longer listed, only after a complete scan from page 1. |
| `ignoreFieldsForChanges` | array | `[]` | Incremental mode only: output field names that do not count as a change. `scrapedAt`, `reviews`, `productsFound`, `sourceUrl` and `search_query` are always ignored. |
| `mcpConnectors` | array | `[]` | Optional: send a summary of each product to apps you authorized under Integrations. |
| `notionParentPageUrl` | string | none | Notion connector only: page under which product pages are created. |
| `maxNotifyListings` | integer | none (the actor applies 50 when left empty) | Optional cap on how many products are pushed to the selected MCP connectors. |

#### URL shapes (URL mode)

Leaving `urls` empty in URL mode now scrapes one example of each supported shape (this is a change: it used to scrape nothing). Replace the list to scrape your own pages.

| Shape | Example | Notes |
|---|---|---|
| Category | `https://www.zalando.co.uk/womens-clothing-dresses/` | Walks result pages. |
| Keyword search | `https://www.zalando.co.uk/catalog/?q=dress` | On localized stores a pasted `/catalog/?q=` link is re-anchored to that store's search section. |
| Sale listing | `https://www.zalando.co.uk/womens-sale/` | Sale pages are served on the co.uk and ie stores only. |
| Paginated / sorted category | `https://www.zalando.co.uk/womens-clothing-dresses/?p=2&order=price` | `p` is the start page and `order` is kept unless Sort overrides it. |
| Product | `https://www.zalando.co.uk/evenandodd-occasion-wear-black-ev421c1re-q11.html` | Returns one product record. |

A link that is not a Zalando category, search or product page is skipped with a warning in the run log, and a listing that returns no products logs a warning naming the URL.

### Output Example

> Sample shape: values are illustrative placeholders, not from a live listing.

```json
{
  "sku": "AB123C4D5-E11",
  "name": "Sample Jersey Dress",
  "brand": "Sample Brand",
  "title": "Sample Brand Sample Jersey Dress",
  "url": "https://www.zalando.co.uk/sample-dress-ab123c4d5-e11.html",
  "domain": "co.uk",
  "targetGroup": "WOMEN",
  "category": "DRESS",
  "price": 14.0,
  "originalPrice": 15.99,
  "wasPrice": 15.99,
  "savingsAmount": 1.99,
  "savingsPercent": 12,
  "discountPercentage": 12,
  "isOnSpecial": true,
  "onSale": true,
  "currency": "GBP",
  "dealFlag": "-12%",
  "sizes": ["XS", "S", "M", "L", "XL"],
  "images": ["https://img01.ztat.net/article/00000000-500x700.jpg"],
  "rating": 4.6,
  "available": true,
  "description": "Full product description appears here when fetchDetails is on.",
  "color": "navy/blue",
  "variants": [{ "size": "M", "sku": "SAMPLE000-M000", "currency": "EUR", "price": "14.00", "availability": "https://schema.org/InStock" }],
  "reviews": [{ "author": "Jane Doe", "rating": 5, "body": "Sample review text." }],
  "reviewCount": 1,
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Plan Requirement

The default proxy setting works out of the box, and the actor automatically escalates the connection if one is refused. For large or frequent runs, the residential proxy group gives more headroom; pick it under Connection.

### FAQ

#### How much does it cost?

You pay per record returned. Detail enrichment (the fields added by Fetch full product details) is billed separately, one detail-enrichment event per product, charged right after that product's record is delivered (never for products that were not enriched). The **Pricing** tab shows current rates. Use **Max items** to cap the cost of any run.

#### Is it legal to scrape Zalando?

This actor collects only publicly available product data. You are responsible for how you use it: follow Zalando's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product names, prices and sizes are generally facts, but brand names, photos and descriptions may be subject to third-party rights.

#### Can I schedule recurring runs, or get only new products?

Yes. Schedule the actor from the **Schedules** tab and turn on **Incremental changes for scheduled runs**. The first run returns every matching product as NEW; later runs return only NEW, UPDATED (with the names of the changed fields in `changedFields`) and REAPPEARED products. Unchanged products are not returned and not billed, and a product whose full details could not be fetched on one run is compared on its listing fields only, so it is not reported as changed unless you turn on **Emit unchanged products**; products that disappeared are returned as EXPIRED only if you turn on **Emit expired products**, and only when the run scanned the whole search from page 1 (a run cut short by Max items, Max pages or a page that did not load never reports EXPIRED). Returned rows, including UNCHANGED and EXPIRED rows, are billed like any other record; detail enrichment is billed only for rows actually returned. Max items counts unchanged products too. All returned fields are compared except `scrapedAt`, `reviews`, `productsFound` (the listing total), `sourceUrl` and `search_query` (listing context); list more under **Ignore fields when detecting changes**. State is kept per search and filter setup (or under your **State key**). To continue one interrupted run instead, paste its run ID in **Resume from a previous run**.

#### Why did Browse sale return nothing for my store?

The sale section is verified working only on the co.uk and ie stores. On every other store the sale page is not reachable through its localized path, so the run skips it with a log warning instead of charging for an empty result. Use keyword search or category URLs on those stores instead.

#### Why did my run fail instead of returning an empty dataset?

When no results page could be loaded at all, the run ends as FAILED with a plain message instead of a misleading empty success. The messages are: the proxy connection was refused for this account (a paid Apify plan is required, or check your own proxy URLs); residential proxies are unavailable on this run and the backup connection could not load the requested pages; or no results page could be loaded because the requests failed, which is a connection problem rather than an empty search, so try again later. A search that loads fine but genuinely matches nothing finishes successfully with an empty dataset.

#### Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push scraped products into Notion, Airtable or Linear.

### 🔗 Want more e-commerce data?

Pair this actor with these related scrapers from the same team:

<table>
<tr><td>🛒 <a href="https://apify.com/abotapi/target-au-scraper"><b>Target AU Scraper</b></a><br>Scrape products and customer reviews from Target.com.au. Search by keyword or use...</td><td>🛒 <a href="https://apify.com/abotapi/kmart-au-scraper"><b>Kmart Scraper</b></a><br>Scrape products and customer reviews from Kmart.com.au. Search by keyword or use...</td></tr>
<tr><td>🛒 <a href="https://apify.com/abotapi/muji-scraper"><b>MUJI Scraper</b></a><br>Scrape MUJI products from the United States, Canada and Australia storefronts. Search by...</td><td>🛒 <a href="https://apify.com/abotapi/thegioididong-scraper"><b>Thegioididong Scraper</b></a><br>Scrape thegioididong.com products with full specifications, current &amp; original price...</td></tr>
<tr><td>🛒 <a href="https://apify.com/abotapi/zara-com-scraper"><b>Zara Scraper</b></a><br>Scrape Zara (zara.com) products: current price plus strike-through Rebajas (sale)...</td><td>🛒 <a href="https://apify.com/abotapi/uniqlo-com-scraper"><b>UNIQLO Scraper</b></a><br>Scrape UNIQLO products across 21 country storefronts in local currency. Price with pre...</td></tr>
</table>

👉 [Browse all abotapi scrapers](https://apify.com/abotapi)

### 💬 Support

- 🐞 **Found a bug or a missing field?** Open a ticket on the [Issues tab](https://apify.com/abotapi/zalando-scraper/issues/open). We usually reply within hours.
- 🛠️ **Need another site, extra fields or a private build?** Email <contact@abotapi.com>.
- ⭐ **Enjoying it?** A quick review on the actor page helps other users find it.

# Actor input Schema

## `mode` (type: `string`):

Choose Search to build queries from keywords and filters, or URL to scrape pasted category, search-result or product URLs directly.

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

One or more keywords to search Zalando for, e.g. "summer dress", "nike air max".

## `domain` (type: `string`):

Which Zalando country store to scrape. Affects language, currency and catalogue.

## `specialsCategory` (type: `string`):

Browse Zalando's sale section in addition to your keywords. Verified working only on the co.uk and ie stores; every other store's sale page 404s and is skipped with a log warning (no charge, no partial run). The sale page is walked with the same listing, pagination and cap as a keyword search, so it adds no extra cost per product. Off by default.

## `sortBy` (type: `string`):

Result ordering. Price ordering is enforced over the collected candidate set. Applies in both Search and URL mode, but only when you actually pick an ordering: choosing price_asc, price_desc or newest writes that order into a pasted category or search-result URL, replacing any order the URL already carried. Left at the default 'relevance' this input writes nothing, so a pasted URL keeps whatever ordering it came with.

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

Only keep products with a current price at or above this value (store currency).

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

Only keep products with a current price at or below this value (store currency).

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

Keep only products that are currently discounted (current price below original).

## `urls` (type: `array`):

Paste Zalando category URLs, search-result URLs (?q=...), sale listing URLs or product URLs. Multi-URL supported. Pagination continues from the page number in the URL (?p=N). Leave empty to run the example list (one URL per supported shape). Filter fields other than price range, on-sale and sort are ignored in this mode.

## `fetchDetails` (type: `boolean`):

Adds the full description, colour, per-size price and availability, every image, rating summary and individual reviews from each product page. Without it, runs already return name, brand, current and original price, discount, savings, sizes, images, deal flags and rating summary from the listing.

## `maxReviews` (type: `integer`):

Maximum number of individual reviews captured per product when Fetch full product details is on. Capped at 100 per product; 0 or empty uses 20.

## `maxPages` (type: `integer`):

Safety bound on result pages walked per keyword or URL. Leave empty or 0 for unlimited. This does NOT cap the number of products; the run still stops at Max items.

## `maxListings` (type: `integer`):

Maximum number of products to return across the whole run. The single finite cap. Set 0 for unlimited.

## `proxy` (type: `object`):

Apify Proxy. Works on every Apify plan by default; enable residential for more IP rotation.

## `resumeFromRunId` (type: `string`):

Paste the ID of a previous run of this actor to continue after an interruption without returning or charging for products that run already collected. For recurring monitoring of the same search, use Incremental mode below instead.

## `incrementalMode` (type: `boolean`):

Turn this on for daily or recurring monitoring. The first run returns every matching product as NEW. Later runs return only NEW, UPDATED and REAPPEARED products, which is how a price cut or a stock change is spotted; each row says what changed in changedFields. Fields compared: every returned field except scrapedAt, reviews, productsFound (the listing total), sourceUrl and search_query (listing context) (a new review still shows through the rating fields). State is kept separately for each search, filter and detail setup; use State key to name or share a campaign. Max products still counts unchanged products, so raise it (or set 0) to cover the whole search.

## `stateKey` (type: `string`):

Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the search, filters and detail settings.

## `emitUnchanged` (type: `boolean`):

Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns, and bills, rows you already have.

## `emitExpired` (type: `boolean`):

Off by default. Turn on to also return products seen in an earlier run that are no longer listed, marked EXPIRED. Only produced when a run scanned every page of the tracked search from page 1 (never when Max products, Max pages, a price sort window or a failed page cut it short, or when Resume was used). This returns, and bills, extra rows.

## `ignoreFieldsForChanges` (type: `array`):

Output field names (for example promoLabel or sizes) that should NOT make a product count as UPDATED. scrapedAt, reviews, productsFound, sourceUrl and search_query are always ignored. Ignored fields are still returned in the output.

## `mcpConnectors` (type: `array`):

Optional. Pick connected apps (Notion, Airtable, Linear, Apify) to also push each scraped product to, in addition to the dataset.

## `notionParentPageUrl` (type: `string`):

Optional. When a Notion connector is selected, create one page per product under this parent page.

## `maxNotifyListings` (type: `integer`):

Optional cap on how many products are pushed to the selected MCP connectors.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerms": [
    "dress"
  ],
  "domain": "co.uk",
  "specialsCategory": "none",
  "sortBy": "relevance",
  "onSaleOnly": false,
  "urls": [
    "https://www.zalando.co.uk/womens-clothing-dresses/",
    "https://www.zalando.co.uk/catalog/?q=dress",
    "https://www.zalando.co.uk/womens-sale/",
    "https://www.zalando.co.uk/womens-clothing-dresses/?p=2&order=price",
    "https://www.zalando.co.uk/evenandodd-occasion-wear-black-ev421c1re-q11.html"
  ],
  "fetchDetails": false,
  "maxReviews": 20,
  "maxListings": 20,
  "proxy": {
    "useApifyProxy": true
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "ignoreFieldsForChanges": [],
  "mcpConnectors": []
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `detail` (type: `string`):

No description

## `reviews` (type: `string`):

No description

## `changes` (type: `string`):

No description

# 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 = {
    "mode": "search",
    "searchTerms": [
        "dress"
    ],
    "specialsCategory": "none",
    "urls": [
        "https://www.zalando.co.uk/womens-clothing-dresses/",
        "https://www.zalando.co.uk/catalog/?q=dress",
        "https://www.zalando.co.uk/womens-sale/",
        "https://www.zalando.co.uk/womens-clothing-dresses/?p=2&order=price",
        "https://www.zalando.co.uk/evenandodd-occasion-wear-black-ev421c1re-q11.html"
    ],
    "proxy": {
        "useApifyProxy": true
    },
    "incrementalMode": false,
    "emitUnchanged": false,
    "emitExpired": false,
    "ignoreFieldsForChanges": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/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 = {
    "mode": "search",
    "searchTerms": ["dress"],
    "specialsCategory": "none",
    "urls": [
        "https://www.zalando.co.uk/womens-clothing-dresses/",
        "https://www.zalando.co.uk/catalog/?q=dress",
        "https://www.zalando.co.uk/womens-sale/",
        "https://www.zalando.co.uk/womens-clothing-dresses/?p=2&order=price",
        "https://www.zalando.co.uk/evenandodd-occasion-wear-black-ev421c1re-q11.html",
    ],
    "proxy": { "useApifyProxy": True },
    "incrementalMode": False,
    "emitUnchanged": False,
    "emitExpired": False,
    "ignoreFieldsForChanges": [],
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/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 '{
  "mode": "search",
  "searchTerms": [
    "dress"
  ],
  "specialsCategory": "none",
  "urls": [
    "https://www.zalando.co.uk/womens-clothing-dresses/",
    "https://www.zalando.co.uk/catalog/?q=dress",
    "https://www.zalando.co.uk/womens-sale/",
    "https://www.zalando.co.uk/womens-clothing-dresses/?p=2&order=price",
    "https://www.zalando.co.uk/evenandodd-occasion-wear-black-ev421c1re-q11.html"
  ],
  "proxy": {
    "useApifyProxy": true
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "ignoreFieldsForChanges": []
}' |
apify call abotapi/zalando-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/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/8sWZkQPQBxLsdxHkI/builds/GuFgp5MPjjA6OLliR/openapi.json
