Jobup.ch Scraper — Swiss Jobs with CHF Salary Ranges
Pricing
from $1.15 / 1,000 results
Jobup.ch Scraper — Swiss Jobs with CHF Salary Ranges
Extract structured Swiss job listings from Jobup.ch — Switzerland's leading French-language job board. 100,000+ listings with CHF salary ranges, employment type, workload %, full descriptions in HTML, text and Markdown. Repost detection & daysOld filters included. No API key required.
Pricing
from $1.15 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
14
Total users
9
Monthly active users
10 days ago
Last modified
Categories
Share
Jobup.ch Scraper

Extract structured job listings from Jobup.ch — Switzerland's leading job board — in a clean, consistent format ready for analysis, job boards, recruiting tools, and market research. Search in French, German, Italian or English, filter by employment type, workload and recency, and enrich each job with full descriptions, salary, company website and structured address. No API key required.
Why this scraper
- Most fields on the market. Up to 40 structured fields per job, including CHF salary ranges, workload percentage, occupational category, work hours, company website and logo, structured postal address with coordinates, apply URL, and start date.
- Push notifications: get new results delivered to Telegram, Discord, Slack, WhatsApp or any webhook the moment a scheduled run finds them
- Full Swiss coverage. French, German, Italian and English locales — the same listings across all four Swiss language markets.
- Descriptions in three formats. HTML, plain text, and Markdown — pick all or one.
- Precise filtering. Employment type, workload min/max percentage, recency window, and staffing-agency repost detection.
- Reliable. Every job is parsed and enriched inside its own error boundary, so one malformed listing can never fail a run.
- AI-ready. Compact mode and empty-field trimming produce lean payloads for LLM and MCP pipelines.
Input
| Field | Type | Description |
|---|---|---|
searchQuery | string | Keyword(s) to search, e.g. software engineer, infirmier. |
location | string | City, canton or region, e.g. Genève, Zürich, Vaud. Empty = all Switzerland. |
language | select | Locale: en, fr, de, it. Default en. |
sortBy | select | relevance (default), date, or random. |
employmentType | select | Temporary, Freelance, Internship, Supplementary income, Permanent position, Apprenticeship, or all. |
workloadMin | integer | Minimum workload %. Drops jobs offering less. 0 = no minimum. |
workloadMax | integer | Maximum workload %. Drops jobs requiring more. 100 = no maximum. |
daysOld | integer | Only jobs published within N days (1, 3, 7, 30). |
fetchDetails | boolean | Fetch detail pages for full description, salary, company website, address, apply URL. Default false. |
skipReposts | boolean | Exclude reposts of jobs seen in the last 90 days. |
descriptionFormat | select | all, text, html, or markdown. |
compact | boolean | Core fields only — for AI/MCP pipelines. |
excludeEmptyFields | boolean | Drop null/empty fields from each record. |
maxResults | integer | Maximum listings to return. Default 100. |
startUrls | array | Optional jobup.ch search URLs to scrape directly. |
Output
Each job is one dataset record. Fields marked detail require fetchDetails: true.
| Field | Type | Description |
|---|---|---|
id | string | jobup.ch job identifier. |
url | string | Canonical detail-page URL. |
title | string | Job title. |
company | string | Employer name. |
companyId | string | jobup.ch company identifier. |
companySlug | string | Company URL slug. |
companyLogo | string | Company logo image URL. |
companyWebsite | string | Employer website (detail). |
place | string | Location label as shown on the listing. |
city | string | City. |
canton | string | Canton code where available. |
postalCode | string | Postal code (detail). |
country | string | Country code (default CH). |
latitude | number | Latitude where available. |
longitude | number | Longitude where available. |
region | string | Region label(s). |
publishDate | string | Publication date (Europe/Zurich, YYYY-MM-DD). |
initialPublishDate | string | First publication date. |
relativeDate | string | Human-readable recency, e.g. 4 hours ago. |
salaryMin | number | Minimum salary. |
salaryMax | number | Maximum salary. |
salaryCurrency | string | Salary currency (usually CHF). |
salaryPeriod | string | Salary unit, e.g. YEAR. |
workload | string | Workload band, e.g. 80-100%. |
workloadMin | number | Minimum workload %. |
workloadMax | number | Maximum workload %. |
workHours | string | Weekly hours (detail), e.g. 33.6 - 42 hours/week. |
contractType | string | Employment type label. |
position | string | Position level, e.g. Employee. |
category | string | Occupational category (detail). |
languageSkills | array | Required language skills where listed. |
benefits | array | Listed benefits where present. |
listingTags | array | Listing tags where present. |
isNew | boolean | Flagged new by jobup.ch. |
isSponsored | boolean | Paid/featured listing. |
isActive | boolean | Listing active state. |
directApply | boolean | Direct-apply available (detail). |
jobStartDate | string | Job start date (detail). |
totalJobOpenings | number | Openings for this posting (detail). |
applyUrl | string | Application URL (detail). |
validThrough | string | Listing expiry where published (detail). |
description | string | Full description, HTML (detail). |
descriptionText | string | Full description, plain text (detail). |
descriptionMarkdown | string | Full description, Markdown (detail). |
isRepost | boolean | Detected as a repost of a previously seen job. |
originalPublishDate | string | First-seen date for reposts. |
originalUrl | string | First-seen URL for reposts. |
changeStatus | string | NEW, UPDATED, UNCHANGED, or REAPPEARED across runs. |
contentHash | string | Stable content fingerprint. |
summary | string | One-line title/company/place summary. |
source | string | Always jobup.ch. |
scrapedAt | string | ISO timestamp of extraction. |
Example output
{"id": "1f8fcfe9-2e5f-4c1f-bb9e-ee8af387ad3d","url": "https://www.jobup.ch/en/jobs/detail/1f8fcfe9-2e5f-4c1f-bb9e-ee8af387ad3d/","title": "Infirmier-ère référent-e en soins à domicile","company": "IMAD","companyWebsite": "http://www.imad-ge.ch","companyLogo": "https://media.jobup.ch/media/bce55372.jpg","place": "Genève","city": "Genève","country": "CH","publishDate": "2026-07-06","relativeDate": "4 hours ago","salaryMin": 87958,"salaryMax": 118926,"salaryCurrency": "CHF","salaryPeriod": "YEAR","workload": "80-100%","workHours": "33.6 - 42 hours/week","contractType": "Permanent position","position": "Employee","category": "Healthcare / Medicine / Nurse / Midwife","directApply": true,"totalJobOpenings": 11,"applyUrl": "https://www.jobup.ch/en/jobs/detail/1f8fcfe9-2e5f-4c1f-bb9e-ee8af387ad3d/apply","descriptionText": "...","source": "jobup.ch","scrapedAt": "2026-07-06T10:00:00.000Z"}
Examples
1. Basic keyword search
{ "searchQuery": "data scientist", "maxResults": 50 }
2. Full-time nursing jobs in Geneva, last 7 days, with full details
{ "searchQuery": "infirmier", "location": "Genève", "language": "fr", "workloadMin": 80, "daysOld": 7, "fetchDetails": true }
3. New permanent roles only, newest first, reposts removed
{ "searchQuery": "comptable", "employmentType": "5", "sortBy": "date", "skipReposts": true }
4. Compact output for an AI pipeline
{ "searchQuery": "software engineer", "location": "Zürich", "compact": true, "excludeEmptyFields": true, "fetchDetails": true }
Pricing
This actor is pay-per-result: you pay only for jobs delivered to your dataset. Priced at $1.44 per 1,000 results. Runs that fetch details cost the same per result — enrichment is included.
Performance
- Listings are read from jobup.ch's structured search API embedded in each page, so extraction is fast and stable.
- Without
fetchDetails, expect roughly 20 jobs per page in a fraction of a second each. - With
fetchDetails, each job adds one detail-page fetch with a short polite delay. - Runs on 256 MB — low compute footprint.
Limitations
- Salary appears only where the employer publishes it; many Swiss listings omit it.
workHours,category,companyWebsite,directApply, and full descriptions requirefetchDetails: true.- Coordinates and postal code are populated only where jobup.ch exposes them.
- Repost detection and change tracking use a 90-day rolling memory per search universe.
Technical details
- No proxy or API key required — jobup.ch serves listings without bot protection.
- Publication dates are normalised to the Europe/Zurich timezone.
- Employment type and position IDs are mapped to human-readable labels.
- Each job is parsed and enriched inside its own error boundary; a single bad listing is logged and skipped, never fatal.
Rate this actor
If this scraper does its job, a short review on the Reviews tab helps other users find it. Something not working? Open an issue on the Issues tab instead — issues get fixed.
Your feedback
We're always working to improve our scrapers. If you have suggestions, run into a bug, or need a specific data field, please create an issue on the actor's Issues tab and we'll respond quickly.