# Changelog of SteamSpy Scraper — Game Sales, Owners & Analytics (`logiover/steamspy-scraper`) Actor

- **URL**: https://apify.com/logiover/steamspy-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/logiover/steamspy-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

- Empty input `{}` now returns data: the actor defaults to the **all-time Top 100 games** (by owners) instead of exiting with no output.
- Removed the mandatory `mode` requirement — every field is optional.
- Converted **Genre** into a dropdown of Steam store genres (Action, RPG, Strategy, Indie, …). **Tag** stays free-text so any Steam tag works.
- `byGenre` / `byTag` / `appDetails` modes now fall back to the Top 100 when their input is missing, instead of erroring out.
- Proxy now defaults to Apify Proxy (**AUTO**) with a **direct-connection fallback** on the final retry (SteamSpy is a clean public API). No forced DATACENTER group.
- Added a pagination **time budget** (~4 min) to `all` mode so long runs push what they have and exit successfully rather than running indefinitely.
- Top-level errors are logged gracefully (no hard-fail), preserving any collected rows.
- **Fixed `ownersMin` / `ownersMax`**: the owners range (e.g. "10,000,000 .. 20,000,000") was being parsed incorrectly (the ".." delimiter was stripped before splitting), leaving both bounds null. They are now correctly extracted as real numbers.
- **Fixed numeric types**: `discount`, `ccu`, playtimes and price fields are now coerced to real numbers (SteamSpy returns some of these as strings, e.g. `discount: "0"`).
- Added `ownersMin` / `ownersMax` numeric columns to the dataset Overview view and added `fields` metadata (titles + descriptions).
