Switzerland Jobs Scraper (Listings, Company, Canton, Salary) avatar

Switzerland Jobs Scraper (Listings, Company, Canton, Salary)

Pricing

from $6.80 / 1,000 results

Go to Apify Store
Switzerland Jobs Scraper (Listings, Company, Canton, Salary)

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

11 days ago

Last modified

Share

Switzerland Jobs Scraper (Listings, Company, Canton, Salary)

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 descriptionSnippet value 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 contact firstName as 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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
searchQueriesstring[]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.
locationsstring[]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.
maxJobsintegerno10Maximum number of job listings to collect across the whole run. Range 1 to 1000000.
enrichContactsbooleannofalseOptional 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.
enrichContactsMaxintegerno50Cap 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.

FieldTypeDescription
titlestringJob title.
companyNamestringEmployer name.
placestringCity or municipality.
cantonstringCanton code.
postalCodestringPostal code.
countryCodestringCountry code (always CH).
salarystringSalary text when published, else null.
employmentTypestringEmployment type (for example Vollzeit / Teilzeit).
workloadMinintegerMinimum workload percentage.
workloadMaxintegerMaximum workload percentage.
categorystringJob category.
professionstringProfession label.
publicationDatestringISO timestamp the listing was published.
publicationEndDatestringDate the listing expires (YYYY-MM-DD), or null.
descriptionSnippetstringSnippet of the job description.
jobUrlstringPublic listing URL.
applicationUrlstringDirect application URL, or null.
applicationMethodstringHow to apply (for example application_url).
companyProfileUrlstringCompany profile URL, or null.
streetstringStreet address, or null.
languageSkillsobject[]Required languages, each {language, level}.
workExperiencestringRequired experience when published, else null.
benefitsstring[]Listed benefits when published, else null.
contactPersonstringNamed contact when published as a single field, else null.
contactsobject[]Public contacts, each with name and phone when the listing exposes one.
companyLogostringCompany logo image URL, or null.
latitudenumberJob location latitude.
longitudenumberJob location longitude.
jobIdstringListing ID.
searchQuerystringThe keyword that produced this job.
searchLocationstringThe location filter that produced this job, or null.
sourcestringData source. Always Switzerland Jobs.
observedAtstringISO 8601 timestamp of when the record was collected.
enrichedEmailstringPublic business contact email found by the add-on (enrich), or null.
enrichedContactNamestringContact person's name found by the add-on (enrich), or null.
enrichedJobTitlestringContact person's job title (enrich), or null.
enrichedEmailStatusstringVerification status of the found email (enrich), or null.
enrichedSourcestringWhere the contact was found (enrich), or null.
enrichedConfidencenumberConfidence score for the found contact (enrich), or null.
errorstringnull 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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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 (result event). See the pricing tab for the current per-result price.
  • Contact enrichment add-on (optional, off by default). When enrichContacts is on, each attempt charges a contact-search-attempt event, plus a contact-email-found event only when an email is found. enrichContactsMax caps 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 error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on 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.

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.