Jobs.ch Swiss Job Listings by Region & Industry
Scrape job listings from jobs.ch, Switzerland's largest job board. Search by keyword or browse by canton, industry, occupational field, or contract type, with filters for workload and seniority. Returns title, company, location, and job URL.
Open in Apify Store$0.99 / 1K on Free
Short answer
Jobs.ch Swiss Job Listings by Region & Industry is an Apify Store Actor that returns 9 published output fields, including title, companyName, location, workloadText. It lists $0.99 per 1,000 results on the Free plan (pay per event), $0.49 on the Business plan. It takes 26 input settings; one is required (mode). Last updated Nov 2, 2026.
From the public Store listing and published build schema, synced 2026-11-12.What it returns
9 fields from the published dataset schema. Export as JSON, CSV or Excel, or read the dataset through the Apify API.
titlecompanyNamelocationworkloadTextcontractTypesalaryMinsalaryMaxpostedDatejobUrl
Input
| Setting | Type | Required | Default | What it does |
|---|---|---|---|---|
| mode | string | Yes | search | What to fetch. `search` runs classic keyword search (or semantic with `searchMode=semantic`). `browse` uses filters only. `byCompany` resolves company names/IDs. `byUrls` accepts jobs.ch search or job-detail URLs. The `byRegion`/`byIndustry`/`byEmploymentType`/`byCategory` modes are kept for backwar |
| searchMode | string | No | classic | `classic` uses jobs.ch's exact keyword API with all filters and sort. `semantic` uses the site's fuzzy, cross-language search page (filters still apply; sort is relevance-only). |
| searchQueries | array | No | [] | One or more free-text keywords (mode=search). Multiple queries are run in order and deduplicated by job ID. Leave empty to browse all jobs matching the filters. |
| companyNames | array | No | [] | Company names to resolve against jobs.ch's company directory (mode=byCompany). Exact names are preferred; unmatched names fall back to a keyword search filtered by company name. |
| companyIds | array | No | [] | jobs.ch company IDs (mode=byCompany). IDs are the most reliable company filter and take priority over names. |
| startUrls | array | No | [] | jobs.ch search URLs or job-detail URLs (mode=byUrls). Search URLs carry their own filters; invalid or non-jobs.ch URLs are skipped. |
| regions | array | No | [] | Filter by one or more Swiss canton/language-regions (multi-value OR). Allowed IDs: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25. Required for mode=byRegion; optional elsewhere. |
| industries | array | No | [] | Filter by one or more employer industries (multi-value OR). Allowed IDs: 1-24. Required for mode=byIndustry; optional elsewhere. |
| categories | array | No | [] | Filter by one or more occupational fields / job functions (multi-value OR). Allowed IDs: 97-261 (165 jobs.ch categories; labels in README). Required for mode=byCategory. |
| employmentTypes | array | No | [] | Filter by one or more contract types (multi-value OR). Allowed IDs: 1 Temporary, 2 Freelance, 3 Internship, 4 Supplementary income, 5 Permanent position, 6 Apprenticeship. Required for mode=byEmploymentType. |
Show the other 16 settings
| Setting | Type | Required | Default | What it does |
|---|---|---|---|---|
| positions | array | No | [] | Filter by one or more seniority levels (multi-value OR). Allowed IDs: 1 Executive position, 2 Specialist, 3 Employee. |
| languageSkills | array | No | [] | Filter by one or more required working languages (multi-value OR). Allowed values: de, en, fr, it. |
| companySegments | array | No | [] | Filter by employer segment (multi-value OR). Allowed values: gu (large company), kmu (SME), pdl (personnel-service provider). |
| location | string | No | – | Optional free-text city/place refinement (e.g. Zürich, Geneva, Basel). |
| employmentGradeMin | integer | No | 0 | Lower bound of the workload range in percent. |
| employmentGradeMax | integer | No | 100 | Upper bound of the workload range in percent. |
| publishedSince | string | No | – | Only jobs first published within this time window. |
| sortBy | string | No | relevance | Classic search sort order: relevance or newest-first. Semantic search always uses relevance. |
| includeDetails | boolean | No | false | Fetch each job's detail page for full description, apply URL/method, salary estimate, contacts, languages, categories, regions, deadline, benefits and company profile/ratings. Adds one request per job plus one cached request per company. |
| descriptionFormat | string | No | text | Format of the enriched description: plain text, original HTML, or both. |
| maxDescriptionLength | integer | No | 0 | Truncate descriptions to this many characters (0 = no truncation). |
| maxItems | integer | No | 20 | Maximum number of jobs to return. jobs.ch serves 20 rows per page and caps each search at 2,000 rows. |
| maxPages | integer | No | 100 | Maximum result pages to request per query/filter combination (jobs.ch caps searches at 100 pages). |
| locale | string | No | en | jobs.ch site language for URLs and translated labels. |
| incrementalMode | boolean | No | false | When enabled, only new or changed jobs are pushed. State is stored under `stateKey` in the key-value store. |
| stateKey | string | No | – | Key-value store key for incremental state (default `jobs_ch_incremental_state`). Only used when `incrementalMode` is true. |
Example input
Built from the input form's published example values and defaults.
{
"mode": "search",
"searchMode": "classic",
"searchQueries": [
"software engineer"
],
"companyNames": [],
"companyIds": [],
"startUrls": [],
"regions": [],
"industries": [],
"categories": [],
"employmentTypes": [],
"positions": [],
"languageSkills": [],
"companySegments": [],
"employmentGradeMin": 0,
"employmentGradeMax": 100,
"sortBy": "relevance",
"includeDetails": false,
"descriptionFormat": "text",
"maxDescriptionLength": 0,
"maxItems": 3,
"maxPages": 1,
"locale": "en",
"incrementalMode": false
} Run it from code or an AI agent
The same run through the Apify API, with the example input. You need an Apify API token; the run is billed to your account at the Store price.
Python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "search",
"searchMode": "classic",
"searchQueries": [
"software engineer"
],
"companyNames": [],
"companyIds": [],
"startUrls": [],
"regions": [],
"industries": [],
"categories": [],
"employmentTypes": [],
"positions": [],
"languageSkills": [],
"companySegments": [],
"employmentGradeMin": 0,
"employmentGradeMax": 100,
"sortBy": "relevance",
"includeDetails": False,
"descriptionFormat": "text",
"maxDescriptionLength": 0,
"maxItems": 3,
"maxPages": 1,
"locale": "en",
"incrementalMode": False
}
run = client.actor("vexaloom-labs/jobs-ch-swiss-job-listings-by-region-and-industry").call(run_input=run_input)
if run is None:
raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item) pip install apify-client
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
"mode": "search",
"searchMode": "classic",
"searchQueries": [
"software engineer"
],
"companyNames": [],
"companyIds": [],
"startUrls": [],
"regions": [],
"industries": [],
"categories": [],
"employmentTypes": [],
"positions": [],
"languageSkills": [],
"companySegments": [],
"employmentGradeMin": 0,
"employmentGradeMax": 100,
"sortBy": "relevance",
"includeDetails": false,
"descriptionFormat": "text",
"maxDescriptionLength": 0,
"maxItems": 3,
"maxPages": 1,
"locale": "en",
"incrementalMode": false
};
const run = await client.actor("vexaloom-labs/jobs-ch-swiss-job-listings-by-region-and-industry").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items); npm install apify-client
cURL
curl -X POST "https://api.apify.com/v2/actors/vexaloom-labs~jobs-ch-swiss-job-listings-by-region-and-industry/run-sync-get-dataset-items" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"mode":"search","searchMode":"classic","searchQueries":["software engineer"],"companyNames":[],"companyIds":[],"startUrls":[],"regions":[],"industries":[],"categories":[],"employmentTypes":[],"positions":[],"languageSkills":[],"companySegments":[],"employmentGradeMin":0,"employmentGradeMax":100,"sortBy":"relevance","includeDetails":false,"descriptionFormat":"text","maxDescriptionLength":0,"maxItems":3,"maxPages":1,"locale":"en","incrementalMode":false}' Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).
MCP (AI agents)
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=vexaloom-labs/jobs-ch-swiss-job-listings-by-region-and-industry",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
} Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.
What a run costs
The result rate falls on higher Apify plans. Each figure is the published per-result rate times the number of results.
| Apify plan | Per 1,000 | 10,000 results | 100,000 results |
|---|---|---|---|
| Free plan | $0.99 | $9.90 | $99 |
| Starter plan | $0.82 | $8.20 | $82 |
| Scale plan | $0.66 | $6.60 | $66 |
| Business plan | $0.49 | $4.90 | $49 |
- Every run also has a start event, charged per GB of memory (minimum one): $0.10 on Free, $0.03 on Business. At its default memory of 4 GB a run starts at $0.40 on Free. Fewer, larger runs keep this small.
- The Free plan includes $5 of monthly usage (Apify pricing, checked 2026-11-11); at the Free rate that covers at most about 5,050 results, less start events and platform usage.
- Worked example: 10,000 results in one run on the Free plan cost $10.30 ($9.90 for results + $0.40 start), plus Apify platform usage (compute), billed separately by Apify.
- Pay per event. Platform usage (compute) is billed by Apify on top of the event prices. Compare other tools in the cost estimator.
What people use it for
- search Swiss job listings
- filter roles by region
Similar Actors
JobsDB Hong Kong & Thailand Job Listings Extractor
Pull job listings from JobsDB's Hong Kong and Thailand markets by keyword, category, location, or company, with salary, work-type,…
Czech Jobs.cz Postings, Salary & Brigady Finder
Search Jobs.cz Czech job postings and part-time brigady gigs by keyword, city, or profession, with salary, employment type, education, and…
Glassdoor Job Listings Salary & Rating Scraper
Pull Glassdoor job listings by keyword and location or from a single company's jobs page, with salary estimates, employer ratings, Easy Apply…
GulfTalent Job Listings Across 16 Middle East Markets
Search GulfTalent by keyword, category, industry, job type or nationality preference, or browse one employer's careers page, and get salary,…
Handshake Campus Jobs & Employer Showcase Extractor
Reads Handshake's public job explore page for campus internships and entry-level roles, plus the public employer showcase, returning title,…
HelloWork France Job Listings & Salary Filter Scraper
Search HelloWork.com by keyword, region, city, sector or job function, and filter by contract type, remote-work frequency, experience level,…
Questions people ask
How much does Jobs.ch Swiss Job Listings by Region & Industry cost?
The published result rate depends on your Apify plan: $0.99 per 1,000 on Free, $0.82 per 1,000 on Starter, $0.66 per 1,000 on Scale, $0.49 per 1,000 on Business. So 10,000 results cost about $9.90 on the Free plan and $4.90 on Business, plus a start fee of $0.10 per run per GB of memory on Free. Platform usage is billed separately.
What data does Jobs.ch Swiss Job Listings by Region & Industry return?
Its published output schema lists 9 fields: title, companyName, location, workloadText, contractType, salaryMin, salaryMax, postedDate, jobUrl. A listed field is not guaranteed to be filled in every row.
What input does Jobs.ch Swiss Job Listings by Region & Industry need?
Required: mode. Optional settings include searchMode, searchQueries, companyNames, companyIds, startUrls, regions.
How do I run Jobs.ch Swiss Job Listings by Region & Industry from Python or the API?
Use the Apify API client: in Python, ApifyClient(token).actor("vexaloom-labs/jobs-ch-swiss-job-listings-by-region-and-industry").call(run_input=...), then read the run's default dataset (run.default_dataset_id); in JavaScript the same call is client.actor("vexaloom-labs/jobs-ch-swiss-job-listings-by-region-and-industry").call(input). Without a client, POST the input JSON to https://api.apify.com/v2/actors/vexaloom-labs~jobs-ch-swiss-job-listings-by-region-and-industry/run-sync-get-dataset-items with your API token. Ready-to-paste code with the example input is on this page.
Sources
- Jobs.ch Swiss Job Listings by Region & Industry on Apify Store
- Published build with input and output schema (JSON)
Cite this page
Scraper Finder. "Jobs.ch Swiss Job Listings by Region & Industry." https://scraperfinder.com/catalogue/jobs-ch-swiss-job-listings-by-region-and-industry/ (data checked 2026-11-12).
Run Jobs.ch Swiss Job Listings by Region & Industry
$0.99 per 1,000 results. Paste the example input above, set your target query, then export the dataset.