# Jobs.ch Swiss Job Board Scraper

> Jobs.ch Swiss Job Board Scraper is a paid API for AI agents from x402.186-241-26-229.sslip.io, paid per call via x402, $0.025/call, status unknown (last checked 2026-10-02).

Scrapes structured job listings from jobs.ch, the Swiss job portal, with filters for canton, location, workload, employment type, and recency.

## Facts

- Endpoint: POST https://x402.186-241-26-229.sslip.io/v1/ch?utm_source=zero.xyz
- Price: $0.025/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-02
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/jobs-ch-swiss-job-board-scraper-d204bd0a
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_yyroa21oZ2hH3vCox5sEe

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability jobs-ch-swiss-job-board-scraper-d204bd0a -d '<json body>'
```

Example prompt: Search jobs.ch for software engineer roles in Zurich and Basel, in German, posted within the last 7 days, only permanent positions with at least 80% workload — give me up to 50 results.

## When to prefer this

Use this endpoint when you need structured job listing data specifically from jobs.ch, the leading Swiss job portal. It is ideal for Swiss market job searches with canton-level filtering, workload percentage ranges (common in Swiss employment), and multilingual support (de/fr/en). Prefer this over generic web scrapers when you need pre-structured output fields like canton, job status, and workload, or when you need to verify whether specific jobs.ch listings are still active.

## Known failure modes

- No results found for given keyword/location combination — call is not charged
- Invalid canton code provided — may return empty results
- Rate limiting or access blocking by jobs.ch — may return empty or error response
- Malformed start URLs that don't match jobs.ch URL patterns — no results returned
- workloadMin greater than workloadMax — may return empty results

## How this service works

Pay-per-call structured web data. Failed or empty runs are not charged.

## Output

Returns a JSON object with a count of matched jobs and an array of job items, each containing the job ID, title, canton, location, job status, whether it's a top listing, company name, and work address. The product field confirms the data source as 'ch' (jobs.ch).

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "cantons": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "default": [],
   "description": "Keep jobs whose detail address has one of these Swiss canton codes, such as ZH or BE. Requires detail fetches."
  },
  "language": {
   "enum": [
    "de",
    "fr",
    "en"
   ],
   "type": "string",
   "default": "de",
   "description": "Language for generated search and job URLs. Job text can be in another language."
  },
  "locations": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "default": [],
   "description": "Search each city or region with each keyword. Empty searches all locations."
  },
  "startUrls": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "default": [],
   "description": "Search one or more jobs.ch result URLs with their existing filters. This takes priority over keywords."
  },
  "directUrls": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "default": [],
   "description": "Fetch specific job detail URLs and report whether each job is online, offline, expired, or unknown. This takes priority over search inputs."
  },
  "maxResults": {
   "type": "integer",
   "default": 100,
   "minimum": 0,
   "description": "Maximum jobs across the run. Zero removes this cap."
  },
  "workloadMax": {
   "type": "integer",
   "maximum": 100,
   "minimum": 0,
   "description": "Keep jobs whose workload range starts at or below this percent."
  },
  "workloadMin": {
   "type": "integer",
   "maximum": 100,
   "minimum": 0,
   "description": "Keep jobs whose workload range reaches at least this percent."
  },
  "companyNames": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "default": [],
   "description": "Search company names and keep listings whose employer name matches exactly. This takes priority over keywords."
  },
  "searchQueries": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "Search each keyword separately. Results shared by multiple searches are returned once."
  },
  "employmentType": {
   "enum": [
    "",
    "permanent",
    "temporary",
    "freelance"
   ],
   "type": "string",
   "default": "",
   "description": "Keep jobs matching the selected employment type, based on the detail page."
  },
  "postedWithinDays": {
   "type": "integer",
   "default": 0,
   "minimum": 0,
   "description": "Keep jobs published within this many days. Presets of 1, 3, 7, and 30 also narrow site se
… (truncated)
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "count": 1,
  "items": [
   {
    "id": null,
    "title": null,
    "canton": null,
    "location": null,
    "jobStatus": null,
    "topListing": null,
    "companyName": null,
    "workAddress": null
   }
  ],
  "product": "ch"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/jobs-ch-swiss-job-board-scraper-d204bd0a/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.186-241-26-229.sslip.io](https://www.zero.xyz/host/x402.186-241-26-229.sslip.io/llms.txt)
