Kleinanzeigen Listings Scraper
Pricing
from $2.50 / 1,000 result emitteds
Kleinanzeigen Listings Scraper
Scrape eBay Kleinanzeigen (kleinanzeigen.de) listings by keyword — title, price, location, image, and seller type from Germany's #1 classifieds marketplace. No login needed. Export clean, deduped JSON, CSV, or Excel rows for resale research or price tracking.
Pricing
from $2.50 / 1,000 result emitteds
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
🎯 What this scrapes
eBay Kleinanzeigen is Germany's #1 classifieds marketplace for secondhand and consumer goods — hundreds of thousands of live listings, no public API. This Actor runs a keyword search, walks every result page, and pulls each listing's title, price (EUR or "VB"/negotiable), location with postal code, image, shipping availability, and whether the seller is a private individual or a commercial (PRO) account. Search as many keywords as you like in one run — results are merged and deduped by ad ID across pages and keywords.
🔥 What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python. - 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
- 🔁 Retries with exponential backoff on
408 / 429 / 5xx— up to 5 attempts per page,Retry-Afterhonoured. - 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
- 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.
💡 Use cases
- Resale arbitrage — track underpriced secondhand listings by keyword across Germany.
- Market research — benchmark asking prices for a product category over time.
- Lead generation — build a directory of PRO/commercial sellers active on a keyword.
- Price-drop alerts — diff successive runs to catch reductions on watched searches.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
keywords | array | yes | ['fahrrad', 'laptop'] | One or more search terms, e.g. ["fahrrad", "laptop"]. The Actor runs one keyword search per entry and… |
maxItems | integer | no | 50 | Hard cap on dataset rows across all keywords combined. |
proxyConfiguration | object | no | {'useApifyProxy': True, 'apifyProxyGroups': ['RESIDENTIAL']} | Apify Proxy spec. No anti-bot signature has been observed on Kleinanzeigen's search pages, so a datacenter group works… |
Example input
{"keywords": ["fahrrad"],"maxItems": 5,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
ad_id | integer | Kleinanzeigen ad ID, from the result card's data-adid attribute. |
title | string | Listing headline. |
description_snippet | ['string', 'null'] | Short description snippet from the result card or its JSON-LD block. |
price_amount | ['number', 'null'] | Parsed EUR amount. null when the price is "VB" (negotiable) or blank (give-away) — see price_raw. |
price_raw | string | Raw price text exactly as shown, e.g. "150 €", "VB", or "" (always populated). |
currency | string | ISO-4217 currency code — always EUR. |
location | ['string', 'null'] | Full location text next to the pin icon, e.g. "48691 Vreden". |
postal_code | ['string', 'null'] | 5-digit German postal code split from location when cleanly parseable, otherwise null. |
image_url | ['string', 'null'] | Listing thumbnail/photo URL from the card's JSON-LD block. |
url | string | Absolute URL to the listing detail page. |
is_shipping_available | boolean | True when the card carries a DHL shipping-available marker. |
is_commercial_seller | boolean | True when the card carries a PRO/commercial-seller badge or shop link. |
scraped_at | string | ISO-8601 UTC timestamp when this row was recorded. |
Example output
{"ad_id": 2843810004,"title": "Reparatur von Grafikkarten, Laptops, Konsolen uvm.","description_snippet": "Biete Reparatur von Laptops und Grafikkarten an...","price_amount": 150.0,"price_raw": "150 \u20ac","currency": "EUR","location": "48691 Vreden","postal_code": "48691","image_url": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/...","url": "https://www.kleinanzeigen.de/s-anzeige/reparatur-von-grafikkarten-laptops-konsolen-uvm/2843810004-...","is_shipping_available": true,"is_commercial_seller": false,"scraped_at": "2026-09-19T12:00:00.000Z"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.2 | One-off warm-up charge per run |
result | $0.0025 | Per dataset item |
Example: 1 000 results at the rates above ≈ $2.70. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
- v1 supports keyword search only — the category-browse URL shape is not implemented.
- No location_filter/radius/postal-code query parameter yet.
- Only list-card fields are scraped — no item-detail-page enrichment (full description, seller history, phone).
- HTML-only: Kleinanzeigen publishes no public JSON API.
❓ FAQ
Do I need to log in or provide cookies?
No. Kleinanzeigen's keyword search and listing cards are public — the Actor needs no account, cookies, or login.
What happens if a keyword has no results?
The run finishes successfully with zero rows for that keyword and moves to the next one — an empty search is not an error.
Can I search multiple keywords in one run?
Yes — add as many entries to keywords as you like; results are merged and deduped by ad ID across the whole run.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.