Jobs.ch Scraper: Swiss Job Postings, Workload & Salary Estimate avatar

Jobs.ch Scraper: Swiss Job Postings, Workload & Salary Estimate

Pricing

from $1.05 / 1,000 job postings

Go to Apify Store
Jobs.ch Scraper: Swiss Job Postings, Workload & Salary Estimate

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

GetAScraper

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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.

FieldTypeRequiredDescription
searchTermsarray of stringsNoJob 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.
startUrlsarray of URLsNoSearch links copied from jobs.ch. Their keyword and filters are used as they are, in addition to the keywords above.
cantonsarray of enumsNoOne or more of the 26 Swiss cantons. A posting in any chosen canton matches.
locationsarray of stringsNoCities, towns or postal codes such as Zürich, Lausanne or 8001. A posting in any of them matches.
regionsarray of enumsNoThe site's own job regions, for example Region of Basel or Ticino. Handy for commuter areas that cross canton borders.
categoriesarray of enumsNoBroad occupational fields such as Information Technology, Medicine or Construction.
employmentTypesarray of enumsNoPermanent, temporary, freelance, internship, apprenticeship or supplementary income.
positionLevelsarray of enumsNoExecutive position, specialist or employee.
workloadMinintegerNoLowest 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.
workloadMaxintegerNoHighest 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.
languageSkillsarray of enumsNoKeep postings that ask for German, French, English or Italian. A posting asking for any chosen language matches.
homeOfficeOnlybooleanNoKeep only postings whose employer lists working from home as a benefit.
postedWithinenumNoKeep only postings published in the last 24 hours, 3, 7, 14 or 30 days. Empty means any time.
sortByenumNoNewest first (best for monitoring) or best match.
languageenumNoLanguage of the jobs.ch interface used for links. Posting texts keep the language the employer wrote. Labels in the output are always English.
includeDetailsbooleanNoOpen 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.
descriptionFormatenumNoPlain text, HTML or both. Only used when full details are on.
monitorNamestringNoA 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.
maxItemsintegerNoTotal number of postings to return across all keywords. With several keywords the budget is shared evenly. Defaults to 20.
proxyConfigurationobjectNoConnection 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.

FieldTypeDescription
idstringUnique posting ID.
urlstringLink to the posting on jobs.ch in the language you chose.
titlestringJob title as published.
companyNamestringHiring company.
companyIdstringCompany ID on jobs.ch.
companyUrlstringCompany page on jobs.ch.
companyLogostringLogo image link.
locationstringPlace of work as shown on the posting.
postalCodestringPostal code of the workplace.
cantonstringTwo-letter canton code.
streetstringStreet address of the workplace.
countrystringCountry code of the workplace.
latitude, longitudenumberCoordinates of the workplace.
regionsarray of stringsJob regions the posting belongs to.
workloadMin, workloadMaxintegerWorkload range in percent.
employmentTypesarray of stringsContract types such as Permanent position or Freelance.
positionLevelstringExecutive position, Specialist or Employee.
postedAtstringPublication date and time.
firstPostedAtstringFirst publication date and time.
homeOfficeOfferedbooleanTrue when the employer lists working from home.
benefitsarray of stringsEmployer benefits such as company restaurant or pension fund contribution.
easyApplybooleanTrue when the posting can be applied to in a few taps.
newSinceLastRunbooleanMonitor mode only: true for postings you have not received before.
searchTermstringThe keyword that found the posting.
scrapedAtstringWhen the row was collected.
description, descriptionHtmlstringFull description in plain text or HTML (details).
applyUrlstringDirect application link when the employer uses its own form (details).
applyMethodstringExternal site or jobs.ch form (details).
skillsarray of stringsSkills listed by the employer (details).
languageRequirementsarray of objectsRequired languages with level, for example German, Fluent (details).
categoriesarray of stringsOccupational fields and subfields (details).
salaryMin, salaryMaxintegerSalary estimate range (details).
salaryCurrency, salaryPeriodstringCurrency and period of the estimate, for example CHF and year (details).
salaryIsEstimatebooleanAlways true. The figure is the site's estimate for the role, not an employer-stated salary (details).
applicationDeadlinestringLast day the posting is online (details).
startDatestringPlanned start date (details).
workHoursstringWeekly hours (details).
contactsarray of objectsContact person named on the posting (details).
companyWebsitestringCompany website (details).
companySizestringEmployee range (details).
companyOpenJobsintegerOpen positions at the company (details).
companyRating, companyReviewCountnumberEmployee rating and number of reviews, when reviews exist (details).
companyDescriptionstringCompany introduction (details).
companySocialLinksarray of objectsCompany 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 includeDetails off 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 startUrls instead 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 includeDetails is 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