SwissDevJobs.ch Scraper - Swiss Tech & Developer Jobs avatar
SwissDevJobs.ch Scraper - Swiss Tech & Developer Jobs

Pricing

from $3.00 / 1,000 results

Go to Apify Store
SwissDevJobs.ch Scraper - Swiss Tech & Developer Jobs

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

Alessandro Santamaria

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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:

ModeInputOutputUse Case
SEARCH MODETechnology + location + filtersJob data from listing pagesNew job discovery with filtering
SEARCH + FILTERS MODEAdvanced filters (experience, company type, etc.)Filtered job dataTargeted job search
DIRECT URLS MODEdirectUrls: [...]Full job data + job_statusStill-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

ParameterTypeDefaultDescription
directUrlsarray[]Direct job URLs to scrape (skips search mode)
technologystring""Filter by technology category (e.g., "Python", "JavaScript", "DevOps", "ML-AI")
locationstring""Filter by city/region (e.g., "Zurich", "Bern", "Geneva", "remote")
experienceLevelstring""Filter by experience level: "Junior", "Regular", "Senior", "Lead"
jobTypestring""Filter by employment type: "Full-Time", "Part-Time", "Freelance", "Internship"
companySizestring""Filter by company size: "<50", "50-200", "200-500", "500-1k", "1k-5k", "5k+"
companyTypestring""Filter by company type: "Product", "Agency", "Startup"
workplacestring""Filter by workplace type: "Remote", "Hybrid", "Office"
languagestring""Filter by required language: "English", "French", "German"
visaSponsorshipbooleanfalseOnly show jobs offering visa sponsorship for non-EU residents
maxResultsinteger100Maximum number of jobs to scrape (1-1000)
proxyConfigurationobjectResidentialApify 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, or unknown
  • 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:

  1. Provide array of SwissDevJobs job detail URLs
  2. Scraper visits each URL directly
  3. Detects if job is still online or has been removed
  4. Extracts structured data from window.__detailedJob if available
  5. Returns job_status field 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

FieldDescription
idJob URL slug (Company-Name-Job-Title format)
titleJob title
companyCompany name
locationFull address including street, postal code, city
cantonSwiss canton code (ZH, BE, GE, etc.)
job_statusJob availability: online, offline, expired, unknown (Direct URLs mode only)
top_listingBoolean - if job is featured/promoted (Search mode: detected from badges; Direct URLs: always null)
employment_typefull-time, part-time, contract, temporary, internship, apprenticeship
workload_minMinimum workload percentage
workload_maxMaximum workload percentage
remote_optionremote, hybrid, onsite
salary_minMinimum annual salary (CHF)
salary_maxMaximum annual salary (CHF)
salary_currencyAlways "CHF"
salary_periodAlways "yearly"
salary_textFormatted salary range
description_snippetFirst 500 characters
description_fullComplete job description
requirementsCombined array of must-have and nice-to-have requirements
requirements_mustArray of required skills/qualifications
requirements_niceArray of preferred skills/qualifications
technologiesArray of technologies/tools mentioned
responsibilitiesArray of job responsibilities
benefitsArray of company benefits/perks (mapped to readable format)
company_sizeCompany size category
company_typeProduct, Agency, or Startup
experience_levelJunior, Regular, Senior, or Lead
language_requiredRequired language (English, German, French)
visa_sponsorshipBoolean - if visa sponsorship is offered
logo_urlCompany logo URL
job_categoryTechnology category
city_categoryCity/location category
posted_atPublication date (usually null)
expires_atExpiration date (usually null)
source_urlLink to job posting
source_platformAlways "swissdevjobs.ch"
apply_urlExternal application URL
company_benefitsSame as benefits field
scraped_atTimestamp 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 null since jobs from search results are assumed to be online
  • Values:
    • online - Job page loaded with valid data from window.__detailedJob
    • offline - Job page returns "not found" or 404
    • expired - Job explicitly marked as expired
    • unknown - 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_status to unknown
  • 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

  1. Listing Phase: Navigates to swissdevjobs.ch search results and waits for JavaScript to render job cards
  2. Filter Application (optional): Clicks UI filter buttons to apply advanced search criteria
  3. Infinite Scroll: Scrolls page to load more jobs via infinite scroll pattern
  4. Extraction: Extracts job links from the listing page
  5. Detail Phase: Visits each job's detail page to get structured data from window.__detailedJob
  6. 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 maxResults limit throughout the process

Direct URLs Mode (Mode 3)

  • Skips search and filter phase entirely
  • Goes directly to provided job URLs
  • Extracts data from window.__detailedJob JavaScript variable
  • Handles offline/expired/placeholder responses
  • Returns job_status field 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/report for 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 maxResults reasonable (<500 per run)

Local Development

# Install dependencies
npm install
# Build TypeScript
npm run build
# Run locally with test input
apify run --purge
# Push to Apify (when ready)
apify push

Common Use Cases

  1. Tech job market analysis: Track hiring trends for developers in Switzerland
  2. Competitive intelligence: Monitor which companies are hiring for specific technologies
  3. Job aggregation: Build specialized tech job search platforms
  4. Still-alive monitoring: Check if previously scraped jobs are still active (Direct URLs mode)
  5. Post-deduplication enrichment: Scrape basic data first, then fetch details for new jobs only
  6. Salary research: Analyze compensation ranges for tech roles
  7. 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
  • 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