Kleinanzeigen Scraper - Kleinanzeigen.de Ads, All Categories avatar

Kleinanzeigen Scraper - Kleinanzeigen.de Ads, All Categories

Pricing

from $0.40 / 1,000 ads

Go to Apify Store
Kleinanzeigen Scraper - Kleinanzeigen.de Ads, All Categories

Kleinanzeigen Scraper - Kleinanzeigen.de Ads, All Categories

Scrape Kleinanzeigen.de ads in any category from a search URL or by keyword, place, category, price and seller. One record per ad: price and price type, place, date, description, images, attributes, shipping, seller type. Past the 1,250-ad limit. New-ads monitoring. $0.50 per 1,000 ads.

Pricing

from $0.40 / 1,000 ads

Rating

0.0

(0)

Developer

Amit Aviv

Amit Aviv

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

Kleinanzeigen Scraper (kleinanzeigen.de)

Returns ads from Kleinanzeigen.de, Germany's largest classifieds site, in any category, from search URLs you copy out of the browser or from keyword, place, category, price and seller fields. Plain HTTP with no browser, so 100 ads usually take about 5 seconds; apart from the start fee you pay only for delivered ads, and a run that delivers nothing because of an error ends as Failed, never as a green empty run.

What you get

  • Title, price, price type (fixed, negotiable for "VB", free for "Zu verschenken"), the price as shown, the crossed-out old price
  • Postcode, place, district or region, posting date (and time for ads posted today or yesterday)
  • Offer or wanted ad (Gesuch), category id; with ad pages also the category and parent category names
  • Shipping possible ("Versand möglich"; "pickup only" needs ad pages), "Direkt kaufen", promoted (TOP) flag, image count and the first image in large size
  • Seller type private / commercial; for commercial sellers with a Kleinanzeigen shop, the shop name and shop URL (with ad pages, every commercial seller's account name)
  • With Ad pages on: the full description, all image URLs, every attribute the ad page lists (condition, type, size, living space, rooms, mileage, …) under attributes in the site's own German labels, the feature checklist (balcony, fitted kitchen, …), the seller type for every ad, and for commercial sellers the account name, account id, "active since" date and map position
  • Automatic splitting past the site's limit of 1,250 ads per search (see "Large searches")
  • A monitoring mode that delivers and charges only ads earlier runs have not delivered
  • One record per ad, as JSON, CSV or Excel, or through the API
  • A run summary (OUTPUT_SUMMARY in the run's key-value store): what was requested, delivered and charged; per search what the site reports, how many parts it was read in and how many distinct ads were found; which inputs failed or were ignored; why the run stopped

What it does not return: private sellers' names, user ids, membership dates and map positions, and in person-centred categories (babysitting, tutoring, services, jobs …) private persons' descriptions and photos (unless you opt in, see "Legal and responsible use"); phone numbers or e-mail addresses as fields (the site shows them only after login); inside a private seller's description they are replaced by [removed], while a commercial seller's description is delivered as written, including any contact details the business put there; view counts; anything behind a login, such as messages or phone numbers the site shows only to logged-in users.

How to use

  1. Open kleinanzeigen.de, make the search you want (category, place, radius, price, seller type, category filters such as make or size) and copy the URL from the browser.
  2. Paste it into Search or ad URLs. Several entries are fine. Or leave it empty and use Keywords, Place, Category, Price and Seller.
  3. Set Max ads per search and press Start.
  4. Download the results from the Output tab, or read them from the API.

Input

FieldTypeDefaultWhat it does
startUrlslist of textnoneSearch URLs (kleinanzeigen.de/s-…) or ad URLs (kleinanzeigen.de/s-anzeige/…). The URL's filters and sort order are applied as they are; a page number in it is not (every search is read from page 1). A price filter whose lower price is above its upper price is ignored and listed in the summary. URLs without https:// and old ebay-kleinanzeigen.de URLs are accepted; duplicates are ignored; entries from other sites are ignored and listed in the summary. An ad URL returns that ad from its ad page (charged as ad + ad page).
keywordslist of textnoneOne search per keyword, combined with the fields below. Up to 100 characters (longer ones are shortened, with a warning); %, #, ? and \ are left out. The site cannot search for the single word "anzeige" or "anzeigen": such an entry is ignored and listed in the summary.
locationtextnoneA city, district or postcode as you would type it on the site. The site's own place lookup is used and its first match taken; a place it does not know fails that search with a message.
radiusKmchoiceonly this place0, 5, 10, 20, 30, 50, 100, 150 or 200 km around the place; any other value fails the run before any request.
categorychoiceallOne of 154 categories: the site's 15 main categories and their sub-categories. Alone (no keyword, no place) it reads that category in all of Germany. An id not in the list fails the run before any request: for other categories, paste the site's URL.
priceMin, priceMaxnumbernoneWhole euros. A minimum above the maximum fails the run before any request.
sellerTypechoiceallThe site's own private / commercial filter, for keyword and field searches (a URL keeps its own).
maxItemsPerQuerynumber100Stop after this many ads for each URL or keyword, 1 to 300,000 (a value outside is read as the nearest one, with a warning).
splitLargeSearchesyes/noyesRead searches with more than 1,250 ads in parts (see "Large searches"). Applies only when the maximum is above 1,250.
includeDetailsyes/nonoComplete every delivered ad from its ad page (one extra request and one extra fee per ad).
includePrivateSellerDatayes/nonoSee "Legal and responsible use".
onlyNewyes/nonoMonitoring: return and charge only ads that earlier runs have not delivered. See "Monitoring".
monitorKeytextemptyName of the monitor memory, to keep two schedules apart.
proxyConfigurationproxyoffNot needed in our tests. Turn on Apify Proxy only if a run reports blocking.
{
"keywords": ["e-bike"],
"location": "Hamburg",
"radiusKm": "10",
"category": "217",
"priceMin": 200,
"maxItemsPerQuery": 100
}

This input was run as u2fP1QVd2T88Gc6Sm on 2026-10-14 (build 0.1.9): 100 e-bike ads priced 200 EUR or more within 10 km of Hamburg (the site reported 580), in 3.5 seconds, 100 ads charged.

Example result

From run JaadZfz6XVHouiEK4 (2026-10-14, Leipzig rental flats with ad pages on). The description and the image list are shortened here; nothing else is edited.

{
"id": "3533164466",
"url": "https://www.kleinanzeigen.de/s-anzeige/-exklusive-3-raum-wohnung-inkl-ebk-balkon-/3533164466-203-30065",
"title": "*Exklusive 3-Raum-Wohnung inkl. EBK & Balkon!*",
"price": 1699,
"priceType": "fixed",
"priceText": "1.699 €",
"oldPrice": null,
"currency": "EUR",
"description": "Entdecken Sie Ihre neue Etagenwohnung zur Miete im Herzen von Leipzig! Diese charmante Immobilie bietet modernen Wohnkomfort und eine ideale Lage, um das lebendige Stadtleben zu genießen.\n\nDiese Wohnung überzeugt nicht nur durch ihre attrak …",
"postcode": "04107",
"location": "Leipzig, Zentrum-Süd",
"region": "Leipzig",
"postedDate": "2026-10-06",
"postedTime": null,
"adType": "offer",
"categoryId": 203,
"category": "Mietwohnungen",
"parentCategory": "Immobilien",
"highlights": ["126 m²", "3 Zi."],
"attributes": {
"Wohnfläche": "126 m²",
"Zimmer": "3",
"Schlafzimmer": "2",
"Badezimmer": "1",
"Etage": "1",
"Wohnungstyp": "Etagenwohnung",
"Nebenkosten": "190 €",
"Heizkosten": "190 €",
"Warmmiete": "2.079 €"
},
"features": ["Balkon", "Einbauküche", "Badewanne", "Haustiere erlaubt"],
"shippingPossible": null,
"buyNowPossible": false,
"isTopAd": true,
"imageCount": 12,
"imageUrl": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/0f/0fa4e0aa-b2d4-42b2-a507-dada5cb7982d?rule=$_59.AUTO",
"images": [
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/0f/0fa4e0aa-b2d4-42b2-a507-dada5cb7982d?rule=$_59.AUTO",
"https://img.kleinanzeigen.de/api/v1/prod-ads/images/f4/f4a96d54-fd6f-4299-893a-ac9a516555f1?rule=$_59.AUTO",
"…"
],
"sellerType": "commercial",
"shopName": "ARGO Residential GmbH & Co. KG",
"shopUrl": "https://www.kleinanzeigen.de/pro/ARGO-Residential-GmbH-Co-KG",
"sellerName": "ARGO Residential GmbH & Co. KG - Team Leipzig",
"sellerId": "76855088",
"sellerSince": "2020-07-23",
"latitude": 51.3257394,
"longitude": 12.3789294,
"detailsFetched": true,
"privateDataRedacted": false,
"searchUrl": "https://www.kleinanzeigen.de/s-wohnung-mieten/leipzig/c203l4233",
"scrapedAt": "2026-10-14T14:30:13.635Z"
}
FieldMeaning
idThe site's ad id; stable between runs.
price, priceType, priceTextPrice in EUR (null for "VB" without a figure), fixed / negotiable / free, and the text as shown.
postedDate, postedTimeGerman local date; the time is shown by the site only for "Heute" and "Gestern". Promoted (TOP) ads show no date on the result list, so without ad pages their postedDate is null.
highlightsShort facts the result card shows (size and rooms in property categories, other badges).
attributes, features, images, categoryFrom the ad page; null without ad pages.
shippingPossibletrue for "Versand möglich". The result list never shows "Nur Abholung", so without ad pages the value is true or null; false (pickup only) comes from the ad page.
isTopAdA promoted ad. The site shows promoted ads at the top of every page; each is delivered once.
sellerTypeprivate or commercial. Without ad pages it is known where the result card shows it (a shop link, or "Von Privat" in some categories) or where the search filters the seller type; otherwise null. With ad pages, every ad has it.
sellerName, sellerId, sellerSince, latitude, longitudeAd pages only. For private sellers null unless you opt in.
detailsFetchedWhether the ad page was read (an ad removed between the result page and the ad page keeps its list data, false, and is not charged the ad-page fee).
privateDataRedactedtrue when private-seller fields were left out (see "Legal and responsible use").

Without ad pages, description is the short text the result card carries (up to about 250 characters). In person-centred categories, description, imageUrl and images of private sellers' ads are null (images: empty) unless you opt in. Fields the site does not provide for a given ad are null, never missing.

Pricing

Pay per event. You pay for what is delivered, not for time or memory.

EventFree planBronzeSilverGold and above
Actor start (per run, per GB of memory; default 512 MB = once)$0.0036$0.003$0.0027$0.0024
Ad delivered$0.0006$0.0005$0.00045$0.0004
Ad page read (only with Ad pages on, or for an ad URL)$0.0006$0.0005$0.00045$0.0004

Worked examples on Bronze:

  • 1 search, 1,000 ads without ad pages: 1,000 × $0.0005 + $0.003 = $0.503.

  • The same with ad pages: 1,000 × ($0.0005 + $0.0005) + $0.003 = $1.003.

  • An hourly monitoring run that finds 3 new ads: 3 × $0.0005 + $0.003 = $0.0045; a run with nothing new costs the $0.003 start fee only.

  • Ads that could not be delivered are not charged. An ad found by two searches of the same run is delivered and charged once.

  • The maximum total charge you set for a run is respected: the actor stops before it would go over, keeps what was delivered, and says so in the status message (run gcr4eEdULu2cpWcaz: limit $0.008 = start fee + 10 ads, 10 ads delivered and charged, Succeeded).

Large searches: past the 1,250-ad limit

Kleinanzeigen shows at most 50 pages of 25 ads for any search (page 51 and later show page 50 again). When Max ads per search is above 1,250 and the site reports more ads than that, the actor reads the search in parts that each stay under the limit: first private and commercial sellers apart, then price bands, halved until each part fits. Every ad is delivered and charged once; the run summary lists how many parts were read and how many distinct ads were found against the number the site reports.

The site's newest-first order is not stable while it is read: ads posted in the same minute (an agency's bulk upload, for example) change places between two page requests, so a whole reading can repeat some ads and miss others. A part (or a whole search of up to 1,250 ads) that comes up short of the site's count is therefore read once more, ordered by price; ads met twice are delivered and charged once.

Measured on 2026-10-14:

  • Leipzig rental flats, whole search, 1,679 reported: 1,679 delivered in 2.6 minutes, read by seller type, both parts read twice (0LYlgczakM8YhgM3U). The same search with one reading had found 1,645 (zYcQdhzEWELaUYH4t, earlier build). Again with build 0.1.9: 1,682 of 1,682 (0BCVBV32ZSWek4F3u, "read in 3 parts (seller type)").
  • Hamburg game consoles, whole search, 3,330 reported: 3,215 delivered in 15 parts (seller type, price bands); the 115 missing are ads without a price figure (arrYiKfmLWynD7kav).
  • Berlin rental flats, whole search, 7,139 reported: 7,022 delivered in 25 parts, 6.5 minutes, one reading (tffJ9RL9y5oT3kBwC, earlier build without the second reading; not re-run).
  • Munich used cars, 9,560 reported, maximum 5,000: 5,000 delivered in 21 parts, 4 minutes (eHRmYtkVMfX8bmcFk).

Ads without a price figure (for example "VB" alone) are in no price band, so a search split by price finds only those of them that were on the first pages read before the split. They were 2-4% of all ads in our tests (Berlin bikes 858 of 38,085, 2.3%; Hamburg consoles 115 of 3,330, 3.5%); the status message says so when it happens. A search split only by seller type loses none. With splitting off, or with a maximum of 1,250 or less, a search is read to page 50 at most.

Reliability and failure behaviour

What happenedRun statusStatus message (run id where it comes from a real run; the others were produced in offline simulations)
Ads deliveredSucceededScraped 100 ads from 1 query (AYIdTjIRkdIkggdko)
The site has no ads for the searchSucceeded0 results: Kleinanzeigen has no ads for this query (JGpcOQ4myv047OaFS)
Some entries worked, some failedSucceededScraped 120 ads from 2 queries — 1 of 2 queries failed ("…": …) (simulated)
Nothing delivered because of errors or blockingFailedNo ads delivered: Kleinanzeigen blocked every attempt; try again later. No ads were charged (the start fee applies). (simulated)
Input the actor cannot useFailed, in under 2 secondsNothing to do: the input has no "startUrls". … (qaBwZVJ3DWmmEdS68); … not a kleinanzeigen.de / ebay-kleinanzeigen.de URL … (xr1Wxti10Vp3uREXj)
Maximum charge below one adFailed, before any requestThe maximum charge set for this run ($0.0032) is below the price of one ad … (l5jxqgX2jvGJhludL)
Maximum charge reachedSucceededScraped 10 ads from 1 query — stopped at the maximum charge set for this run (gcr4eEdULu2cpWcaz)
Run timeout closeSucceeded… — stopped just before the run timeout; raise the timeout to get the rest (simulated)
Some entries ignoredSucceededScraped 20 ads from 2 queries — 1 input entry ignored (see OUTPUT_SUMMARY) (Pf8tKvsrXz78CbHs0: the keyword "anzeigen")
  • Requests are retried with increasing pauses: on network errors, HTTP 429, 401, 403 or a challenge page 4 times without a proxy (pauses from 5 s) and 5 times with one (each from a new proxy session), on HTTP 5xx 3 times. Result pages are requested at most two per second per run.
  • Results are saved page by page. A run that is aborted and resurrected keeps what was delivered, does not deliver or charge the same ad twice, and counts what it delivered before the restart against the maximum (YGopf3Xsu3pBbEHTm, build 0.1.9: aborted at 54 ads, resurrected, 400 ads for a maximum of 400, 400 unique, 400 charged).
  • In 37 test runs on 2026-10-14 from Apify's servers without a proxy (about 3,500 requests counted in the run summaries, up to 1,040 in one run) the site never refused a request: 0 blocks, and 1 retry in all. Behaviour under a real block has been tested offline only.

Limits

  • At most 1,250 ads per search unless the search is split (see above); a search split by price misses 2-4% (ads without a price figure).
  • Without ad pages: description is the card's short text (up to about 250 characters), sellerType is often null outside property categories (60 of 100 e-bike ads in AYIdTjIRkdIkggdko), and attributes, features, images and category are null.
  • Speed: about 20 ads a second without ad pages (5,000 in 243 s; a whole search read twice about 11 a second); about 3.5 ads a second with ad pages (1,000 in 294 s at the default 512 MB).
  • Germany only (kleinanzeigen.de).

Monitoring: only new ads

  1. Turn on Only new ads and save the input as a task.
  2. Schedule the task (hourly or daily).
  3. The first run delivers the newest ads up to the maximum. Every later run reads the search newest first, delivers and charges only ads it has not delivered before for the same search, and stops at the first page on which most ads are known. A run with nothing new ends as Succeeded with 0 new ads… and charges only the start fee.

Measured on Hamburg bikes (21,496 ads): first run 50 ads (stSffumwS64bOYqfc); 90 seconds later 1 ad, posted in between and not in the first run (XW6WelX0IvMf7QEF1, 1 page read); right after that 0 new ads in 1 monitored query (IqUzerftdrj7BHO15, 1 page read, 0 ads charged).

Promoted (TOP) ads are skipped in this mode: they are older ads shown on top of every page, and each is also listed at its own date among the ordinary ads. An old ad that its seller renews comes back to the top; if no earlier run delivered it, it is delivered as new. In this mode a sort order in the URL is not applied and large searches are not split. Set the maximum above the number of new ads you expect between two runs.

The memory is a key-value store named kleinanzeigen-scraper-monitor in your own account (one record per search and monitor name, at most 10,000 ids each, oldest forgotten first). Delete the store or change Monitor name to start over. To be notified, add an integration to the task (email, Slack, webhook) on "run succeeded".

FAQ

Do I need a proxy? Not in our tests: every request from Apify's servers was answered without a proxy. If a run reports blocking, turn on Apify Proxy.

Why did I get fewer ads than the site shows? The site shows at most 1,250 per search; raise the maximum above 1,250 and keep "Split large searches" on. The run summary says what the site reported and how many distinct ads were found.

Can I scrape a single ad? Yes: paste its URL. It is read from the ad page and charged as ad + ad page.

Can I run it from code? Yes: the API, the Apify clients for JavaScript and Python, Make, Zapier, n8n. The Output tab shows the URLs.

What happens when the site changes? A page that is not a result list fails that search with a message instead of returning empty data. Report the run id under Issues.

This actor reads what Kleinanzeigen shows publicly without a login. Many ads are posted by private persons. By default it does not deliver a private seller's name, user id, membership date or map position, and phone numbers and e-mail addresses in a private seller's description are replaced by [removed]; such records carry privateDataRedacted: true. A commercial seller's description is delivered as written, including any phone number or e-mail address the business put there. Ads whose seller type is unknown are treated as private.

In categories where a private person's ad is about that person (babysitting and childcare, elderly care, tutoring and courses, services, neighbourly help, jobs, pet sitting, musicians and artists, flat shares) the description and the photos of private sellers' ads are left out as well: there people describe themselves, often with first name and age (minors among them), and photos often show them. Title, price, place, date and category are delivered; a title is delivered as the person wrote it and can mention an age or a first name (for example "Schülerin (16) bietet …"). For commercial sellers the business name, shop, account name (which can include a contact person's name, as the business published it) and position are delivered.

The option Include private sellers' data delivers all of this as the site shows it. Turn it on only if you have a lawful basis under the GDPR (Art. 6) to process private persons' personal data, and use the data only for that purpose; by turning it on you confirm this.

Kleinanzeigen's terms do not allow automated collection, and its ads and photos may be protected by copyright and database rights. You are responsible for how you use the data: respect the site's terms, copyright and database rights, and data-protection law. Do not re-publish ads or photos, do not build a competing classifieds database from the output, and do not use it to contact sellers for unsolicited marketing. If you are unsure, ask a lawyer before you build on it.

Changelog

  • 2026-10-14 0.1: first release: searches by URL or by fields, ad pages, splitting past 1,250 ads, monitoring.
  • Property Listing Status Checker: paste Kleinanzeigen ad URLs you already have and learn which are still online, sold, paused or removed, and whose price changed.
  • Vinted Scraper: second-hand fashion and goods from vinted.de and Vinted's other country sites, with an only-new mode for resellers who also watch Kleinanzeigen.
  • Leboncoin Scraper: France's largest classifieds site, all categories, for the same kind of price research or monitoring in France.
  • ImmoScout24 Scraper and Immowelt Scraper: Germany's two large property portals, for agency listings with cold and warm rent, energy data and coordinates next to the private property ads found here.

Support

Open an issue on the actor's Issues tab with the run id.