jobs.ch Scraper avatar

jobs.ch Scraper

Pricing

from $0.25 / 1,000 jobs

Go to Apify Store
jobs.ch Scraper

jobs.ch Scraper

Swiss job ads from jobs.ch with the workload in percent, contract type, canton and the full description. Search in German, French or English by keyword and town, filter by workload or contract, or paste a jobs.ch search link.

Pricing

from $0.25 / 1,000 jobs

Rating

0.0

(0)

Developer

deriverge s.r.o.

deriverge s.r.o.

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

jobs.ch is a Swiss job board that listed 41,730 jobs on 11 October 2026, written in German, French or English. This actor returns one row per job: title, employer and whether jobs.ch files it as an SME, a large company or a recruitment agency, the workload such as 80-100%, contract type, position level, the workplace with postcode and canton, required languages, benefits, the apply link and the full description. The form starts with the keyword python: click Start for 20 jobs. jobs.ch shows at most 2,000 jobs per search. It costs $0.50 per 1,000 jobs on the Free plan ($0.25 on Business), and the $5 of monthly credit in Apify's Free plan covers about 10,000 jobs.

Fields in each job

FieldDescription
title, companyJob title as the employer wrote it and the employer's name, empty when the ad hides it.
companyTypeWith details on: SME, Large company or Recruitment agency, as jobs.ch classifies the advertiser.
workload, workloadMin, workloadMaxShare of full time as text, e.g. 80-100%, and its two ends as numbers, 80 and 100.
employmentTypesContract types such as Permanent, Temporary, Freelance, Internship, Apprenticeship or Supplementary income.
positionLevelEmployee, With responsibilities or Executive.
placeWorkplace as the result list shows it, e.g. Zürich or Bern, Biel, Zürich, Luzern for a job in several towns.
street, postcode, city, cantonWith details on: the workplace address and the two-letter canton code, such as ZH, BE or GE.
latitude, longitudeWith details on: coordinates of the workplace.
occupationWith details on: the occupation jobs.ch assigns, e.g. Web Administrator or Nurse.
languages, skills, benefitsWith details on: languages the employer asks for, skill tags, and benefits such as Flexible working hours or Training.
easyApply, applyUrltrue when the job takes a quick application on jobs.ch. For the other jobs, applyUrl (with details on) usually points to the employer's application page.
publishedAt, firstPublishedAt, expiresAtLatest and first publication time, and with details on the end date jobs.ch holds for the ad.
preview, description, descriptionHtmlWith details on: the title with the opening words of the ad, about 140 characters, then the full ad as plain text and as HTML.
detailsIncludedfalse when the job's details were not read, so only the search result fields are filled.
url, companyUrlThe job and the company profile on jobs.ch, in the language set by Link language.

How to scrape jobs.ch

  1. Put one or more Keywords in German, French or English, such as Pflege, Buchhaltung, comptable or data engineer. Each keyword runs as its own search.
  2. Add Locations as towns or postcodes (Zürich, Lausanne, Basel, 8001). Every keyword is searched in every location, and an empty field means all of Switzerland. jobs.ch decides how far around a town it looks: its search pages have no radius setting, so Radius (km) has no effect.
  3. Narrow the search on jobs.ch's side with Contract types, Position levels, Minimum workload (%), Maximum workload (%) and Sort by. A job matches the minimum when its range reaches it: with 80, a job offered at 30-100% stays in. The maximum keeps jobs that can be done at that share or less, so 60 also returns 60-100%.
  4. A search made on jobs.ch can be pasted into Search links from jobs.ch (optional), e.g. https://www.jobs.ch/en/vacancies/?term=python&location=Bern. The term, location, contract, position, region, category, workload and sort in the link are kept.
  5. Keep Include full details on for the address, canton, coordinates, company type, occupation, languages, skills, benefits, expiry date, apply link and description. Each job is then one more page and the actor reads one page a second, so plan about 18 minutes for 1,000 jobs; without details 1,000 jobs take about a minute.
  6. Click Start and watch the rows arrive in Output, then export them as CSV, Excel or JSON or read them through the API.

As API input, permanent nursing jobs around Bern at 80% or more:

{
"keywords": ["Pflege"],
"locations": ["Bern"],
"minWorkload": 80,
"employmentTypes": ["5"],
"maxItems": 300
}

In the API, contract types are numbers: 5 is permanent, 1 temporary, 2 freelance, 3 internship, 6 apprenticeship and 4 supplementary income. Position levels are 3 for employee, 2 for a position with responsibilities and 1 for executive.

Example output

One job from a run on 11 October 2026, with description and descriptionHtml cut after the opening paragraph.

{
"key": "jobsch:5f9964f1-86e3-4bb6-9f34-2cac4b1cdbb4",
"jobId": "5f9964f1-86e3-4bb6-9f34-2cac4b1cdbb4",
"title": "Data Engineer - Analytics Platform",
"url": "https://www.jobs.ch/en/vacancies/detail/5f9964f1-86e3-4bb6-9f34-2cac4b1cdbb4/",
"company": "Medgate AG",
"companyUrl": "https://www.jobs.ch/en/companies/a9dc0f67-54f9-4bee-8087-6a8f11a75640-medgate-ag/",
"companyLogo": "https://media.jobs.ch/media/6ccc96c7-1980-48db-865c-2f4525c59597",
"companyType": "Large company",
"place": "Allschwil",
"street": "Lachenstrasse 1",
"postcode": "4123",
"city": "Allschwil",
"canton": "BL",
"latitude": 47.56249,
"longitude": 7.55503,
"workloadMin": 80,
"workloadMax": 100,
"workload": "80-100%",
"employmentTypes": [
"Permanent"
],
"positionLevel": "With responsibilities",
"occupation": "Data Architect",
"languages": [
"English"
],
"skills": [],
"benefits": [],
"easyApply": false,
"publishedAt": "2026-09-29T10:47:53+02:00",
"firstPublishedAt": "2026-09-29T08:47:53+00:00",
"expiresAt": "2026-10-30",
"applyUrl": "https://app.jobportal.abaservices.ch/job-advertisement/aaa92995-6005-40c1-a11f-593620a026c2/b4b51611-f764-3179-4f38-71bbba18ce52",
"preview": "Data Engineer - Analytics Platform Working place: Allschwil and Home- Office For 26 years, Medgate has been bringing doctors directly to ...",
"description": "Working place: Allschwil and Home- Office\nFor 26 years, Medgate has been bringing doctors directly to patients 24/7 thanks to telemedicine. At Medgate Switzerland, more than 300 motivated employees - including over 130 permanently employed doctors - are actively shaping the medicine of tomorrow with the help of future-oriented digital health solutions. ...",
"descriptionHtml": "<p> </p> <p> <strong>Working place: Allschwil and Home- Office</strong> </p> <p>For 26 years, Medgate has been bringing doctors directly to patients 24/7 thanks to telemedicine. At Medgate Switzerland, more than 300 motivated employees - including over 130 permanently employed doctors - are actively shaping the medicine of tomorrow with the help of future-oriented digital health solutions.</p> ...",
"detailsIncluded": true,
"searchQuery": "\"python\"",
"scrapedAt": "2026-10-11T15:17:59.148Z"
}

How much does it cost to scrape jobs.ch?

Free planStarterScaleBusiness
1,000 jobs$0.50$0.40$0.325$0.25

You pay only for the events in the table. There is no start fee, and compute time and proxies are included.

Collecting 5,000 Swiss jobs with every detail costs $2.50 on the Free plan and $1.25 on Business. A job found by two of your searches is charged once, and jobs removed by Exclude keywords or already delivered in new-only mode are not charged.

Limits

  • jobs.ch stops a search at 2,000 jobs, 20 per page. On 11 October 2026 Pflege matched 2,789 jobs and comptable 1,093; the run log warns in such cases, and more keywords or locations split the search into reachable parts.
  • The actor reads only the search result pages and job pages that jobs.ch's robots.txt allows, one page a second. An October 2026 run of 500 jobs with details took 9 minutes. If jobs.ch refuses a request or answers with a bot check, the actor sends no further requests and ends with the jobs collected until then.
  • Address fields depend on the ad. In that run of 500 jobs, 468 had a postcode, 420 a canton, 320 coordinates and 353 a street. Without details these fields and the company type stay empty.
  • Few employers fill in skills or benefits: 32 and 39 of those 500 jobs had them.
  • expiresAt varies a lot: for 339 of the 500 jobs it fell within 45 days of the first publication, for 118 more than 300 days later. It is empty when jobs.ch holds a placeholder date years ahead (20 jobs).

FAQ

jobs.ch shows these job ads to anyone. The actor reads only the pages that jobs.ch's robots.txt allows for crawlers, one page a second, and does not collect the contact persons jobs.ch lists with an ad. Descriptions are the employers' own texts and can still name a contact: 8 of the 500 jobs in an October 2026 run contained an email address. You are responsible for how you use them.

Can I search the French-speaking part of Switzerland?

Yes. Use French keywords such as comptable, which matched 1,093 jobs on 11 October 2026, or towns such as Lausanne or Genève, and set Link language to French to get links in French. The job texts stay in the language the employer wrote them in.

Support

This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the Issues tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the API tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.