# Kleinanzeigen Scraper (`aurenic/kleinanzeigen-scraper`) Actor

Extract listings from Germany's #1 classifieds marketplace. Get prices, locations, descriptions, images, and seller info from 35M+ active ads.

- **URL**: https://apify.com/aurenic/kleinanzeigen-scraper.md
- **Developed by:** [Aurenic](https://apify.com/aurenic) (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.20 / 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.

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

Extract listings from Germany's #1 classifieds marketplace — Kleinanzeigen.de (formerly eBay Kleinanzeigen). Get prices, locations, descriptions, images, and seller info from 35M+ active ads.

### What does Kleinanzeigen Scraper do?

Scrape classified listings from Kleinanzeigen.de across all categories: electronics, cars, furniture, real estate, jobs, and more. Search by keyword and location, and get structured data ready for price monitoring, market research, or lead generation.

Built with `got-scraping` (Chrome TLS impersonation) to handle Cloudflare's JA3/JA4 fingerprint checks without a browser. Uses German residential proxies for reliable access.

### Output fields

| Field | Description |
|---|---|
| id | Kleinanzeigen ad ID |
| title | Listing headline |
| description | Listing description |
| price | Price in EUR |
| currency | Currency code (EUR) |
| priceType | FIXED, NEGOTIABLE, or FREE |
| location | Full location string |
| postcode | German postal code |
| city | City name |
| date | Posting date |
| tags | Array (Versand möglich, etc.) |
| imageUrl | Primary image URL |
| url | Direct URL to listing |
| sellerType | PRIVATE or COMMERCIAL (with enrichDetails) |
| breadcrumbs | Category path (with enrichDetails) |
| images | All image URLs (with enrichDetails) |
| attributes | Category-specific attributes (with enrichDetails) |
| views | View count (with enrichDetails) |
| scrapedAt | ISO timestamp |

### Who is it for?

- **Resellers** finding underpriced inventory across Germany
- **Price trackers** monitoring competitor pricing in real time
- **Real estate analysts** tracking rental and sale listings
- **Market researchers** analysing German classifieds trends
- **Lead generators** building B2B seller databases

### Pricing

**$0.0012 per result** ($1.20 per 1,000 listings). No subscription.

| Results | Cost |
|---|---|
| 100 | $0.12 |
| 1,000 | $1.20 |
| 10,000 | $12.00 |

### How to use it

1. Enter a **Search Query** (e.g., "iphone", "fahrrad", "macbook").
2. Optionally enter a **Location** (e.g., "Berlin", "München", "10435").
3. Optionally set **Min Price** and **Max Price** filters.
4. Enable **Enrich with Detail Data** for full descriptions, seller type, and all images.
5. Set **Max Items** (default 100).
6. Click **Start**.

### Output example

```json
{
  "id": "2945678901",
  "title": "Apple iPhone 15 Pro Max 256GB",
  "description": "Verkaufe mein iPhone 15 Pro Max, top Zustand...",
  "price": 899,
  "currency": "EUR",
  "priceType": "NEGOTIABLE",
  "location": "10115 Berlin Mitte",
  "postcode": "10115",
  "city": "Berlin Mitte",
  "date": "Heute, 14:30",
  "tags": ["Versand möglich"],
  "imageUrl": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/...",
  "url": "https://www.kleinanzeigen.de/s-anzeige/apple-iphone-15-pro-max-256gb/2945678901",
  "scrapedAt": "2026-09-18T10:00:00.000Z"
}

```

### Technical details

- Uses **got-scraping** with Chrome TLS impersonation to bypass Cloudflare's JA3/JA4 fingerprint checks
- No browser required — fast and lightweight
- German residential proxies (pre-configured)
- Rate-limited: 2.5–5 second delays between pages
- Automatic pagination
- Optional detail page enrichment

### Known limits

- **Kleinanzeigen caches search results for ~2 minutes.** New listings may not appear immediately.
- **Rate limiting at ~30–50 requests per session.** The Actor paces requests to stay under this threshold.
- **Detail enrichment adds significant runtime** (1.5–3s per listing). Enable only when full descriptions and seller type are needed.

### FAQ

**Do I need to configure proxies?** No. German residential proxies are pre-configured and included.

**Can I scrape all of Germany?** Yes — leave the Location field empty to search nationwide.

**What categories are supported?** All categories: electronics, cars, furniture, real estate, jobs, and more.

**How do I export data?** After a run, go to Storage → Export as JSON, CSV, Excel, or XML.

### Support

Open an issue on the Actor's page for bugs or feature requests.

# Actor input Schema

## `searchQuery` (type: `string`):

Keyword(s) to search Kleinanzeigen listings (e.g., 'iphone', 'fahrrad', 'macbook')

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

German city, postcode, or district (e.g., 'Berlin', '10435', 'München'). Leave empty for all Germany.

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

Maximum listings to extract.

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

Minimum price filter. Leave empty for no minimum.

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

Maximum price filter. Leave empty for no maximum.

## `enrichDetails` (type: `boolean`):

Fetch each listing's detail page for full description and seller type. Slower and more expensive, but richer output.

## Actor input object example

```json
{
  "searchQuery": "iphone",
  "location": "Berlin",
  "maxItems": 100,
  "enrichDetails": false
}
```

# Actor output Schema

## `results` (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 = {
    "searchQuery": "iphone",
    "location": "Berlin"
};

// Run the Actor and wait for it to finish
const run = await client.actor("aurenic/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 = {
    "searchQuery": "iphone",
    "location": "Berlin",
}

# Run the Actor and wait for it to finish
run = client.actor("aurenic/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 '{
  "searchQuery": "iphone",
  "location": "Berlin"
}' |
apify call aurenic/kleinanzeigen-scraper --silent --output-dataset

```

## MCP server setup

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