K

MCP Agent Skill — kleinanzeigen

Kleinanzeigen Classifieds Skill for MCP Agent

Browse classified listings on Kleinanzeigen.de — Germany's general-purpose marketplace and rentals board

Available free v0.1.0 Browser
$ sidebutton install kleinanzeigen
Download ZIP
README 5.8 KB

Kleinanzeigen Classifieds

German general-purpose classifieds (formerly eBay Kleinanzeigen). Covers everything from used cars to apartments to free junk, with a heavy private-seller bias. The session focused on the "Wohnen auf Zeit / WG" category in Berlin — that flow is mapped. The other 50+ categories were not exercised.

Browser Access

No login required for browsing or extracting listing data. A "Hallo!" welcome popup is shown on first visit (Anmelden / Registrieren). Posting an ad, sending messages, and saving favorites require an account. Some sellers expect contact via the in-platform message form.

Known Surface Map

URL patternPurposeConfidence
/Homepage with category navmedium
/stadt/<city>/City landing page with categorieshigh
/s-<category>/<city>/c<categoryId>l<locationId>Category × city resultshigh
/s-<category-pair>/<city>/<keyword>/k0c<categoryId>l<locationId>Category × city × keyword resultshigh
/s-anzeige/<title-slug>/<adId>-<categoryId>-<locationId>Individual listing detailhigh

Category and location IDs (only Wohnen-auf-Zeit-Berlin tested):

SlugID
s-wohnen-auf-zeit (URL-only)category 199
s-auf-zeit-wg (form-built URL)also category 199
Berlin citylocation 3331

The form-submit URL /s-auf-zeit-wg/berlin/<keyword>/k0c199l3331 is what the search box generates; the bare /s-wohnen-auf-zeit/berlin/c199l3331 works for unfiltered listing.

Confirmed Search/Filter Knobs

KnobWhereNotes
KeywordURL path component before /k0c… segmentE.g. /berlin/see/k0c199l3331
Categoryc<id> in URL trailing segment199 = Wohnen auf Zeit / WG
Locationl<id> in URL trailing segment3331 = Berlin
Search submitForm with input[name="keywords"] triggers form.submit() reliably

Sidebar filters observed but not URL-mapped in session:

  • Art der Unterkunft: Gesamte Unterkunft (418) / Privatzimmer (926) / Gemeinsames Zimmer (20)
  • Mietart: befristet (1.112) / unbefristet (579)
  • Wohnfläche range
  • Zimmer range
  • Anzahl Mitbewohner range
  • Verfügbar ab: Monat / Jahr selectors
  • Online-Besichtigung: Möglich / Nicht möglich
  • Warmmiete range (Von / Bis)
  • Ausstattung: WLAN, Möbliert (and likely more)

Listing Card / Results Page

ElementSelectorNotes
Listing detail linka[href*="/s-anzeige/"]Multiple per card; dedupe by stripping ?...
Listing card containerarticle (closest ancestor of the anchor)
JSON-LD payload per cardscript[type="application/ld+json"] inside the articleBest extraction source — contains title, description, offers.price, offers.priceCurrency, image URL
Title (no JSON-LD)First text inside <h2>Less reliable
Result counth1 text — e.g. "Auf Zeit & WG in Berlin 1 - 25 von 1.539 Ergebnissen in Berlin"

Listing Detail Page — Known Fields

FieldSelectorNotes
Titleh1Often prefixed "Reserviert · Gelöscht ·" when off market
Price#viewad-price (also h2[id="viewad-price"])E.g. "890 €" — usually monthly for rentals
Detail listli.addetailslist--detail (or .addetailslist--detail)Structured key/value pairs
Description#viewad-description-textFree-form German
Location"Lagebeschreibung" section

Detail list keys observed (Wohnen auf Zeit):

  • Art der Unterkunft (Gesamte Unterkunft / Privatzimmer)
  • Mietart (befristet / unbefristet)
  • Wohnfläche (m²)
  • Zimmer
  • Rauchen (unerwünscht / erlaubt)
  • Anzahl Mitbewohner
  • Verfügbar ab (Monat YYYY)
  • Online-Besichtigung (Möglich / Nicht möglich)
  • Mietdauer mindestens (N Tage)
  • Warmmiete
  • Kaution / Genossenschaftsanteile

Known Domain Knowledge

  • Reserved/deleted listings remain visible with Reserviert • Gelöscht • prefix on the title. Cheap, in-demand listings (e.g. lakeside short-term in Berlin) are often already taken — assume each "good deal" needs availability confirmation.
  • Mietart=befristet is the field that flags time-limited rentals; unbefristet is permanent.
  • Mietdauer mindestens is in days in the detail list. Many listings here also enforce 180-day (6-month) minimums, similar to ImmoScout's Wohnen auf Zeit.
  • Category numbers and location numbers appear stable; the same URL surfaces work across user agents.
  • Per-card JSON-LD payloads are the cleanest extraction path — they include title, description excerpt, price, currency.

Known Gotchas

  • Welcome popup (Hallo!) blocks first interaction. Press Escape or click X.
  • Search via direct URL with keyword in path (/berlin/wasser/c199l3331) does not filter — must build URL from form submission, which yields the working s-auf-zeit-wg/berlin/<keyword>/k0c199l3331 shape.
  • Sidebar filter clicks were not URL-mapped in this session — the URL effects of Art der Unterkunft, Mietart, Wohnfläche, etc. are unknown.
  • type followed by Enter into the search input did not navigate in one test; form.submit() from JS worked.
  • Many cheap waterfront listings turn out to be reserved/deleted — always verify status from h1 title prefix.

Unknown / Not Tested

  • Login, posting an ad, sending messages, favoriting
  • All categories outside Wohnen auf Zeit / WG (autos, electronics, furniture, services, etc.)
  • Image gallery / video extraction
  • Pagination beyond first page
  • Sort orders
  • Mobile site / app
  • API endpoints (only DOM scraping observed)
  • Sidebar filter URL encoding
  • City IDs other than Berlin (3331)