# Changelog of Eurostat Data Scraper — EU Statistics & Indicators (`logiover/eurostat-data-scraper`) Actor

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

## Changelog

### 2026-09-01

- Fleet-wide health check. Verified against this Actor's real run history: 30-day success rate, output row counts, per-field fill rates, and peak memory against the configured memory limit.
- Reviewed for the failure patterns that have cost this fleet runs — unguarded proxy setup, retry loops that can outlast the run's own time budget, and full-page HTML parsing that can exhaust a small container.
- No change to input, output fields or scraping logic.

### 2026-08-11

- Maintenance release: refreshed the build and dependencies.
- Re-verified live execution, non-empty structured output and dataset field/type integrity.
- Reviewed reliability (retries, pagination) and output quality as part of a full-fleet QA pass.

### 2026-08-01

- Completed the August 2026 full health check: verified empty/programmatic default, Console UI default, and two source-informed alternative inputs on Apify.
- Confirmed successful live execution, non-empty structured output, dataset-field/type integrity, and logical sample quality within the 5-minute quality window.

### 2026-07-18

- Maintenance & reliability pass — re-verified end-to-end against live data via the Apify API; confirmed the Actor completes successfully and returns non-empty, well-formed results within the 5-minute quality window on its default input.
- Refreshed build so the latest version is current; no change to inputs, output fields or scraping logic.

### 2026-07-12

- **Fixed empty/default run aborting.** The default dataset `demo_pjan` with no geo filter flattens to 738,776 rows and blew up the run. Empty input now defaults to a bounded query: `geoFilter = [DE, FR, IT, ES, PL]`, `timeFrom = 2015`, `maxResults = 5000` — fast and cheap. Users can widen `geoFilter` or set `maxResults = 0` to pull everything.
- **Bounded, streaming flatten.** Flattening now stops as soon as `maxResults` rows are collected (and honours `timeTo` inline) instead of building the entire multi-million-cell array and slicing afterwards — no more memory spikes.
- **~4-minute time budget** on the flatten; whatever is collected is pushed and the run exits successfully.
- **`value` stored as a real number** (was a string) in both dataset and catalog modes.
- **Proxy**: Apify automatic proxy that **rotates to a fresh IP on every request/retry**, validates the response shape (rejects soft-empty bodies from bad proxy IPs and retries), and falls back to a direct connection on the final attempt — preventing intermittent empty runs.
- **Graceful**: top-level and fetch errors are logged, not hard-thrown.
- Dataset schema gained a `fields` JSON-schema with titles + descriptions; `value` displays as a number. All inputs optional.
