Export German ImmoScout24 apartment, house and plot listings with prices, size and location. Start with a city or search URL and a bounded result limit.
Add a validated German searchUrl entry point with explicit precedence over form filters and a global unique maxItems cap.
Correct the ignored source pricefrom/priceto parameters to the source-verified price range parameter.
Keep existing output field names; add scraped_at and detail_status, dataset schema and direct JSON/CSV/summary outputs.
Fix detail parsing: living area no longer overwritten by usable area; bedroom/bathroom counts no longer overwrite rooms; floor parsing extracts the floor rather than concatenating all numbers. Current description/title selectors are supported.
Actually execute requested detail enrichment. Report failed detail attempts while retaining valid search records.
Preserve floor zero, leave unknown boolean/commission fields unknown, and do not treat the warm-water boolean as energy consumption.
Exclude similar-property recommendations, deduplicate IDs before details/billing, validate source pagination, and fail unknown/blocked pages instead of reporting empty success.
Respect synthetic-event budget before source requests; store each result immediately, retain partial results on failure, skip already delivered IDs on resurrection. No pricing setting or extra event is changed.
Bound HTTP retries, avoid blocking the event loop, launch the browser only for fallback, and pin dependencies with Docker installation of the matching Chromium build.
Replace unsupported ranking, DACH, timing, access and cookie-persistence promises with the actual supported contract and live pricing.
Compatibility: existing city/type/range options and maxPages default remain. API maxItems defaults to 2000 so historical page-based requests retain their scope; Console prefills only five items/one page. Invalid previously coerced values and advertised-but-unwired advanced fields fail explicitly. Use searchUrl for advanced website filters. Optional detail failures are identified per row. No full-field coverage or runtime SLA is promised.