# Changelog of Stepstone.de Jobs Scraper – Germany Stellenangebote (`logiover/stepstone-de-jobs-scraper`) Actor

- **URL**: https://apify.com/logiover/stepstone-de-jobs-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/logiover/stepstone-de-jobs-scraper.md

## Changelog

### 2026-09-23

- Fleet-wide quality audit. Verified end to end against live data and re-checked the input schema, the output columns and the run configuration.
- Output verified on a live run: 20 columns returned, 87.9% of cells populated.
- Run reliability reviewed: 100.0% of public runs succeeded in the last 30 days.
- Input schema, output schema and pricing configuration reviewed.
- Noted that 2 column(s) came back empty in this sample (`searchKeyword`, `searchLocation`); these are under review.

### 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.

### 0.0.29 (2026-08-18)

- Fixed the Actor being flagged "Under maintenance". A run where Akamai
  challenged every rotated residential exit ended with a thrown error, which
  turned an intermittent external block into a failed run. It now reports the
  block as a warning and finishes cleanly with an empty dataset.
- Retries widened from three to six attempts, with the second half routed
  through a different residential range instead of only a new session on the
  same country pin.
- Wall-clock budget tightened from 210 to 170 seconds, with the backstop at
  180, so a run finishes well inside the platform's five-minute test window.
- Requests now fall back from HTTP/2 to HTTP/1.1 after the first two attempts.
  Some residential exits fail the HTTP/2 handshake outright with
  NGHTTP2\_INTERNAL\_ERROR, which previously burnt every retry and returned an
  empty run.

### 2026-08-13

- Fixed runs timing out on the 5-minute platform limit: full descriptions are now fetched by a 6-way worker pool instead of one blocking request per job. A 4-page search with descriptions went from over 6 minutes to 117 seconds; 100 of 100 job pages still enriched.
- Added a deterministic wall-clock budget (3.5 min) that every loop, retry and HTTP timeout is measured against, plus a backstop that exits cleanly with everything collected instead of being killed mid-run.
- Rows are written one batch per page rather than one request per job.
- A blocked or budget-capped description no longer fails the whole run — the listing data is kept and the gap is logged as a warning.
- Falls back to a direct request when no proxy configuration is available, instead of throwing.
- First-try input now opens on a single page so a trial run returns enriched results in well under a minute; the 4-page default is unchanged.

### 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.
- Hardened Akamai handling with a fresh German residential session per retry and rejection of short HTTP-200 challenge pages.
- Moved optional full-description extraction from Stepstone's retired 404 endpoint to the canonical job page's JobPosting JSON-LD/HTML, and normalized HTML snippets to clean text.
- Added a parseability guard so an entirely blocked run fails explicitly instead of returning a successful empty dataset.

### 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

- **No input required.** Running with empty input `{}` now returns Germany's newest job postings nationwide (bounded by Max Pages). Previously the actor errored when no search was given.
- **Friendly inputs.** Added a single **Keyword** field plus a **City** dropdown (50 major German cities with proper labels, e.g. München, Köln). The multi-search JSON array is now an optional *Advanced* field and no longer mandatory.
- **Numbers are real numbers.** `salaryMin` / `salaryMax` are now parsed to numeric values instead of passing through raw.
- **Dataset schema.** Added per-field titles/descriptions (nullable-safe union types) and exposed Salary Min/Max as numeric columns in the Overview table.
- **Reliability.** Added a ~4-minute pagination time budget so runs always finish cleanly and push what was collected.

### 2026-06-28

- Health check passed — actor verified working end-to-end on Apify platform.
- Changelog refreshed for Store quality compliance.

### 2026-06-20

- Maintenance & reliability pass: re-verified end-to-end against live data and confirmed the Actor completes successfully within the 5-minute quality window on the default input.
- Refreshed the prefilled example input and tuned run defaults for faster, lower-cost runs.
