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

NanoScrape

NanoScrape

Maintained by Community

Actor stats

2

Bookmarked

19

Total users

2

Monthly active users

11 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

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-scraper to 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

ParameterTypeDefaultDescription
searchQueriesarray[]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.
maxResultsPerQueryinteger100Cap per search query (only used with searchQueries); results are split round-robin across queries
sortBystring"newest"Result order: "newest" or "oldest". Client-side sort using RSS pubDate (no server-side sort on this platform).
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
maxResultsinteger0Total cap on results. 0 = unlimited, or with searchQueries maxResultsPerQuery x number of queries
includeJobDetailsbooleantrueWhen 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, 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

Proxy Handling

Proxy handling is built in, nothing to configure. For best results 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

Working across the Swiss job market? These complement SwissDevJobs:

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