JobScout24.ch Scraper - Swiss Job Board Data Extraction
Pricing
from $3.00 / 1,000 results
JobScout24.ch Scraper - Swiss Job Board Data Extraction
Scrapes job listings from JobScout24.ch, a major Swiss job portal. Filter by region, category (IT, finance, healthcare, etc.), and employment type. Includes optional LLM-powered contact extraction.
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
JobScout24.ch Job Scraper
Scrapes job listings from JobScout24.ch - major Swiss job board with 108,615+ jobs online. Extract jobs from 11 Swiss regions, 24+ career categories with comprehensive filters.
Three Scraping Modes
This scraper supports three distinct modes for different use cases:
| Mode | Input | Output | Use Case |
|---|---|---|---|
| SERP Only | includeJobDetails: false | Basic job data (title, company, location, URL) | Mass collection, deduplication, cost-efficient |
| SERP + Details | includeJobDetails: true (default) | Full job data with descriptions | Complete data in one run |
| Direct URLs | directUrls: [...] | Full job data + job_status | Still-alive checks, re-scraping specific jobs |
Features
- Comprehensive Swiss coverage: 108,615+ active job listings
- Regional targeting: 11 Swiss regions including Zürich, Bern, Basel, Romandie, Tessin, and more
- Category filtering: 24+ career categories from IT to Healthcare
- Employment type filtering: Full-time, part-time, temporary, apprenticeships, internships
- Three scraping modes: SERP only, SERP + details, or direct URL scraping
- Job status detection: Track if jobs are still online, offline, or expired
- Anti-bot bypass: Uses Playwright with residential proxies for reliable scraping
- Rich data extraction: Title, company, location, salary, workload, description, requirements, benefits
- Standardized output: Consistent JobListing schema across all job scrapers
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
directUrls | array | [] | Direct job URLs to scrape (skips search mode) |
searchQuery | string | "" | Job title, keywords, or company name |
region | string | "" | Swiss region (see supported regions below) |
category | string | "" | Job category (IT, Engineering, Finance, etc.) |
employmentType | string | "" | Employment type filter |
maxResults | integer | 100 | Maximum number of jobs to scrape (1-1000) |
includeJobDetails | boolean | true | Fetch full job descriptions (slower but more data) |
llmApiKey | string | "" | API key for LLM extraction of contact details (Groq or OpenRouter) |
llmModel | string | "none" | LLM model for contact extraction (none, llama-3.1-8b-instant, mistral-small-3.1-24b-instruct) |
proxyConfiguration | object | Residential | Apify proxy settings |
Mode 1: SERP Only (Fast & Cost-Efficient)
Set includeJobDetails: false to scrape only search results without visiting detail pages:
- Fastest mode - Only scrapes search result pages
- Most cost-efficient - Minimal compute and proxy usage
- Basic data - Title, company, location, URL, salary snippet
- Use case - Mass job collection for deduplication against existing database
Mode 2: SERP + Details (Full Data)
Default mode with includeJobDetails: true:
- Two-phase scraping - First collects from SERP, then visits each detail page
- Complete data - Full descriptions, requirements, benefits, apply URLs
- Use case - Initial comprehensive scraping of new jobs
Mode 3: Direct URLs (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 - Same as detail page scraping
- Use case - Periodic "still alive" checks, re-scraping specific jobs after deduplication
LLM Extraction (Optional)
Enable LLM-powered extraction to get structured contact information from job descriptions:
- Contact details: First name, last name, email, phone, salutation (Herr/Frau)
- Enhanced requirements: Better structured list of job requirements
- Benefits extraction: Company benefits/perks from description text
Supported LLM providers:
- Groq (fast, recommended): Use API key starting with
gsk_ - OpenRouter: Use API key starting with
sk-or-
Supported Regions
- Zürich - Greater Zürich area
- Bern - Canton Bern and surroundings
- Basel - Basel-Stadt and Basel-Landschaft
- Aargau - Canton Aargau
- Ostschweiz - Eastern Switzerland (St. Gallen, Thurgau, Appenzell)
- Zentralschweiz - Central Switzerland (Luzern, Zug, Schwyz)
- Romandie - French-speaking Switzerland (Geneva, Lausanne, Fribourg, Neuchâtel)
- Tessin - Italian-speaking Switzerland
- Graubünden - Canton Graubünden
- Wallis - Canton Wallis/Valais
- Remote - Remote work positions
Supported Categories
- IT / Software Development
- Engineering / Technical
- Finance / Banking / Insurance
- Sales
- Marketing / Communication
- Human Resources
- Healthcare / Medical
- Education / Training
- Hospitality / Tourism
- Construction / Architecture
- Logistics / Supply Chain
- Administration / Office
- Management / Executive
- Legal / Law
- Customer Service
- And 10+ more categories
Employment Types
- Full-time (Vollzeit) - 100% positions
- Part-time (Teilzeit) - Flexible workload
- Temporary - Contract/temporary positions
- Apprenticeship (Lehrstelle) - Swiss apprenticeship programs
- Internship (Praktikum) - Internship opportunities
Output
Each job listing includes:
{"id": "job123456","title": "Senior Software Engineer","job_status": "online","company": "Swiss Tech AG","location": "Zürich, ZH","canton": "ZH","employment_type": "full-time","workload_min": 80,"workload_max": 100,"remote_option": "hybrid","salary_text": "CHF 100'000 - 130'000 per year","description_snippet": "We are looking for...","description_full": "Full job description with all details...","requirements": ["5+ years of experience in software development","Proficiency in Python and TypeScript","Experience with cloud platforms (AWS/Azure)"],"posted_at": "2025-12-04T10:00:00.000Z","expires_at": "2026-01-04T23:59:59.000Z","source_url": "https://www.jobscout24.ch/en/job/job123456/","source_platform": "jobscout24.ch","contact_salutation": "Herr","contact_firstname": "Max","contact_lastname": "Müller","contact_email": "max.mueller@swisstech.ch","contact_phone": "+41 44 123 45 67","contact_position": "Head of HR","contact_raw": null,"apply_url": "https://careers.swisstech.ch/apply/123456","apply_email": "jobs@swisstech.ch","company_url": "https://www.jobscout24.ch/en/company/swiss-tech-ag/1234/","company_description": "Leading Swiss technology company...","company_rating": 4.5,"company_review_count": 23,"company_social_urls": null,"company_benefits": ["Flexible working hours","Home office options","Professional development budget"],"scraped_at": "2025-12-05T12:00:00.000Z"}
Notes:
- Contact fields (
contact_firstname,contact_lastname,contact_email,contact_phone,contact_salutation,contact_position) - Only populated when LLM extraction is enabled. - Requirements & benefits - Only extracted via LLM when enabled; otherwise empty arrays/null.
- Company rating/reviews - Extracted from company profile cards on detail pages (Modes 2 & 3 only).
job_status- Indicates job availability:online,offline,expired, orunknown. Most useful in Direct URL mode (Mode 3).company_social_urls- Reserved for future use; currently alwaysnull.apply_url- External application URL from "Apply online" button (not the JobScout24 page URL).
Example Usage
Mode 1: SERP Only - Mass Collection for Deduplication
{"searchQuery": "Developer","region": "zurich","category": "it","maxResults": 500,"includeJobDetails": false}
Returns basic job data quickly for comparison with existing database. After deduplication, use Mode 3 to scrape full details of new jobs only.
Mode 2: SERP + Details - Full Data Extraction
{"searchQuery": "Software Engineer","region": "zurich","category": "it","maxResults": 50}
Default mode - collects complete job data including descriptions, requirements, and apply URLs.
Mode 3: Direct URLs - Still Alive Checks
{"directUrls": ["https://www.jobscout24.ch/en/job/ea400c30-5c34-43a1-bbb1-a2302093906a/","https://www.jobscout24.ch/de/job/backend-entwickler/87654321/","https://www.jobscout24.ch/en/job/devops-engineer/11223344/"]}
Use this mode for:
- Still alive checks - Verify if previously scraped jobs are still online
- Post-deduplication enrichment - After SERP-only scraping, fetch full details for new jobs only
- Re-scraping specific jobs - Update data for specific job URLs
Output includes job_status field: online, offline, expired, or unknown.
More Search Examples
Part-time Marketing in Romandie:
{"searchQuery": "Marketing","region": "romandie","employmentType": "part-time","maxResults": 100}
Remote IT Jobs:
{"searchQuery": "Developer","region": "remote","category": "it","maxResults": 200}
Apprenticeships in Basel:
{"searchQuery": "","region": "basel","employmentType": "apprenticeship","maxResults": 50}
How It Works
- Search Phase: Crawls JobScout24.ch search results pages, collecting job cards with basic info (title, company, location, salary snippet, workload)
- Detail Phase (optional): Visits each job's detail page to extract:
- Full job description
- Detailed requirements list
- Company benefits
- Contact information
- Apply URL/email
- Expiration date
- Data Mapping: Maps Swiss-specific fields:
- Canton extraction from location
- Workload percentage (e.g., "80-100%")
- Swiss employment types (Vollzeit, Teilzeit, Lehrstelle)
- CHF salary parsing
- Validation: Each job is validated against the JobListing schema before saving
- Pagination: Automatically follows pagination to collect up to
maxResultsjobs
Technical Details
Dynamic Content Loading
JobScout24.ch uses:
- Tealium tracking (utag): Dynamic content loading system
- JavaScript rendering: Requires Playwright for proper extraction
- Lazy loading: Job cards load as you scroll/paginate
Scraping Approach
- Wait for job listings container to load
- Handle cookie consent dialogs
- Extract job cards using multiple selector strategies
- Parse Swiss-specific data formats:
- Canton abbreviations (ZH, BE, GE, etc.)
- Workload percentages
- Swiss date formats
- CHF salary notations
- Follow pagination links
- Visit detail pages for complete data
Proxy Recommendations
JobScout24.ch may have anti-bot protection. For best results:
- Use Residential proxies (recommended)
- Avoid Datacenter proxies (may be blocked)
- Keep
maxResultsreasonable (<500 per run) - Add delays between runs if scraping frequently
Local Development
# Navigate to actor directorycd actors/jobs/jobscout24-ch# Install dependenciesnpm install# Build TypeScriptnpm run build# Run locally with Apify CLIapify run --purge# Push to Apify (do NOT run yet - testing only)# apify push
Data Quality Notes
- 108,615+ jobs: Large job inventory across all regions
- Swiss-specific fields: Canton, workload percentage, Swiss employment types
- Multilingual: Jobs in German, French, Italian
- Regular updates: Job postings updated daily
- Standardized schema: Compatible with other job board scrapers
Regional Coverage Statistics
Based on typical distribution:
- Zürich region: ~30% of jobs (largest market)
- Romandie (Geneva, Lausanne): ~25%
- Basel region: ~12%
- Bern region: ~10%
- Other regions: ~23%
Common Use Cases
- Job market analysis: Track hiring trends by region/category
- Competitive intelligence: Monitor competitors' hiring
- Job aggregation: Build job search platforms
- Career research: Analyze salary ranges and requirements
- Recruitment sourcing: Find candidates via company postings
- Market research: Study Swiss employment landscape
Limitations
- JobScout24.ch's page structure may change; selectors may need updates
- Some jobs may require login to see full details
- Rate limiting applies - avoid aggressive scraping
- Respects robots.txt and terms of service
Version History
-
v1.0.5 (2025-12-12): Direct URL mode for still alive checks
- Added
directUrlsinput parameter for direct job page scraping - Added
job_statusfield (online/offline/expired/unknown) for job availability tracking - Skip search phase when direct URLs are provided
- Performance improvements for direct URL mode
- Added
-
v1.0.4 (2025-12-12): Search & extraction improvements
- Fixed search query not filtering results (now uses path-based URLs)
- Extract actual apply URL from "Apply online" button (external ATS links)
- Extract company rating and review count from company profile cards
- Extract workload (min/max) from property tags element
- Added LLM extraction option for contact details (requires API key)
- Contact data now only extracted when LLM is enabled (matching jobs-ch behavior)
-
v1.0.3 (2025-12-11): Date normalization
- Normalize date formats to valid ISO datetime
-
v1.0.2 (2025-12-10): JSON-LD extraction
- Extract job data from JSON-LD structured data
-
v1.0.0 (2025-12-05): Initial release
- 11 Swiss regions supported
- 24+ career categories
- Employment type filtering
- Full job detail extraction
- Standardized JobListing schema output