# jobup.ch Scraper (`solidcode/jobup-ch-scraper`) Actor

\[💰 $1.3 / 1K] Extract job listings from jobup.ch, Switzerland's #1 job board — titles, companies, salary clues, workload %, contract type, locations, and full descriptions. Filter by keyword, location, contract, and workload.

- **URL**: https://apify.com/solidcode/jobup-ch-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.30 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## jobup.ch Scraper

Pull job listings from jobup.ch — Switzerland's #1 job board — at scale, with full descriptions, direct apply links, employer details, workload percentages, and contract types for every posting across the country. jobup.ch is trilingual, so titles and descriptions come back in the language the employer published them (German, French, or English). Built for Swiss recruiters, HR-tech and job-aggregator teams, and labor-market researchers who need fresh, structured jobup.ch data without rebuilding their pipeline every time the site ships a new layout.

### Why This Scraper?

- **Workload-percentage range filtering (0–100%)** — set a minimum and maximum workload to isolate Swiss part-time roles (e.g. 60–80%) or full-time only (90–100%). This is the facet that defines the Swiss job market, and it is sent straight to jobup.ch's own search.
- **Five contract types, server-side filtered** — permanent, temporary/fixed-term, internship, freelance/contract, and apprenticeship. The filter runs on jobup.ch, so you only collect — and only pay for — jobs that match.
- **Full job descriptions plus direct apply URLs** — every detail-enriched posting returns the complete description as clean plain text and HTML, alongside the employer's real external application link.
- **Trilingual output (German / French / English)** — jobup.ch serves all of Switzerland, and each posting comes back in the language the employer wrote it, with localized labels honoring your chosen site language.
- **Employer identity on every row** — company name, employer ID, and logo URL, so you can group postings by company or enrich an existing employer database.
- **Publication-date windows down to 24 hours** — limit to the last 1, 3, 7, 14, or 30 days to capture only fresh openings and skip stale reposts.
- **Canton and region tagging** — each job carries its city, canton/region code, and postal code, ready for geographic roll-ups across all 26 Swiss cantons.
- **Newest-first or relevance sorting** — order by publication date for monitoring pipelines, or by relevance for keyword discovery.
- **Up to ~100,000 jobs per run** — paste any jobup.ch search or job-detail link as a Start URL, or just type a keyword and location; pagination runs automatically to the cap.

### Use Cases

**Recruitment & Sourcing**
- Build live talent-pipeline feeds for specific roles and cantons
- Monitor competitor job postings to track hiring momentum
- Pull direct apply URLs in bulk for outreach and ATS import
- Spot newly posted roles within the last 24 hours

**HR-Tech & Job Aggregators**
- Power a job board or meta-search with structured Swiss listings
- Keep an aggregator index fresh with newest-first daily pulls
- Normalize trilingual postings into one clean schema

**Labor-Market Research**
- Track Swiss hiring trends by canton, contract type, and workload
- Quantify the part-time vs. full-time split using workload percentages
- Analyze posting volume over publication-date windows

**Relocation & Talent Mobility**
- Surface roles open to international candidates across Switzerland
- Compare opportunity density between Zürich, Geneva, and other regions
- Filter by workload for candidates seeking part-time or flexible roles

**Competitive Salary & Demand Intelligence**
- Map which employers are hiring most aggressively by category
- Measure demand for specific skills via keyword volume over time
- Benchmark contract-type mix across industries

### Getting Started

#### Simple Keyword Search

Just a keyword and a location:

```json
{
    "searchTerm": "software engineer",
    "location": "Zürich",
    "maxResults": 50
}
````

#### Filtered Part-Time Search

Permanent and temporary roles between 60% and 80% workload, posted in the last week, newest first:

```json
{
    "searchTerm": "marketing",
    "location": "Genève",
    "employmentType": ["permanent", "temporary"],
    "workloadMin": 60,
    "workloadMax": 80,
    "publishedSince": "7",
    "sortBy": "date",
    "maxResults": 200
}
```

#### Using jobup.ch URLs

Paste any jobup.ch search page or individual job posting — these override the keyword and location fields:

```json
{
    "startUrls": [
        "https://www.jobup.ch/en/jobs/?term=infirmier&location=Lausanne",
        "https://www.jobup.ch/en/jobs/detail/abc123-def456/"
    ],
    "includeDescription": true,
    "maxResults": 100
}
```

### Input Reference

#### Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchTerm` | string | `"software engineer"` | Job title, skill or keyword. Leave empty to browse all jobs. Ignored when Start URLs are provided. |
| `location` | string | `"Zürich"` | City, canton or region, e.g. "Zürich", "Genève" or "Lausanne". Leave empty to search all of Switzerland. Ignored when Start URLs are provided. |
| `startUrls` | array | `[]` | One or more jobup.ch URLs — search result pages or individual job postings. When provided, these override Search Keywords and Location. |
| `language` | select | `English` | Site language for titles and labels: English, German (Deutsch), or French (Français). |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `employmentType` | array | `[]` | Contract types to collect: Permanent position, Temporary / fixed-term, Internship, Freelance / contract, Apprenticeship. Leave empty to include all. |
| `workloadMin` | integer | `null` | Minimum workload percentage (0–100). For example, 80 keeps roles of 80% and up. Leave empty for no minimum. |
| `workloadMax` | integer | `null` | Maximum workload percentage (0–100). For example, 60 keeps part-time roles up to 60%. Leave empty for no maximum. |
| `publishedSince` | select | `Any time` | Only collect jobs published within this window: Any time, Last 24 hours, Last 3 days, Last week, Last 2 weeks, Last 30 days. |
| `sortBy` | select | `Most relevant` | Result order: Most relevant or Newest first. |

#### Output Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeDescription` | boolean | `true` | Fetch the complete job description, requirements, and contact details from each posting. Turn off for a faster, lighter run that returns only the summary fields. |
| `maxResults` | integer | `200` | Maximum number of jobs to collect. Set to 0 to collect every matching job (a broad search collects up to about 100,000 jobs, after which the run stops automatically). You are charged per job returned. |

### Output

Here's a representative result with full descriptions enabled:

```json
{
    "jobId": "abc123-def456",
    "title": "Senior Software Engineer",
    "company": "Example AG",
    "companyId": "78421",
    "companyLogo": "https://www.jobup.ch/logos/example-ag.png",
    "location": "Zürich",
    "region": "ZH",
    "zipcode": "8005",
    "street": "Bahnhofstrasse 1",
    "workload": "80 – 100%",
    "workloadMin": 80,
    "workloadMax": 100,
    "employmentType": "permanent",
    "categories": ["IT / Telecommunication", "Software Development"],
    "languageSkills": ["German", "English"],
    "description": "We are looking for a Senior Software Engineer to join our team in Zürich...",
    "descriptionHtml": "<p>We are looking for a Senior Software Engineer...</p>",
    "contactName": "Maria Müller",
    "contactPhone": "+41 44 123 45 67",
    "applyUrl": "https://careers.example.ag/apply/senior-software-engineer",
    "isPaid": true,
    "publicationDate": "2026-05-28T08:00:00Z",
    "initialPublicationDate": "2026-05-20T08:00:00Z",
    "publicationEndDate": "2026-06-28T08:00:00Z",
    "scrapedAt": "2026-06-02T14:30:00Z",
    "url": "https://www.jobup.ch/en/jobs/detail/abc123-def456/"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `jobId` | string | jobup.ch internal job identifier |
| `title` | string | Job title |
| `categories` | string\[] | Job categories / industry |
| `languageSkills` | string\[] | Required language skills, when listed |
| `description` | string | Full job description as plain text (when descriptions are enabled) |
| `descriptionHtml` | string | Job description as HTML (when available) |
| `isPaid` | boolean | Whether the posting is a paid/promoted listing |
| `scrapedAt` | string | ISO 8601 timestamp the row was collected |
| `url` | string | Canonical jobup.ch job URL |

#### Company

| Field | Type | Description |
|-------|------|-------------|
| `company` | string | Hiring company / employer name |
| `companyId` | string | Employer identifier |
| `companyLogo` | string | Employer logo URL |

#### Location

| Field | Type | Description |
|-------|------|-------------|
| `location` | string | Place of work (city) |
| `region` | string | Canton / region code |
| `zipcode` | string | Postal code, when present |
| `street` | string | Street address, when the employer lists one |

#### Workload & Contract

| Field | Type | Description |
|-------|------|-------------|
| `workload` | string | Workload range as displayed, e.g. "80 – 100%" |
| `workloadMin` | integer | Parsed minimum workload percentage |
| `workloadMax` | integer | Parsed maximum workload percentage |
| `employmentType` | string | Contract type label. A job can carry more than one, in which case they are joined with commas (e.g. "permanent, temporary"). |

#### Contact & Dates

| Field | Type | Description |
|-------|------|-------------|
| `contactName` | string | Listed contact person, when present |
| `contactPhone` | string | Contact phone, when present |
| `applyUrl` | string | Direct application URL (when descriptions are enabled) |
| `publicationDate` | string | ISO 8601 date the listing was most recently published |
| `initialPublicationDate` | string | ISO 8601 date the job was first ever posted (often earlier than `publicationDate` for re-posted roles) |
| `publicationEndDate` | string | ISO 8601 listing expiry, when present |

### Tips for Best Results

- **Use workload filtering for Swiss part-time roles** — `workloadMin` and `workloadMax` are the most powerful facet on jobup.ch. Set 60–80% to find genuine part-time positions, or 90–100% to drop job-shares and reduced-hours roles. Most Swiss boards can't filter this way.
- **Mirror a saved jobup.ch search with Start URLs** — build the exact search you want in your browser, copy the URL, and paste it into `startUrls`. Every filter in the link is honored, no manual rebuild needed.
- **Turn off descriptions for fast counts** — when you only need titles, companies, locations, and publication dates, set `includeDescription` to false for a much faster, lighter run; turn it on for full text, apply URLs, and contacts.
- **Sort by Newest first for monitoring** — pair `sortBy: "date"` with `publishedSince: "1"` to capture only jobs posted in the last 24 hours — ideal for a daily alerting pipeline.
- **Start small, then scale** — set `maxResults` to 25–50 on your first run to confirm the data fits your needs, then raise it.
- **Pick the language that matches your audience** — set `language` to German or French to get localized labels; the description text always reflects what the employer originally wrote.
- **Leave fields empty to widen the net** — clearing `searchTerm` and `location` browses the newest jobs across all of Switzerland, useful for a complete market snapshot.

### Pricing

**From $1.30 per 1,000 results** — among the most affordable jobup.ch extractors on the platform, with no compute charges; you only pay per result returned. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.155 | $0.145 | $0.140 | $0.130 |
| 1,000 | $1.55 | $1.45 | $1.40 | $1.30 |
| 10,000 | $15.50 | $14.50 | $14.00 | $13.00 |
| 100,000 | $155.00 | $145.00 | $140.00 | $130.00 |

A "result" is any job row in the output dataset. No compute charges — you only pay per result returned. Platform fees depend on your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate recruitment research, labor-market analysis, and job-aggregation use cases. Users are responsible for complying with applicable laws and jobup.ch's Terms of Service. Collect only publicly available listing data, handle any personal data (such as listed contact details) in line with Swiss and EU data-protection rules, and do not use extracted data for spam, harassment, or any unlawful purpose.

# Actor input Schema

## `searchTerm` (type: `string`):

Job title, skill or keyword to search for, e.g. "software engineer", "marketing" or "infirmier". Leave empty to browse all jobs (optionally narrowed by the filters below). Ignored when Start URLs are provided.

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

City, canton or region to search in, e.g. "Zürich", "Genève" or "Lausanne". Leave empty to search all of Switzerland. Ignored when Start URLs are provided.

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

Paste one or more jobup.ch URLs directly — search result pages or individual job postings. When provided, these override the Search Keywords and Location fields above.

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

Language for job titles and descriptions where jobup.ch provides translations. Most postings are in the language the employer wrote them.

## `employmentType` (type: `array`):

Only collect jobs with these contract types. Leave empty to include every contract type.

## `workloadMin` (type: `integer`):

Only collect jobs offering at least this workload percentage. For example, 80 keeps roles of 80% and up. Leave empty for no minimum.

## `workloadMax` (type: `integer`):

Only collect jobs offering at most this workload percentage. For example, 60 keeps part-time roles up to 60%. Leave empty for no maximum.

## `publishedSince` (type: `string`):

Only collect jobs published within this time window. Helps you focus on fresh openings.

## `sortBy` (type: `string`):

Order in which jobup.ch returns results before the scraper collects them.

## `includeDescription` (type: `boolean`):

Fetch the complete job description, requirements and contact details from each posting's detail page. Turn off for a faster, lighter run that returns only the summary fields shown in search results.

## `maxResults` (type: `integer`):

Maximum number of jobs to collect. Set to 0 to collect every matching job (a broad search collects up to about 100,000 jobs, after which the run stops automatically). You are charged per job returned.

## Actor input object example

```json
{
  "searchTerm": "software engineer",
  "location": "Zürich",
  "startUrls": [],
  "language": "en",
  "employmentType": [],
  "publishedSince": "any",
  "sortBy": "relevance",
  "includeDescription": true,
  "maxResults": 200
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of jobs with key fields like title, company, location, workload, and contract type.

## `details` (type: `string`):

Full per-job detail rows including description, skills, contact info, and apply links.

# 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 = {
    "searchTerm": "software engineer",
    "location": "Zürich",
    "startUrls": [],
    "language": "en",
    "employmentType": [],
    "publishedSince": "any",
    "sortBy": "relevance",
    "includeDescription": true,
    "maxResults": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/jobup-ch-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 = {
    "searchTerm": "software engineer",
    "location": "Zürich",
    "startUrls": [],
    "language": "en",
    "employmentType": [],
    "publishedSince": "any",
    "sortBy": "relevance",
    "includeDescription": True,
    "maxResults": 200,
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchTerm": "software engineer",
  "location": "Zürich",
  "startUrls": [],
  "language": "en",
  "employmentType": [],
  "publishedSince": "any",
  "sortBy": "relevance",
  "includeDescription": true,
  "maxResults": 200
}' |
apify call solidcode/jobup-ch-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solidcode/jobup-ch-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "jobup.ch Scraper",
        "description": "[💰 $1.3 / 1K] Extract job listings from jobup.ch, Switzerland's #1 job board — titles, companies, salary clues, workload %, contract type, locations, and full descriptions. Filter by keyword, location, contract, and workload.",
        "version": "1.0",
        "x-build-id": "ojAiqUzwsS7Bkk5Ka"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~jobup-ch-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-jobup-ch-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~jobup-ch-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-jobup-ch-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~jobup-ch-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-jobup-ch-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerm": {
                        "title": "Search Keywords",
                        "type": "string",
                        "description": "Job title, skill or keyword to search for, e.g. \"software engineer\", \"marketing\" or \"infirmier\". Leave empty to browse all jobs (optionally narrowed by the filters below). Ignored when Start URLs are provided."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, canton or region to search in, e.g. \"Zürich\", \"Genève\" or \"Lausanne\". Leave empty to search all of Switzerland. Ignored when Start URLs are provided."
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Paste one or more jobup.ch URLs directly — search result pages or individual job postings. When provided, these override the Search Keywords and Location fields above.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "language": {
                        "title": "Site Language",
                        "enum": [
                            "en",
                            "de",
                            "fr"
                        ],
                        "type": "string",
                        "description": "Language for job titles and descriptions where jobup.ch provides translations. Most postings are in the language the employer wrote them.",
                        "default": "en"
                    },
                    "employmentType": {
                        "title": "Contract Type",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only collect jobs with these contract types. Leave empty to include every contract type.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "permanent",
                                "temporary",
                                "internship",
                                "freelance",
                                "apprenticeship"
                            ],
                            "enumTitles": [
                                "Permanent position",
                                "Temporary / fixed-term",
                                "Internship",
                                "Freelance / contract",
                                "Apprenticeship"
                            ]
                        },
                        "default": []
                    },
                    "workloadMin": {
                        "title": "Minimum Workload (%)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only collect jobs offering at least this workload percentage. For example, 80 keeps roles of 80% and up. Leave empty for no minimum."
                    },
                    "workloadMax": {
                        "title": "Maximum Workload (%)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only collect jobs offering at most this workload percentage. For example, 60 keeps part-time roles up to 60%. Leave empty for no maximum."
                    },
                    "publishedSince": {
                        "title": "Published Within",
                        "enum": [
                            "any",
                            "1",
                            "3",
                            "7",
                            "14",
                            "30"
                        ],
                        "type": "string",
                        "description": "Only collect jobs published within this time window. Helps you focus on fresh openings.",
                        "default": "any"
                    },
                    "sortBy": {
                        "title": "Sort Order",
                        "enum": [
                            "relevance",
                            "date"
                        ],
                        "type": "string",
                        "description": "Order in which jobup.ch returns results before the scraper collects them.",
                        "default": "relevance"
                    },
                    "includeDescription": {
                        "title": "Include Full Job Description",
                        "type": "boolean",
                        "description": "Fetch the complete job description, requirements and contact details from each posting's detail page. Turn off for a faster, lighter run that returns only the summary fields shown in search results.",
                        "default": true
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of jobs to collect. Set to 0 to collect every matching job (a broad search collects up to about 100,000 jobs, after which the run stops automatically). You are charged per job returned.",
                        "default": 200
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
