# Jobup.ch Scraper — Swiss Romandie Jobs (Geneva, Lausanne) (`hipersoft/jobup-scraper`) Actor

Scrape job listings from jobup.ch, French-speaking Switzerland's leading job board. Search by keyword, location and workload; get title, company, location, coordinates, workload, employment type, category, publication date, full description and salary when published. Export JSON/CSV/Excel.

- **URL**: https://apify.com/hipersoft/jobup-scraper.md
- **Developed by:** [hiper soft](https://apify.com/hipersoft) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00075 / job

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Jobup.ch Scraper: Swiss Romandie Job Listings & Salaries (Geneva, Lausanne, Vaud)

**Jobup.ch Scraper** extracts job listings from **jobup.ch**, the leading job board of **French-speaking Switzerland (Suisse romande)**, covering **Geneva, Lausanne, Vaud, Fribourg, Neuchâtel, Valais and Jura**, plus jobs across all of Switzerland. Every job includes the **title, company, company logo, location with postal code and GPS coordinates, workload (taux d'activité, e.g. 80–100%), employment type (CDI, CDD, temporary, internship), category, profession, publication date** and, with full details enabled, the **complete job description, working hours and salary when published**. Search **offres d'emploi** by keyword, location and workload, and export to **CSV, Excel or JSON**.

### What does Jobup.ch Scraper do?

- 🔍 **Search by keyword** in French or English: développeur, comptable, infirmier, assistant de direction, marketing manager. Leave empty to collect every published job.
- 📍 **Filter by location**: Genève, Lausanne, Vaud, Fribourg, Neuchâtel, Sion, or any Swiss city, region or canton.
- 📊 **Filter by workload (taux d'activité)**: e.g. 80–100% for full-time or up to 60% for part-time roles.
- 🌐 **English or French** links and descriptions.
- 🔗 **Paste jobup.ch links**: any search-results page or job page straight from your browser.
- 🧾 **Rich job fields**: title, company, location, coordinates, workload, employment type, category, publication date and logo.
- 💶 **Full details (optional)**: complete description, profession, working hours and **salary in CHF** when the employer publishes it.
- 📤 **Clean, flat output** ready for spreadsheets, databases and dashboards.

### What data can you scrape from jobup.ch?

| Field | Description |
|---|---|
| Job ID, title | Jobup.ch job identifier and title |
| Company | Company name, ID, logo and website |
| Location | City, postal code, region, latitude, longitude |
| Workload | Minimum and maximum employment grade (%) |
| Employment type | Permanent (CDI), fixed-term (CDD), temporary, internship… |
| Category and profession | Job category and profession |
| Working hours | Hours per week (full details) |
| Salary | Salary range in CHF, if published (full details) |
| Description | Full job description (full details) |
| Publication date | When the job was published |
| Links | Job page and application link |

### Use cases for Swiss Romandie job data

- **Recruiters and staffing agencies (placement, recrutement)**: find companies hiring in Geneva, Lausanne and Vaud.
- **Salary benchmarking**: collect published CHF salary ranges by profession and region.
- **Job-market research**: track demand for finance, IT, healthcare, watchmaking and hospitality roles in Suisse romande.
- **B2B sales prospecting**: hiring companies are growing companies and good leads for HR, IT and consulting services.
- **Job aggregators and alerts**: build a daily feed of new offres d'emploi.
- **Cross-border workers (frontaliers)**: monitor jobs near the French border in Geneva, Vaud, Neuchâtel and Jura.

### How to scrape jobup.ch

1. Click **Try for free** to open Jobup.ch Scraper in Apify Console.
2. Enter **search keywords** and optionally a **location** and **workload** range.
3. Optionally turn on **Include full details** for descriptions and salaries.
4. Set **Max items** and click **Start**.
5. Download the jobs as **CSV, Excel or JSON**.

### Input

#### Example input

```json
{
  "query": "comptable",
  "location": "Genève",
  "employmentGradeMin": 80,
  "language": "fr",
  "includeDetail": true,
  "maxItems": 200
}
```

| Field | Description |
|---|---|
| **Search keywords** | Keywords to search for. Leave empty to collect all published jobs. |
| **Location** | Optional Swiss city, region or canton. |
| **Minimum / Maximum workload (%)** | Optional employment-grade range. |
| **Language** | English or French links and descriptions. |
| **Start URLs** | Optional jobup.ch search or job links. Used instead of the fields above. |
| **Include full details** | Adds description, profession, working hours and salary. Slower, richer output. |
| **Max items** | Maximum number of jobs (0 = no limit). |

### Output

#### Job example

```json
{
  "jobId": "682da5d8-3b87-4ab3-9eff-555ea562dff4",
  "title": "Comptable Senior",
  "companyName": "Qualibroker – Swiss Risk Care SA",
  "companyId": "63781",
  "companyLogoUrl": "https://media.jobup.ch/media/ce835c5a-8c37-4503-8ede-729469d76626.jpg?dimensions=320x0",
  "companyUrl": "https://www.swissriskcare.ch/",
  "location": "Vésenaz",
  "postalCode": "1222",
  "latitude": 46.240914,
  "longitude": 6.199018,
  "employmentGradeMin": 100,
  "employmentGradeMax": 100,
  "employmentType": "Durée indéterminée",
  "workHours": "42 - 42 hours/week",
  "category": "Finances / Comptabilité / Controlling",
  "profession": "Collaborateur Comptabilité",
  "publicationDate": "2026-10-02T02:02:46+02:00",
  "language": "fr",
  "salary": "CHF 65050 - 105050 / year",
  "description": "Pour ses bureaux situés à Vésenaz (GE), le groupe Qualibroker Swiss Risk & Care, recherche un(e) Comptable Senior…",
  "isActive": true,
  "detailUrl": "https://www.jobup.ch/fr/emplois/detail/682da5d8-3b87-4ab3-9eff-555ea562dff4/",
  "applyUrl": "https://www.jobup.ch/fr/emplois/detail/682da5d8-3b87-4ab3-9eff-555ea562dff4/"
}
```

#### Output schema

| Field | Type | Description |
|---|---|---|
| `jobId` | string | Jobup.ch job ID. |
| `title` | string | Job title. |
| `companyName`, `companyId`, `companyLogoUrl`, `companyUrl` | string | Employer. |
| `location`, `postalCode`, `region` | string | Location. |
| `latitude`, `longitude` | number | Coordinates. |
| `employmentGradeMin`, `employmentGradeMax` | number | Workload (%). |
| `employmentType` | string | Contract type. |
| `workHours` | string | Weekly hours (full details). |
| `category`, `profession` | string | Category and profession. |
| `requiredLanguages` | array | Required languages, when listed. |
| `publicationDate` | string (ISO date) | Publication date. |
| `salary` | string | Salary range, if published (full details). |
| `teaser`, `description` | string | Short teaser and full description. |
| `isActive` | boolean | Whether the job is still open. |
| `detailUrl`, `applyUrl`, `url` | string (URL) | Job page and application link. |

### How much does it cost to scrape jobup.ch?

Jobup.ch Scraper uses **pay-per-job** pricing: a small fixed price per job, with automatic discounts on higher Apify plans. See the **Pricing** tab for the exact price.

### More Swiss and European job data

- [Jobs.ch Scraper](https://apify.com/hipersoft/jobs-ch-scraper): jobs from jobs.ch, Switzerland's largest job board (German-speaking Switzerland).
- [LinkedIn Jobs Scraper](https://apify.com/hipersoft/linkedin-jobs-scraper): LinkedIn jobs in Switzerland and worldwide.
- [Indeed Scraper](https://apify.com/hipersoft/indeed-scraper): jobs from Indeed.

### FAQ

**Can I search in French?**
Yes. French and English keywords both work, and job texts are returned exactly as published.

**Does it include salaries?**
Yes, when the employer publishes a salary. Turn on **Include full details** to get it.

**How many jobs can I get?**
Everything that matches your search. Leave keywords empty and set **Max items** to 0 to collect all published jobs.

**Can I monitor new jobs daily?**
Yes. Schedule the scraper daily with your keywords and location.

**What formats can I export?**
CSV, Excel, JSON, XML, HTML and RSS, or read the results through the Apify API.

**Can I integrate Jobup.ch Scraper with other apps?**
Jobup.ch Scraper can be connected with almost any cloud service or web app thanks to [integrations on the Apify platform](https://apify.com/integrations). It works with [Make](https://apify.com/integrations/make), [Zapier](https://apify.com/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), [Airbyte](https://docs.apify.com/platform/integrations/airbyte), [GitHub](https://docs.apify.com/platform/integrations/github), [Google Drive](https://docs.apify.com/platform/integrations/drive) and [many more](https://apify.com/integrations), plus the [Apify API](https://docs.apify.com/api/v2), JS/Python clients and MCP. Or use [webhooks](https://docs.apify.com/platform/integrations/webhooks) to trigger an action whenever a run finishes.

**Is it legal to scrape jobup.ch?**
The scraper only collects publicly listed job offers. You are responsible for using the data in line with jobup.ch's terms and Swiss data-protection law (nFADP).

### Related Actors

- [Jobs.ch Scraper](https://apify.com/hipersoft/jobs-ch-scraper)
- [LinkedIn Jobs Scraper](https://apify.com/hipersoft/linkedin-jobs-scraper)
- [Indeed Scraper](https://apify.com/hipersoft/indeed-scraper)

### Notes

Original clean-room implementation. Returns only public data. Not affiliated with jobup.ch or JobCloud.

# Actor input Schema

## `query` (type: `string`):

Keywords to search for (e.g. "développeur", "comptable", "infirmier", "marketing manager"). Leave empty to collect all currently published jobs. Ignored when Start URLs are set.

## `location` (type: `string`):

Optional. Limit results to a Swiss city, region or canton (e.g. "Geneva", "Lausanne", "Vaud", "Fribourg", "Neuchâtel"). Leave empty to search all of Switzerland.

## `employmentGradeMin` (type: `integer`):

Optional. Only collect jobs whose workload starts at or above this percentage (e.g. 80 for 80–100% roles).

## `employmentGradeMax` (type: `integer`):

Optional. Only collect jobs whose workload is at or below this percentage (e.g. 60 for part-time roles).

## `language` (type: `string`):

Language for the listing detail links and (with "Include full details") the job descriptions.

## `startUrls` (type: `array`):

Optional. One or more jobup.ch search-results or job-detail URLs. Paste the URL straight from your browser. When set, these are used instead of the fields above.

## `includeDetail` (type: `boolean`):

Fetch each job's detail page for extra fields (full description, profession, category, employment type, working hours, salary if published, company page). Slower, but richer output.

## `maxItems` (type: `integer`):

Maximum number of jobs to collect across all searches (0 = no limit; collect everything the searches return).

## Actor input object example

```json
{
  "query": "développeur",
  "language": "en",
  "includeDetail": false,
  "maxItems": 100
}
```

# Actor output Schema

## `results` (type: `string`):

The results as dataset items.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "développeur"
};

// Run the Actor and wait for it to finish
const run = await client.actor("hipersoft/jobup-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "query": "développeur" }

# Run the Actor and wait for it to finish
run = client.actor("hipersoft/jobup-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "développeur"
}' |
apify call hipersoft/jobup-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hipersoft/jobup-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/chcsHqSXrdTIaJ8TI/builds/JpOakkoiVS08yD7Ub/openapi.json
