Jobs.ch Scraper: Swiss Job Postings, Workload & Salary Estimate
Pricing
from $1.05 / 1,000 job postings
Jobs.ch Scraper: Swiss Job Postings, Workload & Salary Estimate
Scrape jobs.ch Stellenangebote (Swiss jobs) by keyword, canton, city, postal code, field, contract and workload %. Rows give company, address with coordinates and benefits. Optional full details add description, apply link and CHF salary estimate. Monitor new postings on a schedule.
Pricing
from $1.05 / 1,000 job postings
Rating
0.0
(0)
Developer
GetAScraper
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
🇨🇭 Jobs.ch Scraper: Swiss Job Postings, Workload & Salary Estimate
|
Swiss job postings from jobs.ch, filtered the way recruiters search Pick a canton, a city, an occupation, a contract type and a workload range. Get clean rows with company, address, coordinates, benefits and posting date, plus an optional deep layer with the full description, apply link and salary estimate. |
|
📍 26 cantons Search by canton, city, postal code or job region. |
⏱️ Workload range Find part-time friendly roles or full-time only. |
💰 CHF salary estimate Yearly range per role where the site shows one. |
🔔 Only new postings Name a search and each run returns what is new. |
Get Swiss job postings from jobs.ch (Stellenangebote), with canton, workload percentage, contract type and posting date, ready for your spreadsheet in under 60 seconds. Search by keyword and narrow by place, occupation, seniority, required language and home office. Turn on full details to add the description, the direct application link, skills, language requirements and company facts. No login needed.
🔍 What can you do with it?
- I am a recruiter in Zurich pulling every new Java and cloud role from the last 7 days, with workload and apply link, so my team can call companies before anyone else does.
- I am a staffing agency owner tracking part-time nursing and care roles by canton to match open postings with the candidates on my list.
- I run a job board or career newsletter and need a daily feed of fresh Swiss postings, with company logos and addresses, without copying anything by hand.
- I am a labour-market analyst measuring how many roles offer home office, which cantons hire most, and which employers post the most openings, using salary estimates and workload ranges.
- I am a job seeker or career coach who wants an alert for new roles in one canton and one field, with the application link in the row.
| ⚡ Built for repeat use. Give a search a name and schedule it. Every run hands you only the postings you have not seen yet. |
📥 Input
Every field is optional. Leave the form as it is for a quick test run.
| Field | Type | Required | Description |
|---|---|---|---|
searchTerms | array of strings | No | Job titles or skills to search for, one per row. Each keyword is searched on its own and duplicates are removed. Leave empty to browse by filters only. |
startUrls | array of URLs | No | Search links copied from jobs.ch. Their keyword and filters are used as they are, in addition to the keywords above. |
cantons | array of enums | No | One or more of the 26 Swiss cantons. A posting in any chosen canton matches. |
locations | array of strings | No | Cities, towns or postal codes such as Zürich, Lausanne or 8001. A posting in any of them matches. |
regions | array of enums | No | The site's own job regions, for example Region of Basel or Ticino. Handy for commuter areas that cross canton borders. |
categories | array of enums | No | Broad occupational fields such as Information Technology, Medicine or Construction. |
employmentTypes | array of enums | No | Permanent, temporary, freelance, internship, apprenticeship or supplementary income. |
positionLevels | array of enums | No | Executive position, specialist or employee. |
workloadMin | integer | No | Lowest workload percentage you accept, from 0 to 100. Roles offering a range that reaches it still match, so a 60 to 100 percent role matches a minimum of 80. |
workloadMax | integer | No | Highest workload percentage you accept, from 0 to 100. Roles whose range starts at or below it still match, so a 60 to 100 percent role matches a maximum of 60. |
languageSkills | array of enums | No | Keep postings that ask for German, French, English or Italian. A posting asking for any chosen language matches. |
homeOfficeOnly | boolean | No | Keep only postings whose employer lists working from home as a benefit. |
postedWithin | enum | No | Keep only postings published in the last 24 hours, 3, 7, 14 or 30 days. Empty means any time. |
sortBy | enum | No | Newest first (best for monitoring) or best match. |
language | enum | No | Language of the jobs.ch interface used for links. Posting texts keep the language the employer wrote. Labels in the output are always English. |
includeDetails | boolean | No | Open every posting to add the full description, apply link, salary estimate, skills, language requirements, contact person and company profile. Slower, because each posting is one extra visit, and each posting with details is billed as a separate Job details event. Off by default. |
descriptionFormat | enum | No | Plain text, HTML or both. Only used when full details are on. |
monitorName | string | No | A short name that turns the run into a monitor. Later runs with the same name and searches return only new postings. Leave empty to always get everything. |
maxItems | integer | No | Total number of postings to return across all keywords. With several keywords the budget is shared evenly. Defaults to 20. |
proxyConfiguration | object | No | Connection settings. The default works for almost every run. |
📤 Output
Each posting is one row. Fields the site does not state are left out instead of being filled with placeholders.
{"id": "e1051fdb-d899-4dd3-82b9-6a6c2dac5e57","url": "https://www.jobs.ch/en/vacancies/detail/e1051fdb-d899-4dd3-82b9-6a6c2dac5e57/","title": "Data Platform Engineer","companyName": "Schweizerische Nationalbank","companyUrl": "https://www.jobs.ch/en/companies/2004-schweizerische-nationalbank/","location": "Zürich","canton": "ZH","workloadMin": 80,"workloadMax": 100,"employmentTypes": ["Permanent position"],"positionLevel": "Employee","postedAt": "2026-10-19T18:02:04+02:00","searchTerm": "software engineer","applyUrl": "https://smahrt-consulting-ag.contactrh.com/jobs/4473/44518098/de_DE","applyMethod": "external","categories": ["Technical", "Information Technology / Telecom.", "System Engineering"],"salaryMin": 100000,"salaryMax": 140000,"salaryCurrency": "CHF","salaryPeriod": "year","salaryIsEstimate": true,"applicationDeadline": "2026-12-03","companySize": "501 - 1 000","companyRating": 2.63,"companyReviewCount": 8}
Data table
Fields marked "details" appear when includeDetails is on.
| Field | Type | Description |
|---|---|---|
id | string | Unique posting ID. |
url | string | Link to the posting on jobs.ch in the language you chose. |
title | string | Job title as published. |
companyName | string | Hiring company. |
companyId | string | Company ID on jobs.ch. |
companyUrl | string | Company page on jobs.ch. |
companyLogo | string | Logo image link. |
location | string | Place of work as shown on the posting. |
postalCode | string | Postal code of the workplace. |
canton | string | Two-letter canton code. |
street | string | Street address of the workplace. |
country | string | Country code of the workplace. |
latitude, longitude | number | Coordinates of the workplace. |
regions | array of strings | Job regions the posting belongs to. |
workloadMin, workloadMax | integer | Workload range in percent. |
employmentTypes | array of strings | Contract types such as Permanent position or Freelance. |
positionLevel | string | Executive position, Specialist or Employee. |
postedAt | string | Publication date and time. |
firstPostedAt | string | First publication date and time. |
homeOfficeOffered | boolean | True when the employer lists working from home. |
benefits | array of strings | Employer benefits such as company restaurant or pension fund contribution. |
easyApply | boolean | True when the posting can be applied to in a few taps. |
newSinceLastRun | boolean | Monitor mode only: true for postings you have not received before. |
searchTerm | string | The keyword that found the posting. |
scrapedAt | string | When the row was collected. |
description, descriptionHtml | string | Full description in plain text or HTML (details). |
applyUrl | string | Direct application link when the employer uses its own form (details). |
applyMethod | string | External site or jobs.ch form (details). |
skills | array of strings | Skills listed by the employer (details). |
languageRequirements | array of objects | Required languages with level, for example German, Fluent (details). |
categories | array of strings | Occupational fields and subfields (details). |
salaryMin, salaryMax | integer | Salary estimate range (details). |
salaryCurrency, salaryPeriod | string | Currency and period of the estimate, for example CHF and year (details). |
salaryIsEstimate | boolean | Always true. The figure is the site's estimate for the role, not an employer-stated salary (details). |
applicationDeadline | string | Last day the posting is online (details). |
startDate | string | Planned start date (details). |
workHours | string | Weekly hours (details). |
contacts | array of objects | Contact person named on the posting (details). |
companyWebsite | string | Company website (details). |
companySize | string | Employee range (details). |
companyOpenJobs | integer | Open positions at the company (details). |
companyRating, companyReviewCount | number | Employee rating and number of reviews, when reviews exist (details). |
companyDescription | string | Company introduction (details). |
companySocialLinks | array of objects | Company social profiles (details). |
🚀 How to use it
|
STEP 1 Describe the role Add keywords, then pick canton, field, contract type and workload. |
STEP 2 Run and review Start the run and check the Postings, Salary and Employers views. |
STEP 3 Export or schedule Download JSON, CSV or Excel, or add a monitor name and schedule it. |
Tips
- Start with
includeDetailsoff to see how many postings match, then switch it on for the final export. - For a daily alert, set a monitor name, choose "Newest first" and schedule the run every morning.
- You can paste a search link from jobs.ch into
startUrlsinstead of filling in the form. - Several cantons, regions or fields in one search are combined, so you get postings from any of them.
💰 Pricing
Pricing is pay per event, with no subscriptions or monthly fees.
- Job posting: charged for each posting saved to your dataset.
- Job details: charged for each posting whose full details were fetched, only when
includeDetailsis on. Postings whose details could not be loaded are not charged for this event.
Runs that return nothing cost nothing. Paid plans get lower rates at higher plan levels. You can set a maximum cost per run, and the Actor stops cleanly when it is reached. Free plan runs are limited to 25 postings per run, 3 runs per day, and a short wait between runs.
⭐ Enjoying Jobs.ch Scraper?
|
⭐ ⭐ ⭐ ⭐ ⭐ Saved your team hours of copying Swiss job ads into a spreadsheet? A 5-star rating takes 10 seconds and helps other recruiters and job board owners find it. Your feedback also tells us what to build next. |
| ★ Rate this Actor on Apify |
❓ FAQ
Does it need a login or an account on jobs.ch?
No. It collects the public postings that anyone can see on jobs.ch. You never enter a password, key or cookie.
Can I scrape jobs.ch for one canton only?
Yes. Choose one or more cantons, or type a city or postal code, and only postings from those places are returned.
Wie kann ich Stellenangebote von jobs.ch exportieren?
Run the Actor with your keywords and filters, then download the dataset as Excel, CSV or JSON. You can also schedule the run and send the results to Google Sheets or your own tools.
Does it show the salary?
Many Swiss postings state no salary. Where the site shows its own yearly salary estimate in CHF, the Actor returns it with the flag salaryIsEstimate. It is never an employer-stated figure, and it is left out when the site shows none.
How do I only get new postings?
Enter a monitor name and schedule the run. The first run remembers what it saw. Each later run with the same name and searches returns only postings that are new since then.
How fresh is the data?
Every run reads the live site, so you see what is online at that moment. Use the "Posted within" filter and "Newest first" for the freshest results.
Is there a radius search around a city?
The site matches places by name and postal code, so there is no distance radius. Combine several cities, postal codes or job regions to cover a commuter area.
Does it find every posting on the site?
Broad searches can match thousands of postings, and the site only lists a limited number per search. Add filters such as canton, field or "Posted within" and run several searches to cover everything.
🔗 Other actors
- Carmarket.ch Scraper: Swiss Dealer Cars with Real Search Filters ↗ - Swiss dealer cars with real search filters, a good match if you also track the Swiss market.
- Canada Job Bank Scraper: Jobs, LMIA, NOC Codes & Salary Monitor ↗ - Canadian job postings with salary bands and a monitor for new roles.
- EURAXESS Scraper: PhD, Postdoc and Research Jobs Across Europe ↗ - Research positions across Europe, including Switzerland.
- Eurofirms Portugal Jobs Scraper: Ofertas de Emprego Change Feed ↗ - A change feed of job offers in Portugal.