Jobs.ch Scraper
Pricing
from $1.50 / 1,000 results
Jobs.ch Scraper
Scrape job listings from Jobs.ch — Switzerland's leading German-language job board. Structured output with CHF salary ranges, employment type, workload percentage, company details & full descriptions in HTML, text and Markdown. Repost detection. No API key required.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Actor stats
1
Bookmarked
10
Total users
2
Monthly active users
0.68 hours
Issues response
an hour 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, 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
$1.50 per 1,000 results — you only pay for successfully retrieved listings. Failed retries and filtered reposts are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.50 |
| 10,000 | ~$15.00 |
| 100,000 | ~$150.00 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage. At 10,000 results/month, this scraper costs significantly less with no commitment.
Use the Max results cap in the input to control your spend exactly.
Input parameters
| Parameter | Type | Default | descriptionHtml | String | Full job description as raw HTML. null if not fetched. |
| descriptionText | String | Plain-text version of the description, HTML tags removed. |
| descriptionMarkdown | String | Markdown version of the job 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","country": "CH","industry": "Information technology / Telecom.","contractType": "permanent","workload": "80-100%","workloadMin": 80,"workloadMax": 100,"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...","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
Why this scraper?
🇨🇭 Switzerland's largest job board
Jobs.ch is Switzerland's leading job portal with 100,000+ active listings across all sectors and Swiss cantons. It is the primary hiring platform for Swiss employers in both German-speaking and French-speaking Switzerland.
🏦 Swiss employer depth — banking, pharma, engineering
Switzerland's major employers — UBS, Credit Suisse (now UBS), Novartis, Roche, ABB, Nestlé — advertise heavily on Jobs.ch. It provides the most comprehensive access to Swiss employer hiring activity available without an official API.
💰 Swiss salary data in CHF
Jobs.ch is one of the few Swiss platforms to consistently publish salary ranges in CHF. Structured salaryMin/salaryMax fields returned where available.
📄 Three description formats
Each result includes description (HTML), descriptionText (plain text), and descriptionMarkdown.
🔁 Cross-run deduplication
90-day TTL dedup. Set skipReposts: true for clean incremental feeds.
Pricing
This actor uses Pay Per Result pricing at $1.5 per 1,000 results.
| Volume | Cost |
|---|---|
| 100 results | $0.15 |
| 1,000 results | $1.5 |
| 10,000 results | $15.00 |
No subscription fees. Pay only for successfully scraped listings.
Known limitations
- Salary: Only available when explicitly published by the employer —
salaryMinandsalaryMaxarenullwhen not disclosed. - Contact details:
contactPhoneandcontactEmaildepend on what employers choose to include in their listing. - Language detection: Occasional misclassification is possible for bilingual job postings mixing German, French and English.
Technical details
- Source: jobs.ch — Switzerland's leading job board with 80,000+ active listings across all cantons
- Memory: 1024 MB
- Proxy: Apify RESIDENTIAL
- Repost storage: KeyValueStore
jobs-ch-job-dedup, 90-day TTL - Retry: Automatic retry on network errors, exponential backoff
Additional services
Need a custom actor, additional filters, scheduled runs, or integration support? Send an email to info@unfencedgroup.nl — we build on request.
Built by unfenced-group · Issues? Open a ticket or send a message.