Sozjobs.ch Scraper - Swiss Social & Healthcare Jobs
Pricing
from $3.00 / 1,000 results
Sozjobs.ch Scraper - Swiss Social & Healthcare Jobs
Scrapes job listings from Sozjobs.ch, the leading portal for social work, healthcare, and education jobs in German-speaking Switzerland. Filter by region and contract type.
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
20 days ago
Last modified
Categories
Share
Sozjobs.ch Job Scraper
Scrapes job listings from sozjobs.ch, the leading Swiss job portal for social and healthcare professions (Sozialwesen, Pflege, Gesundheit).
Three Scraping Modes
This scraper supports three distinct modes for different use cases:
| Mode | Input | Output | Use Case |
|---|---|---|---|
| SERP Only | includeContactExtraction: false | Basic job data (title, company, location, URL) | Fast mass collection, deduplication |
| SERP + Details | includeContactExtraction: true (default) | Full job data with contact info | Complete data in one run |
| Direct URLs | directUrls: [...] | Full job data + job_status | Still-alive checks, re-scraping specific jobs |
Features
- Browser-based scraping - Uses PlaywrightCrawler for full JavaScript rendering
- Contact extraction - Extracts contact person details from each job listing
- Healthcare focus - Specializes in Pflege, Sozialarbeit, Betreuung, and related fields
- Region filtering - Filter by Swiss regions (Zurich, Bern, Ostschweiz, etc.)
- Three scraping modes - SERP only, SERP + details, or direct URL scraping
- Job status detection - Track if jobs are still online, offline, or expired
- Standardized output - Returns data in the
JobListingschema format - Infinite scroll handling - Automatically clicks "Load More" to get all results
- Proxy support - Built-in proxy rotation for reliability
Input
| Field | Type | Description | Default |
|---|---|---|---|
directUrls | array | Direct job URLs to scrape (skips search mode) | [] |
searchQuery | string | Job title, skills, or keywords to search for | "" (all jobs) |
regions | string[] | Regions to search in | All German-speaking regions |
contractTypes | string[] | Contract types: permanent, temporary | ["permanent"] |
maxResults | integer | Maximum number of job listings to scrape | 500 |
includeContactExtraction | boolean | Visit detail pages for contact info | true |
proxyConfiguration | object | Apify proxy settings | Residential |
Mode 1: SERP Only - Fast Mass Collection
Set includeContactExtraction: 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
- Use case - Mass job collection for deduplication against existing database
Mode 2: SERP + Details - Full Data
Default mode with includeContactExtraction: true:
- Two-phase scraping - First collects from SERP, then visits each detail page
- Complete data - Full descriptions, contact info, benefits
- 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
Available Regions
| Region ID | Coverage |
|---|---|
zurich | Zürich and surroundings |
berne | Bern and Mittelland |
east | Ostschweiz (SG, TG, AI, AR) |
northwest | Basel, Aargau, Solothurn |
mittelland | Bern, Fribourg, Solothurn |
central | Zentralschweiz (LU, UR, SZ, OW, NW, ZG) |
graubunden | Graubünden |
Example: SERP Only Mode
{"searchQuery": "Pflegefachfrau","regions": ["zurich", "east"],"contractTypes": ["permanent"],"maxResults": 500,"includeContactExtraction": false}
Returns basic job data quickly for comparison with existing database. After deduplication, use Mode 3 to scrape full details of new jobs only.
Example: SERP + Details Mode (Default)
{"searchQuery": "Pflegefachfrau","regions": ["zurich", "east"],"contractTypes": ["permanent"],"maxResults": 200,"includeContactExtraction": true}
Default mode - collects complete job data including descriptions, contact info, and benefits.
Example: Direct URLs Mode - Still Alive Checks
{"directUrls": ["https://www.sozjobs.ch/stelle/pflegefachfrau-spital-12345","https://www.sozjobs.ch/stelle/sozialarbeiter-heim-67890","https://www.sozjobs.ch/stelle/betreuung-kita-11223"]}
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.
Output
Each job listing follows the standardized JobListing schema:
{"id": "pflegefachfrau-spital-12345","title": "Dipl. Pflegefachfrau/-mann HF 80-100%","company": "Kantonsspital St. Gallen","location": "St. Gallen","canton": "SG","job_status": "online","top_listing": null,"employment_type": "full-time","workload_min": 80,"workload_max": 100,"remote_option": null,"description_snippet": "Wir suchen eine erfahrene Pflegefachperson für unsere...","description_full": "...","requirements": [],"posted_at": "2024-01-15T00:00:00.000Z","expires_at": null,"source_url": "https://www.sozjobs.ch/stelle/pflegefachfrau-spital-12345","source_platform": "sozjobs.ch","contact_salutation": "Frau","contact_firstname": "Anna","contact_lastname": "Keller","contact_position": "Leiterin Personal","contact_email": "personal@kssg.ch","contact_phone": "+41712341234","apply_url": "https://www.sozjobs.ch/stelle/pflegefachfrau-spital-12345","apply_email": "personal@kssg.ch","company_url": "https://www.kssg.ch","scraped_at": "2024-01-16T12:00:00.000Z"}
Notes:
job_status- Indicates job availability:online,offline,expired, orunknown. Most useful in Direct URL mode (Mode 3). In search modes, jobs are always consideredonline(field set tonull).top_listing- Not available from sozjobs.ch (alwaysnull)contact_position- Contact person's job title/role (e.g., "Leiterin Personal", "HR Manager")- Contact fields - Only populated when
includeContactExtraction: trueor when using Direct URLs mode
Usage
Via Apify Console
- Go to the actor page
- Configure input parameters
- Click "Start"
- Download results from the Dataset tab (JSON, CSV, Excel)
Via API
curl -X POST "https://api.apify.com/v2/acts/santamaria~sozjobs-ch-scraper/runs" \-H "Authorization: Bearer YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQuery": "Sozialarbeiter","regions": ["zurich", "berne"],"maxResults": 100}'
Via Apify SDK (Node.js)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('santamaria/sozjobs-ch-scraper').call({searchQuery: 'Betreuung',regions: ['east', 'central'],maxResults: 300,includeContactExtraction: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Found ${items.length} jobs`);
Job Categories Covered
Sozjobs.ch specializes in these healthcare and social work sectors:
| Category | Examples |
|---|---|
| Pflege | Pflegefachperson, Fachfrau Gesundheit, Pflegehelfer |
| Sozialarbeit | Sozialarbeiter, Sozialpädagoge, Sozialbegleiter |
| Betreuung | Betreuungsperson, Fachperson Betreuung, Nanny |
| Therapie | Physiotherapeut, Ergotherapeut, Logopäde |
| Pädagogik | Heilpädagoge, Sonderpädagoge, Schulische Heilpädagogin |
| Administration | Teamleitung, Pflegedienstleitung, Heimleitung |
Performance
- Speed: ~30-50 jobs/minute (browser-based, respects site limits)
- Cost: ~0.1-0.3 CU per 100 jobs (higher due to browser usage)
- Reliability: Built-in retry logic and graceful error handling
Technical Notes
This actor uses PlaywrightCrawler because sozjobs.ch:
- Requires JavaScript rendering to display job listings
- Uses infinite scroll with a "Load More" button for pagination
- Serves dynamic content that cannot be scraped with simple HTTP requests
The actor operates in different modes:
SERP Only Mode
- SERP Phase: Loads search results and clicks "Load More" to collect all job URLs
SERP + Details Mode
- SERP Phase: Loads search results and clicks "Load More" to collect all job URLs
- Detail Phase: Visits each job page to extract full descriptions and contact info
Direct URLs Mode
- Direct Phase: Visits provided URLs directly, detects job status (online/offline/expired/unknown)
- Data Extraction: Extracts full job data from detail pages
Data Source
This actor scrapes data from the leading Swiss healthcare job portal:
- Website: sozjobs.ch
- Focus: Social work, healthcare, and education professions
- Coverage: German-speaking Switzerland
Legal Notice
This actor accesses publicly available job listings. Please ensure your use case complies with the sozjobs.ch terms of service.
Version History
-
v1.1.0 (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 - Added
top_listingfield to output schema (always null for sozjobs.ch) - Added
contact_positionfield to capture contact person's job title/role - Skip search phase when direct URLs are provided
- Detect offline jobs by checking for 404, "nicht gefunden", etc.
- Performance improvements for direct URL mode
- Added
-
v1.0.0 (2025-12-05): Initial release
- Search-based scraping with region and contract type filtering
- Contact person extraction
- Infinite scroll handling
- Standardized JobListing schema output
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