# Changelog of KVK Company Search Scraper (`devilscrapes/kvk-company-search-scraper`) Actor

- **URL**: https://apify.com/devilscrapes/kvk-company-search-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/devilscrapes/kvk-company-search-scraper.md

## Changelog

### 0.1.0 - Unreleased

- KVK Handelsregister company search (browser-free, curl-cffi). At run start it reads the public
  `https://www.kvk.nl/config.env.js`, parses `window.__ENV` for the API base URL and the general search
  profile id (nothing is hardcoded), then walks `GET {base}/zoeken/v3/search?q=&language=nl&site=handelsregister&size=10&start=<offset>`
  with the `profileId` header. `start` is an item offset.
- Stops on an empty page, the hit count, the API's 400 "Combination Size and Start is invalid." window
  cap, or `maxResultsPerQuery` / `maxResults`. Dedupe on `kvkNummer` + `vestigingsnummer` across the run.
- A page that fails after its retries is skipped; two consecutive failures (or a failed first page) end only
  that query. A query the register answers with zero hits finishes SUCCEEDED with zero rows. A 401/403
  re-reads the config in case the profile id was rotated.
- Optional `place` is appended to each query as search text (live: `bakkerij` 15,940 hits ->
  `bakkerij Utrecht` 435 hits, Utrecht rows). Postcode-only narrowing is not offered: `bakkerij 3511AA` returned 0.
- The start event is charged with the first delivered batch, not at launch; a run with no rows charges nothing.
- Default proxy is bare Apify datacenter; a country pin was refused (HTTP 407) for the probed tokens, so it is
  not defaulted. A requested proxy that cannot be created fails the run rather than going direct.
- Offline tests against real captured bodies (no live network).

### 0.0.1 - Unreleased

- Scaffold.
