Kleinanzeigen Scraper: Ads, Prices & Sellers
Pricing
from $1.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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
- Give one or more search terms in
searchQueries, or acategoryId(the number after thecin a category URL such as/s-handy-telekom/c173), or both. - Optionally narrow by place with
locationId(the number after thelin a search URL such as/s-berlin/iphone/k0l3331). - Set the filters you need and run. Download the dataset as JSON, CSV, Excel or NDJSON.
Input
| Field | Type | Description |
|---|---|---|
searchQueries | array | Search terms. Optional when categoryId is set. |
categoryId | integer | Site category number; narrows every term, or lists the category on its own. |
locationId | integer | Site place number; default is all of Germany. |
offerType | string | offers (default), wanted or all. |
sellers | string | any (default), private (no PRO badge) or proShops. |
minPrice, maxPrice | integer | Inclusive euro bounds. Ads with no numeric price (VB only) are dropped when a bound is set. |
shippingOnly | boolean | Keep only ads marked Versand möglich. |
excludePromoted | boolean | Drop the undated promoted cards (up to 2 on a page). |
requireKeywordMatch | boolean | Default 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. |
fetchDetails | boolean | Open each kept ad for the full text, attributes and seller block. One extra request per row, so slower. |
maxItems | integer | Row cap across all terms. |
maxPages | integer | Pages per term, 1 to 50. |
proxyConfiguration | object | Optional; 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).
| Field | Description |
|---|---|
id, title, url | Ad number, title and canonical link. |
price, currency, priceNegotiable, isFree, previousPrice | Whole euros; null price when only VB is shown; 0 and isFree for Zu verschenken; the earlier price when the seller lowered it. |
postcode, location, region | Card postcode and town; region (state) is detail. |
postedAt, postedDate | Posting time with Berlin offset when the card shows a clock time, and the date; promoted cards show neither. |
isPromoted | Card shown without a date ahead of the dated results. Inferred to be a paid placement; the site does not label it. |
isWanted | Wanted ad (Gesuch). |
shipping, buyNow, sellerWarranty | Versand möglich, Direkt kaufen, Verkäufergarantie badges. |
isProShop, shopName, shopUrl | PRO shop badge and shop. |
imageUrl, imageCount, snippet | Thumbnail, photo count, the card's short text. |
description, condition, attributes | detail: full text, the Zustand value, every attribute as written. |
sellerName, sellerId, sellerKind, sellerShopUrl, sellerSince, sellerAdCount | detail: public seller profile fields as the page shows them. sellerKind is the site's own privat or gewerblich. |
categoryId, categoryPath, latitude, longitude | detail: category and the approximate coordinates the ad page publishes for the ad's area. |
detailFetched, matchedKeyword, scrapedAt | Whether 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: privatemeans "no PRO shop badge on the card". A commercial seller without a PRO shop is listed as private by that filter; usefetchDetailsand readsellerKindfor 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. SetmaxPagesto 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
| Actor | What it scrapes |
|---|---|
| eBay Spain Scraper | eBay Spain active listings |
| Vinted Spain Scraper | Vinted listings by keyword or category |
| Wallapop Scraper | Wallapop second-hand listings |
| Gumtree UK Scraper | Gumtree UK classifieds |
| OLX Romania Scraper | OLX Romania classifieds |