Install
$ agentstack add skill-its-me-prash-kleinanzeigen-reader-claude-skill ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
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
cp -r /mnt/skills/user/kleinanzeigen-reader/kl_reader /home/claude/kl_reader
Step 2 — Fetch the listing
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
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 | 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.deweb URLs only — convert app share links firstezdate/tuevdatedefault to current month if seller left blank — flag this- For personal/research use — not for bulk scraping
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: its-me-prash
- Source: its-me-prash/kleinanzeigen-reader
- License: MIT
- Homepage: https://github.com/its-me-prash/kleinanzeigen-reader
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.