# Kleinanzeigen.de Scraper - Listings, Prices & Sellers (`parseforge/kleinanzeigen-scraper`) Actor

Scrape Kleinanzeigen.de listings by keyword, city, category and price. Get 39 fields per ad with seller, coordinates and views. Export CSV, Excel, JSON, XML.

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

## Pricing

from $1.20 / 1,000 listing scrapeds

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?

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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🛒 Kleinanzeigen.de Scraper

> 🚀 **Export Kleinanzeigen.de listings in seconds.** 39 fields per ad: price, exact coordinates, full description, every image, view count and the seller profile, from a keyword, a city or a whole category.

Kleinanzeigen.de is the largest classifieds marketplace in Germany, with cars, phones, furniture, apartments, jobs and services posted by private people and businesses every minute. This Actor turns any search on the site into a clean dataset. Give it a keyword and a city, or paste a Kleinanzeigen URL, and it returns one structured row per listing, ready for CSV, Excel, JSON or XML.

It covers all 161 Kleinanzeigen categories, filters by location and radius, price range, seller type, offers or wanted ads, shipping and buy-now, and it can run in monitoring mode so a scheduled run only returns listings it has not seen before. Every listing is opened for its full detail page, so you get the data the result list hides.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| Resellers and flippers | Find underpriced items the minute they are posted |
| Price-comparison and market-research teams | Track asking prices by category and city |
| Lead-generation teams | Build lists of commercial sellers with legal imprint details |
| Real-estate analysts | Monitor rentals and sales with coordinates and attributes |
| Data engineers | Feed German classifieds into dashboards and models |

### 📋 What the Kleinanzeigen Scraper does

- 🔎 Searches by keyword, city, postcode and radius, or takes any Kleinanzeigen search, category, seller-stock or single-listing URL.
- 🗂 Filters by category (all 161), price range, offers or wanted ads, private or commercial sellers, shipping and buy-now.
- 📄 Opens every listing for the full description, all images, coordinates, the attribute table and the seller profile.
- 👁 Adds the public view counter of each listing.
- 🔁 Monitoring mode returns only listings that are new since your last run.

> 💡 **Why it matters:** the result list of Kleinanzeigen shows a title, a price and a thumbnail. The decisions people make (is this a good deal, who is selling, where exactly, how much interest) live on the detail page. This Actor collects that page for you.

### 🎬 Full Demo

🚧 Coming soon.

### 📊 Output

Each row is one listing. The columns below are always present, so your spreadsheet or pipeline never changes shape.

| Field | Description |
| --- | --- |
| 🖼 `imageUrl` | Main image |
| 📌 `title`, `id`, `url` | Identity of the listing |
| 🏷 `listingType`, `price`, `priceType`, `currency` | Offer or wanted, price in EUR, Fixed, Negotiable or Free |
| 📍 `location`, `postalCode`, `region`, `latitude`, `longitude`, `address` | Where the item is |
| 🗂 `category`, `parentCategory`, `categoryId` | Kleinanzeigen category path |
| 📅 `postedDate`, `postedTime`, `promoted` | When it was posted and whether it is a promoted ad |
| 📦 `shippingAvailable`, `shippingInfo`, `buyNowAvailable` | Shipping and buy-now |
| 👁 `views` | Public view counter |
| 📝 `description` | Full ad text |
| 👤 `sellerName`, `sellerId`, `sellerUrl`, `sellerType`, `sellerActiveSince`, `sellerAdsOnline`, `sellerImprint` | Seller profile, with the legal imprint for businesses |
| 🖼 `imageCount`, `images` | Every image of the ad |
| 🧩 `attributes`, `features`, `sellerBadges` | Category-specific attributes (rooms, size, model, condition), feature tags and seller rating badges |
| ⏱ `scrapedAt`, `error` | Run metadata |

Values the source withholds come back as `Not Disclosed` and structural gaps as `N/A`, never as empty cells.

**Sample records** (real output, shortened):

```json
{
  "title": "Apple iPhone 17 256 GB 5G - Neuwertig - Fachhandel - Rechnung",
  "id": "3509889699",
  "listingType": "Offer",
  "price": 799,
  "priceType": "Fixed",
  "location": "Berlin - Reinickendorf",
  "postalCode": "13507",
  "latitude": 52.5887938,
  "longitude": 13.2852568,
  "category": "Smartphones",
  "parentCategory": "Elektronik",
  "postedDate": "2026-09-11",
  "promoted": "Yes",
  "shippingAvailable": "Yes",
  "views": 173,
  "sellerName": "MV-ELEKTROMARKT",
  "sellerType": "Commercial",
  "sellerActiveSince": "2026-06-02",
  "attributes": { "Art": "Apple", "Modell": "iPhone 17", "Farbe": "Schwarz", "Zustand": "Sehr Gut" },
  "imageCount": 3
}
```

```json
{
  "title": "TUSCHE IPHONE 17 Pro Max gegen 18 Pro Max",
  "id": "3526133013",
  "listingType": "Offer",
  "price": 600,
  "priceType": "Negotiable",
  "location": "Friedrichshain-Kreuzberg - Friedrichshain",
  "postalCode": "10243",
  "region": "Berlin",
  "category": "Smartphones",
  "promoted": "No",
  "shippingAvailable": "Yes",
  "sellerName": "Miky",
  "sellerType": "Private",
  "sellerActiveSince": "2014-06-14",
  "sellerAdsOnline": 12,
  "sellerBadges": ["TOP Zufriedenheit", "Freundlich", "Zuverlässig"],
  "attributes": { "Art": "Apple", "Modell": "iPhone 17 Pro Max", "Farbe": "Blau", "Zustand": "Gut" }
}
```

```json
{
  "title": "Nachmieter gesucht! Moderne 1,5-Zimmer Wohnung mit Einbauküche im Süden Berlins!",
  "listingType": "Offer",
  "price": 925,
  "priceType": "Fixed",
  "location": "Berlin - Lichterfelde",
  "postalCode": "14167",
  "category": "Mietwohnungen",
  "parentCategory": "Immobilien",
  "sellerType": "Commercial",
  "attributes": { "Wohnfläche": "42 m²", "Zimmer": "1,5", "Etage": "2", "Warmmiete": "1.085 €" },
  "features": ["Balkon", "Einbauküche", "Keller"],
  "imageCount": 12
}
```

### ✨ Why choose this Actor

- 🎯 **Real search inputs.** Keyword, city, radius, category, price range and seller type are form fields, not something you have to encode into a URL yourself.
- 🧠 **Detail-page depth.** Coordinates, full description, all images, attributes, seller profile and views in every row.
- 🏢 **Lead-ready sellers.** Commercial sellers include the legal imprint (company name, address, register data) that the site publishes.
- 🔁 **Monitoring mode.** Schedule the Actor and get only new listings.
- 🌐 **Works without a proxy.** The public pages load from Apify datacenter IPs; a German residential proxy is available for very large runs.
- 🧱 **Stable schema.** Sentinels instead of null, arrays instead of missing keys.

### 📈 How it compares to alternatives

| | This Actor | Typical URL-only scrapers |
| --- | --- | --- |
| Search by keyword, city and radius | ✅ | Paste a search URL |
| All 161 categories as a dropdown | ✅ | Find the URL yourself |
| Price, seller type, shipping, buy-now filters | ✅ | Encode them in the URL |
| Coordinates, views, attributes, seller profile | ✅ | Varies |
| Only new listings since the last run | ✅ | Varies |
| Results per search | Up to about 1,250 (50 pages) | Same site limit |

**Honest ceiling:** Kleinanzeigen shows at most 50 pages of results for any single search, about 1,250 listings. To go beyond that, split the job by category, price range or location. Phone numbers and private messages need a login on the site, so they are not part of the data.

### 🚀 How to use

1. 🆓 Create a free Apify account with $5 credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Actor and enter a search term such as `fahrrad`, and a location such as `Hamburg`.
3. Optionally narrow the search with a category, a price range or seller type.
4. Set **Max Items** and press **Start**.
5. Download the dataset as CSV, Excel, JSON or XML, or call it from the API.

A minimal example:

```json
{ "searchTerms": ["iphone"], "locations": ["Berlin"], "maxItems": 100 }
```

### 💼 Business use cases

#### 🔁 Resale and arbitrage

Sort by newest, filter by price and get every fresh listing with condition and shipping details, so you can message sellers before anyone else.

#### 📊 Market research

Track asking prices per category, city or brand over time. `price`, `priceType`, `views` and `postedDate` make demand and price drops measurable.

#### 🏢 Lead generation

Filter to commercial sellers and collect company names, addresses and imprint data of shops and dealers that advertise in a category.

#### 🏠 Real-estate monitoring

Combine the Rental or Sale categories with a city and radius. Coordinates, size, rooms and warm rent arrive as structured columns.

### 🔌 Automating Kleinanzeigen Scraper

Run it on a schedule and send the results wherever you work:

- ⚙️ **Make** and **Zapier**: trigger a scenario when a run finishes.
- 💬 **Slack**: post new listings to a channel in monitoring mode.
- 🗄 **Airbyte**: load datasets into your warehouse.
- 🐙 **GitHub Actions**: call the Actor from a workflow.
- ☁️ **Google Drive**: export each dataset as a spreadsheet.

### 🌟 Beyond business use cases

- 🔬 **Research:** study second-hand markets, sustainability and regional price differences.
- 🛍 **Personal:** get alerted when the exact bike, console or sofa you want appears near you.
- 🤝 **Non-profit:** find free items (`priceType: Free`) for donation drives.
- 🧪 **Experimentation:** build price-prediction models on real asking prices.

### 🤖 Ask an AI assistant about this scraper

Paste this page or the dataset schema into your favorite AI assistant and ask it to draft a search configuration, explain a field, or write code that reads the dataset with the Apify API.

### ❓ Frequently Asked Questions

**🌍 Does it only work for Germany?**
Yes. Kleinanzeigen.de is a German marketplace, so locations are German cities, districts and postcodes.

**🔢 How many listings can I get per search?**
Up to about 1,250, because the site stops at 50 pages of results. Split large jobs by category, price or location.

**🔐 Do I need a Kleinanzeigen account?**
No. Only publicly visible data is collected.

**📞 Can it return phone numbers?**
No. The site reveals phone numbers and messaging only to logged-in users, so they are not included. For businesses the legal imprint is included.

**💶 What does `price` mean when it says Not Disclosed?**
Some ads, such as services or wanted ads, show no price. The `priceType` column says whether the seller marked it as negotiable.

**📣 What is the `promoted` column?**
Promoted (Top and gallery) ads are shown at the top of results and carry no date in the list. They are flagged so you can filter them out.

**⚡ Can I skip the detail pages?**
Yes. Turn off full listing details for a faster run that returns only what the result list shows.

**🔁 How does monitoring mode work?**
The Actor remembers the ids it returned. On the next run it skips them and returns only new listings. Use it with a schedule.

**🛰 Do I need a proxy?**
Not for normal runs. For very large jobs, enable Apify Proxy with a German residential group.

**📅 Why is `postedTime` sometimes Not Disclosed?**
Kleinanzeigen shows a clock time only for recent listings in the result list. Older ones show a date only.

**🧩 What are `attributes`?**
The category-specific table on the listing page, for example rooms and size for apartments or model and condition for phones. Keys are in German as on the site.

### 🔌 Integrate with any app

Kleinanzeigen Scraper connects to almost any tool through Apify: webhooks, the REST API, official clients for JavaScript and Python, and integrations for Make, Zapier, n8n and more.

### 🔗 Recommended Actors

- [🏷 eBay Scraper](https://apify.com/parseforge/ebay-scraper)
- [🛒 Leboncoin Classifieds Scraper](https://apify.com/parseforge/leboncoin-scraper)
- [🧥 Vinted Scraper](https://apify.com/parseforge/vinted-scraper)
- [📋 Kijiji Classifieds Scraper](https://apify.com/parseforge/kijiji-scraper)
- [🏠 Immowelt Property Listings Scraper](https://apify.com/parseforge/immowelt-scraper)

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** this is an independent tool and is not affiliated with Kleinanzeigen or eBay. It collects only publicly available data.

# Actor input Schema

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

kleinanzeigen.de search, category or seller-stock URLs (paginated automatically), or single listing URLs. Leave empty to use the search filters below.

## `searchTerms` (type: `array`):

One or more keywords, for example "iphone 15" or "fahrrad". Each keyword runs as its own search. Leave empty to browse a whole category.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `locations` (type: `array`):

City, district or postcode, for example "Berlin", "München" or "10115". Each location runs as its own search. Leave empty to search all of Germany.

## `radiusKm` (type: `string`):

Search radius in km around each location. Only used when a location is set.

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

Restrict the search to one category or subcategory. Leave empty for all categories.

## `listingType` (type: `string`):

Offers (things for sale), wanted ads (people looking for something) or both.

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

Private sellers, commercial sellers or both.

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

Only listings priced at or above this amount.

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

Only listings priced at or below this amount.

## `shippingOnly` (type: `boolean`):

Only listings the seller can ship.

## `buyNowOnly` (type: `boolean`):

Only listings with the "Direkt kaufen" (buy now) option.

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

Order of the results. "Nearest first" needs a location.

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

Open every listing to add the full description, all images, coordinates, attributes, seller profile and view count. Turn it off for a faster run that returns only what the result list shows.

## `onlyNewListings` (type: `boolean`):

Skip listings this Actor already returned in earlier runs. Useful for scheduled monitoring.

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

Apify Proxy settings.

## Actor input object example

```json
{
  "searchTerms": [
    "iphone"
  ],
  "maxItems": 10,
  "locations": [
    "Berlin"
  ],
  "radiusKm": "0",
  "listingType": "ALL",
  "sellerType": "ALL",
  "shippingOnly": false,
  "buyNowOnly": false,
  "sortBy": "SORTING_DATE",
  "includeDetails": true,
  "onlyNewListings": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields

## `fullData` (type: `string`):

Complete dataset with all 39 fields

# 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 = {
    "searchTerms": [
        "iphone"
    ],
    "maxItems": 10,
    "locations": [
        "Berlin"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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 = {
    "searchTerms": ["iphone"],
    "maxItems": 10,
    "locations": ["Berlin"],
}

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

```

## MCP server setup

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