The NanoScrape Zentraljob Scraper is an Apify actor that extracts job listings from zentraljob.ch. It returns 32 fields per result including title, company, location, salary_min, salary_max, with no API key or monthly subscription required.
Zentraljob.ch (Regional, Switzerland): Central Switzerland regional job portal covering Luzern, Zug, Schwyz, and Uri (source platform). Workload filter and optional LLM contact extraction.
| Field | Type | Example | Group |
|---|---|---|---|
id | string | (populated when data available) | Core |
title | string | (populated when data available) | Core |
source_url | string | (populated when data available) | Core |
source_platform | string | (populated when data available) | Core |
apply_url | string | null | (populated when data available) | Core |
company_url | string | null | (populated when data available) | Core |
company | string | null | (populated when data available) | Company |
location | string | (populated when data available) | Location |
description_snippet | string | null | (populated when data available) | Description |
description_full | string | null | (populated when data available) | Description |
salary_min | number | null | (populated when data available) | Salary |
salary_max | number | null | (populated when data available) | Salary |
salary_currency | string | (populated when data available) | Salary |
salary_period | string | null | (populated when data available) | Salary |
employment_type | string | null | (populated when data available) | Employment |
remote_option | string | null | (populated when data available) | Employment |
requirements | array | (populated when data available) | Requirements |
posted_at | string | null | (populated when data available) | Metadata |
scraped_at | string | (populated when data available) | Metadata |
canton | string | null | (populated when data available) | Other |
job_status | string | null | (populated when data available) | Other |
search_query | string | null | (populated when data available) | Other |
workload_min | number | null | (populated when data available) | Other |
workload_max | number | null | (populated when data available) | Other |
expires_at | string | null | (populated when data available) | Other |
contact_salutation | string | null | (populated when data available) | Other |
contact_firstname | string | null | (populated when data available) | Other |
contact_lastname | string | null | (populated when data available) | Other |
contact_email | string | null | (populated when data available) | Other |
contact_phone | string | null | (populated when data available) | Other |
contact_raw | string | null | (populated when data available) | Other |
apply_email | string | null | (populated when data available) | Other |
{
"includeJobDetails": true,
"maxResults": 30,
"maxResultsPerQuery": 10,
"searchQueries": [
"Informatiker",
"Pflege",
"Buchhaltung"
]
}Recruitment agencies covering Central Switzerland use this actor to monitor the Luzern, Zug, and Schwyz job market, which is not well covered by national Swiss boards. The API-based approach and daily sort gives them first-mover advantage on fresh listings.
HR teams at Central Swiss employers use the companyFilter: exclude-hr option to benchmark only direct-employer postings in their region, filtering out recruitment agency noise.
Workload-flexible hiring managers use the Pensum filter to identify and compare part-time roles (40-80%) that are common in the Swiss market but rarely surfaced by generic scrapers without dedicated fields.
Click Open on Apify above to run zentraljob-ch-scraper in your browser - no code, no install. In the Apify console you get:
To run this actor from your own code you need an Apify API token. Get one in about a minute:
Free tier: Apify credits your account with $5 of platform usage every month, no credit card required. Enough to test any actor meaningfully - at $0.001 per result on typical scrapers, that is roughly 5,000 results for free every month.
Run this actor from any language via the Apify REST API. Replace YOUR_TOKEN with your API token and adapt the input JSON to your needs.
curl -X POST "https://api.apify.com/v2/acts/santamaria-automations~zentraljob-ch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'// npm install apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('santamaria-automations/zentraljob-ch-scraper').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('santamaria-automations/zentraljob-ch-scraper').call(run_input={})
items = list(client.dataset(run['defaultDatasetId']).iterate_items())
print(items)// dotnet add package Apify.Client
using Apify.Client;
var client = new ApifyClient("YOUR_TOKEN");
var run = await client.Actor("santamaria-automations/zentraljob-ch-scraper").CallAsync(new { });
var items = await client.Dataset(run.DefaultDatasetId).ListItemsAsync();// Maven: com.apify:apify-client
import com.apify.client.ApifyClient;
ApifyClient client = new ApifyClient("YOUR_TOKEN");
ActorRun run = client.actor("santamaria-automations/zentraljob-ch-scraper").call(Map.of());
List<Map<String,Object>> items = client.dataset(run.getDefaultDatasetId()).listItems();This actor is available on the Apify MCP server, so you can drive it from any MCP-compatible AI client - Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or a custom agent - without writing any code.
https://mcp.apify.com?tools=santamaria-automations/zentraljob-ch-scraperExample prompt once connected:
"Use <code>zentraljob-ch-scraper</code> to run a scrape on my target list and give me the results as a table."
Clients that support dynamic tool discovery (Claude.ai, VS Code) receive the full input schema automatically via add-actor.
Trigger this actor from your favorite automation tool. Every platform below can call the Apify API in a few clicks - no code required.
@apify/n8n-nodes-apify).santamaria-automations/zentraljob-ch-scraper.https://api.apify.com/v2/acts/santamaria-automations~zentraljob-ch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN.application/json.https://api.apify.com/v2/acts/santamaria-automations~zentraljob-ch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN, method POST, body raw JSON.https://api.apify.com/v2/acts/santamaria-automations~zentraljob-ch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN.steps.http.$return_value in subsequent steps.https://api.apify.com/v2/acts/santamaria-automations~zentraljob-ch-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN, body type JSON.32 fields per result. Full field catalog is listed in the 'What you can scrape' table above — includes core identifiers, descriptive text, dates, and any category-specific data.
Scraping publicly available data is generally permitted in most jurisdictions, but GDPR applies to any personal data you collect. Review your local rules and consult a lawyer for commercial use.
No. This actor reads public pages over HTTP with datacenter proxies. No API key, no OAuth, no rate-limit management on your side.
Every run pulls live data at execution time. Set up a schedule (daily/hourly/weekly cron) in the Apify console to keep your dataset current automatically.