Jobs.ch Scraper - Swiss Job Listings API
DeprecatedPricing
from $0.72 / 1,000 jobs
Jobs.ch Scraper - Swiss Job Listings API
DeprecatedScrape job listings from jobs.ch, Switzerland's largest job board: full descriptions, company, address, workload (Pensum), skills, languages and apply links. Filter by keyword, location and date. New-jobs-only mode for job alerts.
Pricing
from $0.72 / 1,000 jobs
Rating
0.0
(0)
Developer
Kamer Ozkan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
22 days ago
Last modified
Categories
Security
Limited permissionsShare
Scrape job listings from jobs.ch, Switzerland's largest job board, as clean structured data: title, company, street address, canton, workload (Pensum), required languages, skills, apply method and link, publication and expiry dates, plus the full job description. Search by keyword and location, keep only recent jobs, or run it on a schedule in new-jobs-only mode so you pay only for listings you have not seen yet.
No jobs.ch account, API key, cookies or proxy setup needed.
What does Jobs.ch Scraper do?
It runs the same keyword and location search you would run on jobs.ch and returns every matching job as one row, with the details page already opened for you. Results come as JSON, CSV, Excel or via the Apify API, so you can feed a job board, a CRM, a spreadsheet or a dashboard without copying anything by hand. Like every Apify Actor, it can be scheduled, called from code and connected to Make, n8n, Zapier or a webhook.
Who is it for?
- Recruiters and staffing agencies in Switzerland: see which companies are hiring for your specialties in Zürich, Bern, Basel, Geneva or Lausanne, with workload and language requirements, and contact them first.
- Job boards and aggregators: import fresh Swiss listings daily with stable job IDs, expiry dates and apply links.
- HR and labour-market analysts: track demand for roles, skills and languages by canton and over time.
- Sales teams selling to HR: build lead lists of companies that are actively hiring, with company type (SME or large company).
What data can you get from jobs.ch?
| Field | Example |
|---|---|
jobId | 24bed6ed-7416-480a-b55f-6400d13e8285 |
title | .NET Software Engineer |
company | Furado AG |
companyType | SME or large company |
street, postalCode, city, canton, country | Tödistrasse 46, 8810, Horgen, ZH, CH |
latitude, longitude | 47.26055, 8.58444 |
workloadMinPercent, workloadMaxPercent | 80, 100 (the Swiss "Pensum") |
languages | [{"language": "de", "level": 3}, {"language": "en", "level": 2}] |
skills | ["Business Development", "Key Account Management"] when the employer lists them |
applicationMethod, quickApply | form, true |
externalUrl | the employer's own application link when the job uses one |
url | jobs.ch link in English, German or French |
publishedAt, firstPublishedAt, expiresAt | 2026-09-10T15:38:06+02:00, 2026-09-10T13:38:06+00:00, 2026-10-11 |
logoUrl | company logo on jobs.ch |
description | full job text, plain text without HTML |
Contact persons are never returned as fields, and private e-mail addresses inside descriptions are masked. Anonymous postings have companyVisible: false and an empty company.
How much does it cost to scrape jobs.ch?
You pay only for jobs delivered to your dataset: $0.90 per 1,000 jobs on the Free plan, with lower prices on paid Apify plans (up to 20% off). Platform usage is included.
Worked example: a daily alert for "Software Engineer" in Zürich that returns 40 new jobs a day costs 40 x $0.0009 = $0.036 per day, about $1.08 per month. A one-off export of 1,000 jobs costs $0.90. Set Max jobs or a maximum cost per run to cap spending; the run stops cleanly at your limit.
How to scrape jobs.ch
- Click Try for free.
- Enter one or more search terms (for example
Software Engineer,Pflegefachfrauorcomptable) and a location such asZürich, or leave the location empty for all of Switzerland. - Optionally set Published within (days), turn on Only new jobs for alerts, and set Max jobs.
- Click Start. A run of 50 jobs with descriptions takes about 10 seconds.
- Download the results as JSON, CSV or Excel, or read them through the API.
For a daily job alert, save the input as a task, turn on Only new jobs and add an Apify Schedule. Each run then returns only listings that earlier runs did not deliver.
Input example
{"searchTerms": ["Software Engineer"],"location": "Zürich","publishedWithinDays": 7,"includeDescription": true,"urlLanguage": "en","onlyNewJobs": false,"maxItems": 20}
jobs.ch returns at most 2,000 jobs per search term. For larger exports, split the search by term or location.
Output example
A real row from a test run on 2026-10-09 (description shortened):
{"jobId": "24bed6ed-7416-480a-b55f-6400d13e8285","title": ".NET Software Engineer","company": "Furado AG","companyVisible": true,"companyType": "SME","place": "Horgen","street": "Tödistrasse 46","postalCode": "8810","city": "Horgen","canton": "ZH","country": "CH","latitude": 47.26055,"longitude": 8.58444,"workloadMinPercent": 100,"workloadMaxPercent": 100,"languages": [{"language": "de", "level": 3}, {"language": "en", "level": 2}],"applicationMethod": "form","quickApply": true,"externalUrl": null,"url": "https://www.jobs.ch/en/vacancies/detail/24bed6ed-7416-480a-b55f-6400d13e8285/","publishedAt": "2026-09-10T15:38:06+02:00","firstPublishedAt": "2026-09-10T13:38:06+00:00","expiresAt": "2026-10-11","description": "Your main responsibilities:\nMaintain, support, and further develop existing .NET desktop applications in combination with SQL Server.\n...","searchQuery": "Software Engineer","searchLocation": "Zürich","scrapedAt": "2026-10-09T12:23:38Z"}
The dataset has two views: Overview (title, company, city, canton, workload, apply method, dates, links) and With description.
Integrations and API
Run it from your code with the Apify API or the apify-client package, schedule it in Apify, or connect it to Make, n8n, Zapier, Google Sheets or a webhook.
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("kamerozkan/jobs-ch-scraper").call(run_input={"searchTerms": ["Software Engineer"], "location": "Zürich", "onlyNewJobs": True, "maxItems": 100,})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["title"], job["company"], job["city"], job["url"])
With a webhook on ACTOR.RUN.SUCCEEDED you can push every new job to Slack, a database or your ATS as soon as the run finishes.
FAQ
Do I need a jobs.ch account or API key? No. The Actor reads the same public listings anyone can see on jobs.ch.
Which languages does it handle? All of them. The job text stays in the language the employer used (German, French, Italian or English); urlLanguage only sets the language of the jobs.ch link.
Why is company empty for some jobs? Some employers post anonymously or through an agency. Those rows have companyVisible: false.
Can I get only new jobs every day? Yes. Turn on Only new jobs and schedule the Actor. Jobs delivered by earlier runs with the same search are skipped and not charged.
Is it legal to collect this data? It collects publicly available job listings that companies publish to attract applicants. Contact persons are not returned as fields. You are responsible for how you use the data, including privacy laws like the Swiss FADP and GDPR, and the terms of jobs.ch.
Something is not working? Open an issue on the Issues tab with your run link and it will be fixed quickly.
Support and feedback
- Found a bug or missing a field? Open an issue on the Issues tab of this Actor. We reply within 48 hours and ship most fixes within a few days.
- Have an idea for a feature? Issues are the fastest way to get it built.
- If the Actor saves you time, a short review on this page helps other users find it.