Jobs.ch Scraper - Swiss Job Board Data Extraction
Pricing
from $2.49 / 1,000 job search results
Jobs.ch Scraper - Swiss Job Board Data Extraction
Scrapes job listings from jobs.ch, Switzerland's largest job board powered by JobCloud.
Jobs.ch Scraper - Swiss Job Board Data Extraction
Pricing
from $2.49 / 1,000 job search results
Scrapes job listings from jobs.ch, Switzerland's largest job board powered by JobCloud.
You can access the Jobs.ch Scraper - Swiss Job Board Data Extraction programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in Integrations settings in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "1.0", "x-build-id": "hevuD2ooTGT6vHjBC" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/santamaria-automations~jobs-ch-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-santamaria-automations-jobs-ch-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK" } } } }, "/acts/santamaria-automations~jobs-ch-scraper/runs": { "post": { "operationId": "runs-sync-santamaria-automations-jobs-ch-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor and returns information about the initiated run in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/runsResponseSchema" } } } } } } }, "/acts/santamaria-automations~jobs-ch-scraper/run-sync": { "post": { "operationId": "run-sync-santamaria-automations-jobs-ch-scraper", "x-openai-isConsequential": false, "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.", "tags": [ "Run Actor" ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/inputSchema" } } } }, "parameters": [ { "name": "token", "in": "query", "required": true, "schema": { "type": "string" }, "description": "Enter your Apify token here" } ], "responses": { "200": { "description": "OK" } } } } }, "components": { "schemas": { "inputSchema": { "type": "object", "properties": { "startUrls": { "title": "Search URLs", "type": "array", "description": "Paste one or more jobs.ch search URLs with pre-applied filters. The actor extracts all filters (keywords, locations, cantons, categories, industries, etc.) directly from the URL. This is the easiest way to scrape — just configure your search on jobs.ch and copy the URL.", "items": { "type": "string" } }, "directUrls": { "title": "Direct Job URLs", "type": "array", "description": "List of job detail page URLs to scrape directly (skips search). Use this for 'still alive' checks or re-scraping specific jobs.", "items": { "type": "string" } }, "companyNames": { "title": "Company Names", "type": "array", "description": "Search for specific companies and return all their job listings. Enter exact company names. The actor searches for each company, finds their ID, then retrieves all their active jobs. Useful for monitoring specific companies' hiring activity.", "items": { "type": "string" } }, "searchQueries": { "title": "Search Keywords", "type": "array", "description": "One or more search keywords. Each keyword runs as a separate search. Results are deduplicated across queries.", "items": { "type": "string" } }, "searchQuery": { "title": "Search Query (single, legacy)", "type": "string", "description": "Single search keyword (backward compatible). Use 'searchQueries' for multiple keywords.", "default": "" }, "locations": { "title": "Locations", "type": "array", "description": "One or more city/region names (e.g., 'Zurich', 'Bern', 'Basel'). Leave empty for all of Switzerland.", "items": { "type": "string" } }, "cantons": { "title": "Cantons", "type": "array", "description": "Filter by one or more Swiss cantons (e.g., 'ZH', 'BE', 'AG'). Select multiple cantons to search across regions. Leave empty for all cantons.", "items": { "type": "string", "enum": [ "ZH", "BE", "LU", "UR", "SZ", "OW", "NW", "GL", "ZG", "FR", "SO", "BS", "BL", "SH", "AR", "AI", "SG", "GR", "AG", "TG", "TI", "VD", "VS", "NE", "GE", "JU" ], "enumTitles": [ "Zurich", "Bern", "Luzern", "Uri", "Schwyz", "Obwalden", "Nidwalden", "Glarus", "Zug", "Fribourg", "Solothurn", "Basel-Stadt", "Basel-Landschaft", "Schaffhausen", "Appenzell Ausserrhoden", "Appenzell Innerrhoden", "St. Gallen", "Graubunden", "Aargau", "Thurgau", "Ticino", "Vaud", "Valais", "Neuchatel", "Geneve", "Jura" ] }, "default": [] }, "language": { "title": "Language", "enum": [ "de", "fr", "en" ], "type": "string", "description": "Search interface language. Note: This sets the UI language but jobs.ch shows listings in all languages.", "default": "de" }, "maxResultsPerQuery": { "title": "Max Results per Query", "minimum": 1, "type": "integer", "description": "Maximum results per search keyword. Each query gets up to this many results (deduplicated).", "default": 100 }, "maxResults": { "title": "Max Total Results", "minimum": 0, "type": "integer", "description": "Total cap across all queries. Set to 0 for unlimited (each query limited by maxResultsPerQuery).", "default": 0 }, "employmentType": { "title": "Employment Type", "enum": [ "", "permanent", "temporary", "freelance" ], "type": "string", "description": "Filter by employment type", "default": "" }, "workloadMin": { "title": "Minimum Workload (%)", "minimum": 0, "maximum": 100, "type": "integer", "description": "Minimum workload/Pensum percentage (e.g., 60 for 60%). Leave empty for no minimum." }, "workloadMax": { "title": "Maximum Workload (%)", "minimum": 0, "maximum": 100, "type": "integer", "description": "Maximum workload/Pensum percentage (e.g., 100 for 100%). Leave empty for no maximum." }, "publicationDate": { "title": "Posted Since", "enum": [ "", "1", "3", "7", "30" ], "type": "string", "description": "Filter jobs by publication date. Only return jobs posted within this time period. Useful for daily scrapes to avoid re-fetching old listings.", "default": "" }, "searchMode": { "title": "Search Mode", "enum": [ "semantic", "classic" ], "type": "string", "description": "Search mode: 'semantic' uses AI-powered search matching the new jobs.ch website (understands synonyms, e.g. 'nodejs' finds 'Node.js' jobs). 'classic' uses exact keyword matching (faster, supports location/canton/filter params).", "default": "semantic" }, "includeJobDetails": { "title": "Include Job Details", "type": "boolean", "description": "Fetch full job descriptions from detail pages (slower but provides complete data including description, requirements, contact info).", "default": true }, "maxConcurrency": { "title": "Max Concurrent Requests", "minimum": 1, "maximum": 50, "type": "integer", "description": "Number of detail pages to fetch in parallel. Higher values = faster but uses more proxy bandwidth. Set to 1 for sequential fetching.", "default": 10 }, "companyFilter": { "title": "Company Filter", "enum": [ "all", "exclude-hr", "only-hr" ], "type": "string", "description": "Filter jobs by company type: 'all' includes all companies, 'exclude-hr' removes HR/recruitment agencies, 'only-hr' shows only HR/recruitment agencies", "default": "all" }, "proxyConfiguration": { "title": "Proxy Configuration", "type": "object", "description": "Apify proxy settings", "default": { "useApifyProxy": true } } } }, "runsResponseSchema": { "type": "object", "properties": { "data": { "type": "object", "properties": { "id": { "type": "string" }, "actId": { "type": "string" }, "userId": { "type": "string" }, "startedAt": { "type": "string", "format": "date-time", "example": "2025-01-08T00:00:00.000Z" }, "finishedAt": { "type": "string", "format": "date-time", "example": "2025-01-08T00:00:00.000Z" }, "status": { "type": "string", "example": "READY" }, "meta": { "type": "object", "properties": { "origin": { "type": "string", "example": "API" }, "userAgent": { "type": "string" } } }, "stats": { "type": "object", "properties": { "inputBodyLen": { "type": "integer", "example": 2000 }, "rebootCount": { "type": "integer", "example": 0 }, "restartCount": { "type": "integer", "example": 0 }, "resurrectCount": { "type": "integer", "example": 0 }, "computeUnits": { "type": "integer", "example": 0 } } }, "options": { "type": "object", "properties": { "build": { "type": "string", "example": "latest" }, "timeoutSecs": { "type": "integer", "example": 300 }, "memoryMbytes": { "type": "integer", "example": 1024 }, "diskMbytes": { "type": "integer", "example": 2048 } } }, "buildId": { "type": "string" }, "defaultKeyValueStoreId": { "type": "string" }, "defaultDatasetId": { "type": "string" }, "defaultRequestQueueId": { "type": "string" }, "buildNumber": { "type": "string", "example": "1.0.0" }, "containerUrl": { "type": "string" }, "usage": { "type": "object", "properties": { "ACTOR_COMPUTE_UNITS": { "type": "integer", "example": 0 }, "DATASET_READS": { "type": "integer", "example": 0 }, "DATASET_WRITES": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_READS": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_WRITES": { "type": "integer", "example": 1 }, "KEY_VALUE_STORE_LISTS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_READS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_WRITES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_INTERNAL_GBYTES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_EXTERNAL_GBYTES": { "type": "integer", "example": 0 }, "PROXY_RESIDENTIAL_TRANSFER_GBYTES": { "type": "integer", "example": 0 }, "PROXY_SERPS": { "type": "integer", "example": 0 } } }, "usageTotalUsd": { "type": "number", "example": 0.00005 }, "usageUsd": { "type": "object", "properties": { "ACTOR_COMPUTE_UNITS": { "type": "integer", "example": 0 }, "DATASET_READS": { "type": "integer", "example": 0 }, "DATASET_WRITES": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_READS": { "type": "integer", "example": 0 }, "KEY_VALUE_STORE_WRITES": { "type": "number", "example": 0.00005 }, "KEY_VALUE_STORE_LISTS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_READS": { "type": "integer", "example": 0 }, "REQUEST_QUEUE_WRITES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_INTERNAL_GBYTES": { "type": "integer", "example": 0 }, "DATA_TRANSFER_EXTERNAL_GBYTES": { "type": "integer", "example": 0 }, "PROXY_RESIDENTIAL_TRANSFER_GBYTES": { "type": "integer", "example": 0 }, "PROXY_SERPS": { "type": "integer", "example": 0 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Jobs.ch Scraper - Swiss Job Board Data Extraction from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: