Jobs.ch Scraper — Swiss Jobs, Workload & Apply URL
Pricing
from $2.49 / 1,000 job listings
Jobs.ch Scraper — Swiss Jobs, Workload & Apply URL
Jobs.ch scraper for Swiss job listings. Search by keyword and city, then export title, company, place, workload percent, CHF salary when stated, description, and apply URL as JSON.
Pricing
from $2.49 / 1,000 job listings
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by JobCloud AG or its affiliates. Data is read from publicly accessible job-search and job-detail pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.
Jobs.ch scraper for public Swiss job listings. A practical jobs.ch API alternative: search by keyword, city, and workload percent, or paste a search / job URL. Export title, company, place, workload %, a CHF salary when the text states one, the description, and the apply URL as JSON, CSV, or Excel. Fast HTTP, no headless browser, no login. Run it with Python, Node.js, cURL, or Apify MCP.
Use it for Swiss recruiting coverage, workload filters (80–100%), and a daily watch of new job ids.
| Actor | Focus |
|---|---|
| Jobs.ch Scraper ◄── you are here | Swiss jobs.ch listings, workload, apply URL |
| Stepstone Jobs Scraper | DACH commercial job board |
| Arbeitsagentur Jobs Scraper | Germany public employment board |
| LinkedIn Jobs Scraper | Public LinkedIn job listings |
| France Travail Scraper | Public France Travail offers |
| InfoJobs Job Scraper | Spain job listings |
When to use this Actor
- You need a jobs.ch scraper that returns structured Swiss listings
- You want keyword + city + workload % without an employer account
- You need the description and apply URL on the same row as the company and place
- You run a daily monitor and only want job ids that were not seen last time
When not to use this Actor
- Candidate profiles or CVs — public job listings only
- Logged-in recruiter tools — no login
- Other Swiss boards in the same row — this Actor reads jobs.ch
- Germany-only listings — use Arbeitsagentur Jobs Scraper or Stepstone Jobs Scraper
Key features
- Public search JSON plus the public job page (description, apply URL, CHF amount when stated)
- Workload percent from the listing (
80-100%) - Place name search. A name that is both a city and a canton matches both on the public index
- English, German, or French job-page text
- Monitor mode stores seen job ids and bills only new rows
- 256 MB HTTP run, proxy off by default
Input
| Field | What it does |
|---|---|
keyword | Job title, skill, or words to search |
location | City or region (Zurich, Bern, Genève) |
workloadMin / workloadMax | Keep jobs whose percent range overlaps this band |
postedWithinDays | Keep jobs published in this window. Sorted by date |
companyName | Optional case-insensitive company match |
language | en, de, or fr for the job page text |
sortBy | relevance or date. Monitor mode uses date |
startUrls | Search or job URLs. They replace keyword and location |
includeDetails | Fetch description, apply URL, and salary text. Default on |
maxItems / maxPages | Caps. The search returns 20 jobs per page |
monitorMode | Push only new job ids on later runs |
{"keyword": "developer","location": "Zurich","workloadMin": 80,"workloadMax": 100,"language": "en","maxItems": 50,"includeDetails": true,"proxyConfiguration": { "useApifyProxy": false }}
Job URL example inside a run input:
{"startUrls": [{ "url": "https://www.jobs.ch/en/vacancies/?term=developer&location=Zurich" }],"maxItems": 20}
Output
One dataset row is one job.
| Field | Meaning |
|---|---|
jobId | Public job id |
title, company, companyId, place | Card identity |
workloadMin, workloadMax, workloadText | Stated workload percent |
publicationDate | When the listing was published |
description | Job text from the public page |
salaryText, salaryMin, salaryMax, salaryPeriod | CHF amount when the text states one. Period is HOUR, MONTH, or YEAR |
applyUrl | External apply link when the page shows one |
url | Public job page |
{"jobId": "5becfe9b-5978-45d9-92e9-00c07d95e81c","title": "System Engineer Cloud Technologies (80 - 100%)","company": "BELIMO Automation AG","place": "Hinwil","workloadText": "80-100%","workloadMin": 80,"workloadMax": 100,"salaryText": "CHF 90'000 – 110'000 per year","salaryMin": 90000,"salaryMax": 110000,"salaryPeriod": "YEAR","applyUrl": "https://jobs.example/apply/4473","url": "https://www.jobs.ch/en/vacancies/detail/5becfe9b-5978-45d9-92e9-00c07d95e81c/"}
Use cases
- Build a daily list of new developer or nursing roles around Zurich at 80–100%
- Collect company, place, workload, and the apply link for a recruiting CRM
- Read CHF amounts that the job text actually states, next to the description
- Watch one keyword and skip job ids you already stored
Integration examples
Node.js
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("crawloop/jobs-ch-scraper").call({keyword: "developer",location: "Zurich",workloadMin: 80,maxItems: 30,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient()run = client.actor("crawloop/jobs-ch-scraper").call(run_input={"keyword": "developer","location": "Zurich","maxItems": 30,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(len(items), items[0].get("workloadText"))
cURL
curl "https://api.apify.com/v2/acts/crawloop~jobs-ch-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d "{\"keyword\":\"Pflege\",\"location\":\"Bern\",\"maxItems\":20}"
MCP and AI assistants
Use this Actor from AI tools via Apify MCP.
Connect your Apify account, then call this Actor by its Store name crawloop/jobs-ch-scraper.
Example prompts:
- "Run Jobs.ch Scraper for developer in Zurich, workload 80-100, max 20, and return title, company, workload, and apply URL as JSON"
- "Scrape new Pflege jobs in Bern and summarize place and workload percent"
- "Chain Jobs.ch Scraper then Stepstone Jobs Scraper for the same keyword across Swiss and DACH boards"
Suite next step
For other DACH commercial listings, run Stepstone Jobs Scraper after this Actor.
FAQ
Does this use an employer API key? No. It reads the public search JSON and the public job page. No login.
Why can Zurich include more than the city? On the public search index, a place name that is both a city and a canton matches both. Winterthur can appear in a Zurich search for that reason.
Where does the CHF salary come from? Only when the job text states an amount. Many listings describe pay without a number. Those rows leave the salary fields empty. Workload percent is separate and comes from the listing itself.
What does monitor mode bill? Only new job rows. A later run that finds nothing new still starts, and it does not charge a job row for ids already stored. If you change the keyword or workload, reset the monitor store.