Kleinanzeigen Scraper [$0.39/1K 💰] — All Categories avatar

Kleinanzeigen Scraper [$0.39/1K 💰] — All Categories

Pricing

from $0.39 / 1,000 listings

Go to Apify Store
Kleinanzeigen Scraper [$0.39/1K 💰] — All Categories

Kleinanzeigen Scraper [$0.39/1K 💰] — All Categories

$0.39 per 1,000 listings — the lowest-priced Kleinanzeigen scraper on the Store. Every category: electronics, cars, furniture, collectables, property. Returns price type, postcode, images and attributes, with a private-seller filter. Same field names as our Marktplaats and 2dehands scrapers.

Pricing

from $0.39 / 1,000 listings

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

2

Monthly active users

8 days ago

Last modified

Categories

Share

Kleinanzeigen Scraper — All Categories

Kleinanzeigen Classifieds Scraper

Scrape classified listings from kleinanzeigen.de — Germany's largest marketplace — across every category, from trading cards and phones to cars, furniture and rental flats. One search returns title, price, price type, location, images, publish date and item attributes. No API key required.


Why this scraper?

🇩🇪 Every category, one parser

Not a real-estate tool with a product mode bolted on. The extraction reads kleinanzeigen's own structured listing data, so a Pokémon search and an apartment search return the same fields in the same shape.

🔗 Drops into a Marktplaats pipeline unchanged

Field names and the price-type vocabulary are identical to the Marktplaats.nl and 2dehands.be scrapers. If you already consume either of those, this is a third source with no adapter and no mapping layer.

💶 Price type, not just price

FIXED, MIN_BID, FAST_BID and SEE_DESCRIPTION are resolved from the German conventions — a plain price, "VB" with a figure, "VB" alone, "Zu verschenken". You can tell a firm price from a negotiable one without parsing German.

🧍 Private sellers, filtered at source

"Private sellers only" is applied by kleinanzeigen itself, not filtered after the fact. That matters because mispriced and one-off items sit with private sellers, and a commercial seller is not always visibly labelled on the results page.

📍 Precise location on every row

Five-digit postcode and city on every listing, plus the district where the source publishes one. Search by any of 3,606 German towns, cities, districts and federal states.

🔒 No personal data, by design

No seller names, no profile links, no avatars, no phone numbers, no email addresses. Seller type ships as a classification — private or commercial — and nothing that identifies a person.


Input parameters

ParameterTypeDefaultDescription
searchQuerystring(empty)Keyword to search for, in German. pokemon karten, wohnung mieten, iphone 15. Leave empty to browse a whole category.
categoryIdstring(all)Restrict to one of 151 kleinanzeigen categories. Combine with a search query to search within a category.
locationstring(empty)German town, city, district or federal state — Berlin, München, Nordrhein-Westfalen. Place names only; postcodes are not accepted here.
minPriceinteger(none)Only listings at or above this price in euros.
maxPriceinteger(none)Only listings at or below this price in euros.
daysOldinteger(none)Only listings published within this many days. 1 means today.
sellerTypestringallall, private or commercial. Applied by kleinanzeigen itself. Needs a search query or a category alongside it.
maxItemsinteger100Stop after this many listings. 0 for no limit.
fetchDetailsbooleanfalseOpen each listing for the full description, exact date, condition, item type, all gallery images and the confirmed seller type.
startUrlsarray[]Kleinanzeigen search URLs to scrape directly. Overrides every filter above except maxItems.
proxyConfigurationobjectoffOptional. Off by default — see Technical details.

Output schema

Every field below is present on every record. Fields the source does not publish for a given listing are returned as null rather than omitted, so the shape never varies between rows.

Always present

FieldTypeDescription
itemIdstringKleinanzeigen's own listing ID. Stable, and the key to deduplicate on.
titlestringListing title as published.
descriptionstring | nullDescription snippet from the results page.
urlstringFull URL of the listing.
detailUrlstringSame as url. Present for compatibility with the Marktplaats scrapers.
priceEurnumber | nullPrice in euros. null when the listing gives no figure.
priceCentsnumber | nullThe same price in cents, for exact integer arithmetic.
priceTypestringFIXED, MIN_BID, FAST_BID or SEE_DESCRIPTION. See the table below.
priceTextstring | nullThe price exactly as displayed, e.g. 200 € VB.
reservedbooleanWhether the listing is marked reserved.
citystring | nullCity or district name.
postalCodestring | nullFive-digit German postcode.
districtstring | nullSub-district, where the source publishes one. Populated with fetchDetails.
countrystringAlways Duitsland, matching the Marktplaats scrapers' Dutch-language country field.
sourceCountrystringAlways de.
imageUrlsarrayImage URLs. One from the results page; the full gallery with fetchDetails. Empty for listings published without a photo.
scrapedAtstringISO 8601 timestamp of when this row was collected.
datestring | nullPublish date, YYYY-MM-DD. null in categories where kleinanzeigen omits it — see Known limitations.
publishedAtstring | nullPublish date with time where the source gives one.
searchKeywordstring | nullThe query that produced this row.
categoryIdstring | nullThe category this run searched, if one was set.
attributes.conditionstring | nullItem condition. Populated with fetchDetails.
attributes.deliverystring | nullVersand möglich where the seller ships, otherwise the source's own delivery note.
extendedAttributes.typestring | nullItem type as the source classifies it, e.g. Sammelkartenspiele. With fetchDetails.
extendedAttributes.conditionstring | nullSame as attributes.condition.
extendedAttributes.propertiesstring | nullEvery attribute the listing publishes, as key: value pairs. With fetchDetails.
sellerTypestring | nullprivate or commercial. Always populated when you filter by seller type.
shippingAvailablebooleanWhether the seller offers shipping.
isBuyNowbooleanWhether the listing supports kleinanzeigen's direct-purchase flow.
isWantedbooleantrue for a wanted ad (Gesuch) rather than an item for sale.
isTopAdbooleanWhether this is a paid top placement.
viewCountnullAlways null. Present for Marktplaats compatibility — see Known limitations.
favoriteCountnullAlways null. Present for Marktplaats compatibility.
sourcestringAlways kleinanzeigen.de.
contentHashstringShort hash of ID and title, for change detection between runs.

With fetchDetails: true

FieldTypeDescription
descriptionFullstring | nullComplete listing description, not the truncated snippet.
descriptionMarkdownstring | nullThe same text. Kleinanzeigen descriptions are plain text, so there is no separate markup to convert.

Price types

priceTypeKleinanzeigen showsMeaning
FIXED25 €, or Zu verschenkenA firm asking price. Giveaways come through as 0.
MIN_BID200 € VBNegotiable, with a starting figure.
FAST_BIDVBNegotiable, no figure given. priceEur is null.
SEE_DESCRIPTIONno price shownThe price is in the description text.

Example record

{
"itemId": "3506282359",
"title": "Pokemon Arceus V SWSH204 Promo englisch",
"description": "Pokemon Promo Karte von Arceus V SWSH 204, siehe Bilder. Die Karte ist auf englisch, Boosterfrisch...",
"url": "https://www.kleinanzeigen.de/s-anzeige/pokemon-arceus-v-swsh204-promo-englisch/3506282359-234-4236",
"detailUrl": "https://www.kleinanzeigen.de/s-anzeige/pokemon-arceus-v-swsh204-promo-englisch/3506282359-234-4236",
"priceEur": 15,
"priceCents": 1500,
"priceType": "FIXED",
"priceText": "15 €",
"reserved": false,
"city": "Leipzig",
"postalCode": "04179",
"district": "Altlindenau",
"country": "Duitsland",
"sourceCountry": "de",
"imageUrls": [
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/37/37fc6d99-2e36-4138-8145-0bfa75b68f22?rule=$_59.AUTO",
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/6e/6e6c64cf-56bc-4fe9-9038-c038153a5eca?rule=$_59.AUTO"
],
"scrapedAt": "2026-09-07T13:58:04.117Z",
"date": "2026-09-07",
"publishedAt": "2026-09-07",
"searchKeyword": "pokemon karten",
"categoryId": null,
"attributes": { "condition": null, "delivery": "Versand möglich" },
"extendedAttributes": {
"type": "Sammelkartenspiele",
"condition": null,
"properties": "Art: Sammelkartenspiele"
},
"descriptionFull": "Pokemon Promo Karte von Arceus V SWSH 204, siehe Bilder. Die Karte ist auf englisch, Boosterfrisch und in einwandfreiem Zustand. Versand als Brief mit Toploader möglich.",
"descriptionMarkdown": "Pokemon Promo Karte von Arceus V SWSH 204, siehe Bilder. Die Karte ist auf englisch, Boosterfrisch und in einwandfreiem Zustand. Versand als Brief mit Toploader möglich.",
"viewCount": null,
"favoriteCount": null,
"sellerType": "private",
"shippingAvailable": true,
"isBuyNow": false,
"isWanted": false,
"isTopAd": false,
"source": "kleinanzeigen.de",
"contentHash": "8f2c1a9d4e6b0357"
}

Examples

Search a keyword across the whole site:

{
"searchQuery": "pokemon karten",
"maxItems": 200
}

Private sellers only, within a price band:

{
"searchQuery": "iphone 15",
"sellerType": "private",
"minPrice": 200,
"maxPrice": 600,
"maxItems": 300
}

Browse a category in one city, with full detail pages:

{
"categoryId": "203",
"location": "Berlin",
"fetchDetails": true,
"maxItems": 100
}

Scrape a search URL you already have — it is paginated for you:

{
"startUrls": [
{ "url": "https://www.kleinanzeigen.de/s-pokemon-karten/k0" }
],
"maxItems": 500
}

Daily feed — everything posted today, newest first:

{
"searchQuery": "fahrrad",
"location": "Berlin",
"daysOld": 1,
"maxItems": 500
}

💰 Pricing

Two prices, because two different amounts of work.

You getPriceCharged when
Listing$0.39 per 1,000A listing is extracted from search results and saved.
Listing with details$0.99 per 1,000The listing's own page was also opened for the full description, exact publish date, condition and complete image gallery.
Actor start$0.05 per 1,000 runsOnce per run.

At $0.39 per 1,000 this is the lowest per-listing price of any Kleinanzeigen scraper on the Apify Store.

You are charged per listing actually saved. Throttled retries, filtered-out listings and failed requests are never charged, and a listing whose detail page could not be opened is billed at the plain listing rate, not the detail rate. Compute and proxy costs are absorbed by Unfenced Group.

ListingsBasicWith details
100~$0.04~$0.10
1,000~$0.39~$0.99
10,000~$3.90~$9.90
100,000~$39.00~$99.00

Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Use the Maximum results cap to control your spend exactly. You can also set a maximum cost for a run in the Apify console — this scraper stops cleanly when it reaches it rather than running on and producing listings you would not be billed for.


Performance

Run sizeTypical time
100 listingsunder 30 seconds
1,000 listings2–4 minutes
1,000 listings with fetchDetails20–30 minutes

fetchDetails opens one extra page per listing, so it is roughly fourteen times more traffic and an order of magnitude slower. Leave it off unless you need the full description or the exact publish date.


Known limitations

  • Roughly 1,250 listings per search. Kleinanzeigen stops paginating at page 50. For a larger harvest, split the search — by category, by city, or by price band — and run each as a separate job.
  • No radius search. Kleinanzeigen's robots.txt excludes every radius-filtered URL the site offers, so this scraper does not use them. Search a city, a district or a whole federal state instead.
  • Location is by name, not postcode. Berlin, Köln, Bayern all work. A postcode in the location field does not — though the postcode of every listing is returned in the output.
  • No publish date in some categories. Property and some vehicle listings carry no date on the results page. daysOld cannot filter those from the search page alone; set fetchDetails: true to read each listing's exact date. The run tells you when this happens rather than silently returning nothing.
  • No view count. Kleinanzeigen serves its view counter from an endpoint its robots.txt excludes. viewCount is present in the output for schema compatibility and is always null.
  • Seller-type filtering needs a scope, and reaches about 135 listings. Kleinanzeigen does not serve a seller-filtered feed of the whole site, so sellerType has to be paired with a search query or a category. Those searches also stop at page 5 — beyond that the only URLs the site offers are ones its robots.txt excludes. Narrow by category, location or price band to reach more. Unfiltered searches are unaffected and run to the full ~1,250.
  • Price and recency are applied to the retrieved listings, not in the search URL. The results are identical either way — you are just never charged for the difference.

Technical details

  • Source: kleinanzeigen.de — German classified listings, all categories
  • Coverage: nationwide, 151 categories, 3,606 named locations
  • Proxy: none by default. Kleinanzeigen does not block datacenter traffic, it throttles it briefly, and the scraper retries with exponential backoff. A proxy is available as an option but is not needed.
  • Retry: automatic retry on throttling and network errors, exponential backoff, six attempts per request
  • Compliance: robots.txt is fetched and honoured on every run. No personal data is collected.

Rate this actor

If this scraper does its job, a short review on the Reviews tab helps other users find it. Something not working? Open an issue on the Issues tab instead — issues get fixed.


Need a custom scraper?

Unfenced Group builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

Get in touch: www.unfencedgroup.nl