# Ebay Kleinanzeigen Scraper (`parsebird/ebay-kleinanzeigen-scraper`) Actor

Scrape classified ads from Kleinanzeigen.de (formerly eBay Kleinanzeigen) by keyword, location, or search URL. Get price, condition, attributes, images, seller, and description. Monitoring mode tracks new, updated, and delisted ads.

- **URL**: https://apify.com/parsebird/ebay-kleinanzeigen-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.59 / 1,000 listings

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?

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

### Ebay Kleinanzeigen Scraper

Extract classified-ad data from **[Kleinanzeigen.de](https://www.kleinanzeigen.de)** (formerly eBay Kleinanzeigen) by search query, location code, or search URL. The **Ebay Kleinanzeigen Scraper** returns clean, structured data for every ad — price, condition, brand, size, images, seller, description, category, and view count — plus a built-in monitoring mode that tracks new, updated, and delisted ads across scheduled runs.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Scrape Kleinanzeigen.de by keyword or location, pull 25+ structured fields per ad including price history and seller Impressum, and run it on a schedule to catch new and price-changed listings automatically.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Actor: parsebird/ebay-kleinanzeigen-scraper (Apify). Scrapes classified ads from kleinanzeigen.de (ex eBay Kleinanzeigen).
Call with ApifyClient:
  client.actor("parsebird/ebay-kleinanzeigen-scraper").call(run_input={
    "query": "Basecap",                 # free-text search term (optional)
    "location": "3331",                  # Kleinanzeigen location code, e.g. 3331 = Berlin (optional)
    "startUrls": [{"url": "https://www.kleinanzeigen.de/s-berlin/basecap/k0l3331"}],  # optional search URLs
    "maxItems": 20,                       # max ads to extract (billed rows), default 5
    "fetchViewsCount": false,             # extra request per ad to fill viewsCount
    "monitoringMode": false,              # only return new/updated/delisted ads vs last run
    "monitoringFields": ["price"],        # fields that count as an "update"
    "proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "DE"}
  })
Output (per ad): url, id, title, price, priceCurrency, art, brand, color, condition, size, shippingPrice,
  kauferschutzPrice, address, date, viewsCount, primaryImageURL, imageURLs[], categoryURLs[], descriptionText,
  sellerName, sellerURL, sellerPhone, sellerEmailFromDescription, sellerPhoneFromDescription, attributes{},
  companyInfo{companyName, companyAddress, companyUrl, companyPhone, openingHours, companyEmails[], vatId, taxNumber}.
  In monitoring mode also: firstSeenAt, lastSeenAt, daysOnMarket, previousPrice, priceChanged, priceHistory[],
  changedFields[], monitoringStatus.
API docs: https://apify.com/parsebird/ebay-kleinanzeigen-scraper/api  |  Token: https://console.apify.com/account/integrations
```

### What is the Ebay Kleinanzeigen Scraper?

The **Ebay Kleinanzeigen Scraper** is a data-extraction tool for **Kleinanzeigen.de**, Germany's largest classifieds marketplace, which was called *eBay Kleinanzeigen* until 2023. Kleinanzeigen has no public API, so this actor works as a **Kleinanzeigen API alternative**: give it a search term or a search URL and it returns the full ad detail for every result as JSON, CSV, or Excel.

It is built for three jobs:

- 🔎 **Search scraping** — turn any keyword or category search into a structured dataset.
- 📍 **Local scraping** — restrict results to a city or district with a Kleinanzeigen location code.
- 🔔 **Monitoring** — schedule the actor and receive only the ads that are new, changed, or gone since the previous run, with price history attached.

### What can the Ebay Kleinanzeigen Scraper do?

- Scrape ads by **search query**, **location code**, or one or more **search URLs** copied straight from the site.
- Combine a query and start URLs in a single run — the actor scrapes both.
- Extract **25+ fields per ad**, including structured attributes (Art, Marke, Farbe, Zustand, Größe) and the full description text.
- Pull **seller details** — name, profile URL, and phone/email found in the ad text.
- Extract the **commercial seller Impressum** (company name, address, VAT ID, tax number, email, phone) for business listings.
- Optionally fetch the **view count** for each ad.
- **Monitoring mode**: detect new, updated, and delisted ads; track `priceHistory`, `previousPrice`, `daysOnMarket`, and `changedFields`.
- Run on a **schedule**, call it via **API**, connect it to **Make, Zapier, Google Sheets, Slack**, or Apify webhooks.
- Export to **JSON, CSV, Excel, HTML, or XML**.

### What data can you extract from Kleinanzeigen.de?

| Field | Description |
|-------|-------------|
| `url` | Canonical ad URL on kleinanzeigen.de |
| `id` | Kleinanzeigen ad ID |
| `title` | Ad title |
| `price` / `priceCurrency` | Numeric price as a string (e.g. `"59.00"`) and currency (`EUR`); `"0.00"` for "Zu verschenken" |
| `art` | Item category attribute (*Art*) |
| `brand` | Brand attribute (*Marke*) |
| `color` | Colour attribute (*Farbe*) |
| `condition` | Condition attribute (*Zustand*) |
| `size` | Size attribute (*Größe*) |
| `shippingPrice` | Shipping cost shown on the ad, if any |
| `kauferschutzPrice` | Buyer-protection fee, if shown |
| `address` | Postal code, state, and place |
| `date` | Ad date (`DD.MM.YYYY`) |
| `viewsCount` | Number of views (only when *Fetch view count* is enabled) |
| `primaryImageURL` / `imageURLs` | Main image and full image list |
| `categoryURLs` | Breadcrumb category links |
| `descriptionText` | Full ad description |
| `sellerName` / `sellerURL` | Seller display name and profile URL |
| `sellerPhone` | Phone from the contact box, if public |
| `sellerEmailFromDescription` / `sellerPhoneFromDescription` | Contact details parsed from the ad text |
| `attributes` | Raw label→value map of every structured attribute |
| `companyInfo` | Commercial seller Impressum: `companyName`, `companyAddress`, `companyUrl`, `companyPhone`, `openingHours`, `companyEmails`, `vatId`, `taxNumber` |

In **monitoring mode**, each row also carries `firstSeenAt`, `lastSeenAt`, `daysOnMarket`, `previousPrice`, `priceChanged`, `priceHistory`, `changedFields`, and `monitoringStatus` (`new` / `updated` / `delisted`).

### How to scrape Kleinanzeigen.de

1. Open the **Ebay Kleinanzeigen Scraper** and go to the **Input** tab.
2. Enter a **Search query** (for example `Basecap` or `iPhone 15 Pro`), or paste one or more Kleinanzeigen search URLs into **Start URLs**.
3. *(Optional)* Add a **Location code** to limit results to an area. Run a search on kleinanzeigen.de, then copy the number after `l` in the URL — e.g. `.../k0l3331` → `3331` (Berlin).
4. Set **Maximum number of items** — this is the number of billed rows.
5. *(Optional)* Enable **Fetch view count** to populate `viewsCount`.
6. *(Optional)* Enable **Monitoring mode** and list **Fields to monitor for changes** (for example `price`, `title`, `descriptionText`).
7. Keep proxy on **Residential — Germany (DE)** for the best success rate.
8. Click **Start** and download the results as JSON, CSV, or Excel from the **Output** tab.

#### Monitoring mode

Enable **Monitoring mode** for scheduled runs. On the first run the actor stores every ad and returns them all. On later runs it compares the current results with the stored state and returns only:

- **New ads** — not seen in previous runs (`monitoringStatus: "new"`).
- **Updated ads** — an existing ad whose monitored fields changed (`monitoringStatus: "updated"`), with `changedFields`, `previousPrice`, `priceChanged`, and the appended `priceHistory`.
- **Delisted ads** — previously seen ads that are no longer in the search results (`monitoringStatus: "delisted"`). Delisted detection only runs when a search reaches its natural last page, so pair monitoring with a high enough `maxItems`.

Leave **Fields to monitor for changes** empty to only detect new and delisted ads. State is stored per search (query + location + start URLs) in a named key-value store, so multiple monitored searches do not collide.

Example monitoring configuration:

```json
{
  "startUrls": [
    { "url": "https://www.kleinanzeigen.de/s-auto-rad-boot/c210" }
  ],
  "maxItems": 200,
  "monitoringMode": true,
  "monitoringFields": ["price", "title"]
}
```

### How much does it cost to scrape Kleinanzeigen.de?

This actor uses **pay-per-event** pricing. You are charged once per ad saved to the dataset:

| Plan | Price per 1,000 ads |
|------|---------------------|
| Free | **$0.89** |
| Bronze | **$0.79** |
| Silver | **$0.69** |
| Gold | **$0.59** |

Scraping 1,000 ads on the Free plan costs about **$0.89** plus a small amount of platform compute. In monitoring mode you are only billed for the rows actually returned (new, updated, and delisted ads), which makes daily scheduled runs very cheap. Apify's free monthly usage credits cover thousands of ads per month.

### Input

```json
{
  "query": "Basecap",
  "location": "3331",
  "maxItems": 20,
  "fetchViewsCount": true,
  "monitoringMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "DE"
  }
}
```

### Output example

Download results in **JSON, CSV, Excel, HTML, or XML**. `viewsCount` is only populated when *Fetch view count* is enabled; otherwise it is `null`.

```json
{
  "url": "https://www.kleinanzeigen.de/s-anzeige/adidas-basecap-hellblau-one-size-baseballcape-neu/3504516432-156-3358",
  "id": "3504516432",
  "title": "ADIDAS Basecap Hellblau - one Size - Baseballcape - NEU",
  "price": "10.00",
  "priceCurrency": "EUR",
  "art": "Mützen, Schals & Handschuhe",
  "brand": null,
  "color": "Blau",
  "condition": "Neu",
  "size": null,
  "shippingPrice": "6.19",
  "kauferschutzPrice": null,
  "address": "13055 Berlin - Hohenschönhausen",
  "date": "05.09.2026",
  "viewsCount": 6,
  "primaryImageURL": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/c8/c84d4851-ad8a-40de-8cde-d7cee2396527?rule=$_59.JPG",
  "imageURLs": [
    "https://img.kleinanzeigen.de/api/v1/prod-ads/images/c8/c84d4851-ad8a-40de-8cde-d7cee2396527?rule=$_59.JPG",
    "https://img.kleinanzeigen.de/api/v1/prod-ads/images/5e/5e0b845f-e988-4221-8a35-dd95ffe31697?rule=$_59.JPG"
  ],
  "categoryURLs": [
    "https://www.kleinanzeigen.de/",
    "https://www.kleinanzeigen.de/s-mode-beauty/c153",
    "https://www.kleinanzeigen.de/s-accessoires-schmuck/c156"
  ],
  "descriptionText": "*Solange die Anzeige online ist, ist das Basecap verfügbar*\nAdidas Basecap\n*Farbe: hellblau\n*Größe: one size\n*Zustand: NEUWERTIG",
  "sellerName": "Nitsrek",
  "sellerURL": "https://www.kleinanzeigen.de/s-bestandsliste.html?userId=12345678",
  "sellerPhone": null,
  "sellerEmailFromDescription": null,
  "sellerPhoneFromDescription": null,
  "attributes": { "Art": "Mützen, Schals & Handschuhe", "Farbe": "Blau", "Zustand": "Neu" },
  "companyInfo": null
}
```

Commercial seller example (`companyInfo` populated):

```json
{
  "id": "3502999934",
  "title": "Continental Reifen NEU · BMW Styling 694 Winterkompletträder 19 Zoll",
  "price": "1800.00",
  "priceCurrency": "EUR",
  "address": "46242 Nordrhein-Westfalen - Bottrop",
  "sellerName": "Felgen Boss",
  "companyInfo": {
    "companyName": "Felgen Boss",
    "companyAddress": "Bahnhofstraße 43\n46242 Bottrop",
    "companyUrl": null,
    "companyPhone": "+491632245840",
    "openingHours": null,
    "companyEmails": ["info@felgen-boss.de"],
    "vatId": "DE332864326",
    "taxNumber": "319/5008/7174"
  }
}
```

### Use cases

- 📊 **Market & price research** — track asking prices for a product category across Germany.
- 🛒 **Reselling & arbitrage** — spot underpriced items the moment they are listed with monitoring mode.
- 🚗 **Dealer & inventory monitoring** — watch a commercial seller's listings and price changes over time.
- 🏠 **Lead generation** — collect commercial-seller company data (Impressum) from a category.
- 📈 **Trend analysis** — build a historical dataset of listing volume, condition mix, and price distribution.

### How it works

1. The actor resolves your search query to a canonical Kleinanzeigen search URL and applies the location code, or uses your start URLs directly.
2. It paginates through the search results (25 ads per page) and collects ad links.
3. For each ad it fetches the detail page and extracts the structured fields, images, seller data, and — for commercial sellers — the Impressum.
4. If *Fetch view count* is on, it makes one extra request per ad for `viewsCount`.
5. In monitoring mode it diffs the results against the stored state, updates price history, and emits only new, updated, and delisted ads.
6. Results are pushed to the dataset and you are charged one event per saved ad.

### Pricing

| Event | Price per event | Price per 1,000 |
|-------|----------------|-----------------|
| `listing-scraped` | $0.00089 | **$0.89** (Free tier) |

One event is charged for every ad written to the dataset. Bronze/Silver/Gold plans pay $0.79 / $0.69 / $0.59 per 1,000.

### FAQ

**Is it legal to scrape Kleinanzeigen.de?**
Scraping publicly available data is legal in most jurisdictions, and this actor only accesses pages any visitor can open without logging in. You are responsible for how you use the data — in particular, personal data (seller names, contact details) is subject to the GDPR, and you should have a lawful basis before storing or processing it. Review Kleinanzeigen's Terms of Service and Apify's [guide to web scraping legality](https://blog.apify.com/is-web-scraping-legal/) before running large jobs.

**Do I need a proxy?**
Yes. Kleinanzeigen blocks almost all datacenter IPs. Use **Apify Residential proxy with country Germany (DE)** — this is the default.

**Why is `viewsCount` null?**
It is only filled when you enable **Fetch view count**, which costs one extra request per ad. Without it, `viewsCount` is always `null`.

**Why are `brand`, `size`, or `condition` sometimes null?**
Those fields come from the structured attributes the seller filled in. Many private listings only set a subset, so a missing value means the seller did not provide it — the information may still be in `descriptionText`.

**How does delisted detection work?**
The actor can only tell an ad is delisted if the search it belongs to was scraped to its last page. If you cap `maxItems` below the total number of results, delisted ads are not reported for that run. Kleinanzeigen also does not expose official first-seen dates or full price history, so `daysOnMarket` and `priceHistory` are based on this actor's own observations between runs.

**Can I schedule recurring runs?**
Yes. Use Apify's [scheduling](https://docs.apify.com/platform/schedules) to run the actor daily, hourly, or at any interval, and combine it with monitoring mode to get only the changes.

**Can I call it from my own code?**
Yes. Use the [Apify API](https://apify.com/parsebird/ebay-kleinanzeigen-scraper/api) or the official [Python](https://docs.apify.com/api/client/python/) / [JavaScript](https://docs.apify.com/api/client/js/) clients — see the examples below. You can also connect it to Make, Zapier, Google Sheets, Slack, and more through [Apify integrations](https://docs.apify.com/platform/integrations).

**Something looks wrong or missing.**
Open the **Issues** tab on the actor page with an example input and we will take a look.

### API usage examples

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("parsebird/ebay-kleinanzeigen-scraper").call(run_input={
    "query": "Basecap",
    "location": "3331",
    "maxItems": 20,
    "proxyConfiguration": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "DE"},
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"], item["url"])
```

**JavaScript**

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('parsebird/ebay-kleinanzeigen-scraper').call({
    query: 'Basecap',
    location: '3331',
    maxItems: 20,
    proxyConfiguration: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'], apifyProxyCountry: 'DE' },
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((it) => console.log(it.title, it.price, it.url));
```

### Related actors

- [Vinted Scraper](https://apify.com/parsebird/vinted-scraper) — second-hand fashion listings.
- [eBay Sold Listings Scraper](https://apify.com/parsebird/ebay-sold-listings-scraper) — realised sale prices from eBay.
- [Milanuncios Scraper](https://apify.com/parsebird/milanuncios-scraper) — Spain's largest classifieds site.
- [Subito.it Scraper](https://apify.com/parsebird/subito-it-scraper) — Italy's largest classifieds site.

### Legal and compliance

This actor extracts only publicly accessible information from kleinanzeigen.de and does not bypass any login or access control. Data returned may include personal data of private sellers; if you store or process it, you must comply with the GDPR and any other applicable law, and you use this actor at your own responsibility. It is not affiliated with, endorsed by, or connected to Kleinanzeigen GmbH, eBay, or Adevinta.

# Actor input Schema

## `query` (type: `string`):

Free-text search term, exactly as you would type it on Kleinanzeigen (for example `Basecap` or `iPhone 15 Pro`). Leave empty if you only use Start URLs.

## `location` (type: `string`):

Kleinanzeigen location code to restrict results by area (for example `3331` for Berlin, `3386` for Neukölln). Find it in the URL of a search you run on the site (the number after `l`). Leave empty to search nationwide.

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

One or more Kleinanzeigen search-result URLs to scrape (for example `https://www.kleinanzeigen.de/s-berlin/basecap/k0l3331`). Used in addition to the search query if both are given.

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

Maximum number of ads to extract across all searches. This is the number of billed rows.

## `fetchViewsCount` (type: `boolean`):

When enabled, the actor makes an extra request per ad to populate `viewsCount` (how many times the ad was viewed on Kleinanzeigen). When disabled (default), `viewsCount` is always null.

## `monitoringMode` (type: `boolean`):

Only return new, updated, and delisted ads compared with the previous run of this actor. Ideal for scheduled runs. State is stored per search in a named key-value store.

## `monitoringFields` (type: `array`):

Which fields to watch for changes when monitoring mode is on (for example `price`, `title`, `descriptionText`). Leave empty to only detect new and delisted ads.

## `debugMode` (type: `boolean`):

Enable verbose debug logging.

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

Proxy settings. Kleinanzeigen blocks most datacenter IPs, so Residential proxy with country Germany (DE) is strongly recommended.

## Actor input object example

```json
{
  "query": "Basecap",
  "startUrls": [],
  "maxItems": 10,
  "fetchViewsCount": false,
  "monitoringMode": false,
  "monitoringFields": [
    "price"
  ],
  "debugMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "query": "Basecap",
    "location": "",
    "startUrls": [],
    "maxItems": 10,
    "monitoringFields": [
        "price"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/ebay-kleinanzeigen-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 = {
    "query": "Basecap",
    "location": "",
    "startUrls": [],
    "maxItems": 10,
    "monitoringFields": ["price"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/ebay-kleinanzeigen-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 '{
  "query": "Basecap",
  "location": "",
  "startUrls": [],
  "maxItems": 10,
  "monitoringFields": [
    "price"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call parsebird/ebay-kleinanzeigen-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/ebay-kleinanzeigen-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/a77gwYVK4avyHzONp/builds/IloW3yfZDGLWqzmYO/openapi.json
