# Kleinanzeigen $1💰 URL Search | Keyword Filtering | Rich Output (`abotapi/kleinanzeigen-de-scraper`) Actor

From $1/1K. Scrape Kleinanzeigen.de ads by keyword, category, location, price, seller type, or search URL. Extract descriptions, photos, attributes, seller details, posted dates, category paths, and imprint data. Returns flat JSON records ready for spreadsheets or databases.

- **URL**: https://apify.com/abotapi/kleinanzeigen-de-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Kleinanzeigen.de Scraper

Scrape classified ads from Kleinanzeigen.de (formerly eBay Kleinanzeigen) by keyword, category, location, price, offer type and seller type, or just paste ready-made search URLs. The scraper walks result pages automatically and, when you want it, opens each ad's detail page to pull the full description, every photo, the attribute list, the seller profile, the posted date, the category path and the commercial-seller imprint. Output is one flat JSON record per ad, ready for spreadsheets, dashboards or databases.

### Why this scraper

- Two ways in: a filter builder (keyword, category id, location with radius, min/max price, offered vs wanted, private vs commercial, sort) and a paste-URLs mode that accepts any Kleinanzeigen.de search or category URL.
- Automatic forward pagination, 27 ads per page, up to the site's page limit.
- Up to ~35 fields per ad including full description, all photo URLs, attribute key/value pairs, category path, seller name/type/registration date, and the commercial-seller legal imprint (name, address, email) where the seller is a registered trader.
- Fast to run on Residential proxy (the default), or on Datacenter for free-tier users.
- Lean toggle: turn off detail fetching for a quicker, cheaper run that still returns ~14 fields straight from the search results.
- Deduplicates promoted listings that repeat across pages, so you do not pay for the same ad twice.

### Data you get

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

| Field | Example |
| --- | --- |
| `adId` | `"3400000001"` |
| `url` | `"https://www.kleinanzeigen.de/s-anzeige/sample-listing-title/3400000001-217-0001"` |
| `title` | `"Sample Listing Title"` |
| `descriptionShort` | `"First sentence of the ad as shown in the result list..."` |
| `descriptionFull` | `"Full ad description text appears here when fetchDetails = true."` |
| `price` | `"1.500 € VB"` |
| `priceAmount` | `1500` |
| `priceType` | `"NEGOTIABLE"` |
| `currency` | `"EUR"` |
| `locationText` | `"10115 Berlin - Mitte"` |
| `postalCode` | `"10115"` |
| `regionName` | `"Berlin"` |
| `cityName` | `"Mitte"` |
| `categoryId` | `"217"` |
| `categoryName` | `"Fahrräder & Zubehör"` |
| `categoryPath` | `"Auto, Rad & Boot > Fahrräder & Zubehör"` |
| `postedDate` | `"2026-01-01"` |
| `postedDateText` | `"Heute, 09:00"` |
| `viewCount` | `null` |
| `imageCount` | `5` |
| `thumbnailUrl` | `"https://img.kleinanzeigen.de/api/v1/prod-ads/images/00/00000000-0000-0000-0000-000000000000?rule=$_59.AUTO"` |
| `imageUrls` | `["https://img.kleinanzeigen.de/api/v1/prod-ads/images/00/00000000-0000-0000-0000-000000000000?rule=$_59.AUTO"]` |
| `attributes` | `{ "Art": "Herren", "Typ": "Elektrofahrräder", "Zustand": "Sehr Gut" }` |
| `attributesRaw` | `[{ "name": "Art", "value": "Herren" }]` |
| `isPro` | `false` |
| `isShop` | `false` |
| `isTopAd` | `false` |
| `isSold` | `false` |
| `adType` | `"OFFERED"` |
| `tags` | `["Versand möglich"]` |
| `sellerId` | `"100000000"` |
| `sellerName` | `"Seller Name"` |
| `sellerType` | `"PRIVATE"` |
| `sellerUrl` | `"https://www.kleinanzeigen.de/s-bestandsliste.html?userId=100000000"` |
| `sellerActiveSince` | `"2026-01-01"` |
| `sellerOtherAdsCount` | `4` |
| `imprint` | `{ "raw": "Sample Trader\nEinzelunternehmer\n10115 Berlin, Sample Str. 1\ntrader@example.com", "lines": ["Sample Trader", "Einzelunternehmer", "10115 Berlin, Sample Str. 1", "trader@example.com"], "email": "trader@example.com" }` |
| `searchUrl` | `"https://www.kleinanzeigen.de/s-fahrrad/k0"` |
| `scrapedAt` | `"2026-01-01T00:00:00.000Z"` |

Fields that only come from the detail page (`descriptionFull`, `categoryName`, `categoryPath`, `imageUrls` beyond the first, `attributes`, `seller*`, `imprint`, `postedDate`) are `null` or empty when `fetchDetails` is `false`.

### How to use

Search by keyword:

```json
{
  "mode": "search",
  "keyword": "fahrrad",
  "maxPages": 3,
  "maxListings": 50,
  "fetchDetails": true
}
````

Search a category in a city with a radius and a price range, newest first:

```json
{
  "mode": "search",
  "keyword": "",
  "categoryId": "217",
  "location": "Berlin",
  "radiusKm": 20,
  "minPrice": 100,
  "maxPrice": 800,
  "sortBy": "date",
  "maxPages": 5,
  "maxListings": 100,
  "fetchDetails": true
}
```

Only private sellers, wanted ads:

```json
{
  "mode": "search",
  "keyword": "sofa",
  "offerType": "gesuche",
  "sellerType": "privat",
  "maxPages": 2,
  "fetchDetails": false
}
```

Paste several search URLs (filter fields are ignored in this mode):

```json
{
  "mode": "url",
  "urls": [
    "https://www.kleinanzeigen.de/s-fahrrad/k0",
    "https://www.kleinanzeigen.de/s-berlin/sofa/k0l3331"
  ],
  "maxPages": 3,
  "maxListings": 80,
  "fetchDetails": true
}
```

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `search` | `search` to build URLs from the filters below, `url` to paste your own search URLs. |
| `keyword` | string | `fahrrad` | Free-text query. Leave empty to browse a whole category. |
| `categoryId` | string | (empty) | Numeric Kleinanzeigen category id, e.g. `217`. Find it in any category URL: `.../c217` -> `217`. |
| `location` | string | (empty) | City name or German postal code. Resolved automatically to the matching location id. |
| `radiusKm` | integer | `0` | Search radius in km around the location. Ignored when no location is set. |
| `minPrice` | integer | (empty) | Lowest price to include. |
| `maxPrice` | integer | (empty) | Highest price to include. |
| `offerType` | string | `any` | `angebote` for offered ads, `gesuche` for wanted ads, `any` for both. |
| `sellerType` | string | `any` | `privat` for private sellers, `gewerblich` for commercial sellers/shops, `any` for both. |
| `sortBy` | string | `relevance` | `relevance`, `date` (newest), `price-asc`, `price-desc`, `distance`. Promoted ads can appear first regardless of sort. |
| `urls` | array of strings | `["https://www.kleinanzeigen.de/s-fahrrad/k0"]` | Search/category URLs to scrape (used only when `mode` = `url`). |
| `maxPages` | integer | `1` | Result pages to walk per search/URL (27 ads per page). |
| `maxListings` | integer | `0` | Stop after this many ads across all searches. `0` = unlimited (still bounded by `maxPages`). |
| `fetchDetails` | boolean | `true` | Open each ad's detail page for the full description, all photos, attributes, seller info and imprint. Turn off for a faster, cheaper run. |
| `proxy` | object | Residential, country `DE` | Apify Proxy. Residential is the default for the smoothest runs. On the free plan, switch to Datacenter (expect occasional retries). |

### Output example

> Sample shape, values are illustrative placeholders.

```json
{
  "adId": "3400000001",
  "url": "https://www.kleinanzeigen.de/s-anzeige/sample-listing-title/3400000001-217-0001",
  "title": "Sample Listing Title",
  "descriptionShort": "First sentence of the ad as shown in the result list...",
  "descriptionFull": "Full ad description text appears here when fetchDetails = true.",
  "price": "1.500 € VB",
  "priceAmount": 1500,
  "priceType": "NEGOTIABLE",
  "currency": "EUR",
  "locationText": "10115 Berlin - Mitte",
  "postalCode": "10115",
  "regionName": "Berlin",
  "cityName": "Mitte",
  "categoryId": "217",
  "categoryName": "Fahrräder & Zubehör",
  "categoryPath": "Auto, Rad & Boot > Fahrräder & Zubehör",
  "postedDate": "2026-01-01",
  "postedDateText": "Heute, 09:00",
  "viewCount": null,
  "imageCount": 1,
  "thumbnailUrl": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/00/00000000-0000-0000-0000-000000000000?rule=$_59.AUTO",
  "imageUrls": ["https://img.kleinanzeigen.de/api/v1/prod-ads/images/00/00000000-0000-0000-0000-000000000000?rule=$_59.AUTO"],
  "attributes": { "Art": "Herren", "Typ": "Elektrofahrräder", "Zustand": "Sehr Gut" },
  "attributesRaw": [{ "name": "Art", "value": "Herren" }, { "name": "Typ", "value": "Elektrofahrräder" }, { "name": "Zustand", "value": "Sehr Gut" }],
  "isPro": false,
  "isShop": false,
  "isTopAd": false,
  "isSold": false,
  "adType": "OFFERED",
  "tags": ["Versand möglich"],
  "sellerId": "100000000",
  "sellerName": "Seller Name",
  "sellerType": "PRIVATE",
  "sellerUrl": "https://www.kleinanzeigen.de/s-bestandsliste.html?userId=100000000",
  "sellerActiveSince": "2026-01-01",
  "sellerOtherAdsCount": 4,
  "imprint": null,
  "searchUrl": "https://www.kleinanzeigen.de/s-fahrrad/k0",
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Plan and proxy notes

- Default proxy is Residential with country `DE`. Available on the Starter plan and above. This gives the cleanest runs.
- On the free plan, set `proxy` to `{ "useApifyProxy": true }` (Datacenter). The actor will still work, but expect some retries and occasionally fewer results.
- Detail enrichment (`fetchDetails: true`) makes one extra request per ad. Use `maxListings` and `maxPages` to keep runs bounded, or set `fetchDetails: false` for the fastest, cheapest pass.
- Be considerate with how often and how broadly you run the scraper, and use the data in line with Kleinanzeigen.de's terms and applicable law.

# Actor input Schema

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

Pick how you want to start: 'search' builds search URLs from the filter fields below, 'url' takes ready-made Kleinanzeigen.de search URLs you paste yourself.

## `keyword` (type: `string`):

Free-text query, e.g. 'fahrrad', 'iphone 14', 'sofa'. Leave empty to browse a whole category.

## `categoryId` (type: `string`):

Numeric Kleinanzeigen category id, e.g. '217' (Fahrräder & Zubehör), '161' (Auto, Rad & Boot), '80' (Elektronik). Find it in the URL of any category page: .../c217 → 217. Leave empty to search all categories.

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

City name or German postal code, e.g. 'Berlin', 'München', '10115'. Resolved automatically to the matching location id. Leave empty to search all of Germany.

## `radiusKm` (type: `integer`):

Search radius in kilometres around the chosen location. Ignored when no location is set. 0 = exact location only.

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

Lowest price to include. Leave empty for no lower bound.

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

Highest price to include. Leave empty for no upper bound.

## `offerType` (type: `string`):

Limit to ads offering something ('angebote') or wanted ads ('gesuche'). 'any' includes both.

## `sellerType` (type: `string`):

Limit to private sellers ('privat') or commercial sellers/shops ('gewerblich'). 'any' includes both.

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

Result ordering. Note: Kleinanzeigen shows promoted ads first regardless of sort.

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

One or more Kleinanzeigen.de search/category URLs to scrape. Filter-mode fields above are ignored. Pagination starts from the page in each URL and walks forward. Example: https://www.kleinanzeigen.de/s-fahrrad/k0

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

How many result pages to walk per search/URL (27 ads per page). Kleinanzeigen caps search results around 50 pages.

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

Stop after this many ads across all searches. 0 = unlimited (still bounded by maxPages).

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

Open every ad's detail page to pull the full description, all photos, attributes, seller info, view count, category path, and commercial-seller imprint. Turn off for a faster, cheaper run with just the search-result fields (~14 fields).

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

Apify Residential proxy is strongly recommended and is the default. When no country is pinned (the default), each new connection lands on a different EU country (DE, AT, NL, BE, FR, IT, ES, PL, CZ, SE, DK, CH) so a single throttled exit cannot stall the whole run. Pin a country (DE recommended for kleinanzeigen.de) to force all connections through one location.

## Actor input object example

```json
{
  "mode": "search",
  "keyword": "fahrrad",
  "radiusKm": 0,
  "offerType": "any",
  "sellerType": "any",
  "sortBy": "relevance",
  "urls": [
    "https://www.kleinanzeigen.de/s-fahrrad/k0"
  ],
  "maxPages": 1,
  "maxListings": 0,
  "fetchDetails": true,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "keyword": "fahrrad",
    "urls": [
        "https://www.kleinanzeigen.de/s-fahrrad/k0"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/kleinanzeigen-de-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 = {
    "keyword": "fahrrad",
    "urls": ["https://www.kleinanzeigen.de/s-fahrrad/k0"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "keyword": "fahrrad",
  "urls": [
    "https://www.kleinanzeigen.de/s-fahrrad/k0"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call abotapi/kleinanzeigen-de-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=abotapi/kleinanzeigen-de-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Kleinanzeigen $1💰 URL Search | Keyword Filtering | Rich Output",
        "description": "From $1/1K. Scrape Kleinanzeigen.de ads by keyword, category, location, price, seller type, or search URL. Extract descriptions, photos, attributes, seller details, posted dates, category paths, and imprint data. Returns flat JSON records ready for spreadsheets or databases.",
        "version": "1.0",
        "x-build-id": "2dblNY5SXMY5Vh00r"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~kleinanzeigen-de-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-kleinanzeigen-de-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/abotapi~kleinanzeigen-de-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-kleinanzeigen-de-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/abotapi~kleinanzeigen-de-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-kleinanzeigen-de-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "url"
                        ],
                        "type": "string",
                        "description": "Pick how you want to start: 'search' builds search URLs from the filter fields below, 'url' takes ready-made Kleinanzeigen.de search URLs you paste yourself.",
                        "default": "search"
                    },
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Free-text query, e.g. 'fahrrad', 'iphone 14', 'sofa'. Leave empty to browse a whole category."
                    },
                    "categoryId": {
                        "title": "Category ID (optional)",
                        "type": "string",
                        "description": "Numeric Kleinanzeigen category id, e.g. '217' (Fahrräder & Zubehör), '161' (Auto, Rad & Boot), '80' (Elektronik). Find it in the URL of any category page: .../c217 → 217. Leave empty to search all categories."
                    },
                    "location": {
                        "title": "Location (city or postal code, optional)",
                        "type": "string",
                        "description": "City name or German postal code, e.g. 'Berlin', 'München', '10115'. Resolved automatically to the matching location id. Leave empty to search all of Germany."
                    },
                    "radiusKm": {
                        "title": "Radius around location (km)",
                        "minimum": 0,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Search radius in kilometres around the chosen location. Ignored when no location is set. 0 = exact location only.",
                        "default": 0
                    },
                    "minPrice": {
                        "title": "Min price (€)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Lowest price to include. Leave empty for no lower bound."
                    },
                    "maxPrice": {
                        "title": "Max price (€)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Highest price to include. Leave empty for no upper bound."
                    },
                    "offerType": {
                        "title": "Offer type",
                        "enum": [
                            "any",
                            "angebote",
                            "gesuche"
                        ],
                        "type": "string",
                        "description": "Limit to ads offering something ('angebote') or wanted ads ('gesuche'). 'any' includes both.",
                        "default": "any"
                    },
                    "sellerType": {
                        "title": "Seller type",
                        "enum": [
                            "any",
                            "privat",
                            "gewerblich"
                        ],
                        "type": "string",
                        "description": "Limit to private sellers ('privat') or commercial sellers/shops ('gewerblich'). 'any' includes both.",
                        "default": "any"
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "date",
                            "price-asc",
                            "price-desc",
                            "distance"
                        ],
                        "type": "string",
                        "description": "Result ordering. Note: Kleinanzeigen shows promoted ads first regardless of sort.",
                        "default": "relevance"
                    },
                    "urls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "One or more Kleinanzeigen.de search/category URLs to scrape. Filter-mode fields above are ignored. Pagination starts from the page in each URL and walks forward. Example: https://www.kleinanzeigen.de/s-fahrrad/k0",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPages": {
                        "title": "Max pages per search",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "How many result pages to walk per search/URL (27 ads per page). Kleinanzeigen caps search results around 50 pages.",
                        "default": 1
                    },
                    "maxListings": {
                        "title": "Max listings total",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Stop after this many ads across all searches. 0 = unlimited (still bounded by maxPages).",
                        "default": 0
                    },
                    "fetchDetails": {
                        "title": "Fetch full ad details",
                        "type": "boolean",
                        "description": "Open every ad's detail page to pull the full description, all photos, attributes, seller info, view count, category path, and commercial-seller imprint. Turn off for a faster, cheaper run with just the search-result fields (~14 fields).",
                        "default": true
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Residential proxy is strongly recommended and is the default. When no country is pinned (the default), each new connection lands on a different EU country (DE, AT, NL, BE, FR, IT, ES, PL, CZ, SE, DK, CH) so a single throttled exit cannot stall the whole run. Pin a country (DE recommended for kleinanzeigen.de) to force all connections through one location.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
