Kleinanzeigen Scraper | German Classifieds & Immobilien
Pricing
from $0.75 / 1,000 listings
Kleinanzeigen Scraper | German Classifieds & Immobilien
Scrape kleinanzeigen.de classifieds by keyword, category, city and radius, or paste a search URL. Get prices, sellers, photos and dates, with optional full details and rent fields for apartments. Each unique listing is charged once.
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
18 hours ago
Last modified
Categories
Features
Share
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. Each result is a unique listing; missing source fields remain null.
Use cases
- Price research: what do bikes, cars or electronics actually sell for in Germany? Collect a category or keyword and compare asking prices,
VBoffers and free items. - Apartment hunting: pull Berlin (or any city) rentals with rooms, living area and warm/cold rent parsed from the listing when
includeDetailsis on. - Market monitoring: re-run the same search on a schedule and watch new listings arrive, priced and dated, ready to export or feed an alert.
- Resale and arbitrage: shortlist under-priced items by keyword and price range, with photos and seller type, before anyone else messages the seller.
Quick start
Run with empty input to collect 20 bicycle listings across Germany. Details are off by default, and a small run typically finishes 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 | Include full listing details; slower, default false |
proxyConfiguration | Optional proxy settings; 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.
sellerName contains the seller's display name when available on the fetched listing page, otherwise null. Public titles and descriptions are retained, including names, introductions, sign-offs, contact details and street addresses. Descriptions are not truncated. 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.
Output example
A row from a real fahrrad search (image links shortened):
{"id": "3567141454","url": "https://www.kleinanzeigen.de/s-anzeige/herren-26-mtb/3567141454-217-3381","title": "Herren 26\" MTB","categoryPath": ["Auto, Rad & Boot", "Fahrräder & Zubehör"],"location": {"postcode": "12679", "city": "Marzahn", "district": null},"postedAt": "2026-11-10","sellerType": "private","sellerName": null,"descriptionExcerpt": "Herren MTB 26\", 21 Gänge, V-Brakes, sehr gute Räder und Bereifung, fahrbereit.","imageUrls": ["https://img.kleinanzeigen.de/api/v1/prod-ads/images/…"],"rooms": null,"livingAreaM2": null,"transactionType": null,"detailsParsed": false,"detailsError": null,"warmRent": null,"coldRent": null,"price": 59.0,"currency": "EUR","priceType": "VB"}
With includeDetails on, detailsParsed is true and descriptionExcerpt carries the full description; for rentals the rooms, livingAreaM2, warmRent and coldRent fields are filled from the detail page.
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.
Unavailable listings produce a status message and retain results already delivered. Slow or unavailable sources may leave partial coverage.
FAQ
How many listings can one run collect? The public search exposes at most 50 pages per search, about 1,250 organic listings; promoted cards and duplicates reduce coverage. Narrow your search (keyword, city, radius or price range) or run several searches to cover more.
Why are some prices null? Sellers can post items without a price (Zur Verschenken, giveaways) or with VB only where a number is absent. priceType says which case it is: fixed, VB or free.
What do I need includeDetails for? The search card carries title, price, location, date, seller type and an excerpt. Details add the full description and, for rentals, rooms, living area and warm/cold rent. Details are slower (one extra page per listing) and cost the same per listing.
Why did my run stop early? The run stops at your maxResults, the charge limit, the time budget, or when the source stops returning new listings; the status message and OUTPUT.issues always say which, and every delivered listing is kept.
Can I search one city only? Yes: set location to the exact city name and optionally radiusKm. An ambiguous name fails with a short message instead of silently substituting a similarly named place; use a searchUrl from the site for anything more specific.
Can I run it daily? Yes. Schedule the run with the same input and read the dataset through the Apify API, exported as JSON, CSV or Excel. Sorting is newest-first, so each run's first rows are the freshest listings.
Pricing
$0.005 per run start plus $0.00075 per delivered listing. A start event is charged per GB of memory with a one-GB minimum, so the default 512 MB run is one start. 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. Each unique delivered listing is charged once. Blocked, empty, malformed and duplicate cards produce no listing charge. The optional input spending ceiling includes the start charge. 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.