Jobup.ch Scraper — Swiss Jobs with CHF Salary Ranges avatar

Jobup.ch Scraper — Swiss Jobs with CHF Salary Ranges

Pricing

from $1.15 / 1,000 results

Go to Apify Store
Jobup.ch Scraper — Swiss Jobs with CHF Salary Ranges

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

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

14

Total users

9

Monthly active users

10 days ago

Last modified

Share

Jobup.ch Scraper

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

FieldTypeDescription
searchQuerystringKeyword(s) to search, e.g. software engineer, infirmier.
locationstringCity, canton or region, e.g. Genève, Zürich, Vaud. Empty = all Switzerland.
languageselectLocale: en, fr, de, it. Default en.
sortByselectrelevance (default), date, or random.
employmentTypeselectTemporary, Freelance, Internship, Supplementary income, Permanent position, Apprenticeship, or all.
workloadMinintegerMinimum workload %. Drops jobs offering less. 0 = no minimum.
workloadMaxintegerMaximum workload %. Drops jobs requiring more. 100 = no maximum.
daysOldintegerOnly jobs published within N days (1, 3, 7, 30).
fetchDetailsbooleanFetch detail pages for full description, salary, company website, address, apply URL. Default false.
skipRepostsbooleanExclude reposts of jobs seen in the last 90 days.
descriptionFormatselectall, text, html, or markdown.
compactbooleanCore fields only — for AI/MCP pipelines.
excludeEmptyFieldsbooleanDrop null/empty fields from each record.
maxResultsintegerMaximum listings to return. Default 100.
startUrlsarrayOptional jobup.ch search URLs to scrape directly.

Output

Each job is one dataset record. Fields marked detail require fetchDetails: true.

FieldTypeDescription
idstringjobup.ch job identifier.
urlstringCanonical detail-page URL.
titlestringJob title.
companystringEmployer name.
companyIdstringjobup.ch company identifier.
companySlugstringCompany URL slug.
companyLogostringCompany logo image URL.
companyWebsitestringEmployer website (detail).
placestringLocation label as shown on the listing.
citystringCity.
cantonstringCanton code where available.
postalCodestringPostal code (detail).
countrystringCountry code (default CH).
latitudenumberLatitude where available.
longitudenumberLongitude where available.
regionstringRegion label(s).
publishDatestringPublication date (Europe/Zurich, YYYY-MM-DD).
initialPublishDatestringFirst publication date.
relativeDatestringHuman-readable recency, e.g. 4 hours ago.
salaryMinnumberMinimum salary.
salaryMaxnumberMaximum salary.
salaryCurrencystringSalary currency (usually CHF).
salaryPeriodstringSalary unit, e.g. YEAR.
workloadstringWorkload band, e.g. 80-100%.
workloadMinnumberMinimum workload %.
workloadMaxnumberMaximum workload %.
workHoursstringWeekly hours (detail), e.g. 33.6 - 42 hours/week.
contractTypestringEmployment type label.
positionstringPosition level, e.g. Employee.
categorystringOccupational category (detail).
languageSkillsarrayRequired language skills where listed.
benefitsarrayListed benefits where present.
listingTagsarrayListing tags where present.
isNewbooleanFlagged new by jobup.ch.
isSponsoredbooleanPaid/featured listing.
isActivebooleanListing active state.
directApplybooleanDirect-apply available (detail).
jobStartDatestringJob start date (detail).
totalJobOpeningsnumberOpenings for this posting (detail).
applyUrlstringApplication URL (detail).
validThroughstringListing expiry where published (detail).
descriptionstringFull description, HTML (detail).
descriptionTextstringFull description, plain text (detail).
descriptionMarkdownstringFull description, Markdown (detail).
isRepostbooleanDetected as a repost of a previously seen job.
originalPublishDatestringFirst-seen date for reposts.
originalUrlstringFirst-seen URL for reposts.
changeStatusstringNEW, UPDATED, UNCHANGED, or REAPPEARED across runs.
contentHashstringStable content fingerprint.
summarystringOne-line title/company/place summary.
sourcestringAlways jobup.ch.
scrapedAtstringISO 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 require fetchDetails: 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.