← Blog

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.

Epic Scrapers

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.

What data you can scrape from Kleinanzeigen

Each dataset row is one ad from the search results. Depending on what the seller filled in, a row includes:

  • Listing ID, title and url
  • price, currency and price type (for example a fixed price or “VB”, negotiable)
  • Category and location
  • Seller type, seller ID and store title (for commercial sellers)
  • Posting date and time
  • Listing attributes (the category-specific details, such as processor or size)
  • Images, including a mainImage

The 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.

How to scrape Kleinanzeigen without code

The recommended way is to build your search on the website first, because the URL carries all the filters.

  1. Go to kleinanzeigen.de and search. Set the category, location and radius, price range, seller type (private or commercial), shipping option and sort order.
  2. Copy the full URL from the address bar. It will look something like https://www.kleinanzeigen.de/s-notebooks/preis:100:200/thinkpad/k0c278.
  3. Open the Kleinanzeigen Scraper, click Try for free and paste the URL into searchUrls. Add more URLs to run several searches at once.
  4. Set maxItems, the maximum number of ads per search (default 200).
  5. Click Start and export the data from the Output tab.
{
    "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.

Sample output

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.

Kleinanzeigen alerts with monitor mode

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.

  1. In Apify Console, create a task for the actor. Monitor mode needs a task, so don’t start it straight from the actor page.
  2. Add your search URLs, set monitorMode to true, and set maxItems to the most new ads you want per run.
  3. Save the task and run it once. The first run saves every ad it finds and remembers them.
  4. Add a schedule (for example every 15 minutes with */15 * * * *). Each later run saves only ads the task hasn’t saved before.
  5. In the task’s Integrations tab, connect email, Slack, Telegram via webhook, Make or Zapier so new ads reach you right away.
{
    "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.

Use the Kleinanzeigen API from code

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.

Use cases

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.

FAQ

Is eBay Kleinanzeigen the same as Kleinanzeigen?

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.

Is there an official Kleinanzeigen API?

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.

How many listings can I scrape?

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.

How much does it cost?

Check the Pricing tab on the actor page for current rates.

Start scraping Kleinanzeigen

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.