Jobs.ch Search Scraper avatar

Jobs.ch Search Scraper

Pricing

from $2.99 / 1,000 jobs.ch job records

Go to Apify Store
Jobs.ch Search Scraper

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

Jobs API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

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 using jobUrl, directUrl, or startUrl.
  • multiple: enrich several official public vacancy URLs using jobUrls, directUrls, or startUrls.

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 install
npm 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 = $storage
apify run --resurrect --input-file INPUT.json
npm 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.