Jobup Scraper avatar

Jobup Scraper

Pricing

from $0.65 / 1,000 item extracteds

Go to Apify Store
Jobup Scraper

Jobup Scraper

Search Jobup.ch by role or Swiss location and export structured vacancies with stable job IDs, employers, descriptions, employment terms, disclosed salaries, dates, and application URLs for recurring hiring-market monitoring.

Pricing

from $0.65 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Search Jobup.ch and export structured Swiss job listings for vacancy monitoring, recruiting research, and hiring-market analysis.

The Actor turns public Jobup search and vacancy pages into stable dataset rows with job identity, title, employer, location, full description, employment terms, salary when disclosed, dates, and application URLs. Use keywords and a Swiss location, supply a Jobup search URL, or enrich one specific vacancy URL.

What does Jobup Scraper do?

Jobup Scraper supports three practical workflows:

  • search Jobup by role or keyword;
  • narrow searches to a city, canton, or region;
  • extract supplied Jobup search and individual vacancy URLs.

Every accepted vacancy is opened and normalized from public structured job data. The default dataset is ready for spreadsheet export, BI tools, scheduled comparison, databases, and Apify integrations.

The Actor does not require a Jobup account and does not collect private applicant data.

Who is it for

Recruiters and sourcing teams

Build a current list of roles, employers, locations, workload, and apply links before planning outreach or candidate research.

Labor-market analysts

Schedule the same query and compare stable jobId values, posting dates, employers, and vacancy terms over time.

Sales and market-intelligence teams

Identify organizations hiring for relevant skills or expanding in a Swiss region.

Data engineers

Feed normalized Jobup records into a warehouse, dashboard, spreadsheet, webhook, or downstream enrichment pipeline.

Why use this Jobup scraper?

  • Full vacancy records: each accepted search result is enriched from its detail page.
  • Stable identity: jobId supports deduplication and change tracking.
  • Flexible starts: combine keyword searches, location filters, search URLs, and job-detail URLs.
  • Bounded runs: control result count, pages, and transient retries.
  • Typed output: receive explicit salary, date, employer, location, and application fields rather than raw HTML.
  • No hidden browser cost: the Actor uses Jobup's public server-rendered pages without an automatic residential proxy or browser fallback.

What Jobup data can I extract?

FieldMeaning
jobIdStable Jobup vacancy identifier
titleJob title
employerHiring organization when displayed
employerUrlEmployer website or Jobup employer profile
employerLogoUrlPublic employer logo URL
locationWorkplace city, canton, or region
postalCodeSwiss postal code when displayed
countryWorkplace country code, normally CH
employmentTypeContract or employment type
workHoursWorkload or weekly hours when available
descriptionFull plain-text vacancy description
salaryMin, salaryMaxDisclosed salary range
salaryCurrencySalary currency, normally CHF when disclosed
salaryPeriodSalary period such as year or hour
datePostedPublication date
validThroughClosing or validity date when supplied
jobStartDateExpected start date when supplied
directApplyWhether the source marks direct application
jobUrlCanonical public vacancy URL
applicationUrlPublic application route exposed by Jobup
sourceSearchUrlInput or search page that produced the row
scrapedAtExtraction timestamp

Fields that Jobup does not disclose are returned as null; the Actor does not guess salary, location, or dates.

How to scrape Jobup jobs

  1. Open the Actor input page.
  2. Enter one or more roles in Roles or keywords.
  3. Optionally enter a Swiss location such as Geneva, Lausanne, or Zurich.
  4. Set Maximum jobs to the useful dataset size.
  5. Run the Actor.
  6. Open the Jobup vacancies dataset view.
  7. Export JSON, CSV, Excel, XML, or RSS, or connect the dataset to another service.

A small first run of 5–10 jobs is useful for validating your query before scheduling a larger extraction.

Input parameters

ParameterTypeDefaultDescription
keywordsstring array[]Roles or terms to search; each value creates a Jobup search
locationstringemptyOptional city, canton, or region applied to keyword searches and output filtering
startUrlsrequest list[]Public Jobup English/French search or job-detail URLs
maxItemsinteger25Maximum unique vacancy records across all inputs; 1–5,000
maxPagesinteger10Maximum pages inspected per search; 1–100
maxRequestRetriesinteger2Retries for transient network, rate-limit, or upstream failures; 0–4

Provide at least one keyword or start URL. When keywords or a location are supplied together with explicit URLs, the same filters apply to emitted records.

Input examples

Search software engineering jobs in Geneva

{
"keywords": ["software engineer"],
"location": "Geneva",
"maxItems": 10
}
{
"startUrls": [
{ "url": "https://www.jobup.ch/en/jobs/?location=Lausanne" }
],
"maxItems": 25,
"maxPages": 3
}

Enrich an individual vacancy

{
"startUrls": [
{ "url": "https://www.jobup.ch/en/jobs/detail/533b0fc7-03b8-41f5-9704-18c00c4fdb45/" }
],
"maxItems": 1
}

Vacancies expire, so replace an old detail URL with a current public Jobup URL if it later returns 404.

Output example

A current run produces records shaped like this:

{
"jobId": "533b0fc7-03b8-41f5-9704-18c00c4fdb45",
"title": "Software Engineer",
"employer": "Banque Pictet & Cie SA",
"employerUrl": null,
"employerLogoUrl": null,
"location": "Geneva",
"postalCode": "1244",
"country": "CH",
"employmentType": "FULL_TIME",
"workHours": null,
"description": "Your team builds and maintains end-to-end applications...",
"salaryMin": null,
"salaryMax": null,
"salaryCurrency": null,
"salaryPeriod": null,
"datePosted": "2026-08-31T04:09:13+02:00",
"validThrough": null,
"jobStartDate": null,
"directApply": false,
"jobUrl": "https://www.jobup.ch/en/jobs/detail/533b0fc7-03b8-41f5-9704-18c00c4fdb45/",
"applicationUrl": "https://www.jobup.ch/en/jobs/detail/533b0fc7-03b8-41f5-9704-18c00c4fdb45/",
"sourceSearchUrl": "https://www.jobup.ch/en/jobs/?term=software+engineer&location=Geneva",
"scrapedAt": "2026-08-31T15:10:24.981Z"
}

Descriptions are plain text. URLs remain absolute and ready for downstream use.

How much does it cost to scrape Jobup vacancies?

The Actor uses pay-per-event pricing:

  • a one-time Start event per run;
  • an Item processed event for each useful vacancy saved.

The current source package declares a $0.0025 Start fee and a six-tier item curve beginning at $0.001076 per result on BRONZE, with lower unit prices on higher Apify plans. Live Store pricing is the authority and is shown before every run.

Illustrative BRONZE costs with the current declared package price are approximately:

Useful jobsEstimated charge
5$0.0079
25$0.0294
100$0.1101

Retries and pages that do not produce accepted vacancy records do not create item charges. Apify may enforce minimum account or run-charge behavior separately.

Monitor new and changed Swiss vacancies

Schedule a Task with the same keyword/location input daily or weekly. Export each run to your destination and compare records by jobId.

Useful change signals include:

  • a new jobId appears;
  • an existing vacancy disappears from later search snapshots;
  • employment type, workload, description, or apply route changes;
  • an employer posts several related roles;
  • hiring volume changes in a city or skill category.

The Actor returns snapshots. It does not maintain a cross-run history or send alerts by itself; use schedules, webhooks, datasets, or your data platform for that workflow.

Export Jobup jobs to spreadsheets and databases

From the dataset page, select CSV or Excel for one-time analysis. For recurring pipelines, use the dataset API URL or an Apify integration.

Common destinations include:

  • Google Sheets for recruiter review;
  • PostgreSQL, BigQuery, or Snowflake for longitudinal analysis;
  • Slack or email automation for a bounded shortlist;
  • CRM or ATS staging tables after your own compliance review;
  • dashboards that group postings by employer, location, or role.

Run with the Apify API

Set APIFY_TOKEN in your environment. Do not commit it to source code.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~jobup-ch-swiss-job-listings-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":["software engineer"],"location":"Geneva","maxItems":10}'

To wait and retrieve dataset items in one request:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~jobup-ch-swiss-job-listings-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":["nurse"],"maxItems":10}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/jobup-ch-swiss-job-listings-scraper').call({
keywords: ['software engineer'],
location: 'Geneva',
maxItems: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/jobup-ch-swiss-job-listings-scraper').call(run_input={
'keywords': ['software engineer'],
'location': 'Geneva',
'maxItems': 10,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use Jobup Scraper through MCP

Add the Apify MCP server to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/jobup-ch-swiss-job-listings-scraper"

Claude Desktop

Add this remote server JSON to Claude Desktop's MCP configuration.

Cursor

Open Cursor's MCP settings and add the same remote server JSON.

VS Code

Add the same server URL through your MCP-compatible VS Code extension or workspace MCP settings.

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/jobup-ch-swiss-job-listings-scraper"
}
}
}

Example prompts:

  • “Search Jobup for 10 software engineer vacancies in Geneva and summarize employers.”
  • “Extract this Jobup Lausanne result URL and return a CSV-ready vacancy table.”
  • “Run the Jobup nursing monitor input and group jobs by location and employment type.”

Reliability, pagination, and retries

The Actor reads public server-rendered search pages and structured JobPosting data on each detail page.

It retries timeouts, rate limits, and temporary 5xx responses with bounded backoff. Invalid URLs, deterministic 4xx responses, malformed inputs, or missing job structured data fail rather than silently generating unreliable records.

Duplicate vacancy IDs are saved once across all input seeds. Pagination stops when the configured page limit, accepted-item limit, empty page, or repeated page is reached.

Limits and responsible operation

  • Search ordering and available jobs are controlled by Jobup.
  • Expired vacancies can return 404 between discovery and enrichment.
  • Salary fields are frequently null because many employers do not publish salary.
  • A location may appear as a city, canton, workplace label, or postal region.
  • French URLs are accepted, but generated keyword searches use the English surface.
  • The Actor does not bypass login, CAPTCHA, or private applicant systems.
  • Very broad runs make one detail request per accepted candidate and take longer than small runs.

Start with a narrow input and increase limits only when the resulting scope is useful.

Jobup Scraper extracts publicly accessible vacancy information. You are responsible for ensuring that your use complies with Jobup's terms, applicable database and copyright rules, data-protection law, and the rules governing your downstream recruiting or analytics system.

Do not use the Actor to collect private applicant information, overwhelm the source, republish protected descriptions without a lawful basis, discriminate in employment decisions, or send unsolicited messages. Store only the fields needed for a legitimate purpose and apply appropriate retention controls.

This documentation is operational guidance, not legal advice.

Troubleshooting

“Provide at least one keyword or Jobup.ch start URL”

Add a non-empty keywords list or a public https://www.jobup.ch/en/jobs/... / https://www.jobup.ch/fr/emplois/... URL.

A supplied URL is rejected

Only HTTPS Jobup English job/search URLs and French emploi/search URLs are accepted. Profile, login, application-account, and unrelated pages are outside the contract.

The dataset is empty

Check spelling and remove overly narrow filters. Jobup may show recommended cards for a no-match search; the Actor applies your requested terms and location before saving, so irrelevant recommendations are not returned.

Some salary or date fields are null

Those values were not present in Jobup's public structured vacancy data. The Actor intentionally does not infer them.

The run fails on a detail page

The vacancy may have expired or Jobup may be temporarily unavailable. Retry a current search URL. Transient failures are already retried up to maxRequestRetries.

Use Jobup Scraper when the source of record is Jobup.ch and the buyer job is Swiss vacancy extraction or recurring hiring-market monitoring.

FAQ

Does this Actor need a Jobup account?

No. It processes public search and job-detail pages only.

Can I search several roles in one run?

Yes. Add multiple keywords; the Actor deduplicates overlapping vacancies by stable Jobup ID.

Can I scrape one vacancy URL?

Yes. Put the current detail URL in startUrls and set maxItems to 1.

Does it expose recruiter contacts?

It returns only information present in the public vacancy structured data. It does not promise or separately enrich recruiter contacts.

Can it send alerts when a job changes?

The Actor produces timestamped snapshots with stable IDs. Use an Apify schedule and webhook or compare datasets in your own automation to generate alerts.

Is every Jobup vacancy guaranteed?

No. Results depend on the source's current public pages, search ordering, publication state, and your limits. The Actor reports useful current records without claiming exhaustive historical coverage.