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

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

4

Bookmarked

62

Total users

17

Monthly active users

1.8 hours

Issues response

13 days ago

Last modified

Share

Arbeit.Swiss Job Scraper

Scrapes job listings from arbeit.swiss, the official Swiss government job portal operated by RAV/SECO (Staatssekretariat fur Wirtschaft).

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
  • Proxy support - Optional proxy configuration for different network setups

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 arbeit 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: date_desc, date_asc, or empty for default""
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
statsModestringPer-query statistics output: off, include, onlyoff
proxyConfigurationobjectApify proxy settingsResidential CH

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": "date_desc"
}
{
"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)

Recommended: Use residential proxy (configured by default).

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

  • Website: arbeit.swiss
  • Search API: POST https://www.job-room.ch/jobadservice/api/jobAdvertisements/_search
  • Operator: SECO (Staatssekretariat fur Wirtschaft)

This actor accesses publicly available job listings through the official API. Please ensure your use case complies with the arbeit.swiss terms of service.

Looking for more job data? Check out our other scrapers:

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