# Kleinanzeigen Scraper API — $0.001 per ad

> Kleinanzeigen Scraper API: Classified ads from Kleinanzeigen.de — price, location, date. $0.001 per delivered ad, nothing delivered means nothing charged.

[Home](https://quanticdata.io/)/[Collectors](https://quanticdata.io/collectors/)/*Kleinanzeigen Scraper API*

# Kleinanzeigen Scraper API

A Kleinanzeigen scraper API for Germany's largest classifieds site: search a keyword and get one row per ad — title, price as shown with the negotiable VB flag parsed out, location and German ZIP, listing date, description excerpt, thumbnail, the promoted top-ad flag and the ad URL.

[Get my free API key](https://app.quanticdata.io/register) [See the request](/collectors/kleinanzeigen-scraper-api/#integration)

$0.001 per delivered ad · $2 free every month · Failed runs never billed

POST /v1/scraper/collectors/kleinanzeigen_search/run

```
$ curl $QD/kleinanzeigen_search/run \
    -H "Authorization: Bearer $QD_API_KEY" \
    -d '{"query": "fahrrad", "max_results": 25}'
{ "status": "done", "count": 25,
  "results": [
    {
      "ad_id": "…",
      "title": "…",
      "url": "…",
      "price": "…" } ],
  "cost": 0.025 }
# 25 ads × $0.001 · nothing delivered, nothing charged
```

**$0.001 / ad**2,000 ads on the free $2 every month

**Semantic input**query, max_results — no URL lists

**Up to 100**ads per run, pagination handled for you

**No browser**read over HTTP/TLS — cheaper and faster than rendering

On this page: [What it is](/collectors/kleinanzeigen-scraper-api/#what) [Output fields](/collectors/kleinanzeigen-scraper-api/#output) [Inputs](/collectors/kleinanzeigen-scraper-api/#input) [Pricing](/collectors/kleinanzeigen-scraper-api/#pricing) [Integration](/collectors/kleinanzeigen-scraper-api/#integration) [Use cases](/collectors/kleinanzeigen-scraper-api/#use-cases) [Versus the alternatives](/collectors/kleinanzeigen-scraper-api/#compare) [FAQ](/collectors/kleinanzeigen-scraper-api/#faq)

## What a Kleinanzeigen scraper API does

German classifieds price the way people speak, not the way parsers like: an amount, "VB" for Verhandlungsbasis (open to offers), or "Zu verschenken" for free. This collector keeps the raw `price` text on every ad and adds a parsed `price_value` — left null for free and non-numeric forms so a giveaway never counts as a €0 sale — plus a boolean `negotiable` that records the VB flag on its own.

Placement is separated from content. Promoted listings are marked with `is_topad` instead of being silently mixed into the ranking, and the location is returned both as the on-card string and as a clean German `zip`, so you can group a search by postcode without re-parsing text.

Input is meaning, not a URL *query* *max_results*

## What one ad looks like

Every delivered ad carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.

| Field | Type | What it holds |
| --- | --- | --- |
| `rank` | integer | 1-based position. |
| `ad_id` | string · nullable | Ad id. |
| `title` | string | Ad title. |
| `url` | string · nullable | Ad URL. |
| `price` | string · nullable | Price as shown ("3.999 €", "VB", "Zu verschenken"). |
| `price_value` | number · nullable | Parsed price (null for free/non-numeric). |
| `negotiable` | boolean | "VB" (negotiable) flag. |
| `location` | string · nullable | ZIP + city as shown. |
| `zip` | string · nullable | German ZIP code. |
| `date` | string · nullable | Listing date as shown. |
| `description` | string · nullable | Description excerpt. |
| `thumbnail` | string · nullable | First photo. |
| `is_topad` | boolean | Promoted top-ad flag. |

## Inputs

The whole request. Anything you leave out falls back to the default shown in the catalog.

| Input | Type | Required | What it does |
| --- | --- | --- | --- |
| `query` | string | yes | What to search, e.g. "fahrrad". |
| `max_results` | integer | no | How many ads to deliver at most (1–100). You pay only for delivered ads. |

Pricing

## Kleinanzeigen Scraper API pricing

$0.001 per delivered ad. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 2,000 ads before you spend anything.

**$0.001**per delivered ad*$0.8 per 1,000 delivered ads*

**2,000 ads**on the free allowance*$2 every month, no card*

**Zero rows**zero charge*blocks, captchas and retries are on us*

**−30%**on volume tiers*the catalog returns your key's price*

### Pay as you go

$0/mo

- $2 free credit / month

- 60 requests / min

- List unit prices

### Starter

$19/mo

- $15 free credit / month

- 300 requests / min

- 10% off unit prices

Most popular

### Growth

$79/mo

- $50 free credit / month

- 600 requests / min

- 20% off unit prices

### Scale

$299/mo

- $250 free credit / month

- 1,200 requests / min

- 30% off unit prices

Same wallet, same key and same $2 monthly allowance as every other [Data API](https://quanticdata.io/web-data-api-for-ai/). Prices are launch pricing read live from the billing config — `GET /v1/scraper/collectors` returns the price your key actually pays.

Integration

## One POST, typed rows

Base URL `https://api.quanticdata.io/v1`, Bearer auth, the same key as every other Data API. Endpoint: `POST /v1/scraper/collectors/kleinanzeigen_search/run`.

```
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/kleinanzeigen_search/run \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"fahrrad","max_results":25}'
```

```
import requests

r = requests.post(
    "https://api.quanticdata.io/v1/scraper/collectors/kleinanzeigen_search/run",
    headers={"Authorization": f"Bearer {QD_API_KEY}"},
    json={
        "query": "fahrrad",
        "max_results": 25
    },
    timeout=120,
)
for row in r.json()["payload"]["results"]:
    print(row)
```

```
const res = await fetch(
  "https://api.quanticdata.io/v1/scraper/collectors/kleinanzeigen_search/run",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.QD_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({"query":"fahrrad","max_results":25}),
  },
);
const { payload } = await res.json();
console.table(payload.results);
```

```
claude mcp add quantumproxies \
  -e QUANTUMPROXIES_API_KEY=qd_live_your_key_here \
  -- npx -y quantumproxies-mcp

# then, in the chat:
> run the kleinanzeigen_search collector with query="fahrrad" and max_results=25
```

## What people build with the Kleinanzeigen scraper API

Three shapes of work this endpoint was designed around.

### Used-goods pricing

Track asking prices for a model across Germany, with negotiable ads flagged separately from firm ones.

### Regional supply

Group ads by ZIP to see where a category is thick or thin before you buy or list.

### Deal discovery

Filter for free "Zu verschenken" items or fresh listings by date within a keyword.

## Kleinanzeigen Scraper API versus rolling your own

The differences that actually cost time when you build this in-house.

|  | DIY scraper | This collector |
| --- | --- | --- |
| VB / free prices | Parsed as 0 or dropped | Raw text kept, value null, negotiable flagged |
| Top ads | Blended into the results | Marked with is_topad |
| Location | One string to split yourself | City string and German ZIP separated |

## FAQ

Questions we get about the Kleinanzeigen scraper API.

[Something else? Ask us →](mailto:hello@quanticdata.io)

### Does Kleinanzeigen have a public API?

No open product API — its former eBay-linked interfaces are gone and what remains is aimed at professional sellers. This collector reads the public search results, so a keyword is all it needs.

### What does the VB on a price mean?

Verhandlungsbasis — the seller's asking figure is negotiable. The number stays in `price` and `price_value`, and `negotiable` is set true so you can treat those ads differently from fixed-price ones.

### Are free items handled?

Yes. "Zu verschenken" ads keep their label in `price` while `price_value` stays null, so a giveaway is never mistaken for a zero-euro transaction in your data.

### Is there a free Kleinanzeigen scraper API?

Every account gets $2 of credit every month with no card, which is about 2,000 delivered ads on this endpoint at $0.001 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.

### How much does one run cost?

Multiply the rows you actually receive by $0.001. A run capped at 100 ads — the maximum for this collector — costs $0.1 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and `GET /v1/scraper/collectors` returns the price your key actually pays.

## Run the Kleinanzeigen scraper API now

$2 of free credit every month, no card. Your key returns its own prices from `GET /v1/scraper/collectors`.

[Get my free API key](https://app.quanticdata.io/register)

Related: [All 65 collectors](https://quanticdata.io/collectors/) [eBay scraper API](https://quanticdata.io/collectors/ebay-scraper-api/) [Idealista Scraper API](https://quanticdata.io/collectors/idealista-scraper-api/) [Autotrader Scraper API](https://quanticdata.io/collectors/autotrader-scraper-api/) [Zillow Property API](https://quanticdata.io/collectors/zillow-property-api/) [Documentation](https://quanticdata.io/docs/)

---

Source: https://quanticdata.io/collectors/kleinanzeigen-scraper-api/ · Site index for AI: https://quanticdata.io/llms.txt
