# Changelog of Kleinanzeigen.de Scraper (`haketa/kleinanzeigen-scraper`) Actor

- **URL**: https://apify.com/haketa/kleinanzeigen-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/haketa/kleinanzeigen-scraper.md

## Changelog

### 1.1.0 — 2026-11-01

Major reliability pass against the live site, verified with fresh production runs.

- **Fixed: empty price / location / date / postal code on search results.** Kleinanzeigen migrated its result cards to Tailwind-style utility classes, which broke the old `aditem-main--*` / `.ellipsis` / `.simpletag` selectors. A fresh 400-listing run exposed `price`, `location`, `postalCode`, `postedDate` and `category` all at **0% coverage**. Rewrote the search-card parser to the current markup (price `<p>`, `locationOutline` SVG sibling `<span>`, date `<span>` by pattern, `data-dhl-promotion` attribute tags) while keeping the legacy selectors as a fallback. Re-verified: **title / listingId / listingUrl / price / location / postalCode now ~100%, postedDate ~93%, kilometerstand ~100% on Autos**.
- **Improved: vehicle / real-estate attribute capture on detail runs.** `fetchPage` returned as soon as the Cloudflare shell cleared, so detail pages were often captured before the attribute table rendered. Detail fetches now wait for the `.addetailslist--detail` table before snapshotting; the parser itself is verified correct against fully-rendered pages (all of `kilometerstand` / `erstzulassung` / `kraftstoff` / `getriebe` / `leistung` / `fahrzeugtyp` resolving cleanly). The finer specs remain data-dependent per listing, while `kilometerstand` (also read from the search card) is captured at ~100% on Autos.
- **Fixed: garbled attribute values** (e.g. a whole paragraph of description leaking into `leistung` / `hubraum`). The plain-text regex fallback now runs only when the structured attribute table is entirely absent, and captures a bounded, self-contained value instead of swallowing prose.
- **Fixed: `zimmer` reporting the wrong number.** The room-count matcher also matched `Schlafzimmer` / `Badezimmer` and overwrote the real total; it is now anchored to the overall `Zimmer` / `Räume` field only.
- **Added: detail-page price, price type and location extraction** (`#viewad-price`, `#viewad-locality`, with its duplicated string de-duplicated). Detail-only runs are now self-sufficient for price even if a card price was missed.
- **Improved: seller name extraction** uses the current `.userprofile-vip` widget, keeping the legacy selectors as fallback.
- Refreshed the README Output examples and field coverage tables to match the fresh verification sample exactly.

### 1.0.0 — 2026-05

- Initial public release: Playwright (Chromium, headed) Cloudflare bypass, German numeral/date parsing, category-aware vehicle + real-estate detail schemas, seller info, image gallery, `/seite:N` pagination, pay-per-event pricing.
