# Ostjob Jobs Search Scraper (`alexist/ostjob-jobs-search-scraper`) Actor

Scrape job listings from Ostjob.ch, Switzerland's leading Swiss job board. Collect 30+ fields per listing including titles, companies, locations, dates, salary ranges, and application URLs — perfect for job aggregators, market research, and HR automation.

- **URL**: https://apify.com/alexist/ostjob-jobs-search-scraper.md
- **Developed by:** [Alex](https://apify.com/alexist) (community)
- **Categories:** Automation, Developer tools, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Ostjob.ch Job Search Scraper: Extract Swiss Job Listings at Scale

***

### Understanding Ostjob.ch

Ostjob.ch is Switzerland's premier job search platform specializing in positions across German-speaking Switzerland. With thousands of active listings spanning IT, healthcare, retail, construction, and specialized trades, Ostjob serves as a critical talent marketplace for Swiss employers and job seekers. Extracting and analyzing this data manually is labor-intensive — the **Ostjob.ch Jobs Search Scraper** automates collection, delivering structured job records ready for analysis, aggregation, or integration into hiring systems.

***

### About the Scraper

The **Ostjob Jobs Search Scraper** extracts job listings from Ostjob.ch search result pages, converting each listing into a structured record with 30+ data fields. It is ideal for:

- **Job aggregator platforms** building multi-source job databases
- **HR analysts** studying Swiss labor market trends and salary benchmarks
- **Recruitment agencies** monitoring competitor activity and open positions
- **Researchers** analyzing employment demand by region, sector, and skill level
- **Talent acquisition teams** building recruitment funnels and market intelligence

The scraper handles pagination effortlessly, supports configurable item limits, and includes error tolerance to ensure reliable operation even when individual pages fail.

***

### Input Format

The scraper accepts a JSON configuration with three main parameters:

```json
{
  "urls": [
    "https://www.ostjob.ch/job/alle-jobs-seite-2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

#### Input Parameters Explained

| Parameter | Type | Description | Example |
|---|---|---|---|
| `urls` | Array | List of Ostjob search result page URLs to scrape. Include full URLs with page numbers or filter parameters. | `["https://www.ostjob.ch/job/alle-jobs-seite-2", "https://www.ostjob.ch/job/alle-jobs-seite-3"]` |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues even if some URLs fail. If `false`, the entire run stops on first error. Recommended: `true` for bulk scraping. | `true` or `false` |
| `max_items_per_url` | Integer | Maximum number of job listings to extract per URL. Limits data volume and runtime. Set to `0` for unlimited. | `20`, `50`, `100` |

**Pro tips:**

- Use multiple page URLs to scrape across different sections (e.g., IT jobs, healthcare, construction)
- Set `max_items_per_url` to `20-50` for balanced speed and coverage
- Enable `ignore_url_failures` for long-running batch operations

***

### Output Format

**Sample output**

```json
{
  "id": 1085779,
  "title": "Compliance Officer - KYC",
  "company_id": 49293,
  "workplace_zip": "9490",
  "workplace_city": "Vaduz",
  "activity": "Einsatz in neuen Compliance-Projekten im Bankenbereich und zurVerstärkung unserer Compliance-Projektteams \n\t Überprüfung und Update von bestehenden Geschäftsbeziehungen vonnatürlichen Personen und Rechtsträgern (KYC-Profile) \n\t Abklären und Erkennen von auffälligen Geschäftsbeziehungen unteranderem im Zusammenhang mit Sanktionen &amp; Geldwäscherei \n\t Einhaltung der Compliance-Standards der Bank \n\t Beratung und Unterstützung der Kundenbetreuer in ... ",
  "requirements": "",
  "offer": "",
  "contact": "<p>BDO (Liechtenstein) AG<br />\nFrau Nadja Demont<br />\nWuhrstrasse 14<br />\n9490 Vaduz<br />\n<br />\nkarriere@bdo.li<br />\nTelefon: +423 238 20 00</p>",
  "url_application": "mailto:karriere@bdo.li",
  "is_shown_on_company_minisite": true,
  "date_first_published": "2026-07-15T17:40:11.266+02:00",
  "date_start": "2026-07-15",
  "date_end": null,
  "company_description": "",
  "keywords": "",
  "type_key": 5,
  "type_value_min": 60,
  "type_value_max": 100,
  "date_actualization": "2026-07-15",
  "is_special_offer": false,
  "is_promoted": false,
  "position": [],
  "external_id": "6a57a9db32bd81.80851275",
  "home_office": false,
  "country_code": [
    "de",
    "ch",
    "at"
  ],
  "video_url": "",
  "coordinates": [
    {
      "ort": "Vaduz",
      "latitude": 47.13872,
      "longitude": 9.522111
    },
    {
      "ort": "Vaduz",
      "latitude": 47.14972,
      "longitude": 9.517383
    }
  ],
  "cantons": [
    "Liechtenstein"
  ],
  "updated_at": "2026-07-15T17:40:57.370+02:00",
  "company": {
    "id": 49293,
    "name": "BDO (Liechtenstein) AG",
    "description": "BDO (Liechtenstein) AG mit Sitz in Vaduz ist eine der führenden Liechtensteiner Wirtschaftsprüfungs-, Treuhand- und Beratungsgesellschaften. Basis für unseren Erfolg sind unsere Mitarbeitenden.",
    "homepage": "http://www.bdo.li",
    "additional_address": "",
    "vacancy_list_style_class": "Ostjob_Vacancy_ListStyle_Default",
    "zip": "9490",
    "city": "Vaduz",
    "hide_first_publication_date": false,
    "street": "Wuhrstrasse",
    "house_number": "14",
    "po_box": "Postfach 132",
    "country": "Liechtenstein",
    "additional_name": "",
    "main_phone_number": "+423 238 20 00",
    "pdf_preview_enable": true,
    "contact_and_application_url_enable": true,
    "vacancies_in_popup": false,
    "is_shown_iframe_on_mobile_pages": false,
    "show_template_on_mobile": false,
    "logo_id": "25e4f6c2c12bac8b8698",
    "country_of_origin_code": "ch",
    "is_free_company": false,
    "with_profile": false
  },
  "from_url": "https://www.ostjob.ch/job/alle-jobs-seite-2"
}
```

Each scraped job listing returns a comprehensive record with 30 fields:

#### Core Identification

| Field | Meaning | Example |
|---|---|---|
| `ID` | Unique Ostjob identifier for the listing | `12345` |
| `Title` | Job title as displayed | `Senior Software Engineer (m/w/d)` |
| `External ID` | Employer's internal reference (if provided) | `EXT-789` |
| `Position` | Position level or seniority | `Senior`, `Junior`, `Lead` |

#### Company Information

| Field | Meaning | Example |
|---|---|---|
| `Company` | Employer name | `Tech Solutions AG` |
| `Company ID` | Unique company identifier | `5678` |
| `Company Description` | Brief employer description or industry | `Swiss IT services provider` |

#### Location & Geography

| Field | Meaning | Example |
|---|---|---|
| `Workplace City` | Primary job location (city) | `Zurich`, `Basel` |
| `Workplace ZIP` | Postal code of workplace | `8000` |
| `Cantons` | Swiss canton(s) where position is based | `ZH`, `BS`, `AG` |
| `Country Code` | Country code | `CH` |
| `Coordinates` | GPS coordinates (latitude, longitude) | `47.3686, 8.5391` |
| `Home Office` | Work-from-home policy or frequency | `Full`, `Hybrid`, `1-2 days/week` |

#### Job Details

| Field | Meaning | Example |
|---|---|---|
| `Activity` | Job function or department | `Software Development`, `Sales` |
| `Requirements` | Candidate requirements (skills, experience) | `5+ years Python, Agile certified` |
| `Offer` | Key benefits and perks | `Competitive salary, health insurance, stock options` |
| `Keywords` | Search tags or skill keywords | `Python, Docker, AWS, Leadership` |
| `Video URL` | Link to company/job video (if available) | `https://example.com/video.mp4` |

#### Dates & Duration

| Field | Meaning | Example |
|---|---|---|
| `Date First Published` | Original publication date | `2026-01-15` |
| `Date Start` | Position start date | `2026-03-01` |
| `Date End` | Application deadline or listing expiry | `2026-02-28` |
| `Date Actualization` | Last update timestamp | `2026-01-20T10:30:00Z` |
| `Updated At` | Most recent modification date | `2026-01-20` |

#### Salary & Employment Type

| Field | Meaning | Example |
|---|---|---|
| `Type Key` | Employment type identifier | `permanent`, `contract`, `apprenticeship` |
| `Type Value Min` | Minimum salary (CHF/year) | `90000` |
| `Type Value Max` | Maximum salary (CHF/year) | `130000` |

#### Application & Visibility

| Field | Meaning | Example |
|---|---|---|
| `Application URL` | Direct link to apply or company careers page | `https://company.ch/careers/apply` |
| `Contact` | Hiring contact details (email, phone, name) | `hr@company.ch, +41 44 123 4567` |
| `Shown On Company Minisite` | Whether listed on employer's Ostjob profile | `true`, `false` |

#### Promotion & Special Flags

| Field | Meaning | Example |
|---|---|---|
| `Promoted` | Whether the listing has paid promotion | `true`, `false` |
| `Special Offer` | Special benefits or limited-time perks | `Sign-on bonus`, `Relocation support` |

***

### How to Use

1. **Identify search pages** — Navigate to Ostjob.ch, perform a job search, and copy the result page URLs. Example: `https://www.ostjob.ch/job/alle-jobs-seite-2`

2. **Build your input configuration** — Create a JSON file with your URLs:

```json
   {
     "urls": ["https://www.ostjob.ch/job/alle-jobs-seite-2", "https://www.ostjob.ch/job/alle-jobs-seite-3"],
     "max_items_per_url": 50,
     "ignore_url_failures": true
   }
```

3. **Configure scrape options** — Adjust `max_items_per_url` based on your needs (higher = slower but more complete)

4. **Run the scraper** — Submit the configuration and monitor progress in the actor dashboard

5. **Export and analyze** — Download results as JSON, CSV, or Excel for use in spreadsheets, databases, or BI tools

**Troubleshooting:**

- If no results appear, verify URLs point to job listing pages, not individual job detail pages
- Check that URLs are accessible from your network
- Set `ignore_url_failures: true` to skip problematic pages automatically

***

### Use Cases & Business Value

- **Job boards & aggregators:** Feed Ostjob data into multi-source job platforms
- **Salary intelligence:** Build Swiss wage benchmarks by role, sector, and region
- **Market analysis:** Track hiring trends and skills demand across Switzerland
- **Talent pipeline:** Identify competitor hiring and high-growth sectors
- **Academic research:** Analyze employment patterns in Swiss labor markets

By automating data extraction, you save dozens of hours per week while gaining real-time visibility into Switzerland's job market.

***

### Conclusion

The **Ostjob.ch Jobs Search Scraper** transforms Switzerland's largest job board into structured, actionable data. With 30 fields covering locations, salaries, dates, and company details, it powers aggregators, research, and talent strategies. Start scraping today and unlock insights that manual browsing cannot provide.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the Jobs list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.ostjob.ch/job/alle-jobs-seite-2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.ostjob.ch/job/alle-jobs-seite-2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/ostjob-jobs-search-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 = {
    "urls": ["https://www.ostjob.ch/job/alle-jobs-seite-2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/ostjob-jobs-search-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 '{
  "urls": [
    "https://www.ostjob.ch/job/alle-jobs-seite-2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call alexist/ostjob-jobs-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/3eVRdf5PJIB2ARwFC/builds/Fk8LLlCv5dP2nA1E9/openapi.json
