MCP Agent Skill — kleinanzeigen
Kleinanzeigen Classifieds Skill for MCP Agent
Browse classified listings on Kleinanzeigen.de — Germany's general-purpose marketplace and rentals board
sidebutton install kleinanzeigen 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 pattern | Purpose | Confidence |
|---|---|---|
/ | Homepage with category nav | medium |
/stadt/<city>/ | City landing page with categories | high |
/s-<category>/<city>/c<categoryId>l<locationId> | Category × city results | high |
/s-<category-pair>/<city>/<keyword>/k0c<categoryId>l<locationId> | Category × city × keyword results | high |
/s-anzeige/<title-slug>/<adId>-<categoryId>-<locationId> | Individual listing detail | high |
Category and location IDs (only Wohnen-auf-Zeit-Berlin tested):
| Slug | ID |
|---|---|
s-wohnen-auf-zeit (URL-only) | category 199 |
s-auf-zeit-wg (form-built URL) | also category 199 |
| Berlin city | location 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
| Knob | Where | Notes |
|---|---|---|
| Keyword | URL path component before /k0c… segment | E.g. /berlin/see/k0c199l3331 |
| Category | c<id> in URL trailing segment | 199 = Wohnen auf Zeit / WG |
| Location | l<id> in URL trailing segment | 3331 = Berlin |
| Search submit | Form 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
| Element | Selector | Notes |
|---|---|---|
| Listing detail link | a[href*="/s-anzeige/"] | Multiple per card; dedupe by stripping ?... |
| Listing card container | article (closest ancestor of the anchor) | |
| JSON-LD payload per card | script[type="application/ld+json"] inside the article | Best extraction source — contains title, description, offers.price, offers.priceCurrency, image URL |
| Title (no JSON-LD) | First text inside <h2> | Less reliable |
| Result count | h1 text — e.g. "Auf Zeit & WG in Berlin 1 - 25 von 1.539 Ergebnissen in Berlin" |
Listing Detail Page — Known Fields
| Field | Selector | Notes |
|---|---|---|
| Title | h1 | Often prefixed "Reserviert · Gelöscht ·" when off market |
| Price | #viewad-price (also h2[id="viewad-price"]) | E.g. "890 €" — usually monthly for rentals |
| Detail list | li.addetailslist--detail (or .addetailslist--detail) | Structured key/value pairs |
| Description | #viewad-description-text | Free-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;
unbefristetis permanent. Mietdauer mindestensis 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 workings-auf-zeit-wg/berlin/<keyword>/k0c199l3331shape. - Sidebar filter clicks were not URL-mapped in this session — the URL effects of Art der Unterkunft, Mietart, Wohnfläche, etc. are unknown.
typefollowed 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
h1title 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)