Kleinanzeigen Scraper: Ads, Prices & Sellers avatar

Kleinanzeigen Scraper: Ads, Prices & Sellers

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Kleinanzeigen Scraper: Ads, Prices & Sellers

Kleinanzeigen Scraper: Ads, Prices & Sellers

Search kleinanzeigen.de (Germany, formerly eBay Kleinanzeigen) by keyword, category or place. Get ads with price, location, posting time, shipping and PRO-shop flags, wanted ads split out. Optional full ad pages add attributes and seller. No proxy needed.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

reventadata

reventadata

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Kleinanzeigen Scraper: Ads, Prices and Sellers on kleinanzeigen.de

Unofficial. This Actor is not affiliated with, authorised by, endorsed by, or in any way officially connected to Kleinanzeigen (kleinanzeigen.de). "Kleinanzeigen" is a trademark of its respective owner and is used here only to describe what this tool reads. It reads the same public pages a browser does.

Search kleinanzeigen.de (formerly eBay Kleinanzeigen), Germany's classifieds portal, by keyword, category or place, and get each matching ad as a clean row: price, location, posting time, shipping, seller badges and, optionally, the full ad page with its structured attributes.

What does it do?

  • Walks the search result pages for each term (25 ads a page, up to 50 pages, so up to 1,250 ads per search term; this is the site's own ceiling).
  • Returns one row per ad: price in whole euros (with the VB "negotiable" flag, free ads as 0 and the struck-through earlier price), postcode and town, posting time in Europe/Berlin, shipping and buy-now flags, PRO-shop badge and shop name, photo count and thumbnail.
  • Marks wanted ads (Gesuch, someone looking to buy) and drops them by default.
  • With Fetch the full ad page on, opens each kept ad and adds the complete text, every attribute the seller filled in (brand, model, condition, storage, battery state, frame size and so on, verbatim German), seller name and kind (private or commercial), member-since date, the seller's number of ads online, category path and the approximate coordinates the ad page publishes.

Why use it?

  • No proxy needed. Measured over 25 pages and a 50-page run without one; no proxy bill on top. The proxy option stays available.
  • Offers separated from wanted ads, promoted placements flagged, PRO shops separable from private sellers.
  • Filters that work on every field. Price range, shipping, seller kind and offer type are applied to the rows after fetching, so they apply to every category.
  • Honest empty runs. A search with no hits or a changed page layout fails the run instead of returning an empty dataset that looks like success.

How to use it

  1. Give one or more search terms in searchQueries, or a categoryId (the number after the c in a category URL such as /s-handy-telekom/c173), or both.
  2. Optionally narrow by place with locationId (the number after the l in a search URL such as /s-berlin/iphone/k0l3331).
  3. Set the filters you need and run. Download the dataset as JSON, CSV, Excel or NDJSON.

Input

FieldTypeDescription
searchQueriesarraySearch terms. Optional when categoryId is set.
categoryIdintegerSite category number; narrows every term, or lists the category on its own.
locationIdintegerSite place number; default is all of Germany.
offerTypestringoffers (default), wanted or all.
sellersstringany (default), private (no PRO badge) or proShops.
minPrice, maxPriceintegerInclusive euro bounds. Ads with no numeric price (VB only) are dropped when a bound is set.
shippingOnlybooleanKeep only ads marked Versand möglich.
excludePromotedbooleanDrop the undated promoted cards (up to 2 on a page).
requireKeywordMatchbooleanDefault on. Drops ads where a word of the term is in neither the title nor the card text. The site matches the full ad text, so a search for a bike also returns bike seats and repair offers; this drops many of them, and an ad that only mentions the term deeper in its text is dropped too.
fetchDetailsbooleanOpen each kept ad for the full text, attributes and seller block. One extra request per row, so slower.
maxItemsintegerRow cap across all terms.
maxPagesintegerPages per term, 1 to 50.
proxyConfigurationobjectOptional; not needed.

Sample input

{
"searchQueries": ["fahrrad"],
"maxItems": 50,
"maxPages": 3,
"offerType": "offers",
"fetchDetails": true
}

Output

One row per ad. Fields marked detail are filled only when Fetch the full ad page is on, and are null otherwise; fields the site does not show for an ad are null too (for example condition exists only in categories that have a Zustand attribute).

FieldDescription
id, title, urlAd number, title and canonical link.
price, currency, priceNegotiable, isFree, previousPriceWhole euros; null price when only VB is shown; 0 and isFree for Zu verschenken; the earlier price when the seller lowered it.
postcode, location, regionCard postcode and town; region (state) is detail.
postedAt, postedDatePosting time with Berlin offset when the card shows a clock time, and the date; promoted cards show neither.
isPromotedCard shown without a date ahead of the dated results. Inferred to be a paid placement; the site does not label it.
isWantedWanted ad (Gesuch).
shipping, buyNow, sellerWarrantyVersand möglich, Direkt kaufen, Verkäufergarantie badges.
isProShop, shopName, shopUrlPRO shop badge and shop.
imageUrl, imageCount, snippetThumbnail, photo count, the card's short text.
description, condition, attributesdetail: full text, the Zustand value, every attribute as written.
sellerName, sellerId, sellerKind, sellerShopUrl, sellerSince, sellerAdCountdetail: public seller profile fields as the page shows them. sellerKind is the site's own privat or gewerblich.
categoryId, categoryPath, latitude, longitudedetail: category and the approximate coordinates the ad page publishes for the ad's area.
detailFetched, matchedKeyword, scrapedAtWhether the ad page was merged, the term that found the ad, UTC timestamp.

Sample output

One row from a real run (the description is shortened here):

{
"id": "3519675257",
"title": "Hercules, Modell Pippa, in der Größe 20 Zoll",
"url": "https://www.kleinanzeigen.de/s-anzeige/hercules-modell-pippa-in-der-groesse-20-zoll/3519675257-217-3377",
"price": 149,
"currency": "EUR",
"priceNegotiable": false,
"isFree": false,
"previousPrice": null,
"postcode": "10961",
"location": "Kreuzberg",
"region": "Berlin",
"postedAt": "2026-10-21T15:08:00+02:00",
"postedDate": "2026-10-21",
"isPromoted": false,
"isWanted": false,
"shipping": false,
"buyNow": false,
"sellerWarranty": false,
"isProShop": true,
"shopName": "Harald Bike´s",
"shopUrl": "https://www.kleinanzeigen.de/pro/Haralds-Fahrradladen",
"imageUrl": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/63/630441b7-06db-4fac-b615-b9e05cbb81bf?rule=$_2.AUTO",
"imageCount": 15,
"snippet": "Hallo, es wird angeboten ein Fahrrad der Marke Hercules, Modell Pippa, in der Größe 20 Zoll. Es ist...",
"description": "Hallo, es wird angeboten ein Fahrrad der Marke Hercules, Modell Pippa, in der Größe 20 Zoll. Es ist ein zuverlässiger Begleiter für den Alltag\n\n- Marke: Herc...",
"condition": "Sehr Gut",
"attributes": {
"Art": "Kinder",
"Typ": "Cityräder",
"Zustand": "Sehr Gut"
},
"sellerName": "Harald",
"sellerId": "70618590",
"sellerKind": "gewerblich",
"sellerShopUrl": "https://www.kleinanzeigen.de/pro/Haralds-Fahrradladen",
"sellerSince": "13.12.2019",
"sellerAdCount": 120,
"categoryId": 217,
"categoryPath": [
"Auto, Rad & Boot",
"Fahrräder & Zubehör"
],
"latitude": "52.4906134",
"longitude": "13.400943",
"detailFetched": true,
"matchedKeyword": "fahrrad",
"scrapedAt": "2026-10-21T13:11:02.661698+00:00"
}

Limits

  • The site serves at most 50 pages per search (1,250 ads); narrow the search with a category or place to go deeper.
  • A literal hyphen in a search term cannot be told apart from a space by the site.
  • Price, seller-kind, shipping and offer-type filters run after fetching, so they do not reduce the number of pages read.
  • sellers: private means "no PRO shop badge on the card". A commercial seller without a PRO shop is listed as private by that filter; use fetchDetails and read sellerKind for the site's own label.
  • Phone numbers are not on the pages as served (the site masks them behind a click), so rows have no phone field; a number a seller wrote into the ad text ships inside description. Messaging is not read.
  • The site's robots.txt disallows /*/seite:6* to /*/seite:59*, a rule that matches its older /<category>/seite:N/ URLs. This Actor pages with /s-seite:N/..., which that rule does not match, and reads up to page 50. Set maxPages to 5 if you want to stay within the stricter reading.
  • Rows can carry public profile fields of natural persons (a seller's display name, the site's seller ID, member-since date). Use them in line with the data protection law that applies to you.

How fast is it?

Measured 2026-10-21: 694 rows from 50 search pages in 83 seconds. With fetchDetails on, 87 rows in 88 seconds, about one second per row.

How much does it cost to scrape Kleinanzeigen?

Pay-per-event: $0.001 per result saved to the dataset ($1.00 per 1,000 results), plus $0.00005 charged once when the run starts. No proxy, so no proxy cost. Filters run before a row is saved, so rows they drop are not charged.

More scrapers

ActorWhat it scrapes
eBay Spain ScrapereBay Spain active listings
Vinted Spain ScraperVinted listings by keyword or category
Wallapop ScraperWallapop second-hand listings
Gumtree UK ScraperGumtree UK classifieds
OLX Romania ScraperOLX Romania classifieds