Jobs.ch Scraper
Pricing
Pay per usage
Go to Apify Store
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
Maintained by Community
Actor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share

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
- 📅
daysOldfilter — only fetch jobs published within N days, ideal for daily/weekly incremental runs - 🔁 Repost detection — cross-run deduplication via fingerprinting (90-day TTL);
isRepostfield 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
| Mode | Price |
|---|---|
Full detail (fetchDetails: true, default) | $2.50 / 1,000 results |
Listing-only (fetchDetails: false) | $1.50 / 1,000 results |
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
keywords | string[] | [] | Search terms (e.g. ["developer", "nurse"]). Leave empty to scrape all jobs. |
locations | string[] | [] | Cities or regions (e.g. ["Zürich", "Geneva"]). Leave empty for all of Switzerland. |
language | string | "de" | Detail page language: de, fr, or en |
contractTypeFilter | string | "all" | all, permanent, temporary, or freelance |
workloadMin | integer | 0 | Minimum workload (Pensum) percentage |
workloadMax | integer | 100 | Maximum workload (Pensum) percentage |
daysOld | integer | — | Only include jobs published within this many days |
maxItems | integer | — | Stop after saving this many results |
fetchDetails | boolean | true | Fetch full description and contact info per job |
skipReposts | boolean | false | Skip 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
daysOldfilter uses jobs.ch's ownagefield 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
skipRepostsfeature uses a persistent KeyValueStore (90-day TTL) shared across runs of the same actor