Jobs.ch Scraper avatar

Jobs.ch Scraper

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Jobs.ch Scraper

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

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

10

Total users

2

Monthly active users

0.68 hours

Issues response

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

$1.50 per 1,000 results — you only pay for successfully retrieved listings. Failed retries and filtered reposts are never charged.

ResultsCost
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 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

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.

VolumeCost
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 — salaryMin and salaryMax are null when not disclosed.
  • Contact details: contactPhone and contactEmail depend 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.