Jobs.ch Scraper avatar

Jobs.ch Scraper

Pricing

Pay per usage

Go to Apify Store
Jobs.ch Scraper

Jobs.ch Scraper

Scrape jobs.ch for structured Swiss job data: titles, companies, salaries, workloads and full descriptions (HTML, plain text, Markdown). All cantons and languages. Deduplication, repost detection and daysOld filtering included.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Jobs.ch Scraper

Extract structured job data from jobs.ch, Switzerland's largest job board with over 49,000 active listings across all cantons and industries.

Features

  • 🇨🇭 Full Swiss coverage — all cantons, all languages (DE/FR/EN)
  • 💼 Rich job data — titles, companies, locations, workload percentages, contract types, salary ranges, industries
  • 📄 Triple description format — HTML, plain text, and Markdown (ready for RAG and LLM pipelines)
  • 🔍 Flexible search — keyword + location combinations, multiple searches in a single run
  • 📅 daysOld filter — only fetch jobs published within N days, ideal for daily/weekly incremental runs
  • 🔁 Repost detection — cross-run deduplication via fingerprinting (90-day TTL); isRepost field on every record
  • Employer ratings — aggregated review scores (leadership, salary, career, atmosphere) included on every job, even in listing-only mode
  • Fast and cost-efficient — HTTP-only, no browser overhead; listing-only mode available for even lower costs
  • 💰 Pay-per-use — no monthly subscription, pay only for what you scrape

Pricing

ModePrice
Full detail (fetchDetails: true, default)$2.50 / 1,000 results
Listing-only (fetchDetails: false)$1.50 / 1,000 results

Input Parameters

ParameterTypeDefaultDescription
keywordsstring[][]Search terms (e.g. ["developer", "nurse"]). Leave empty to scrape all jobs.
locationsstring[][]Cities or regions (e.g. ["Zürich", "Geneva"]). Leave empty for all of Switzerland.
languagestring"de"Detail page language: de, fr, or en
contractTypeFilterstring"all"all, permanent, temporary, or freelance
workloadMininteger0Minimum workload (Pensum) percentage
workloadMaxinteger100Maximum workload (Pensum) percentage
daysOldintegerOnly include jobs published within this many days
maxItemsintegerStop after saving this many results
fetchDetailsbooleantrueFetch full description and contact info per job
skipRepostsbooleanfalseSkip jobs already seen in a previous run

Output Fields

Each result contains:

{
"id": "2d6b730d-bb22-4116-9f05-b8a8cc049c4e",
"url": "https://www.jobs.ch/en/vacancies/detail/2d6b730d-.../",
"title": "Senior Software Engineer",
"company": "Acme AG",
"isAnonymous": false,
"companyLogo": "https://media.jobs.ch/...",
"companyWebsite": "https://www.acme.ch",
"location": "Zürich",
"postalCode": "8001",
"country": "CH",
"industry": "Information technology / Telecom.",
"contractType": "permanent",
"workload": "80-100%",
"workloadMin": 80,
"workloadMax": 100,
"salaryMin": 120000,
"salaryMax": 150000,
"salaryCurrency": "CHF",
"salaryPeriod": "yearly",
"publishDate": "2026-03-20",
"initialPublishDate": "2026-03-20",
"daysOld": 4,
"isRepost": false,
"description": "<div>...</div>",
"descriptionText": "We are looking for...",
"descriptionMarkdown": "## About the role\n\n...",
"contactEmail": null,
"contactPhone": "+41 44 123 45 67",
"applyUrl": "https://careers.acme.ch/apply/1234",
"employerRating": {
"average": 3.8,
"totalReviews": 24,
"leadership": 3.5,
"salaryAndBenefits": 4.1,
"careerOpportunities": 3.7,
"workAtmosphere": 4.0
},
"contentHash": "sha256:a1b2c3d4e5f6...",
"scrapedAt": "2026-03-24T10:00:00.000Z"
}

Example Use Cases

Daily incremental scrape — IT jobs in Zürich, last 24 hours:

{
"keywords": ["developer", "engineer", "architect"],
"locations": ["Zürich"],
"daysOld": 1,
"skipReposts": true
}

Full market scan — all Swiss jobs, listing-only (cheap):

{
"fetchDetails": false,
"maxItems": 10000
}

Part-time jobs in Geneva and Lausanne (French):

{
"locations": ["Geneva", "Lausanne"],
"language": "fr",
"workloadMin": 40,
"workloadMax": 80
}

Notes

  • jobs.ch returns up to ~49,000 active listings at any given time
  • The daysOld filter uses jobs.ch's own age field for accurate date filtering
  • Salary data is available when explicitly published by the employer
  • Contact details (email/phone) depend on what employers disclose in their posting
  • The skipReposts feature uses a persistent KeyValueStore (90-day TTL) shared across runs of the same actor