Kleinanzeigen Listings Scraper
Pricing
from $0.75 / 1,000 listings
Kleinanzeigen Listings Scraper
Collect public listings from kleinanzeigen.de, Germany's classifieds marketplace, with pagination and optional listing details. Search across categories or focus on Immobilien rentals and purchases.
Pricing
from $0.75 / 1,000 listings
Rating
0.0
(0)
Developer
Philip Kirkbride
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Security
Limited permissionsShare
Collect public listings from kleinanzeigen.de, Germany's classifieds marketplace, with pagination and optional listing details. Search across categories or focus on Immobilien rentals and purchases. Each result is a unique listing; missing source fields remain null.
Quick start
Run with empty input to collect 20 bicycle listings across Germany. Details are off by default, so this typically needs one search request plus its redirect and finishes well within five minutes when the source is available.
{"keyword":"fahrrad","maxResults":20,"includeDetails":false}
For Berlin apartment rentals:
{"category":"apartments-rent","location":"Berlin","radiusKm":"10","maxResults":20,"includeDetails":true}
You can supply a kleinanzeigen.de search URL instead of keyword, category, location and radius. Price limits can constrain either mode. Use an exact city name; ambiguous locations fail with a short message so a similarly named place is never silently substituted. Advanced categories, postal locations and source-specific filters are supported through search URLs.
Input
| Field | Purpose |
|---|---|
keyword | Search phrase; empty input searches for fahrrad |
category | All, Immobilien, apartments or houses for rent/buy, cars, bicycles, electronics, home/garden or fashion |
location, radiusKm | Exact city and optional radius (0, 5, 10, 20, 30, 50, 100, 150 or 200 km) |
priceFrom, priceTo | Inclusive EUR bounds; unknown prices excluded when constrained |
searchUrl | HTTPS search page URL; replaces search construction inputs |
maxResults | Unique listing limit, 1–1250; default 20 |
includeDetails | Fetch one additional page per listing; default false |
proxyConfiguration | Optional Apify proxy fallback after direct access is blocked; disabled by default |
maxTotalChargeUsd | Optional additional spending ceiling; the platform run charge limit also applies |
Output
Results appear in the default dataset and can be exported as JSON, CSV or Excel. The output links to that dataset; the OUTPUT record contains counts, request totals, stop reason and source issues.
Fields: id, url, title, price, currency, priceType (fixed, VB, free), categoryPath, location (postcode, city, district), postedAt, sellerType (private or commercial), descriptionExcerpt, imageUrls, rooms, livingAreaM2, transactionType (rent or buy), warmRent, coldRent, detailsParsed, and detailsError.
Seller names, seller IDs, phone numbers and email addresses are never output as fields. The description excerpt is the seller's own text: it is limited to 1000 characters and contact-bearing lines, sign-off blocks (a German closing such as LG, VG, MfG, Viele Grüße or Mit freundlichen Grüßen, at the start of a line or after ., !, ? or ,, together with the rest of its line when that is at most three capitalised words without digits, as in LG Alex; when the closing ends its line, up to three following lines that together form such a name tail go too, and later lines are kept; the abbreviations count in capitals or with only a capital first letter (Lg, as phones autocapitalise), never all-lowercase, and may follow Danke und or Danke & like the spelled-out closings; a bare LG or Lg followed by an all-caps word or a product word such as Monitor, Smart or Gram is the brand and stays; an excerpt that is only a sign-off is dropped), honorific names (Herr, Herrn, Frau or Hr., or Fr. followed by a title, plus up to three capitalised name words with any Dr./Prof./med./Dipl.-Ing. titles before them and von/van/de/zu particles between them; a few common words, such as Größe, Gr. or Holle, never count as a name word, so Frau Größe M stays and Frau Schwarz Gr. 38 keeps Gr. 38) and introduced names (Ich heiße …, mein Name ist …, Ansprechpartner(in): …; a line with such an introduction whose name is not capitalised is dropped) are removed, but other free text may still mention people or a street address the seller wrote in (commercial sellers often give their shop address). Locality labels reflect source geography; the source sometimes supplies a district without its enclosing city, and outside the city states the state name in the locality is dropped so city stays the town. Rent fields exist only for rentals (transactionType rent) and are populated from explicitly labelled source values, or from the displayed price when its label, the attribute list or the title names the kind — the full words Kaltmiete/Warmmiete/Kosten insgesamt, or a bare Kalt/Warm sitting directly next to an amount (2200 Kalt, 1036 warm); an unlabelled, contradictory or non-rental price leaves both null. Relative dates use the observation date in UTC; dates have day precision.
Limits and source availability
The public search interface exposes at most 50 pages (about 1250 organic listings, with promoted cards and duplicates reducing coverage). Narrow your search to obtain additional coverage. External sponsored cards are excluded and promoted listings are deduplicated by listing ID. Listings can change or disappear between search and details; failed details retain the search result with detailsError.
Blocked or changed pages produce a status message and retain results already delivered. Optional proxy fallback requires your explicit configuration; no residential route is enabled by default. Retry-After delays are honored, and the actor stops when the full delay cannot fit. A shared deadline reserves 20 seconds for final delivery and shutdown. A single empty page is fetched again before it is accepted as empty. Forward pagination is followed in whatever form the source renders it, including pages whose forward links are script-driven rather than plain anchors.
Pricing: $0.005 per run start plus $0.00075 per delivered listing. The start charge applies to every run, including a search with zero results. A listing costs the same with or without includeDetails; there is no separate details charge. Examples: 20 listings = $0.020, 1,000 listings in one run = $0.755. Start events are managed by the platform; each unique stored listing uses the SDK's default dataset item event. Blocked, empty, malformed and duplicate cards produce no listing charge. The optional input spending ceiling includes the planned start charge; the actual platform ledger is checked before each request and emission. Larger runs may finish early at the time, source or charge limit, and any run that stops before the requested limit says so in its status message and in the OUTPUT issues; a search that returns no listings finishes with zero results and a plain no-results message.