# Kleinanzeigen Scraper: Listings, Prices & Sellers (`scrapemint/kleinanzeigen-scraper`) Actor

Kleinanzeigen.de (ex eBay Kleinanzeigen) listings from any search: title, price, VB or fixed, postcode and city, posting date, shipping, PRO shops, photos, plus optional full description, attributes and seller profile. Paste a search URL or set keyword and city. Past the 1,250 cap. $0.001 per ad.

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

## Pricing

from $1.00 / 1,000 ads

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

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

## What's an Apify Actor?

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

## Kleinanzeigen Scraper: Listings, Prices & Sellers

Ads from **Kleinanzeigen.de** (formerly eBay Kleinanzeigen), Germany's largest classifieds site, as clean rows: title, **price and price type** (fixed, VB / negotiable, free), original price, **postcode and city**, posting date, description preview, shipping and direct-buy flags, PRO shop name, photo and URL. Turn on details for the **full description, attributes** (condition, type, size, brand...), all photos and the **seller profile**: name, private or commercial, active since, ads online and rating badges.

Paste a search URL from kleinanzeigen.de with any filters (category, city and radius, price, private or commercial, category attributes), or set keywords and a city here. Kleinanzeigen shows 1,250 ads per search; bigger searches are **split by price automatically**.

No API key, no login, no proxy. $0.001 per ad, no start fee.

### What you get per ad

- `adId`, `url`, `title`, `categoryId`
- `price`, `priceText`, `priceType` (fixed, negotiable, negotiable (no price), free), `originalPrice`
- `zip`, `city`
- `postedAt` (Berlin time), `postedAtText`
- `descriptionPreview`, `imageUrl`, `imageCount`
- `shippingAvailable`, `directBuy`, `isProSeller`, `proShopName`

With **Full description, attributes and seller** on:

- `description`: the full ad text
- `attributes`: e.g. Zustand (condition), Typ, Art, Größe, Marke, Farbe
- `features`, `images` (all photos, large), `shipping` (e.g. Nur Abholung, Versand möglich), `state`, `categoryName`
- `sellerName`, `sellerId`, `sellerType` (Privater Nutzer or Gewerblicher Nutzer), `isCommercialSeller`, `sellerActiveSince`, `sellerAdsOnline`, `sellerBadges` (e.g. TOP Zufriedenheit, Besonders zuverlässig)

### Example input

A search copied from the site, with its filters:

```json
{
  "searchUrls": ["https://www.kleinanzeigen.de/s-anbieter:privat/preis:100:500/berlin/fahrrad/k0l3331r10"]
}
```

iPhone 15 ads within 20 km of Berlin, with full details:

```json
{
  "queries": ["iphone 15"],
  "location": "Berlin",
  "radiusKm": 20,
  "includeDetails": true
}
```

Every PlayStation 5 ad in Germany from private sellers, up to 300 €:

```json
{
  "queries": ["playstation 5"],
  "sellerType": "privat",
  "maxPrice": 300,
  "maxItemsPerSearch": 5000
}
```

### Example output

```json
{
  "adId": "3535148567",
  "url": "https://www.kleinanzeigen.de/s-anzeige/panzerglas-fuer-iphone-12-13-14-und-15/3535148567-409-3388",
  "title": "Panzerglas für iPhone 12, 13 ,14 und 15",
  "priceText": "1.500 € VB",
  "priceType": "negotiable",
  "zip": "12353",
  "city": "Neukölln",
  "postedAt": "2026-10-09T00:05",
  "imageCount": 10,
  "shippingAvailable": false,
  "isProSeller": false,
  "attributes": { "Typ": "Schutzfolie", "Material": "Glas", "Zustand": "Neu" },
  "shipping": "Nur Abholung",
  "state": "Berlin",
  "sellerName": "Hüseyin",
  "sellerType": "Privater Nutzer",
  "sellerActiveSince": "23.02.2021",
  "categoryName": "Smartphone Zubehör"
}
```

### Uses

- **Resellers and flippers:** fresh underpriced ads for the products you buy, scheduled every few minutes with a small max
- **Price research:** asking prices for used goods by city, condition and model
- **Dealers and agencies:** cars, flats and services listed by private sellers in your area
- **Market and brand monitoring:** how many second-hand units of a product are on the market and at what price
- **Lead generation:** commercial sellers (PRO shops) by category and region

### Pricing

- **$0.001** per ad
- **$0.0025** per ad with Full description, attributes and seller on (instead of $0.001, not on top)
- No start fee. A search with no results is free.

### Notes

- Built searches use Kleinanzeigen's default order (newest first, with promoted ads on top). Promoted ads show no date, so `postedAt` is empty for them.
- When a search is split by price, ads without a price (VB with no amount) are left out, because Kleinanzeigen's price filter skips them. Searches under 1,250 ads are read whole.
- Split searches are read across all price ranges page by page, so a capped run is a spread of the newest ads, not only the cheapest.
- Phone numbers are behind Kleinanzeigen's login and are not included.
- An ad that shows up in two of your searches is kept once.

# Actor input Schema

## `searchUrls` (type: `array`):

Search result pages copied from kleinanzeigen.de with any filters set on the site (category, city and radius, price, private or commercial, category attributes...). Each URL is one search.

## `queries` (type: `array`):

Or build searches here. One search per keyword, e.g. fahrrad, iphone 15, wohnung, playstation 5.

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

Optional, e.g. Berlin, München, 50667. Empty searches all of Germany.

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

Used with a city or postcode. Kleinanzeigen offers 5, 10, 20, 30, 50, 100, 150 and 200; other values are rounded up.

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

Optional.

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

Optional.

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

Private or commercial sellers.

## `adType` (type: `string`):

Offers (Angebote) or wanted ads (Gesuche).

## `includeDetails` (type: `boolean`):

Opens each ad for its full description, attributes (condition, type, size...), all photos, shipping, state, and the seller's name, private or commercial, active since, ads online and badges. Slower. $0.0025 per ad instead of $0.001.

## `maxItemsPerSearch` (type: `integer`):

Newest first. Kleinanzeigen shows 1,250 per search; bigger searches are split by price automatically (ads without a price are then left out).

## Actor input object example

```json
{
  "searchUrls": [],
  "queries": [
    "fahrrad"
  ],
  "location": "",
  "radiusKm": 20,
  "sellerType": "",
  "adType": "",
  "includeDetails": false,
  "maxItemsPerSearch": 500
}
```

# Actor output Schema

## `listings` (type: `string`):

Title, price, location, date, shipping, seller flags, photos, and details when asked for.

## `summary` (type: `string`):

Ad counts per search and any searches that failed.

# 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 = {
    "queries": [
        "fahrrad"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/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 = { "queries": ["fahrrad"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/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 '{
  "queries": [
    "fahrrad"
  ]
}' |
apify call scrapemint/kleinanzeigen-scraper --silent --output-dataset

```

## MCP server setup

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