Switzerland Jobs Scraper (Listings, Company, Canton, Salary)
Pricing
from $6.80 / 1,000 results
Switzerland Jobs Scraper (Listings, Company, Canton, Salary)
Scrape Swiss job listings with title, hiring company, city and canton, workload percentage, employment type, profession category, posted date, description snippet and direct job and application URLs. Search by keyword and location. Export to JSON, CSV or Excel.
Pricing
from $6.80 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Switzerland Jobs Scraper (Listings, Company, Canton, Salary)
Here is one real result, with every field the actor returns:
{"title": "Software Engineer","companyName": "staedler automation AG","place": "Henau","canton": "SG","postalCode": "9247","countryCode": "CH","salary": null,"employmentType": "Vollzeit / Teilzeit","workloadMin": 80,"workloadMax": 100,"category": "Software Engineer","profession": "Software Engineer","publicationDate": "2026-07-20T14:19:53+02:00","publicationEndDate": "2026-08-20","descriptionSnippet": "Staedler Automation AG entwickelt intelligente Lösungen für industrielle Automatisierung. Von Steuerungen über Intralogistik bis hin zu Sondermaschinen mit Robotik bieten wir modernste Technik aus einer Hand. [trimmed]","jobUrl": "https://www.jobs.ch/en/vacancies/detail/3282f519-9c33-4091-9026-a24a4155efc8/","applicationUrl": "https://jobs.dualoo.com/link/a0802411-f1d1-46ed-a1a7-df201a1a76c8/apply?lang=DE","applicationMethod": "application_url","companyProfileUrl": "https://www.jobs.ch/en/companies/8fc2c1e2-5196-447c-8a99-6d28a7ca8405-staedler-automation-ag/","street": "Looäcker 4","languageSkills": [{ "language": "de", "level": 2 }],"workExperience": null,"benefits": null,"contactPerson": null,"contacts": [{ "firstName": "Melanie ", "lastName": "Büchi", "phone": "+41 71 932 53 89" }],"companyLogo": "https://media.jobs.ch/media/26b17bad-a65e-428c-bc49-d68c84bf726f","latitude": 47.45526,"longitude": 9.11326,"jobId": "3282f519-9c33-4091-9026-a24a4155efc8","searchQuery": "software engineer","searchLocation": null,"source": "Switzerland Jobs","observedAt": "2026-08-10T14:29:13.445Z","error": null}
Note: the
descriptionSnippetvalue is trimmed to its opening sentences for readability (the real field returns a longer snippet). Every value shown is exactly as returned, including the trailing space in the contactfirstNameas it appears in the source.
The most complete Switzerland jobs scraper available. It returns every field a Swiss job listing exposes, including company, canton, postal code, workload range, application URL, geocoordinates, and a public contact person with phone when published, and gives you keyword and location inputs plus an optional contact-enrichment add-on to target exactly the vacancies you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor runs each keyword you pass as a separate search on the Swiss jobs listing, optionally combined with each location, paginates the results, and writes one normalized record per job to the run's dataset. Each record carries the company, canton, postal code, workload range, publication and expiry dates, application URL and method, geocoordinates, and a public contact person with phone when the listing exposes one. Missing source values are returned as null.
Data covers public job listings in Switzerland. Leave searchQueries empty to collect the newest vacancies across all fields.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 software-engineer jobs across Switzerland.
{"searchQueries": ["software engineer"],"maxJobs": 10}
Add locations (for example Zurich, Geneva, Bern) to filter by city or canton; each location is combined with every keyword. All inputs are optional.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
searchQueries | string[] | no | ["software engineer"] | One or more job keywords or titles (for example software engineer, Pflegefachfrau, sales). Each keyword runs its own search. Empty collects the newest vacancies across all fields. |
locations | string[] | no | (empty) | One or more Swiss cities, cantons, or regions to filter by (for example Zurich, Geneva, Bern). Each location is combined with every keyword. Empty searches all of Switzerland. |
maxJobs | integer | no | 10 | Maximum number of job listings to collect across the whole run. Range 1 to 1000000. |
enrichContacts | boolean | no | false | Optional paid add-on. For each result without an email, attempt to find a public business contact email and a contact person's name. Billed per attempt, plus an extra charge only when an email is found. |
enrichContactsMax | integer | no | 50 | Cap how many results the add-on tries to enrich. Free Apify accounts are capped at 3. |
Output reference
One dataset item per job. Types: string, integer, number, object[], or null when the source value is absent. Fields marked (enrich) require the contact add-on.
| Field | Type | Description |
|---|---|---|
title | string | Job title. |
companyName | string | Employer name. |
place | string | City or municipality. |
canton | string | Canton code. |
postalCode | string | Postal code. |
countryCode | string | Country code (always CH). |
salary | string | Salary text when published, else null. |
employmentType | string | Employment type (for example Vollzeit / Teilzeit). |
workloadMin | integer | Minimum workload percentage. |
workloadMax | integer | Maximum workload percentage. |
category | string | Job category. |
profession | string | Profession label. |
publicationDate | string | ISO timestamp the listing was published. |
publicationEndDate | string | Date the listing expires (YYYY-MM-DD), or null. |
descriptionSnippet | string | Snippet of the job description. |
jobUrl | string | Public listing URL. |
applicationUrl | string | Direct application URL, or null. |
applicationMethod | string | How to apply (for example application_url). |
companyProfileUrl | string | Company profile URL, or null. |
street | string | Street address, or null. |
languageSkills | object[] | Required languages, each {language, level}. |
workExperience | string | Required experience when published, else null. |
benefits | string[] | Listed benefits when published, else null. |
contactPerson | string | Named contact when published as a single field, else null. |
contacts | object[] | Public contacts, each with name and phone when the listing exposes one. |
companyLogo | string | Company logo image URL, or null. |
latitude | number | Job location latitude. |
longitude | number | Job location longitude. |
jobId | string | Listing ID. |
searchQuery | string | The keyword that produced this job. |
searchLocation | string | The location filter that produced this job, or null. |
source | string | Data source. Always Switzerland Jobs. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
enrichedEmail | string | Public business contact email found by the add-on (enrich), or null. |
enrichedContactName | string | Contact person's name found by the add-on (enrich), or null. |
enrichedJobTitle | string | Contact person's job title (enrich), or null. |
enrichedEmailStatus | string | Verification status of the found email (enrich), or null. |
enrichedSource | string | Where the contact was found (enrich), or null. |
enrichedConfidence | number | Confidence score for the found contact (enrich), or null. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"searchQueries": ["software engineer"], "maxJobs": 10}):
{"title": "Software Engineer","companyName": "staedler automation AG","place": "Henau","canton": "SG","postalCode": "9247","countryCode": "CH","employmentType": "Vollzeit / Teilzeit","workloadMin": 80,"workloadMax": 100,"publicationDate": "2026-07-20T14:19:53+02:00","publicationEndDate": "2026-08-20","jobUrl": "https://www.jobs.ch/en/vacancies/detail/3282f519-9c33-4091-9026-a24a4155efc8/","applicationUrl": "https://jobs.dualoo.com/link/a0802411-f1d1-46ed-a1a7-df201a1a76c8/apply?lang=DE","street": "Looäcker 4","languageSkills": [ { "language": "de", "level": 2 } ],"contacts": [ { "firstName": "Melanie ", "lastName": "Büchi", "phone": "+41 71 932 53 89" } ],"latitude": 47.45526,"longitude": 9.11326,"jobId": "3282f519-9c33-4091-9026-a24a4155efc8","searchQuery": "software engineer","source": "Switzerland Jobs","observedAt": "2026-08-10T14:29:13.445Z"}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~switzerland-jobs-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["software engineer"],"locations":["Zurich"],"maxJobs":25}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~switzerland-jobs-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchQueries":["Pflegefachfrau","sales"],"maxJobs":100}'
Apify CLI:
apify call scrapers_lat/switzerland-jobs-scraper \--input '{"searchQueries":["data engineer"],"locations":["Geneva"]}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per job returned (
resultevent). See the pricing tab for the current per-result price. - Contact enrichment add-on (optional, off by default). When
enrichContactsis on, each attempt charges acontact-search-attemptevent, plus acontact-email-foundevent only when an email is found.enrichContactsMaxcaps how many results are attempted (free accounts capped at 3). - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results and add-on events. - Free Apify plans are capped at 10 jobs per run. Upgrade for higher
maxJobs.
FAQ and troubleshooting
A run returned 0 records. Why?
Your keyword or location matched no current vacancies. Broaden the keyword or remove the locations filter. Zero-result runs are not charged.
How do I filter by city or canton?
Add entries to locations (for example Zurich, Geneva, Bern). Each location is combined with every keyword.
How do I get the newest jobs regardless of role?
Leave searchQueries empty. The actor collects the newest vacancies across all fields.
Why is salary or contactPerson null?
Not every listing publishes a salary or a named contact. Missing source values are returned as null, never invented. When a contact is exposed it appears in contacts.
Is this an official jobs.ch tool? No. This actor is independent and has no affiliation with jobs.ch or any Swiss job board. It reads only data that is publicly available on the listings.
Related scrapers
- Switzerland Companies Scraper: Swiss commercial registry records.
- SuccessFactors Jobs Scraper: SAP SuccessFactors company careers.
- Taiwan 104 Jobs Scraper: Taiwan 104.com.tw job listings.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with jobs.ch. Accesses only publicly available job listing data.
