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

Alessandro Santamaria
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 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 |
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 |
|---|---|---|---|
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 | 100 | Maximum number of jobs to scrape (1-1000) |
proxyConfiguration | object | Residential | Apify proxy settings |
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
Technical Details
JavaScript SPA Architecture
SwissDevJobs.ch is a Single Page Application (SPA) that:
- Uses client-side rendering for job listings
- Injects job data via JavaScript variables (e.g.,
window.__detailedJob) - Has an API endpoint at
/api/errors/reportfor error reporting - Requires JavaScript execution to display content
Scraping Strategy
This scraper uses:
- PlaywrightCrawler: For JavaScript rendering and dynamic content
- DOM extraction: Parses rendered HTML after JavaScript execution
- Fallback selectors: Multiple selector strategies for robustness
- Smart waiting: Waits for content to load before extraction
- Anti-bot handling: Detects and handles placeholder responses
Proxy Recommendations
For best results:
- Use Residential proxies (recommended for JavaScript-heavy sites)
- Avoid datacenter proxies (may trigger anti-bot protection)
- Keep
maxResultsreasonable (<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 Scrapers
- Indeed Scraper: For broader job search across multiple countries
- Jobs.ch Scraper: For all types of jobs in Switzerland (not just tech)
- Ictjobs.ch Scraper: For IT jobs across Switzerland
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@alessandrosantamaria.com