Jobup.ch Scraper
Pricing
from $1.50 / 1,000 results
Jobup.ch Scraper
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.50 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Actor stats
1
Bookmarked
3
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share

Extract structured job listings from jobup.ch, Switzerland's leading French and Italian-speaking job board powered by JobCloud. Search by keyword and location across 100,000+ active listings. No API key required.
Why use this scraper?
- Complete Swiss job market coverage — jobup.ch is the dominant platform for French- and Italian-speaking Switzerland, covering Geneva, Lausanne, Bern, Zurich, Lugano and beyond
- Salary data included — extract CHF salary ranges (min/max, annual/monthly) directly from listings where employers provide them
- Rich structured output — job title, company, location, workload percentage, contract type, full description in HTML, plain text and Markdown
- Repost detection — cross-run deduplication with 90-day memory identifies reposts so you only process genuinely new listings
- Multilingual — search in English or French
- Date filtering — filter by posting date (last 1, 3, 7 or 30 days)
What data is extracted?
Each job listing returns the following fields:
| Field | Description |
|---|---|
id | Unique UUID from jobup.ch |
url | Direct URL to the job posting |
title | Job title |
company | Employer name |
companyId | Jobup company ID (if available) |
companyLogo | Logo image URL |
place | City or location of the role |
publishDate | Publication date (YYYY-MM-DD) |
publishDateISO | Publication date in ISO 8601 format |
initialPublishDate | Original publication date (before reposts) |
salaryMin | Minimum salary value |
salaryMax | Maximum salary value |
salaryCurrency | Salary currency (typically CHF) |
salaryPeriod | Pay period (YEAR, MONTH, WEEK, HOUR) |
workload | Workload percentage (e.g. 80–100%, 100%) |
contractType | Contract type (Permanent position, Temporary, Freelance, Internship, etc.) |
position | Seniority level (Employee, Position with responsibilities, Executive position) |
isNew | Whether the listing was posted today |
isSponsored | Whether the listing is a sponsored/paid placement |
description | Full job description (HTML) |
descriptionText | Full job description (plain text) |
descriptionMarkdown | Full job description (Markdown) |
applyUrl | Application URL |
validThrough | Application deadline (ISO 8601, if provided) |
isRepost | Whether this job was seen in a previous run |
originalPublishDate | First date the job was seen (dedup) |
contentHash | MD5 fingerprint of URL + publish date |
source | Always jobup.ch |
scrapedAt | Timestamp of scrape |
summary | Short human-readable summary for alerts |
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | String | "" | Keywords to search (e.g. "developer", "comptable") |
location | String | "" | City or region (e.g. "Geneva", "Lausanne", "Zurich") |
language | Select | "en" | Search language: en (English) or fr (Français) |
maxResults | Integer | 100 | Maximum number of results to return |
daysOld | Integer | — | Filter to jobs posted within N days (1/3/7/30) |
fetchDetails | Boolean | true | Fetch full description from detail page (disable for list-only data) |
skipReposts | Boolean | false | Skip listings already seen in previous runs |
startUrls | Array | [] | Custom jobup.ch search URLs to scrape instead of building from query |
Example input
{"searchQuery": "software engineer","location": "Geneva","language": "en","maxResults": 200,"daysOld": 7,"fetchDetails": true,"skipReposts": false}
Using a custom search URL
{"startUrls": [{ "url": "https://www.jobup.ch/en/jobs/?term=comptable&location=lausanne&publicationDate=7" }],"maxResults": 100}
Pricing
This actor uses Pay-Per-Event (PPE) pricing — you only pay for what you use.
| Event | Cost |
|---|---|
| Per 1,000 job listings | $1.50 |
| Actor start | $0.00005 |
Flat-rate comparison: scraping 10,000 jobs costs approximately $15.00 — far less than enterprise data providers charging $500–$2,000/month for Swiss job market data.
Performance
| Configuration | Speed | Cost per 1,000 jobs |
|---|---|---|
fetchDetails: false (list only) | ~500 jobs/min | ~$0.75 |
fetchDetails: true (full description) | ~80 jobs/min | ~$1.50 |
With daysOld filter | Faster (fewer pages) | Proportional |
Known limitations
- Date filter granularity — jobup.ch only supports discrete date filters (1, 3, 7 or 30 days). Values in between are rounded up to the next supported tier.
- Salary availability — many employers choose not to display salary information; these listings will return
nullfor salary fields. - Application URL — some jobs redirect to a third-party ATS. The
applyUrlreflects the target URL from the JSON-LD structured data. validThrough— application deadlines are only present when employers explicitly set them.
Technical details
- Memory: 256 MB
- Deduplication store:
jobup-ch-job-dedup(90-day TTL, stored in Apify Key-Value Store) - Timezone: All dates normalised to
Europe/Zurich - Supported languages: English (
en), French (fr) - Pagination: 20 results per page; actor handles all pages automatically
Additional services
Need a custom scraper, scheduled data delivery, webhook integration, or a tailored Swiss job market feed? Contact unfenced-group via the Apify platform — we build bespoke data solutions for HR tech teams, recruitment platforms and market intelligence providers.
unfenced-group — Swiss job market data infrastructure