# Changelog of Nettiauto Scraper — Finnish Used Cars, Prices & Specs (`logiover/nettiauto-car-scraper`) Actor

- **URL**: https://apify.com/logiover/nettiauto-car-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/logiover/nettiauto-car-scraper.md

## Changelog

### 2026-09-21

**Blocked runs can no longer look like empty markets.**

- Nettiauto is behind a Cloudflare *managed challenge* ("Just a moment…", `__cf_chl`), not a plain
  block. That is a JavaScript challenge, so no HTTP client passes it however good its fingerprint —
  a residential Finnish exit IP and a genuine Chrome TLS fingerprint were both measured returning
  HTTP 403. The Actor now uses Apify Proxy's **UNBLOCKER** group by default, which solves the
  challenge upstream and fetches pages normally.
- **New run outcomes.** Every run is now classified and the result is written to the log, to the
  run's status message, and to a `SUMMARY` record in the key-value store:
  | Outcome | Run status | Meaning |
  |---|---|---|
  | `COMPLETED` | Succeeded | Every requested page was fetched and rows were saved. |
  | `PARTIAL` | Succeeded | Rows were saved but some pages were unreachable; the page numbers are listed. |
  | `EMPTY_RESULT` | Succeeded | Pages were fetched and parsed and the search genuinely has no listings. |
  | `BLOCKED` | **Failed** | Every page was refused with 403/429/503. |
  | `INVALID_START_URL` | **Failed** | The start URL is not a nettiauto.com address, or returned 404. |
  | `FETCH_FAILED` | **Failed** | No page could be fetched for transport reasons. |
  | `INCOMPLETE_NO_ROWS` | **Failed** | Pages were skipped and nothing was saved, so an empty result cannot be trusted. |
- A run that fetched **zero** pages can no longer finish as Succeeded. Previously a site-wide 403
  produced `Succeeded` with an empty dataset, which is indistinguishable from a real empty market.
- **Run summary added.** The log and the `SUMMARY` record now report: pages requested, pages
  fetched, pages skipped (with their numbers), empty pages, parse failures, HTTP request count,
  retry count, a per-status HTTP breakdown, transport errors, the proxy groups used, and the
  termination reason.
- The start URL is validated before any request is made, so a wrong host fails immediately with a
  clear message instead of crawling nothing.
- Per-request timeout raised to 60s because the upstream challenge solve adds roughly 10s per page.

### 2026-09-07

- Initial release. Scrapes Nettiauto result pages into 19 flat columns, with numeric prices, continuous saving and a per-run time budget.
- Verified end-to-end against live Nettiauto pages through Apify Proxy: 32 rows per page, pagination confirmed, and every column checked for fill rate.
