Jobs.ch Search Scraper
Pricing
from $2.99 / 1,000 jobs.ch job records
Jobs.ch Search Scraper
Scrape job listings from Jobs.ch, Switzerland's leading job board. Extract job titles, companies, locations, salary ranges, contract types, and descriptions for Swiss recruitment and job market analysis.
Pricing
from $2.99 / 1,000 jobs.ch job records
Rating
0.0
(0)
Developer
Jobs API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
This Actor extracts rich public job records from jobs.ch using bounded ordinary direct HTTPS requests and Cheerio. Requests are sequential, have no retry, custom user-agent, proxy, or fingerprint controls, and stop on a public access barrier. It does not sign in, submit applications, or fetch external application destinations.
Modes
search: query the public Jobs.ch vacancy search and enrich complete records from their detail pages.single: enrich one official public vacancy URL usingjobUrl,directUrl, orstartUrl.multiple: enrich several official public vacancy URLs usingjobUrls,directUrls, orstartUrls.
Search and detail requests are bounded by maxPages, maxItems, requestTimeoutSecs, and delayMillis. Records are buffered until their detail identity, canonical URL, description, company, location, and 21 meaningful source fields are verified. Incomplete records are never written to the dataset.
The dataset contains source-backed JSON-LD and visible-page fields, normalized locations, employment and language data, public vacancy categories, descriptions and sections, salary data when published, company profile and workforce metadata, explicit application actions when present, and data-quality flags. Request receipts and run diagnostics are kept in KVS, not in new dataset rows. An application URL is emitted only when an explicit public anchor or JSON-LD potentialAction supplies it. The meaningful-field count excludes identifiers, duplicate aliases, provenance-only URLs, repeated structured payloads, and runtime metadata.
Local validation
npm installnpm test$storage = 'storage-jobs-ch-validation-20260927-01'if (Test-Path -LiteralPath 'storage') { throw 'Preserve the existing default storage and use an isolated working copy.' }if (Test-Path -LiteralPath 'apify_storage') { throw 'Preserve the legacy store and use an isolated working copy.' }if (Test-Path -LiteralPath $storage) { throw "Choose a new actor-relative storage directory: $storage" }$env:APIFY_LOCAL_STORAGE_DIR = $storageapify run --resurrect --input-file INPUT.jsonnpm run validate -- $storage
Use INPUT-single.json and INPUT-multiple.json for the direct-detail examples. The platform run status is SUCCEEDED or FAILED; the separate resultStatus is COMPLETE, LIMITED, SKIPPED, DEFERRED, NO_DATA, or FAILED. An explicit access barrier stops requests, discards staged rows, and records SUCCEEDED/SKIPPED, its diagnostic, and request receipts in KVS. Unverified source or transport failures are DEFERRED; fatal zero-row failures are FAILED/FAILED, while already-pushed rows remain SUCCEEDED/LIMITED after a later non-block error.
This Actor has local validation evidence only; no Cloud push or Cloud run is included. OUTPUT, OUTPUT_SUMMARY, RUN_HEALTH, RUN_DIAGNOSTICS, RUN_SKIPS, and SOURCE_RECEIPTS preserve result status and request evidence.
HTTP 401, 403, 429, 451, or a visible source-authored denial or security challenge stops the run as SKIPPED; HTTP 407, other HTTP errors, and unverified transport failures are DEFERRED. The Actor does not retry or change routes after a barrier.