Classifieds
Kleinanzeigen Scraper: Export eBay Kleinanzeigen Listings
Scrape Kleinanzeigen (formerly eBay Kleinanzeigen) search results into JSON, CSV or Excel, and get alerts for new ads. Input examples, API code and use cases.
Classifieds
Scrape Kleinanzeigen (formerly eBay Kleinanzeigen) search results into JSON, CSV or Excel, and get alerts for new ads. Input examples, API code and use cases.
Kleinanzeigen, known until 2023 as eBay Kleinanzeigen, is Germany’s biggest classifieds site. Used laptops, furniture, bikes, tools, cars and almost everything else change hands there, often below what the same item costs on eBay or Amazon. That makes it a goldmine for resellers and price researchers, and a pain to follow by hand: good deals disappear within hours, and the site has no export button.
The Kleinanzeigen Scraper takes any Kleinanzeigen search and saves its listings as structured data. It keeps every filter you set on the website, and its monitor mode saves only ads it hasn’t seen before, so a scheduled run works as a new-listing alert.
Each dataset row is one ad from the search results. Depending on what the seller filled in, a row includes:
title and urlprice, currency and price type (for example a fixed price or “VB”, negotiable)mainImageThe Apify Output tab opens on an Overview table with the image, title, price, posting date and time, and URL of each ad. Export the full dataset as JSON, CSV, Excel, XML or RSS.
The recommended way is to build your search on the website first, because the URL carries all the filters.
https://www.kleinanzeigen.de/s-notebooks/preis:100:200/thinkpad/k0c278.searchUrls. Add more URLs to run several searches at once.maxItems, the maximum number of ads per search (default 200).{
"searchUrls": [
"https://www.kleinanzeigen.de/s-notebooks/preis:100:200/thinkpad/k0c278",
"https://www.kleinanzeigen.de/s-notebooks/macbook-air/k0c278"
],
"maxItems": 200
}
If you just want a fast look at a product across all of Germany, leave searchUrls empty and use keyword with an optional price range in euros:
{
"keyword": "Brompton",
"minPrice": 400,
"maxPrice": 1200,
"maxItems": 100
}
keyword, minPrice and maxPrice are only used when searchUrls is empty. For location, category or seller filters, use a URL.
A trimmed row as it appears in the Overview:
{
"title": "Lenovo ThinkPad T14 i5 16GB 512GB SSD",
"price": 290,
"url": "https://www.kleinanzeigen.de/s-anzeige/lenovo-thinkpad-t14-i5-16gb-512gb-ssd/1234567890-278-1234",
"mainImage": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/..."
}
The full record adds the ID, currency, price type, category, location, seller details, posting date and time, attributes and all images when Kleinanzeigen provides them.
Monitor mode is what turns the scraper into an alert tool. Each Actor task keeps its own list of listing IDs it has already saved, so later runs return only fresh ads.
monitorMode to true, and set maxItems to the most new ads you want per run.*/15 * * * *). Each later run saves only ads the task hasn’t saved before.{
"searchUrls": ["https://www.kleinanzeigen.de/s-notebooks/thinkpad/k0c278"],
"maxItems": 100,
"monitorMode": true
}
Use one task per thing you watch. A ThinkPad task and a MacBook task keep separate memories, so neither steals the other’s new ads. We cover the same alert workflow for fashion resale in our Vinted new listing alerts guide.
If you hit rate limits on very frequent schedules, raise requestIntervalMs (default 1000 ms) or maxRetries. The default proxy is German residential IPs, which you can leave as is.
There’s no public Kleinanzeigen API for search data, but you can call the scraper as one. The run-sync endpoint starts a run and returns the ads in one request:
curl -X POST "https://api.apify.com/v2/acts/epicscrapers~kleinanzeigen-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchUrls": ["https://www.kleinanzeigen.de/s-notebooks/thinkpad/k0c278"], "maxItems": 50}'
In Python with apify-client, pulling a search and computing a quick price overview:
import os
import statistics
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("epicscrapers/kleinanzeigen-scraper").call(run_input={
"searchUrls": ["https://www.kleinanzeigen.de/s-notebooks/thinkpad/k0c278"],
"maxItems": 300,
})
ads = list(client.dataset(run["defaultDatasetId"]).iterate_items())
prices = [a["price"] for a in ads if a.get("price")]
print(f"{len(ads)} ads, median price {statistics.median(prices)} EUR")
for a in sorted(ads, key=lambda a: a.get("price") or 10**9)[:10]:
print(a.get("price"), a["title"], a["url"])
To call a monitor-mode task from code, run the task instead of the actor (client.task("<your-task-id>").call()), so the seen-ID memory stays attached to it.
Resellers and flippers. Watch underpriced categories (laptops, camera gear, bikes, LEGO) with a monitor task every few minutes and be the first to message the seller. Compare against eBay sold prices from our eBay sold listings guide to know what an item is really worth.
Price research. Pull a few hundred ads for a model and get the going rate in Germany before you buy or sell. Filter by private sellers to see what individuals ask versus shops.
Local market analysis. Use location and radius filters in the URL to compare supply and prices between cities, or measure how many commercial sellers operate in a category.
Used cars and vehicles. Kleinanzeigen has a large private car market. For dealer stock, price history and market price ratings across Europe, pair it with our AutoScout24 scraper guide.
Data pipelines. Push each run to Google Sheets, a database or a dashboard through Apify integrations or the API.
Yes. eBay Kleinanzeigen was renamed Kleinanzeigen in 2023, after eBay sold its classifieds business to Adevinta. The site, the ads and the URLs on kleinanzeigen.de are the same marketplace, and this scraper works with them.
Not for reading search results. Kleinanzeigen offers tools for commercial sellers to manage their own ads, but no public API for searching listings. The scraper fills that gap and needs no account.
maxItems sets the limit per search URL or keyword. The run stops at that number or when Kleinanzeigen has no more results.
The scraper collects publicly visible ad data. Follow Kleinanzeigen’s terms and GDPR, and don’t use seller data to spam or profile people. This isn’t legal advice.
Check the Pricing tab on the actor page for current rates.
Build the search you’d otherwise refresh all day, paste its URL into the Kleinanzeigen Scraper, and run it once to see the data. Then save it as a task with monitorMode on, add a schedule, and let new ads come to you. The actor page has a quick overview.