# Zalando Ads Scraper (`aboo.script/zalando-ads-scraper`) Actor

\[💰$2 / 1K] ⚡ Fast Zalando Ads Repository scraper. No login, no API key. Search EU sponsored product ads by brand, advertiser, keyword or ad ID, or paste repository URLs, filter by 26 markets and month. Get advertiser, title and text in 23 languages, run dates, reach, markets, targeting and image.

- **URL**: https://apify.com/aboo.script/zalando-ads-scraper.md
- **Developed by:** [Aboo Script](https://apify.com/aboo.script) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 results

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 Ads Scraper

![Zalando Ads Scraper](https://i.ibb.co/1YC444M6/zalando-ads-banner.png)

**Zalando Ads Scraper** extracts sponsored product ads from the [Zalando](https://www.zalando.de/ads-repository/) Ads Repository into clean, structured data you can download as JSON, CSV, Excel, or HTML. Type a brand, advertiser, product name or ad ID, or paste a repository URL, and get the advertiser, ad title and text, run dates, reach, markets, targeting parameters and image for every ad. No account or login required.

### Introduction

[Zalando](https://www.zalando.de/) is Europe's largest online fashion platform, active in more than 20 countries. Under the EU Digital Services Act, Zalando publishes an Ads Repository with every sponsored product ad shown on its stores: who paid for it, when it ran, in which markets, how many people it reached and which targeting parameters were used. The repository holds millions of ads from brands such as Nike, adidas, Birkenstock and thousands of smaller sellers.

This actor collects the same public information you see in the repository and turns it into a ready-to-use dataset. You can run it once, schedule it to run daily, or connect it to your own tools.

### What data can you extract from the Zalando Ads Repository?

- 🏢 Advertiser (the company that paid for the ad)
- 🏷️ Ad title and text, in the language you choose or in all available languages
- 📅 Start date, end date, and whether the ad is still running
- 👥 Reach (number of recipients)
- 🌍 Markets where the ad was shown, as country codes and names
- 🎯 Targeting parameters (personalized, contextual)
- 🖼️ Ad image
- 🔗 Direct URL and ID of each ad

### Use Cases

- 📈 **Market research**: see which brands and product categories are pushed with sponsored ads on Zalando, and in which countries.
- 🕵️ **Competitor monitoring**: follow which products a competitor advertises, for how long, and how many people the ads reach.
- 🤝 **Lead generation**: build a list of brands and sellers that actively advertise on Zalando.
- 🗂️ **Database building**: create your own searchable archive of Zalando ads by brand, market and month.
- 🤖 **AI and automation**: feed clean, structured data into spreadsheets, dashboards, or AI workflows.

### How to scrape Zalando ads step by step

1. Type brands, advertisers, product names or ad IDs into **Search queries**, or paste Zalando Ads Repository URLs into **Start URLs**.
2. Optionally pick **Markets**, an **Active in month** value and a **Language**.
3. Set **Maximum number of results** to how many ads you want per URL or per query.
4. Click **Start** and wait for the run to finish.
5. Download your data in JSON, CSV, Excel, or HTML from the **Output** tab.

### Input

- **Start URLs**: Zalando Ads Repository URLs. Supported pages: the Ads Repository page of any Zalando store (for example `https://www.zalando.de/ads-repository/`, which returns all ads) and search URLs from the repository itself (`https://sponsored-content-archive.zalando.com/?fullText=...`). The search text, markets, month and ad ID in the URL are kept in the results.
- **Search queries**: search terms, one per line, for example a brand, advertiser, product name or a 32-character ad ID. Each query is scraped separately.
- **Markets**: only ads shown in at least one of the selected countries. Leave empty for all markets. Applies to search queries.
- **Active in month**: only ads that ran during this month, in the format YYYY-MM (for example 2026-09). Applies to search queries.
- **Language**: language of the ad title and text. English is used when an ad has no text in the selected language.
- **Include all translations**: add the ad title and text in every available language (about 23) to each result.
- **Maximum number of results**: how many ads to collect for each start URL or search query. Set 0 for no limit.
- **Proxy configuration**: the Ads Repository only answers visitors from Europe, so a residential proxy in a European country is required. The default (residential, Germany) works out of the box.

You can use start URLs, search queries, or both in the same run.

### Input Examples

Scrape a search URL from the Zalando Ads Repository:

```json
{
  "startUrls": [
    { "url": "https://sponsored-content-archive.zalando.com/?fullText=adidas&markets[0]=DE" }
  ],
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
```

Search by keywords:

```json
{
  "searchQueries": ["nike"],
  "language": "en-GB",
  "includeTranslations": false,
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
```

### Output

Each ad is saved as one item in the dataset. Here is an example of a single item:

```json
{
  "url": "https://sponsored-content-archive.zalando.com/?fullText=9c3f4b2db3cf5d43d4e954be766b725c",
  "id": "9c3f4b2db3cf5d43d4e954be766b725c",
  "advertiser": "Birkenstock Global Sales GmbH",
  "title": "Birkenstock FLORIDA D-BUCKLE EXQ LENA HS BABY BLUES - NARROW Riemensandalette baby blue",
  "text": "Birkenstock FLORIDA D-BUCKLE EXQ LENA HS BABY BLUES - NARROW Riemensandalette baby blue",
  "language": "de-DE",
  "startDate": "2026-07-08T00:00:00Z",
  "endDate": "2026-09-06T00:00:00Z",
  "isActive": false,
  "reach": 114,
  "markets": ["BE", "CZ", "DE", "DK", "ES", "FI", "FR", "IE", "IT", "NL", "NO", "PL"],
  "marketNames": ["Belgium", "Czech Republic", "Germany", "Denmark", "Spain", "Finland", "France", "Ireland", "Italy", "Netherlands", "Norway", "Poland"],
  "targetingParameters": ["Personalized", "Contextual"],
  "imageUrl": "https://img01.ztat.net/article/spp-media-p1/041e9d37dd83444186803754019c00a8/932f2cbd211c475e967321e3121625ab.jpg",
  "availableLanguages": ["bg", "cs-CS", "da-DK", "de-DE", "de-AT", "el", "en-GB", "es-ES", "et-EE", "fi-FI", "fr-FR", "..."],
  "translations": []
}
```

With **Include all translations** turned on, `translations` lists the title and text in every language, for example `{ "language": "da-DK", "title": "Birkenstock MADRID EVA REGULAR Sandaler black", "text": "Birkenstock MADRID EVA REGULAR Sandaler black" }`.

You can download the dataset in JSON, CSV, Excel, XML, or HTML, or access it through the Apify API.

### Notes

- The Zalando Ads Repository can only be opened from Europe. Keep the default residential proxy (Germany) or pick another European country; other proxies or no proxy make the run fail.
- Only Zalando Ads Repository URLs are supported. Other Zalando pages (categories, products) are skipped with a warning.
- The repository lists ads in its own order; there is no sorting by date or reach.
- Searches look in the advertiser name, ad title and ad text. A search that matches nothing can take up to two minutes before it ends with no results.
- The repository shows sponsored product ads only: product title, text and image. Prices, ad spend and the exact placement on the store are not published.
- Some ads have no separate text; in that case `text` is `null`.

### Why use the Zalando Ads Scraper?

- ✅ **No login needed**: works with public data only, so there is no account to manage.
- 🎯 **Keeps your filters**: paste any repository search URL and get exactly what you see there, including markets and month.
- 🧹 **Clean data**: one row per ad, reach as a number, dates in one standard format, markets with readable country names.
- 🌍 **Any language**: pick the language of titles and texts, or get all translations at once.
- 💸 **Pay for what you need**: set a result limit per URL or query and keep every run small and cheap.
- 🔄 **Ready for automation**: schedule runs, export to Google Sheets, or connect to Make, Zapier, and n8n.

### FAQ

#### How many results can I scrape?

You can set any number in **Maximum number of results**, or 0 for no limit. The actor keeps going until it reaches your limit or runs out of ads. The full repository holds millions of ads, so use search queries, markets or a month to narrow it down.

#### Do I need a Zalando account?

No. The actor only collects publicly available data. You do not need to log in or provide any account details.

#### Can I find a single ad by its ID?

Yes. Type the 32-character ad ID into **Search queries**, or paste a repository URL that contains it, and the actor returns that ad.

#### Can I scrape data on a schedule?

Yes. Use Apify Schedules to run the actor every hour, day, or week, and get fresh data automatically.

#### Can I request a new feature or filter?

Yes. Right now the actor supports start URLs, search queries, markets, month and language. If you need other filters or inputs, get in touch and they can be added.

#### Can I get a custom or private version?

Yes. The actor can be customized for your workflow, delivered as a private version, or a new scraper can be built for a different website. Use the contact details below.

### Need to scrape other ad libraries?

- [Facebook Ads Library Scraper](https://apify.com/aboo.script/facebook-ads-scraper): ads from the Meta Ad Library with advertiser, creatives and run dates.
- [Google Ads Transparency Scraper](https://apify.com/aboo.script/adstransparency-google-scraper): ads from the Google Ads Transparency Center by advertiser or domain.
- [X Ads Repository Scraper](https://apify.com/aboo.script/ads-x-scraper): ads from the X (Twitter) Ads Repository in the EU.
- [Snapchat Ads Gallery Scraper](https://apify.com/aboo.script/adsgallery-snap-scraper): ads from the Snapchat Ads Gallery with advertiser and reach.

***

**Need help or want a custom solution?**

- 📧 Email: aboo.script@gmail.com
- 🧩 More scrapers: [Apify profile](https://apify.com/aboo.script)

### Image Credit

Image credit: [Zalando](https://www.zalando.de/)

# Actor input Schema

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

Zalando Ads Repository URLs: the repository page of any Zalando store (for example https://www.zalando.de/ads-repository/, all ads) or a search URL from the repository itself (https://sponsored-content-archive.zalando.com/?fullText=...). Search text, markets, month and ad ID in the URL are kept.

## `searchQueries` (type: `array`):

Search terms, for example a brand, advertiser, product name or a 32-character ad ID. Each query is scraped separately.

## `markets` (type: `array`):

Only ads shown in at least one of these countries. Leave empty for all markets. Applies to search queries; start URLs keep their own filters.

## `month` (type: `string`):

Only ads that ran during this month, in the format YYYY-MM (for example 2026-09). Applies to search queries; start URLs keep their own filters.

## `language` (type: `string`):

Language of the ad title and text. Falls back to English when the ad has no text in this language.

## `includeTranslations` (type: `boolean`):

Add the ad title and text in every available language (about 23) to each result.

## `maxResults` (type: `integer`):

Maximum number of ads to scrape per start URL or search query. Set 0 for no limit.

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

The Ads Repository only answers visitors from Europe, so a residential proxy in a European country (Germany by default) is required.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://sponsored-content-archive.zalando.com/?fullText=adidas&markets[0]=DE"
    }
  ],
  "searchQueries": [
    "nike"
  ],
  "language": "en-GB",
  "includeTranslations": false,
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://sponsored-content-archive.zalando.com/?fullText=adidas&markets[0]=DE"
        }
    ],
    "searchQueries": [
        "nike"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("aboo.script/zalando-ads-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://sponsored-content-archive.zalando.com/?fullText=adidas&markets[0]=DE" }],
    "searchQueries": ["nike"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("aboo.script/zalando-ads-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://sponsored-content-archive.zalando.com/?fullText=adidas&markets[0]=DE"
    }
  ],
  "searchQueries": [
    "nike"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call aboo.script/zalando-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aboo.script/zalando-ads-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/FgWK1g2uFGMtXIMGx/builds/xOX6eD4nbOPH5jeMj/openapi.json
