# Changelog of Marktplaats.nl Scraper (`haketa/marktplaats-scraper`) Actor

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

## Changelog

### 1.1.0 — 2026-11-01

- **Fixed category & subcategory extraction.** Marktplaats changed the search API so each listing now carries numeric category ids (`l1CategoryId`, `categoryId`) instead of inline name fields — this had silently left the `category` and `subcategory` output fields empty (0% coverage). The parser now harvests the id → name lookup from the same response (`searchCategoryOptions` for L1 verticals plus the `facets` → `RelevantCategories` tree for L1/L2 labels) and resolves names correctly again.
- **Added `categoryId` and `subcategoryId` output fields.** The raw Marktplaats L1/L2 numeric ids are now emitted alongside the resolved names so you can always group or join on category even when a human-readable label is not present in the response.
- **Verified a fresh run of 500 unique iPhone listings in ~41 seconds** on the default Apify datacenter proxy: 0% duplicates on `listingId`, 100% coverage on all core fields (`listingId`, `title`, `url`, `price`, `priceType`, `platform`), plus `description` 100%, `images` 99%, `attributes` 99.6%, `condition`/`conditionOriginal` 96.8%, and `latitude`/`longitude` 99.8%. No value bugs (no `[object Object]`, no scheme-less URLs).
- **Refreshed the README** to the current output: the Output example and field-reference table now match a real fresh-run item exactly, with the new `categoryId`/`subcategoryId` fields documented and honest coverage notes per field.
- Updated the dataset Full Detail view and output schema to include `category`, `subcategory`, `categoryId` and `subcategoryId`.

### 1.0.0 — 2026-05

- Initial public release — internal JSON API engine via `got-scraping` (no browser), NL + BE-NL + BE-FR multi-platform support (`marktplaats.nl`, `2dehands.be`, `2ememain.be`), EUR price / condition / price-type / seller-type normalization with original Dutch and French labels preserved, optional detail-page enrichment via the `__NEXT_DATA__` parser, offset-based pagination up to the ~5,000-result platform cap, Apify Proxy integration and pay-per-event pricing.
