# Changelog of Alpha.ch + Topjobs.ch Scraper - Swiss JobCloud Vertical Boards (`santamaria-automations/alpha-topjobs-ch-scraper`) Actor

- **URL**: https://apify.com/santamaria-automations/alpha-topjobs-ch-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/santamaria-automations/alpha-topjobs-ch-scraper.md

0.1.5: fix job\_url SPA re-route — alpha.ch/topjobs.ch SPA re-routes the detail sidebar to the first SERP item ~1s after load when no q= is present. buildDetailURL now appends q=<company> (URL-encoded, + for spaces) so the correct listing stays pinned. Falls back to bare ?jobId= when company is empty. Applies to both SERP path (apiJobToResult) and directURLs path (det.RawJob.CompanyName). 0.1.4: P0 fix — buildDetailURL emitted /{lang}/jobs/{id} path-style URLs that return HTTP 404 on both alpha.ch and topjobs.ch. Changed to query-string form /{lang}/jobs?jobId={id} (verified HTTP 200 via curl HEAD). Updated detailIDRe to also match ?jobId= / \&jobId= query-string form so extractJobIDFromURL still works on our own output. 0.1.3: fix source\_query empty-string → null (was "" on all-listings scrapes, must be null per fleet standard). Fix description\_md: div.h3-heading Netiva block elements now emit newline separators so text sections don't run together. 0.1.0: initial build. Verified Phase 0 (2026-09-03) — alpha.ch and topjobs.ch share the same JobCloud/Netiva backend (identical Next.js buildId, identical jobId ordering, byte-identical SERP). One actor with `host` input parameter picks between the two branding surfaces. Description quartet (full/snippet/html/md), applyPrefillDefaults(), sortBy enum with real values (sort=4 Aktualität newest, sort=0 Relevanz), 3-tier proxy fallback, safeCharge PPE billing.
