Kleinanzeigen.de Scraper

Scrape Kleinanzeigen.de listings as clean JSON - titles, prices, specs, locations, images and dates. GDPR-clean by design: no seller names, IDs or contact data, ever. Splits big searches past the 1,250-result cap, flags wanted ads, optional full descriptions. Pay per result.

$1.99 / 1,000 · 93.4% success over 1,451 public runs in the last 30 days.

Run it on Apify → Free to try - runs bill per result on your own account.

What you give it

Every field is optional unless marked; sensible defaults do the rest.

FieldTypeWhat it doesDefault
searchQuery string Free-text search, e.g. e-bike. Provide this, a category, or both. e-bike
categoryId integer Numeric Kleinanzeigen category ID to scope the crawl, e.g. 217 for Fahrräder. Category IDs appear in the site's URLs as c217. Optional. -
location string German city or region to search in, e.g. "Berlin" or "München" - resolved via the site's own location search. Combine with radiusKm for a radius search. -
radiusKm integer Only return listings within this many km of the location. Requires location. -
priceMinEur integer Only return listings priced at or above this amount. Optional. -
priceMaxEur integer Only return listings priced at or below this amount. Optional. -
sortBy string Newest first is the default and the right choice for monitoring; price ascending surfaces the cheapest offers first. date
postedAfter string Only keep listings posted on or after this date (YYYY-MM-DD or ISO timestamp). Listings whose posting date cannot be read are excluded when a window is set. -
postedBefore string Only keep listings posted on or before this date (YYYY-MM-DD or ISO timestamp). -
sellerType string Only private sellers, only business sellers, or both. any
scrapeDetails boolean Fetch each listing's detail page for the full description and category specs (condition, brand, car mileage, property size, ...). One extra request per listing, so noticeably slower — but much richer output. False
maxItems integer Stop after this many listings. 1000

What you get back

One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.

FieldTypeMeaning
listingId string Kleinanzeigen ad ID.
title string Listing title as posted.
description string Listing description: the search snippet by default, the full text when scrapeDetails is enabled.
priceCents integer Asking price in euro cents. 0 for giveaways ('Zu verschenken'); absent when the listing shows no amount.
priceType string FIXED for a plain price, NEGOTIABLE when marked 'VB' (Verhandlungsbasis), GIVEAWAY for 'Zu verschenken'.
location string Area-level location as the marketplace displays it: postcode and district, not a seller address.
postedAt string Posting date as displayed: a date, or a relative label like 'Heute, 09:12' (today) or 'Gestern' (yesterday).
imageUrl string URL of the listing's first image, when present.
url string Direct link to the listing.
adType string 'offer' for items for sale; 'wanted' for Gesuch ads (someone searching, not selling) — exclude those from price analysis.
shippingPossible boolean Whether the listing is tagged 'Versand möglich' (shipping available).
attributes object Whitelisted, non-personal listing specs from the detail page (requires scrapeDetails): condition, brand, color, size for goods; mileage, firstRegistration, fuel, transmission, power for cars; livingArea, rooms for property — when the listing has them.
sellerType string Whether the ad comes from a private or business seller (detected with scrapeDetails, or implied by the sellerType input filter). The only seller-related field in the output.
postedDate string Posting date normalized to YYYY-MM-DD (from the site's display date).

Health

93.4% success over 1,451 public runs in the last 30 days. Live record, failures included: status page.

Full documentation, examples and the AI-assistant prompt live on the store page.