Kleinanzeigen Scraper — German Classifieds avatar

Kleinanzeigen Scraper — German Classifieds

Pricing

from $1.35 / 1,000 results

Go to Apify Store
Kleinanzeigen Scraper — German Classifieds

Kleinanzeigen Scraper — German Classifieds

Scrape classified listings from Kleinanzeigen.de — prices, locations, images, descriptions, and seller contacts including phone and email. Filter by keyword, category and location; incremental runs return only new listings.

Pricing

from $1.35 / 1,000 results

Rating

0.0

(0)

Developer

Black Falcon Data

Black Falcon Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

What does Kleinanzeigen Scraper do?

Kleinanzeigen Scraper extracts structured classified listings from kleinanzeigen.de — Germany's largest classifieds marketplace — capturing titles, prices, locations, images, full descriptions, and seller contacts (phone and email) across electronics, furniture, fashion, vehicles, real estate, jobs, and more.

Search by keyword (or many keywords at once), category, location and radius, price, condition, listing type, or seller type — or paste search-result URLs straight from your browser. Turn on detail enrichment to add the full description (text, HTML, or Markdown), the image gallery, the category path, per-listing attributes, and the seller box; optionally fetch each seller's public profile or resolve a contact phone number.

How to use this actor

  • 👉 Register for a free Apify account — no credit card required.
  • 🎉 Just click Sign up free on Apify → and complete a quick signup.
  • 💰 A free Apify account includes $5 in monthly credits — enough to test this actor.
  • ⏳ Scrape during the free trial, with no commitment or upfront payment required.

Key features

  • 🔗 Paste-mode — paste any Kleinanzeigen.de URL straight from your browser — single-listing pages, search results, or category pages. Every filter you set in your browser (location, price range, condition, and per-category attributes such as fuel type, mileage, or colour) is preserved exactly as-is.
  • 🎯 Batch searches — run multiple search variants in one job — shared dedup, single dataset for compare/diff downstream.
  • 🔔 Notifications — telegram / Slack / Discord / WhatsApp / webhook alerts on each run. Combine with incremental to ping only when prices or inventory actually move.
  • 📋 Detail enrichment — two-stage scraping — list first, then enrich each listing with the full detail-page payload. One input toggle controls the depth.
  • 📧 Email + phone extraction — best-effort regex extraction of contact emails and phone numbers from descriptions — emitted as extractedEmails[] and extractedPhones[] on every record.
  • 📦 Compact mode — light payload with core fields only — comparable rows across listings without HTML or metadata overhead. Perfect for pricing dashboards.
  • ✂️ Description truncation — cap description length with descriptionMaxLength to control LLM prompt cost and dataset size — set 0 for full descriptions, or any char-limit to trim.
  • 🔌 MCP connectors — export your results into Notion via Apify's MCP connectors — a clean run-summary page, no glue code. Opt-in via the App connector field; deterministic field-mapping, no AI. Built on Apify's connector framework, so more destinations open up as their catalog grows.
  • ♻️ Incremental mode — daily runs emit only listings that are new or whose price/condition changed since last run. Perfect for inventory-diff dashboards and competitive pricing alerts. Saves 80–95% on recurring monitoring.

What data can you extract from kleinanzeigen.de?

Each result is a structured listing record. Core fields: listingId, title, description, descriptionHtml, descriptionMarkdown, price, priceText, priceType, currency, category, categoryPath, location, zipCode, latitude, longitude, thumbnail, images, imageCount, seller (a nested object), sellerName, postedText, postedAt, url, attributes (the raw German label→value bag from the listing's detail table), scrapedAt, source, changeType.

Generic attribute promotion surfaces typed columns from any category's detail table where present — e.g. brand, model, color, size, material, gender, subType, plus dimension fields (depth, height, width, length). Vehicle and property listings expose their detail attributes through the same attributes map.

Each listing carries a nested seller object from the detail page — seller name, account type (private or business), shop/pro flags, member-since date, and the public profile URL. With Include Seller Profile on, it is enriched with extra public-profile fields (total active listings and ratings, where the seller's page shows them). With Include Phone Number on, the listing's contact phone is resolved where the seller published one. postedText is the posted-time label as shown on the site; postedAt is its normalized ISO-8601 form when that label resolves to an absolute date.

Default behaviour: null and empty values are dropped from each row so output stays compact for LLM pipelines (omitNulls: true). Set it to false if you need a stable schema where every row carries every documented field.

Pick a single description representation with Description format (all keeps every variant; text / html / markdown keep just one) to slim output.

Input

The main inputs are a search keyword, an optional location filter, and a result limit. Additional filters and options are available in the input schema.

Key parameters:

  • query — Single keyword or phrase (e.g. 'iPhone', 'sofa', 'Fahrrad'). For multiple searches in one run, use the queries array below.
  • startUrls — Paste one or more Kleinanzeigen.de search-result URLs. Build the filters you want in your browser, copy the URL, and paste here. Each URL is paginated; results are merged and deduplicated. Takes precedence over query, queries, and all filter inputs. The legacy searchUrls field name is still accepted for backward compatibility. (default: [])
  • location — City name or postal code to search within (e.g. 'Berlin', 'München', '10115'). Leave blank to search all of Germany.
  • priceMax — Maximum price filter. 0 = no limit. (default: 0)
  • includeDetails — Fetch the full listing page for each result to add description, images, category path, attributes, and more. Produces richer output but takes longer. (default: true)
  • includeSellerProfile — Fetch extra detail for each unique seller to add reputation badges and the seller's active-ads count. Adds one request per unique seller (a small per-seller charge applies) and increases run time. (default: false)
  • incremental — Only return new or changed listings since the last run. State is saved between runs and scoped per query and category. (default: false)
  • compact — Return only the most essential fields (for AI-agent and MCP workflows). (default: false)
  • ...and 38 more parameters

Input examples

Keyword search in a city — Single keyword scoped to a city, with full detail enrichment.

→ Listing records with description, images, category path, attributes, and the seller box.

{
"query": "iPhone",
"location": "Berlin",
"maxResults": 50,
"includeDetails": true
}

Filter cars by brand, fuel, and mileage — Narrow a category with per-listing attribute filters. Keys and values come from the site's own filter options — the easiest way to discover them is to set the filters in your browser and paste the search-result URL into Start URLs.

→ Diesel BMW listings up to 100,000 km and €25,000, with detail enrichment.

{
"category": "autos",
"attributeFilters": {
"autos.marke": "bmw",
"autos.fuel": "diesel",
"autos.km": "0,100000"
},
"priceMax": 25000,
"maxResults": 100,
"includeDetails": true
}

Multiple keywords in one run — Several searches in one invocation; results merge and dedupe by listing ID.

→ Merged, cross-query-deduped records across all keywords.

{
"queries": [
"laptop",
"iPad",
"AirPods"
],
"category": "elektronik",
"maxResults": 300,
"maxResultsPerQuery": 100
}

Paste Kleinanzeigen URLs (paste-mode) — Build the filters you want in your browser on kleinanzeigen.de, copy each search-result URL, and paste them here.

→ All listings from the pasted search-result pages, merged into one dataset.

{
"startUrls": [
"https://www.kleinanzeigen.de/s-fahrrad/k0c217l3331",
"https://www.kleinanzeigen.de/s-preis:0:300/playstation/k0c161"
],
"maxResults": 200,
"maxResultsPerQuery": 100
}

New-listings monitor (incremental) — Track new listings on a schedule; only new or changed listings are emitted.

→ Only new or changed listings since the previous run with this stateKey.

{
"query": "sofa",
"sellerType": "gewerblich",
"incremental": true,
"stateKey": "kleinanzeigen-sofa-business",
"maxResults": 500
}

Output

Each run produces a dataset of structured listing records. Results can be downloaded as JSON, CSV, or Excel from the Dataset tab in Apify Console.

Example listing record

{
"listingId": "3446804582",
"title": "Guess iPhone 17 Hülle Glitzer Pink Neu OVP",
"url": "https://www.kleinanzeigen.de/s-anzeige/guess-iphone-17-huelle-glitzer-pink-neu-ovp/3446804582-173-3421",
"price": 17,
"priceText": "17 €",
"currency": "EUR",
"thumbnail": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/8f/8fc21359-d116-4ba3-9777-08a8191414db?rule=$_2.AUTO",
"location": "Steglitz",
"postedText": "Heute, 18:53",
"latitude": 52.44995,
"longitude": 13.32851,
"attributes": {
"Art": "Weitere Handys & Telefone",
"Versand": "ab 0,00",
"Farbe": "Pink",
"Gerät & Zubehör": "Zubehör",
"Zustand": "Neu"
},
"seller": {
"name": "Yvonne",
"type": "privat",
"isShop": false,
"isPro": false,
"activeSince": "2025-09-16T23:19:03.000+0200",
"userId": "154762085",
"badges": [
"TOP Zufriedenheit",
"Sehr freundlich",
"Sehr zuverlässig"
],
"adsOnline": 32,
"profileUrl": "https://www.kleinanzeigen.de/s-bestandsliste.html?userId=154762085"
},
"contentHash": "d3e512f2d454ba0ca70c18af4b20091a5e1f2e74e1bece7aaa9cc560460d1637",
"scrapedAt": "2026-06-29T16:55:50.275Z",
"description": "Ich biete hier eine brandneue Guess Handyhülle für das iPhone 17 an. Die Hülle kommt in einem wunderschönen Pink mit Glitzer-Finish, das deinem Handy einen glamourösen Look verleiht. Sie ist noch orig...",
"descriptionHtml": "Ich biete hier eine brandneue Guess Handyhülle für das iPhone 17 an. Die Hülle kommt in einem wunderschönen Pink mit Glitzer-Finish, das deinem Handy einen glamourösen Look verleiht. Sie ist noch orig...",
"descriptionMarkdown": "Ich biete hier eine brandneue Guess Handyhülle für das iPhone 17 an. Die Hülle kommt in einem wunderschönen Pink mit Glitzer-Finish, das deinem Handy einen glamourösen Look verleiht. Sie ist noch orig...",
"imageUrls": [
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/8f/8fc21359-d116-4ba3-9777-08a8191414db?rule=$_57.JPG",
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/7d/7d3aa3a7-2dd1-4b69-9de8-e8a3629f018c?rule=$_57.JPG",
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/2e/2eb531f9-d848-4605-906b-8c3186d928a0?rule=$_57.JPG",
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/20/20f0a5d8-7dfb-4616-ad61-cadb20165234?rule=$_57.JPG",
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/0a/0a86728d-63d1-4e36-9c86-5f8628a0a889?rule=$_57.JPG",
"... 1 more items"
],
"imageUrl": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/8f/8fc21359-d116-4ba3-9777-08a8191414db?rule=$_57.JPG",
"imageCount": 6,
"categoryPath": "Handy & Telefon",
"category": "Handy & Telefon",
"zipCode": "12167",
"priceType": "Festpreis",
"shippingAvailable": true,
"sellerName": "Yvonne",
"sellerId": 154762085,
"portalUrl": "https://www.kleinanzeigen.de/s-anzeige/guess-iphone-17-huelle-glitzer-pink-neu-ovp/3446804582-173-3421"
}

Incremental fields

When incremental mode is on, each record also carries:

  • changeType — one of NEW, UPDATED, UNCHANGED, REAPPEARED, EXPIRED. Default output covers NEW / UPDATED / REAPPEARED; set emitUnchanged: true or emitExpired: true to opt into the others.
  • isRepost, repostOfId, repostDetectedAt — populated when a new listing matches the tracked content of a previously expired one. Set skipReposts: true to drop detected reposts from the output.

How to scrape kleinanzeigen.de

  1. Go to Kleinanzeigen Scraper in Apify Console.
  2. Enter a search keyword and optional location filter.
  3. Set maxResults to control how many results you need.
  4. Enable includeDetails if you need full descriptions.
  5. Click Start and wait for the run to finish.
  6. Export the dataset as JSON, CSV, or Excel.

Use cases

  • Marketplace deal hunting — combine category, location, and price filters with incremental mode to catch new electronics, furniture, or sport-gear listings under your budget the moment they go live.
  • Reseller and dropship sourcing — monitor a keyword or category for fresh inventory and pull structured price, condition, and image data for repricing.
  • Price and supply monitoring — track how asking prices and listing volume for a product or category shift over time across Germany.
  • Regional supply analysis — use structured zipCode and latitude/longitude to map where supply concentrates by category.
  • Lead generation — filter sellerType: "gewerblich" to surface business sellers, optionally enriching with seller profile and contact phone where published.
  • Feed AI agents, MCP tools, and automated pipelines using compact mode with description truncation to keep payloads light for LLM context windows.

How much does it cost to scrape kleinanzeigen.de?

Kleinanzeigen Scraper uses pay-per-event pricing. You pay a small fee when the run starts and then for each result that is actually produced.

  • Run start: $0.005 per run
  • Per listing (primary event): $0.00135

You are billed only for the events your run actually triggers. Prices below are the Free plan tier.

EventPrice (Free tier)Charged when
Actor Start$0.005 (one-time)Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).
Result (primary)$0.00135Single result in the default dataset.
Seller Enrichment$0.002Charged once per unique seller when 'Include seller profile' is enabled, for the extra fetch that adds seller reputation badges and the seller's active-ads count.

Example costs (primary event only — other events above add cost when they fire):

  • 10 results: $0.019
  • 25 results: $0.039
  • 100 results: $0.14
  • 200 results: $0.28
  • 500 results: $0.68

Example: recurring monitoring savings

These examples compare full re-scrapes with incremental runs at different churn rates. Churn is the share of listings that are new or whose tracked content changed since the previous run. Actual churn depends on your query breadth, source activity, and polling frequency — the scenarios below are examples, not predictions.

Example setup: 100 results per run, daily polling (30 runs/month). Event-pricing examples scale linearly with result count.

Numbers below are for the primary Result event. Other events (Seller Enrichment) are billed separately when they fire.

Churn rateFull re-scrape run costIncremental run costSavings vs full re-scrapeMonthly cost after baseline
5% — stable niche query$0.14$0.01$0.13 (92%)$0.35
15% — moderate broad query$0.14$0.03$0.11 (82%)$0.76
30% — high-volume aggregator$0.14$0.05$0.09 (68%)$1.36

Full re-scrape monthly cost at daily polling: $4.20. First month with incremental costs $0.48 / $0.87 / $1.46 for the 5% / 15% / 30% scenarios because the first run builds baseline state at full cost before incremental savings apply.

Platform usage (compute and proxies) is billed separately by Apify based on actual consumption. Incremental runs consume less on result processing, though fixed per-run overhead stays the same.

FAQ

How many results can I get from kleinanzeigen.de?

The number of results depends on the search query and available listings on kleinanzeigen.de. Use the maxResults parameter to control how many results are returned per run.

Does Kleinanzeigen Scraper support recurring monitoring?

Yes. Enable incremental mode to only receive new or changed listings on subsequent runs. This is ideal for scheduled monitoring where you want to track changes over time without re-processing the full dataset.

Can I integrate Kleinanzeigen Scraper with other apps?

Yes. Kleinanzeigen Scraper works with Apify's integrations to connect with tools like Zapier, Make, Google Sheets, Slack, and more. You can also use webhooks to trigger actions when a run completes.

Can I use Kleinanzeigen Scraper with the Apify API?

Yes. You can start runs, manage inputs, and retrieve results programmatically through the Apify API. Client libraries are available for JavaScript, Python, and other languages.

Can I use Kleinanzeigen Scraper through an MCP Server?

Yes. Apify provides an MCP Server that lets AI assistants and agents call this actor directly. Use compact mode, descriptionMaxLength, a single descriptionFormat, and excludeEmptyFields to keep payloads manageable for LLM context windows.

This actor extracts publicly available data from kleinanzeigen.de. Web scraping of public information is generally considered legal, but you should always review the target site's terms of service and ensure your use case complies with applicable laws and regulations, including GDPR where relevant.

Your feedback

If you have questions, need a feature, or found a bug, please open an issue on the actor's page in Apify Console. Your feedback helps us improve.

You might also like

Getting started with Apify

New to Apify? Create a free account with $5 credit — no credit card required.

  1. Sign up — $5 platform credit included
  2. Open this actor and configure your input
  3. Click Start — export results as JSON, CSV, or Excel

Need more later? See Apify pricing.