SwissDevJobs.ch Scraper - Swiss Tech & Developer Jobs
Pricing
from $3.00 / 1,000 results
SwissDevJobs.ch Scraper - Swiss Tech & Developer Jobs
Scrapes developer and IT job listings from SwissDevJobs.ch. Filter by 25+ technologies (Python, JavaScript, Go, etc.), experience level, remote/hybrid options, company size, and visa sponsorship. Built for tech recruiters.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
NanoScrape
Maintained by CommunityActor stats
2
Bookmarked
19
Total users
2
Monthly active users
11 days ago
Last modified
Categories
Share
SwissDevJobs.ch Scraper
Scrapes developer job listings from swissdevjobs.ch - Switzerland's premier job board for software engineers, developers, DevOps, data scientists, and other tech professionals.
Three Scraping Modes
This scraper supports three distinct modes for different use cases:
| Mode | Input | Output | Use Case |
|---|---|---|---|
| SEARCH MODE | Technology + location + filters | Job data from listing pages | New job discovery with filtering |
| SEARCH + FILTERS MODE | Advanced filters (experience, company type, etc.) | Filtered job data | Targeted job search |
| DIRECT URLS MODE | directUrls: [...] | Full job data + job_status | Still-alive checks, re-scraping specific jobs |
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/swissdevjobs-ch-scraper
Example prompt once connected:
"Use
swissdevjobs-ch-scraperto scrape job listings from swissdevjobs ch. 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.
Features
- Swiss Developer Jobs: Focuses on tech and development roles across Switzerland
- JavaScript SPA Support: Uses Playwright to handle client-side rendering
- Rich Filtering: Filter by technology, location, experience level, job type, company size, workplace, language, and visa sponsorship
- Two-phase scraping: Collects job listings, then fetches full descriptions from detail pages
- Comprehensive Data: Extracts salary ranges, benefits, technologies, requirements, and company info
- Standardized output: Consistent JobListing schema across all job scrapers
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQueries | array | [] | Keywords, one per entry (e.g. ["python", "devops engineer"]). Matched case-insensitively against the job title only (not the description). All words of a query must appear in the title, in any order. Empty = all jobs. |
maxResultsPerQuery | integer | 100 | Cap per search query (only used with searchQueries); results are split round-robin across queries |
sortBy | string | "newest" | Result order: "newest" or "oldest". Client-side sort using RSS pubDate (no server-side sort on this platform). |
directUrls | array | [] | Direct job URLs to scrape (skips search mode) |
technology | string | "" | Filter by technology category (e.g., "Python", "JavaScript", "DevOps", "ML-AI") |
location | string | "" | Filter by city/region (e.g., "Zurich", "Bern", "Geneva", "remote") |
experienceLevel | string | "" | Filter by experience level: "Junior", "Regular", "Senior", "Lead" |
jobType | string | "" | Filter by employment type: "Full-Time", "Part-Time", "Freelance", "Internship" |
companySize | string | "" | Filter by company size: "<50", "50-200", "200-500", "500-1k", "1k-5k", "5k+" |
companyType | string | "" | Filter by company type: "Product", "Agency", "Startup" |
workplace | string | "" | Filter by workplace type: "Remote", "Hybrid", "Office" |
language | string | "" | Filter by required language: "English", "French", "German" |
visaSponsorship | boolean | false | Only show jobs offering visa sponsorship for non-EU residents |
maxResults | integer | 0 | Total cap on results. 0 = unlimited, or with searchQueries maxResultsPerQuery x number of queries |
includeJobDetails | boolean | true | When true, fetches each job's detail page for full description, salary, and requirements. When false, returns RSS-level fields only (title, URL, date) without detail-page requests. |
Each result includes a search_query field. With searchQueries it holds the first matching query (in input order); without it, it holds the technology filter value (or null).
Multiple keywords (searchQueries)
The job list is fetched once and filtered locally, so extra queries add no extra requests. Matching is done on the job title only (on the RSS title, or the URL slug when the RSS feed is blocked, which also contains the company name). It is not a full-text search of the description. A query word also matches longer words that start with it (engineer matches Engineering). A job that matches several queries is returned once, tagged with the first matching query, and charged once. Jobs that match no query are skipped and never charged. Results are taken round-robin across queries, so one broad query cannot use up the whole budget.
{"searchQueries": ["python", "devops engineer", "data scientist"],"maxResultsPerQuery": 10}
This returns up to 10 jobs per query (30 in total, since maxResults is 0). Combine with technology, location and the other filters as usual.
Mode 1: SEARCH MODE (Discovery)
Search for jobs with basic filters:
- Use case: Discover jobs by technology and location
- Speed: Moderate - handles infinite scroll and pagination
- Output: Complete job data with structured fields
{"technology": "Python","location": "Zurich","maxResults": 50}
Mode 2: SEARCH + FILTERS MODE (Targeted)
Apply advanced filters for targeted search:
- Use case: Find specific jobs matching criteria (experience, company type, remote work, etc.)
- Speed: Moderate - applies UI filters before scraping
- Output: Highly targeted job results
{"technology": "DevOps","experienceLevel": "Senior","workplace": "Remote","visaSponsorship": true,"maxResults": 100}
Mode 3: DIRECT URLS MODE (Still Alive Checks)
When directUrls is provided, the scraper operates in direct mode:
- Skips search phase - Goes directly to provided job URLs
- Job status detection - Returns
online,offline,expired, orunknown - Full data extraction - Extracts all structured data from job pages
- Use case: Periodic "still alive" checks, re-scraping specific jobs after deduplication
{"directUrls": ["https://swissdevjobs.ch/jobs/Company-AG-Senior-Software-Engineer---Zurich","https://swissdevjobs.ch/jobs/Tech-Startup-DevOps-Engineer-Bern","https://swissdevjobs.ch/jobs/Finance-Corp-Data-Scientist-Geneva"]}
Direct URLs mode workflow:
- Provide array of SwissDevJobs job detail URLs
- Scraper visits each URL directly
- Detects if job is still online or has been removed
- Extracts structured data from
window.__detailedJobif available - Returns
job_statusfield indicating availability
Available Technology Categories
C-C++, C#.NET, Data, Golang, Java, JavaScript, Mobile, PHP, Python, Ruby, SAP, System, DevOps, IT, Database, QA-Test, ML-AI, Security, Network, GameDev, Blockchain, UX-UI, Architect, Business, Manager, Support, Rust, Hardware, No-Code
Available Locations
remote, Zurich, Aarau, Baden, Basel, Bern, Biel, Chur, Fribourg, Geneva, Olten, Lausanne, Liechtenstein, Lugano, Luzern, Schaffhausen, Sion, Solothurn, St-Gallen, Thun, Winterthur, Zug
Output
Each job listing includes:
{"id": "Company-AG-Senior-Software-Engineer---Zurich","title": "Senior Software Engineer","company": "Tech Company AG","location": "Techstrasse 42, 8001 Zürich","canton": "ZH","job_status": "online","top_listing": true,"employment_type": "full-time","workload_min": null,"workload_max": null,"remote_option": "hybrid","salary_min": 110000,"salary_max": 140000,"salary_currency": "CHF","salary_period": "yearly","salary_text": "CHF 110'000 - 140'000","description_snippet": "We are looking for...","description_full": "Full job description with requirements...","requirements": ["5+ years experience", "Python expertise", "Team leadership"],"requirements_must": ["Python", "Django", "PostgreSQL"],"requirements_nice": ["Docker", "Kubernetes"],"technologies": ["Python", "Django", "PostgreSQL", "Docker", "AWS"],"responsibilities": ["Lead backend development", "Mentor junior developers"],"benefits": ["Hybrid work", "5 weeks vacation", "Team events", "Flexible hours"],"company_size": "50-200","company_type": "Product","experience_level": "Senior","language_required": "English","visa_sponsorship": false,"logo_url": "https://swissdevjobs.ch/company/tech-company-logo.jpg","job_category": "Python","city_category": "Zurich","posted_at": null,"expires_at": null,"source_url": "https://swissdevjobs.ch/jobs/Company-AG-Senior-Software-Engineer---Zurich","source_platform": "swissdevjobs.ch","apply_url": "https://company.com/careers/apply","company_benefits": ["Hybrid work", "5 weeks vacation", "Team events"],"scraped_at": "2024-12-09T12:00:00.000Z"}
Output Fields
| Field | Description |
|---|---|
id | Job URL slug (Company-Name-Job-Title format) |
title | Job title |
company | Company name |
location | Full address including street, postal code, city |
canton | Swiss canton code (ZH, BE, GE, etc.) |
job_status | Job availability: online, offline, expired, unknown (Direct URLs mode only) |
top_listing | Boolean - if job is featured/promoted (Search mode: detected from badges; Direct URLs: always null) |
employment_type | full-time, part-time, contract, temporary, internship, apprenticeship |
workload_min | Minimum workload percentage |
workload_max | Maximum workload percentage |
remote_option | remote, hybrid, onsite |
salary_min | Minimum annual salary (CHF) |
salary_max | Maximum annual salary (CHF) |
salary_currency | Always "CHF" |
salary_period | Always "yearly" |
salary_text | Formatted salary range |
description_snippet | First 500 characters |
description_full | Complete job description |
requirements | Combined array of must-have and nice-to-have requirements |
requirements_must | Array of required skills/qualifications |
requirements_nice | Array of preferred skills/qualifications |
technologies | Array of technologies/tools mentioned |
responsibilities | Array of job responsibilities |
benefits | Array of company benefits/perks (mapped to readable format) |
company_size | Company size category |
company_type | Product, Agency, or Startup |
experience_level | Junior, Regular, Senior, or Lead |
language_required | Required language (English, German, French) |
visa_sponsorship | Boolean - if visa sponsorship is offered |
logo_url | Company logo URL |
job_category | Technology category |
city_category | City/location category |
posted_at | Publication date (usually null) |
expires_at | Expiration date (usually null) |
source_url | Link to job posting |
source_platform | Always "swissdevjobs.ch" |
apply_url | External application URL |
company_benefits | Same as benefits field |
scraped_at | Timestamp when job was scraped |
Notes on job_status field:
- Only populated in Direct URLs mode (Mode 3)
- In Search modes (Mode 1 & 2), this field is
nullsince jobs from search results are assumed to be online - Values:
online- Job page loaded with valid data fromwindow.__detailedJoboffline- Job page returns "not found" or 404expired- Job explicitly marked as expiredunknown- Unable to extract job data (may be anti-bot placeholder)
Note on anti-bot detection:
SwissDevJobs.ch may return a placeholder string "JOB_PLACEHOLDER" instead of actual job data when it detects scraping. In such cases, the scraper will:
- Set
job_statustounknown - Extract company name from the job URL slug as a fallback
- Return minimal data with available information
Example Usage
Search for Python developers in Zurich
{"technology": "Python","location": "Zurich","maxResults": 50}
Find remote DevOps jobs
{"technology": "DevOps","workplace": "Remote","maxResults": 100}
Find senior JavaScript developers at startups
{"technology": "JavaScript","experienceLevel": "Senior","companyType": "Startup","maxResults": 50}
Find ML/AI jobs with visa sponsorship
{"technology": "ML-AI","visaSponsorship": true,"maxResults": 100}
Find part-time Rust jobs in Basel
{"technology": "Rust","location": "Basel","jobType": "Part-Time","maxResults": 30}
Find German-speaking jobs at large companies
{"language": "German","companySize": "1k-5k","maxResults": 100}
Direct URLs - Still Alive Check
{"directUrls": ["https://swissdevjobs.ch/jobs/Company-AG-Senior-Software-Engineer---Zurich","https://swissdevjobs.ch/jobs/Tech-Startup-DevOps-Engineer-Bern"]}
How It Works
- Listing Phase: Navigates to swissdevjobs.ch search results and waits for JavaScript to render job cards
- Filter Application (optional): Clicks UI filter buttons to apply advanced search criteria
- Infinite Scroll: Scrolls page to load more jobs via infinite scroll pattern
- Extraction: Extracts job links from the listing page
- Detail Phase: Visits each job's detail page to get structured data from
window.__detailedJob - Validation: Validates each job against the JobListing schema before saving
Search Mode (Modes 1 & 2)
- Builds URL with technology and location filters
- Optionally applies advanced filters via UI clicks
- Scrolls to load more jobs (up to 10 scroll attempts)
- Extracts job links and enqueues detail pages
- Respects
maxResultslimit throughout the process
Direct URLs Mode (Mode 3)
- Skips search and filter phase entirely
- Goes directly to provided job URLs
- Extracts data from
window.__detailedJobJavaScript variable - Handles offline/expired/placeholder responses
- Returns
job_statusfield for monitoring
Proxy Handling
Proxy handling is built in, nothing to configure. For best results keep maxResults reasonable (<500 per run).
Local Development
# Install dependenciesnpm install# Build TypeScriptnpm run build# Run locally with test inputapify run --purge# Push to Apify (when ready)apify push
Common Use Cases
- Tech job market analysis: Track hiring trends for developers in Switzerland
- Competitive intelligence: Monitor which companies are hiring for specific technologies
- Job aggregation: Build specialized tech job search platforms
- Still-alive monitoring: Check if previously scraped jobs are still active (Direct URLs mode)
- Post-deduplication enrichment: Scrape basic data first, then fetch details for new jobs only
- Salary research: Analyze compensation ranges for tech roles
- Skills trending: Identify in-demand technologies and skills
Notes
- SwissDevJobs.ch is a specialized job board for tech/developer roles in Switzerland
- The site structure may change; selectors might need updates
- Full job descriptions require visiting detail pages (slower)
- Some jobs may not have all fields available (e.g., salary, remote option)
- Respects the site's robots.txt and terms of service
- Job IDs are URL slugs in format:
Company-Name-Job-Title - Anti-bot protection may return placeholder data instead of real job information
Related Actors
Working across the Swiss job market? These complement SwissDevJobs:
Switzerland
- Jobs.ch Scraper, Switzerland's #1 private job board (largest inventory, generalist peer).
- Arbeit.swiss / Travail.swiss Scraper, Swiss federal public employment service (SECO/RAV Job-Room platform), covering DE/FR/IT/EN language surfaces.
- ICTjobs.ch Scraper, Swiss IT/telecom specialist board (adjacent tech peer to this developer-focused board).
- JobScout24 Scraper, Swiss classifieds job section.
- Zentraljob.ch Scraper, Central Switzerland regional board.
Germany
Global
Enrich your job data
- Website Job Extractor -- Extract jobs directly from company career pages
- Website Contact Extractor -- Get emails and phone numbers from company websites
- Website Email & Phone Scraper -- Fast email and phone extraction (no AI needed)
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