Skip to content
Back to skills

Claude Skill

ASecurity

Analyze any kleinanzeigen.de listing — cars, electronics, real estate, furniture — with dealer detection, damage flags, duplicate detection, and image extraction. ALWAYS use this skill when the user shares any link containing "kleinanzeigen.de", pastes a Kleinanzeigen URL, says "schau dir diese Anzeige an", "check this listing", "analysiere das Inserat", "ist das ein guter Deal", "Händler oder Privat?", "is this a scam", "Kleinanzeigen prüfen", or any variation asking about a German classifie...

  • 4 stars
  • 0 votes
  • 8 copies
  • 105 views
  • Added June 2, 2026
developmentpythongobashapi

Works with

  • api

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned June 2, 2026

npx -y skills add its-me-prash/kleinanzeigen-reader --skill claude-skill --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Claude Skill?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Claude Skill
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/its-me-prash-claude-skill/badge)](https://www.skillsdirectory.com/skills/its-me-prash-claude-skill)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: kleinanzeigen-reader
version: 2.0.0
description: >
  Analyze any kleinanzeigen.de listing — cars, electronics, real estate, furniture —
  with dealer detection, damage flags, duplicate detection, and image extraction.
  ALWAYS use this skill when the user shares any link containing "kleinanzeigen.de",
  pastes a Kleinanzeigen URL, says "schau dir diese Anzeige an", "check this listing",
  "analysiere das Inserat", "ist das ein guter Deal", "Händler oder Privat?",
  "is this a scam", "Kleinanzeigen prüfen", or any variation asking about a German
  classifieds ad. Also triggers for "compare these listings", "Inserate vergleichen",
  or when multiple Kleinanzeigen URLs are shared. Works WITHOUT API keys, no login,
  no Playwright — pure Python stdlib. Supports all categories.
---

# Kleinanzeigen Reader — Claude Skill

## When to Use

Trigger this skill when ANY of these are true:
- URL contains `kleinanzeigen.de/s-anzeige/`
- User says: "schau dir an", "check", "analysiere", "guter Deal?", "Händler?"
- Multiple Kleinanzeigen URLs shared for comparison
- User asks about damage, TÜV, km, seller type on any German classifieds link

---

## Step 1 — Copy the analyzer to working directory

```bash
cp -r /mnt/skills/user/kleinanzeigen-reader/kl_reader /home/claude/kl_reader
```

---

## Step 2 — Fetch the listing

```bash
curl -s -L \
  -H "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 17_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile/15E148 Safari/604.1" \
  -H "Accept-Language: de-DE,de;q=0.9" \
  -H "Referer: https://www.kleinanzeigen.de/" \
  --compressed \
  "[URL]" > /tmp/listing.html
```

---

## Step 3 — Run the full pipeline

```python
import sys
sys.path.insert(0, '/home/claude')

from kl_reader.extractor import extract
from kl_reader.analyzer  import get_flags, get_rating
from kl_reader.images    import download

with open('/tmp/listing.html') as f:
    html = f.read()

data   = extract(html)
flags  = get_flags(data)
rating = get_rating(data, flags)

# Download images
if data.get('images'):
    saved = download(data['images'], '/tmp/kl_images', size='medium')
```

---

## Step 4 — Output format

Present results using this structure:

```
╔══════════════════════════════════════════════════════════════╗
║                   KLEINANZEIGEN READER                       ║
╠══════════════════════════════════════════════════════════════╣
║  Titel               [title]                                 ║
║  Kategorie           [category]                              ║
║  Verkäufer           ✅ Privat / ⚠️ Gewerblich               ║
║  Preis               X.XXX €                                 ║
║  Standort            [PLZ City]                              ║
╠══════════════════════════════════════════════════════════════╣
║  [Category-specific rows]                                    ║
╠══════════════════════════════════════════════════════════════╣
║  Bewertung           ★★☆☆☆                                   ║
╚══════════════════════════════════════════════════════════════╝

⚠️  FLAGS
    🔴  SCHADEN deklariert (schaden:t)
    🟡  Hoher Kilometerstand: 380.001 km
    🟡  TÜV wahrscheinlich abgelaufen

📝  BESCHREIBUNG
    [original text, word-wrapped]

🖼️  BILDER
    [image URLs or downloaded paths]
```

**Bewertung key:**
- `schaden:t` = −2 stars
- KM > 250k = −1 star
- TÜV not filled = −1 star
- Each 🔴 flag = −1 star

---

## Step 5 — Dealer detection logic

| Signal | Field | Private | Commercial |
|---|---|---|---|
| Primary | `li` in GTM JS | `"0"` | `"1"` |
| Secondary | `lsc` field | `["0"]` | other |
| Badge text | HTML | "Privater Nutzer" | "Gewerblicher Anbieter" |
| Heuristic | Text keywords | — | 2+ commercial terms |

Commercial keywords that trigger undeclared dealer flag:
`händler`, `autohaus`, `sofort verfügbar`, `gewährleistung`, `finanzierung`, `inzahlungnahme`

**Legal note when commercial:** mention § 475 BGB — 2-year statutory warranty applies.

---

## Step 6 — Comparison mode (2+ listings)

Fetch and extract each listing, then show side-by-side:

```
  Merkmal               Inserat 1              Inserat 2
  ──────────────────────────────────────────────────────
  Preis                 1.400 €                1.300 €
  Verkäufer             ✅ Privat               ✅ Privat
  Kilometerstand        380.001 km             380.193 km
  Schaden               ⚠️  JA                 ⚠️  JA
  Bewertung             ★☆☆☆☆                  ★☆☆☆☆

  ⚠️  DUPLIKAT — wahrscheinlich dasselbe Fahrzeug zweimal inseriert
      KM-Differenz: 192 km — 7 übereinstimmende Felder
```

Duplicate threshold: ≥4 matching fields + KM diff < 1000 + same damage status.

---

## Key data sources (reference)

| Source | Location in HTML | Contains |
|---|---|---|
| JSON-LD | `<script type="application/ld+json">` | Title, price, images |
| `ad_attributes` | GTM JS string | All vehicle/item attributes |
| `li` field | GTM JS | `0`=private, `1`=dealer |
| DFP block | GTM JS | Clean price, km, EZ |
| CDN images | `contentUrl` in JSON-LD | Direct image URLs |

---

## Notes

- `kleinanzeigen.de` web URLs only — convert app share links first
- `ezdate`/`tuevdate` default to current month if seller left blank — flag this
- For personal/research use — not for bulk scraping

Files in this skill

  • SKILL.md6.1 KB
  • kl_reader/__init__.py444 B
  • kl_reader/__main__.py81 B
  • kl_reader/analyzer.py4.3 KB
  • kl_reader/cli.py10.7 KB
  • kl_reader/comparator.py1.6 KB
  • kl_reader/extractor.py7.6 KB
  • kl_reader/images.py1.6 KB
  • kl_reader/scraper.py2.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.