Job-Room.ch Scraper - Swiss Federal Jobs avatar

Job-Room.ch Scraper - Swiss Federal Jobs

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Job-Room.ch Scraper - Swiss Federal Jobs

Job-Room.ch Scraper - Swiss Federal Jobs

Scrape SECO federal jobs from arbeit.swiss (DE), travail.swiss (FR), lavoro.swiss (IT), work.swiss (EN) - Job-Room.ch platform. All Swiss cantons. Filter by canton, workload %, posting date. Returns employer, location, contract type, deadline, description.

Pricing

from $3.00 / 1,000 results

Rating

5.0

(1)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

4

Bookmarked

70

Total users

17

Monthly active users

1.8 hours

Issues response

2 days ago

Last modified

Share

Arbeit.swiss / Travail.swiss / Lavoro.swiss / Work.swiss Job Scraper

Scrapes job listings from the SECO Job-Room.ch federal employment platform, Switzerland's official multilingual government job portal operated by RAV/SECO (Staatssekretariat fur Wirtschaft / Secretariat d'Etat a l'economie / Segreteria di Stato dell'economia). The same platform is served under four language-branded domains:

All four surfaces expose the same underlying Job-Room API, so this single actor covers every canton and every Swiss national language. DE-, FR-, IT-, and EN-speaking users all get the same normalized JobListing output.

Features

  • Multi-query support - Run multiple search keywords in a single actor run, deduplicated across queries
  • Per-query limits - Control how many results each keyword returns independently
  • API-based scraping - Uses the official Job-Room API for fast, reliable data extraction
  • Three scraping modes - Search mode or direct URL mode for different use cases
  • Job status detection - Track if jobs are still online, offline, or expired (direct URL mode)
  • Comprehensive job data - Extracts title, company, location, workload, contact details, and more
  • Canton filtering - Filter jobs by Swiss canton codes
  • Sort order - Sort by date (newest/oldest first) or default
  • Standardized output - Returns data in the JobListing schema format with search_query tracking
  • Built-in proxy handling - Swiss residential access is managed for you, no setup needed

Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client — Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

Apify MCP server URL:

https://mcp.apify.com?tools=santamaria-automations/arbeit-swiss-scraper

Example prompt once connected:

"Use arbeit-swiss-scraper to scrape job listings from the Swiss federal Job-Room platform (arbeit.swiss / travail.swiss / lavoro.swiss / work.swiss). Return results as a table."

Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically via add-actor.

Input

FieldTypeDescriptionDefault
directUrlsstring[]Direct job URLs to scrape (skips search mode)[]
searchQueriesstring[]One or more search keywords. Each runs as a separate search, deduplicated.[]
keywordsstring[]Legacy: search keywords (use searchQueries instead)[]
cantonCodesstring[]Swiss canton codes (e.g., ["ZH", "BE", "SG"])[] (all cantons)
sortBystringSort order: newest (date_desc), oldest (date_asc), or "" for platform default. Note: arbeit.swiss has no relevance sort -- only date-based options exist."newest"
workloadMinintegerMinimum workload percentage (Pensum)10
workloadMaxintegerMaximum workload percentage (Pensum)100
onlineSinceDaysintegerOnly include jobs posted within this many days60
maxResultsPerQueryintegerMax results per search keyword100
maxResultsintegerTotal cap across all queries. 0 = unlimited.0
titleFilterstringComma-separated title terms (case-insensitive OR substring), applied before detail fetch and charge. Example: Laborant, Chemiker, QC"" (no filter)
statsModestringPer-query statistics output: off, include, onlyoff

Statistics output (optional)

Set statsMode to get per-query statistics alongside or instead of job data — useful for workflow control (resume state, "was it worth a full scrape?") and cheap labour-market snapshots.

ModeDataset outputCost
off (default)Jobs only, no stats items — unchanged behaviourStandard per-result pricing
includeJobs + one type: "stats" item per query + one type: "run_summary"Standard per-result pricing (stats items are free)
onlyStats + run_summary only, no jobs, no detail fetchesOne page fetch per query, no per-result charges

Each stats item carries the platform-reported total (from arbeit.swiss's X-Total-Count header — same value the job-room.ch UI shows), page count, how far the scrape got, why it stopped, and — if it stopped early — the exact URL/page/offset to resume from. A STATS record is always written to the key-value store so workflows can read resume state without parsing a mixed dataset.

Field-level contract (schema version, stopReason enum, resume shape) is stable across type: "stats" items — see docs/JOBSTATS_SPEC.md in the source repo.

{
"searchQueries": ["Pflege", "IT", "Buchhaltung"],
"cantonCodes": ["ZH", "BE"],
"maxResultsPerQuery": 50,
"sortBy": "newest"
}
{
"searchQueries": ["Software Engineer"],
"cantonCodes": ["ZH"],
"maxResultsPerQuery": 200
}

Example: Direct URLs (Still Alive Checks)

{
"directUrls": [
"https://www.job-room.ch/job-search/abc123-def456",
"https://www.job-room.ch/job-search/xyz789-uvw012"
]
}

Output

Each job listing follows the standardized JobListing schema:

{
"id": "abc123-def456",
"title": "Dipl. Pflegefachperson HF/FH",
"company": "Universitatsspital Zurich",
"location": "Zurich, ZH",
"canton": "ZH",
"job_status": null,
"employment_type": "full-time",
"workload_min": 80,
"workload_max": 100,
"remote_option": null,
"description_snippet": "Wir suchen eine engagierte Pflegefachperson...",
"description_full": "...",
"requirements": [],
"posted_at": "2024-01-15T00:00:00.000Z",
"expires_at": "2024-02-15T00:00:00.000Z",
"source_url": "https://www.job-room.ch/job-search/abc123-def456",
"source_platform": "arbeit.swiss",
"contact_salutation": "Frau",
"contact_firstname": "Maria",
"contact_lastname": "Mueller",
"contact_email": "jobs@usz.ch",
"contact_phone": "+41442551111",
"apply_url": "https://careers.usz.ch/apply/123",
"apply_email": "bewerbung@usz.ch",
"company_url": "https://www.usz.ch",
"search_query": "Pflege",
"scraped_at": "2024-01-16T12:00:00.000Z"
}

Field Notes

  • search_query - The search keyword that found this job (null for direct URL mode)
  • job_status - Only populated in Direct URL mode; null in search mode
  • Salary fields - Not available in arbeit.swiss API; always null
  • requirements - Not easily extractable from API; empty array

Important: Network Requirements

The arbeit.swiss API (job-room.ch) has strict access controls:

  • Works: Residential IPs, corporate networks, VPNs with residential exit
  • Blocked: Cloud/datacenter IPs (including Apify infrastructure)

The actor uses a Swiss residential proxy automatically; there is nothing to configure.

Swiss Canton Codes

CodeCantonCodeCanton
AGAargauNWNidwalden
AIAppenzell I.OWObwalden
ARAppenzell A.SGSt. Gallen
BEBernSHSchaffhausen
BLBasel-LandSOSolothurn
BSBasel-StadtSZSchwyz
FRFribourgTGThurgau
GEGeneveTITicino
GLGlarusURUri
GRGraubundenVDVaud
JUJuraVSValais
LULuzernZGZug
NENeuchatelZHZurich

Performance

  • Speed: ~250 jobs/minute (limited by respectful rate limiting)
  • Cost: ~0.01-0.05 CU per 1,000 jobs
  • Reliability: Built-in retry logic with exponential backoff

Data Source

  • Websites (same platform, four language surfaces): arbeit.swiss (DE) · travail.swiss (FR) · lavoro.swiss (IT) · work.swiss (EN)
  • Underlying platform: Job-Room.ch
  • Search API: POST https://www.job-room.ch/jobadservice/api/jobAdvertisements/_search
  • Operator: SECO (Staatssekretariat fur Wirtschaft / Secretariat d'Etat a l'economie / Segreteria di Stato dell'economia)

This actor accesses publicly available job listings through the official API. Please ensure your use case complies with the SECO Job-Room terms of service, available in DE, FR, IT, and EN.

Working across the Swiss job market? These complement the SECO Job-Room platform (arbeit.swiss / travail.swiss / lavoro.swiss / work.swiss):

Switzerland

Germany

Global

Enrich your job data


Part of the Santamaria Job Scrapers Suite - Professional-grade job data for the DACH region and beyond. Need help with integration, aggregation, or custom scraping solutions? Contact us at contact@nanoscrape.com