# Kleinanzeigen.de Scraper (`shahidirfan/kleinanzeigen-de-scraper`) Actor

Extract classified listings from Kleinanzeigen.de with ease. Scrape product details, prices, seller info, and images from German marketplace. Automate data collection from thousands of ads. Perfect for market analysis, price monitoring, and competitive research.

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

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

Extract listing data from Kleinanzeigen.de search pages in a consistent, automation-ready format. Collect titles, prices, locations, shipping flags, image URLs, and listing links at scale for research, monitoring, and lead generation workflows.

---

### Features

- **Flexible search input** - Start from a full Kleinanzeigen search URL or use keyword and location filters.
- **Structured dataset output** - Receive clean records ready for analytics, alerts, and enrichment.
- **Pagination support** - Automatically continues to next pages until limits are reached.
- **Duplicate-safe collection** - Skips repeated listing IDs across pages.
- **Clean records only** - Removes empty values from output items for easier downstream processing.

---

### Use Cases

#### Market Price Monitoring
Track current listing prices for products in specific cities and compare trends over time.

#### Lead Discovery
Collect fresh listings for categories you source from and route them into your sales workflow.

#### Competitor Intelligence
Observe how similar offers are titled, priced, and positioned by location.

#### Local Demand Analysis
Compare listing volume and pricing patterns between regions to identify demand hotspots.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `startUrl` | String | No | `https://www.kleinanzeigen.de/s-suchen.html?keywords=iphone` | Direct Kleinanzeigen search URL. |
| `keyword` | String | No | `iphone` | Search keyword when `startUrl` is not used. |
| `location` | String | No | `Berlin` | City or postal code filter. |
| `results_wanted` | Integer | No | `20` | Maximum listings to collect. |
| `max_pages` | Integer | No | `10` | Safety cap for pages to fetch. |
| `proxyConfiguration` | Object | No | Apify Proxy | Proxy settings for improved reliability. |

Either `startUrl` or `keyword` must be provided.

---

### Output Data

Each dataset item can include the following fields:

| Field | Type | Description |
|---|---|---|
| `id` | Integer | Listing ID |
| `title` | String | Listing title |
| `description` | String | Short listing description |
| `price` | String | Display price |
| `url` | String | Absolute listing URL |
| `seoLink` | String | Relative listing URL path |
| `sortingDate` | String | Listing date label |
| `locationName` | String | Postal code |
| `parentLocationName` | String | City/district |
| `shippingAvailable` | String | Shipping availability label |
| `attributes` | Array | Listing attribute labels |
| `buyNowEnabled` | Boolean | Direct purchase availability |
| `topAd` | Boolean | Top ad flag |
| `highlight` | Boolean | Highlight flag |
| `priorityAd` | Boolean | Priority ad flag |
| `thumbnailUrl` | String | Main thumbnail URL |
| `thumbnailLargeUrl` | String | Main larger thumbnail URL |
| `imageUrls` | Array | Image URL list |
| `seoImageUrl` | String | SEO image URL |
| `fetchedAt` | String | ISO timestamp of extraction |

---

### Usage Examples

#### Basic Keyword Search

```json
{
	"keyword": "iphone",
	"results_wanted": 20
}
````

#### Keyword + Location Search

```json
{
	"keyword": "fahrrad",
	"location": "Hamburg",
	"results_wanted": 40,
	"max_pages": 5
}
```

#### Start From Existing Search URL

```json
{
	"startUrl": "https://www.kleinanzeigen.de/s-iphone/k0",
	"results_wanted": 30,
	"max_pages": 4
}
```

#### Use Proxy Configuration

```json
{
	"keyword": "macbook",
	"location": "Berlin",
	"results_wanted": 25,
	"proxyConfiguration": {
		"useApifyProxy": true,
		"apifyProxyGroups": ["RESIDENTIAL"]
	}
}
```

***

### Sample Output

```json
{
	"id": 3388777860,
	"title": "Apple iPhone 13 Pro 128 GB, Gold",
	"description": "Benutztes Apple IPhone 13 Pro in Gold mit 128GB Speicherplatz ohne Zubehör zu verkaufen.",
	"price": "300 €",
	"url": "https://www.kleinanzeigen.de/s-anzeige/apple-iphone-13-pro-128-gb-gold/3388777860-173-8794",
	"sortingDate": "Heute, 08:52",
	"locationName": "76694",
	"parentLocationName": "Forst",
	"buyNowEnabled": false,
	"thumbnailLargeUrl": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/f4/f457abd2-0bc5-4e0c-be1a-0b20916ebb5b?rule=$_35.AUTO",
	"fetchedAt": "2026-04-22T08:45:12.310Z"
}
```

***

### Tips for Best Results

#### Use Working Search URLs

- Use URLs directly from Kleinanzeigen search pages.
- Keep URLs in German domain format (`www.kleinanzeigen.de`).

#### Start Small Then Scale

- Start with `results_wanted: 20` for validation.
- Increase gradually for larger production exports.

#### Keep Pagination Controlled

- Use `max_pages` to cap runtime.
- Combine `results_wanted` and `max_pages` for predictable runs.

#### Improve Reliability with Proxies

- Use residential proxies for larger extraction runs.
- Keep request targets focused by keyword and location.

***

### Integrations

- **Google Sheets** - Build tracking dashboards for price changes.
- **Airtable** - Store and filter listings for team workflows.
- **Make** - Trigger automations on new matching listings.
- **Zapier** - Send records to CRM, email, or chat tools.
- **Webhooks** - Forward fresh data to your internal services.

#### Export Formats

- **JSON**
- **CSV**
- **Excel**
- **XML**

***

### Frequently Asked Questions

#### Can I use either keyword or URL?

Yes. You can provide `startUrl` directly or provide `keyword` (optionally with `location`).

#### How many items can I collect?

Collection size depends on your `results_wanted`, `max_pages`, and available search results.

#### Are empty fields included in output?

No. Empty values are removed from output records.

#### Can I paginate through many result pages?

Yes. The actor follows result pagination automatically until your limits are reached.

#### Does the actor support city and postal filters?

Yes. Use the `location` input for city/postal targeting.

***

### Support

For issues or feature requests, use the Apify Console issue flow for this actor.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [Apify API Reference](https://docs.apify.com/api/v2)
- [Apify Scheduling](https://docs.apify.com/platform/schedules)

***

### Legal Notice

This actor is intended for legitimate data collection and analytics use cases. Users are responsible for complying with applicable laws, website terms, and internal data governance policies.

# Actor input Schema

## `startUrl` (type: `string`):

Kleinanzeigen search URL to start from. Supports URLs like /s-suchen.html, /s-<keyword>/k0, and paginated /s-seite:<n>/... URLs.

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

Search keyword for Kleinanzeigen.

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

City or postal code filter, for example Berlin or 10115.

## `results_wanted` (type: `integer`):

Maximum listings to collect.

## `max_pages` (type: `integer`):

Safety cap for number of result pages to fetch.

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

Use Apify Proxy for reliable extraction.

## Actor input object example

```json
{
  "startUrl": "https://www.kleinanzeigen.de/s-suchen.html?keywords=iphone",
  "keyword": "iphone",
  "location": "Berlin",
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrl": "https://www.kleinanzeigen.de/s-suchen.html?keywords=iphone",
    "keyword": "iphone",
    "location": "Berlin",
    "results_wanted": 20,
    "max_pages": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/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 = {
    "startUrl": "https://www.kleinanzeigen.de/s-suchen.html?keywords=iphone",
    "keyword": "iphone",
    "location": "Berlin",
    "results_wanted": 20,
    "max_pages": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/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 '{
  "startUrl": "https://www.kleinanzeigen.de/s-suchen.html?keywords=iphone",
  "keyword": "iphone",
  "location": "Berlin",
  "results_wanted": 20,
  "max_pages": 10
}' |
apify call shahidirfan/kleinanzeigen-de-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Kleinanzeigen.de Scraper",
        "description": "Extract classified listings from Kleinanzeigen.de with ease. Scrape product details, prices, seller info, and images from German marketplace. Automate data collection from thousands of ads. Perfect for market analysis, price monitoring, and competitive research.",
        "version": "0.0",
        "x-build-id": "p3W3OEucgRgzHYM9Y"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~kleinanzeigen-de-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-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/shahidirfan~kleinanzeigen-de-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-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/shahidirfan~kleinanzeigen-de-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-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",
                "properties": {
                    "startUrl": {
                        "title": "Start URL",
                        "type": "string",
                        "description": "Kleinanzeigen search URL to start from. Supports URLs like /s-suchen.html, /s-<keyword>/k0, and paginated /s-seite:<n>/... URLs."
                    },
                    "keyword": {
                        "title": "Keyword (if not using Start URL)",
                        "type": "string",
                        "description": "Search keyword for Kleinanzeigen."
                    },
                    "location": {
                        "title": "Location (optional)",
                        "type": "string",
                        "description": "City or postal code filter, for example Berlin or 10115."
                    },
                    "results_wanted": {
                        "title": "Maximum number of results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum listings to collect.",
                        "default": 20
                    },
                    "max_pages": {
                        "title": "Maximum number of pages",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Safety cap for number of result pages to fetch.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Use Apify Proxy for reliable extraction.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
