Scrape used-car listings from willhaben.at, Austria's #1 marketplace — price, make, model, year, mileage, fuel, transmission, power, body type, colour, seller, location, and photos. Export to JSON or CSV; optionally enrich each listing with its full description.
Force residential proxy guard: _resolve_proxy_url now always injects
apifyProxyGroups: ["RESIDENTIAL"] regardless of customer input and raises
RuntimeError with a clear user-facing message if the proxy is unavailable,
instead of silently falling back to direct routing (which caused HTTP 403s).
_ensure_residential helper extracted for testability (SRP).
ActorInput.proxy_configuration default updated to include RESIDENTIAL.
INPUT_SCHEMA.json proxyConfiguration description updated to state that
RESIDENTIAL is required.
New unit tests in tests/test_proxy_guard.py cover the guard logic.
0.2 — 2026-06-05
Re-published to clear "Under maintenance" flag triggered by datacenter-IP auto-QA failures.
Root cause fix already in place: proxyConfiguration default + prefill now carry apifyProxyGroups: ["RESIDENTIAL"].
Added venvPath/venv to [tool.pyright] in pyproject.toml so pyright resolves imports correctly.
QA PASS: two cloud runs both SUCCEEDED with 5 EUR-priced Austrian car rows each, residential proxy transfer confirmed > 0 (runs: u5Q5nq8Lv5j4BTw6T, SeCqsxfkZBcNcB4q0).
0.1 — 2026-06-02
First published build (apify push v0.1, build ynl9wmeYSV9RdI1pX).
QA PASS: 5 car listings scraped from willhaben.at via RESIDENTIAL proxy,
title+price+mileage populated, enrichDetails description fetched (runId: US76EhZOeUacS0zRw).
Fixed input.qa.json to specify RESIDENTIAL proxy group (datacenter IPs return HTTP 403).
Trimmed actor.json description to ≤300 chars (was 308).