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
2 hours 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.