Kleinanzeigen Deal Radar
Sweeps one Kleinanzeigen search each run, computes the query's live median price, and delivers listings priced far below it - median and discount percent...
Sweeps one Kleinanzeigen search each run, computes the query's live median price, and delivers listings priced far below it - median and discount percent attached, optional radius around your city. Scheduled hourly it is a German-market deal alert. No seller data, no auto-buy.
$3.99 / 1,000 · 100.0% success over 26 public runs in the last 30 days.
Run it on Apify → Free to try - runs bill per result on your own account.
What you give it
Every field is optional unless marked; sensible defaults do the rest.
| Field | Type | What it does | Default |
|---|---|---|---|
searchQuery |
string | The market slice to hunt deals in, exactly as you would type it on kleinanzeigen.de, e.g. "e-bike cube". Narrower queries give sharper medians. | e-bike |
categoryId |
integer | Optional Kleinanzeigen category id to keep the median clean (e.g. 217 for bikes). | - |
location |
string | Optional German city or region name, resolved via the site's own location search. | - |
radiusKm |
integer | Hunt this many km around the location (up to 200, default 10). Needs a location. | - |
priceMinEur |
integer | Ignore listings below this price - cuts parts-and-accessories noise from the median. | - |
priceMaxEur |
integer | Ignore listings above this price. | - |
discountThresholdPct |
integer | A listing must be at least this far below the query's current median to count as a deal. | 30 |
samplePages |
integer | Pages swept per run (1-10). Page 1 carries the new listings; extra pages steady the median. | 4 |
stateStoreName |
string | Named store remembering which listings were already evaluated, so scheduled runs alert each deal once. Use a different name per watched query. | kleinanzeigen-deal-radar-state |
resetState |
boolean | Forget everything evaluated so far and re-baseline on this run. | False |
scrapeDetails |
boolean | Fetch each delivered deal's detail page for the full description, category specs (condition, brand, ...) and every photo in its gallery (imageUrls; the search page shows one photo). Only deals cross the threshold, so this costs one extra request per deal, not per sampled listing. Off by default. |
False |
maxItems |
integer | Upper bound on deals delivered per run. | 100 |
reportFailures |
boolean | When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. Your input itself, your results and your identity are never sent, and successful runs send nothing at all. Switch this off and the actor behaves exactly the same. | True |
What you get back
One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.
A real result row from a recent run:
{
"adType": "offer",
"description": "Tolles Qualitätsfahrrad 26 Zoll Aus Fachhandel Made in Germany Natürlich mit Nutzungsspuren durch den Gebrauch. Technisch in Ordnung. Stände...",
"discountPct": 58,
"imageUrl": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/63/63c86414-23ae-49ea-844d-463e44498d85?rule=$_2.AUTO",
"listingId": "3541850810",
"location": "31134 Hildesheim",
"postedAt": "Heute, 18:14",
"priceCents": 5000,
"priceType": "FIXED",
"queryMedianCents": 12000,
"shippingPossible": false,
"title": "26 MTB Jungs, Qualität made in Germany",
"url": "https://www.kleinanzeigen.de/s-anzeige/26-mtb-jungs-qualitaet-made-in-germany/3541850810-217-3148"
}
| Field | Type | Meaning |
|---|---|---|
listingId |
string | Kleinanzeigen listing ID. |
url |
string | Direct link - deals go fast. |
title |
string | Listing title as posted. |
description |
['string', 'null'] | Snippet of the listing text. |
priceCents |
['integer', 'null'] | Asking price in euro cents. |
priceType |
['string', 'null'] | FIXED, NEGOTIABLE or GIVEAWAY. |
location |
['string', 'null'] | Postcode and locality as displayed. |
postedAt |
['string', 'null'] | Posting time as displayed. |
imageUrl |
['string', 'null'] | Main photo URL. |
imageUrls |
array | Every photo in the deal's gallery, large size, in the site's order. Filled with scrapeDetails; the search page alone carries one photo (imageUrl). |
adType |
string | offer or wanted; wanted ads never count as deals. |
shippingPossible |
boolean | True when shipping is offered. |
queryMedianCents |
integer | The query's current median asking price the deal was scored against. |
discountPct |
integer | How far below the median this listing is priced, percent. |
Health
100.0% success over 26 public runs in the last 30 days. Live record, failures included: status page.
Full documentation, examples and the AI-assistant prompt live on the store page.