# Jobs.ch Jobs Search Scraper (`stealth_mode/jobs-ch-jobs-search-scraper-ppe`) Actor

Efficiently scrape job listings from Jobs.ch, Switzerland's leading employment platform. Extract comprehensive data including job titles, companies, salaries, locations, requirements, and application details. Perfect for recruitment agencies, market research, and career intelligence in the Swiss.

- **URL**: https://apify.com/stealth\_mode/jobs-ch-jobs-search-scraper-ppe.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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

## Jobs.ch Jobs Search Scraper: Extract Swiss Job Market Data

**Excerpt:** Efficiently scrape job listings from Jobs.ch, Switzerland's leading employment platform. Extract comprehensive data including job titles, companies, salaries, locations, requirements, and application details. Perfect for recruitment agencies, market research, and career intelligence in the Swiss job market.

### Understanding Jobs.ch and Its Value in Swiss Recruitment

Jobs.ch stands as Switzerland's premier job portal, connecting employers with talent across German, French, and Italian-speaking regions. The platform aggregates positions from major Swiss employers, recruitment agencies, and international companies operating in Switzerland, making it the definitive source for understanding the Swiss employment landscape.

The platform's unique value lies in its Swiss-specific data: multilingual requirements, cantonal location details, Swiss employment regulations, work permit specifications, and salary ranges in CHF. For recruitment professionals targeting Switzerland, market researchers analyzing Swiss employment trends, or companies benchmarking compensation, this data provides unmatched insights into one of Europe's most competitive job markets.

Manually collecting job data across multiple searches, locations, and industries requires countless hours navigating pages and copying information. The Jobs.ch Jobs Search Scraper automates this process, transforming search results into structured datasets ready for analysis, integration, or competitive intelligence.

### What This Scraper Extracts and Who Should Use It

The Jobs.ch Jobs Search Scraper processes search result pages, capturing multiple job listings efficiently. This approach enables broad dataset collection across different searches, industries, locations, or keywords in single runs.

**Core Data Extracted:**

**Job Identification:** Job ID, datapool ID, offer ID, slug, and tracking information enable precise job tracking and database management.

**Company Information:** Company name, ID, slug, visibility settings, and complete company profiles (when `is_include_company: true`) provide employer intelligence for competitive analysis.

**Position Details:** Title, employment position IDs, employment grades, employment types, and benefit IDs classify roles and compensation structures.

**Location Data:** Place, street, zipcode, regions, and structured location objects enable geographic analysis of Swiss job markets by canton and city.

**Requirements:** Education IDs, language skills (critical for multilingual Switzerland), work experience, and skills arrays define candidate qualifications.

**Application Process:** Application method, application URL, external URL, application questions, and contact information streamline candidate submissions.

**Timing:** Publication date, initial publication date, publication end date, and last online date track job lifecycle and market dynamics.

**Content:** Template text, template lead text, template profession, and template contact address provide job descriptions and employer messaging.

**Metadata:** Categories, job source type, industry ID, synonym, listing tags, layout type, and tracking links enable advanced filtering and analysis.

**Premium Features:** Is paid, is active, is responsive, headhunter application allowed, and email canalization flags identify premium listings and application preferences.

**Visual Assets:** Images, videos, and company branding materials support job display in recruitment platforms.

**Target Users:**

**Recruitment Agencies** build comprehensive Swiss job databases with multilingual capabilities and canton-specific filtering. **Market Researchers** analyze hiring trends, salary benchmarks, and skill demands across Swiss industries. **Swiss Companies** monitor competitor hiring, benchmark positions, and identify talent shortages. **International Companies** planning Swiss market entry assess hiring landscapes and compensation standards. **Career Counselors** provide job seekers with real-time Swiss market data and language requirements.

### Input Configuration: Search URLs and Parameters

The scraper processes Jobs.ch search result URLs displaying multiple job listings with applied filters.

**Example Input Configuration:**
```json
{
  "is_include_company": true,
  "max_items_per_url": 20,
  "ignore_url_failures": true,
  "urls": [
    "https://www.jobs.ch/en/vacancies/?location=au&term=audit&jobid=6df71685-0f8e-40e4-83c5-041753d8b61f"
  ]
}
````

#### Example Screenshot:

![](https://i.ibb.co/rGf0fZqQ/Screenshot-from-2026-01-05-11-23-46.png)

**Parameter Breakdown:**

**is\_include\_company:** When `true`, extracts complete company profiles including description, size, industry, and contact details. Essential for employer intelligence. Set `false` for faster scraping when only job data needed.

**max\_items\_per\_url:** Controls listings extracted per search page. Set to 20 for standard pages (Jobs.ch typically shows 20-30 results per page). Increase to 50-100 for comprehensive extraction when pages contain more results.

**ignore\_url\_failures:** When `true`, continues processing remaining URLs if some fail. Critical for batch scraping multiple searches. Set `false` only when every URL must succeed.

**urls array:** Contains search result page URLs. Build these by performing searches on Jobs.ch, then copying URLs with desired filters (location, keywords, industry, employment type).

**Pro Tip:** Jobs.ch search URLs contain multiple parameters (location, term, jobid). Test searches manually first to verify filters return relevant results, then copy those URLs into configuration. For large datasets spanning multiple pages, systematically increment page parameters.

### Complete Output Structure and Field Definitions

**Publication End Date:** Job listing expiration timestamp. **Purpose:** Deadline tracking, calculating average posting duration, identifying urgent hires.

**Links:** Array of related URLs (job page, application page, company page). **Purpose:** Direct navigation, verification, cross-referencing data sources.

**Categories:** Job classification tags (industry, department, function). **Purpose:** Filtering, categorization, trend analysis by sector.

**Company Visible:** Boolean indicating if company name is public. **Purpose:** Identifying confidential searches, filtering anonymous vs. branded postings.

**Regions:** Swiss cantons and regions where job is located. **Purpose:** Geographic analysis, canton-specific hiring patterns, regional demand assessment.

**Slug / Company Slug:** URL-friendly identifiers. **Purpose:** Constructing direct links, alternative identifiers, SEO optimization.

**Application Method:** How candidates apply (online form, email, external platform). **Purpose:** Understanding employer preferences, optimizing application flows.

**Job Source Type:** Origin of posting (direct employer, agency, aggregator). **Purpose:** Distinguishing direct hires from agency placements, tracking recruitment channels.

**Last Online Date:** Most recent activity timestamp. **Purpose:** Freshness indicator, identifying stale listings, tracking reposting patterns.

**Job ID / Datapool ID / Offer ID:** Unique identifiers. **Purpose:** Primary keys for databases, deduplication, tracking across systems.

**Title:** Job position name. **Purpose:** Primary search field, role categorization, demand analysis.

**Company Name / Company ID:** Employer identification. **Purpose:** Employer profiling, tracking company hiring activity, competitive analysis.

**Industry ID:** Sector classification. **Purpose:** Industry-specific analysis, filtering by sector, market segmentation.

**Education IDs:** Required education levels. **Purpose:** Matching candidates by qualification, analyzing education requirements trends.

**Language Skills:** Required languages with proficiency levels (critical in multilingual Switzerland). **Purpose:** Filtering by language capability, analyzing multilingual demands, international placement matching.

**Work Experience:** Required experience in years or description. **Purpose:** Seniority filtering, experience level analysis, matching candidates appropriately.

**Publication Date / Initial Publication Date:** First posting timestamps. **Purpose:** Tracking when jobs entered market, calculating time-to-fill, analyzing posting patterns.

**Place / Street / Zipcode:** Detailed location information. **Purpose:** Precise geographic analysis, commute distance calculations, city-level demand mapping.

**Application Questions:** Custom questions employers ask candidates. **Purpose:** Understanding employer screening processes, preparing candidates, analyzing selection criteria.

**Employment Position IDs / Employment Grades:** Role levels and seniority classifications. **Purpose:** Analyzing organizational hierarchies, filtering by career level, compensation benchmarking by grade.

**Employment Type IDs:** Contract types (full-time, part-time, temporary, freelance). **Purpose:** Employment type analysis, filtering by work arrangement, market composition assessment.

**Benefit IDs:** Employee benefits offered (insurance, pension, flexible hours). **Purpose:** Compensation analysis beyond salary, employer competitiveness assessment.

**External URL / Application URL:** Links to job details and application forms. **Purpose:** Candidate redirection, tracking external vs. platform applications.

**Synonym:** Alternative job titles or keywords. **Purpose:** Search optimization, matching broader candidate queries, understanding title variations.

**Template / Template Profession / Template Text / Template Lead Text / Template Contact Address:** Structured job description components. **Purpose:** Content extraction, keyword analysis, standardized data parsing.

**Is Active / Is Paid / Is Responsive / Headhunter Application Allowed:** Status and feature flags. **Purpose:** Filtering active jobs, identifying premium listings, understanding application policies.

**Metadata:** Additional structured data (posting source, tracking codes, internal references). **Purpose:** Advanced filtering, tracking campaign sources, attribution analysis.

**Skills:** Required technical and soft skills. **Purpose:** Skill demand analysis, candidate matching, identifying trending competencies.

**Contact Person / Contacts:** Recruiter or hiring manager information. **Purpose:** Direct communication channels, relationship building, alternative application routes.

**Images / Videos:** Visual content URLs. **Purpose:** Employer branding analysis, displaying jobs attractively, multimedia content integration.

**Tracking Links:** Analytics and attribution URLs. **Purpose:** Campaign tracking, source analysis, conversion measurement.

**Benefits:** Detailed benefits descriptions. **Purpose:** Complete compensation analysis, employer value proposition assessment.

**Layout Type:** Job posting template style. **Purpose:** Identifying premium vs. standard listings, visual presentation analysis.

**Locations:** Structured location objects with full details. **Purpose:** Comprehensive geographic filtering, multi-location job handling.

**Listing Tags:** Custom classification tags. **Purpose:** Advanced filtering, custom categorization, platform-specific features.

**Email Canalization:** Email routing settings. **Purpose:** Understanding application email flows, tracking response management.

**Company:** Complete company profile object (when `is_include_company: true`). **Purpose:** Employer intelligence, company research, competitive analysis.

**Sample Output:**

```json
[
    {
  "publication_end_date": "2026-02-05",
  "categories": [
    {
      "lvl_0": 100,
      "path": "/97/100/122",
      "lvl_1": 122
    }
  ],
  "company_visible": true,
  "regions": [
    {
      "lvl_0": 2,
      "lvl_1": 7,
      "lvl_2": 19,
      "path": "/2/7/19"
    }
  ],
  "slug": "eb34d92e-cf8c-4384-a524-234695361bf7-hr-assistant-60-80-m-w-d",
  "company_slug": "4e879e07-6602-4637-9af5-6ac8c41b3ec5-hoval-ag",
  "application_method": "application_url",
  "job_source_type": "template",
  "last_online_date": "2026-01-04",
  "job_id": "eb34d92e-cf8c-4384-a524-234695361bf7",
  "datapool_id": "eb34d92e-cf8c-4384-a524-234695361bf7",
  "title": "HR-Assistant 60-80% (m/w/d)",
  "company_name": "Hoval AG",
  "company_id": "4e879e07-6602-4637-9af5-6ac8c41b3ec5",
  "industry_id": null,
  "education_ids": [],
  "language_skills": [
    {
      "language": "de",
      "level": 2
    }
  ],
  "work_experience": [],
  "publication_date": "2025-12-22T11:12:07+01:00",
  "initial_publication_date": "2025-12-22T10:12:07+00:00",
  "place": "Meilen",
  "street": "General-Wille-Strasse 201",
  "application_questions": [],
  "employment_position_ids": [
    3
  ],
  "employment_grades": [
    60,
    65,
    70,
    75,
    80
  ],
  "employment_type_ids": [
    "5"
  ],
  "benefit_ids": [],
  "external_url": "",
  "application_url": "https://recruitingapp-2710.umantis.com/Vacancies/3853/Application/CheckLogin/1?lang=ger&source=jobsch&srcText=jobsch",
  "zipcode": "8706",
  "synonym": "HR Assistant",
  "template": "<!DOCTYPE html><html lang=\"en\" data-template=\"jobs_standard_1\"><head><meta charset=\"utf-8\"><base href=\"https://img.jobs.ch/www/job-ad-template/template/\" /><meta name=\"keywords\" content=\"\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><link rel=\"stylesheet\" type=\"text/css\" href=\"https://img.jobs.ch/www/job-ad-template/template/css/two-col-left.css?t=20191127\"><title>HR-Assistant 60-80% (m/w/d)</title></head><body><div class=\"full-width\"><div class=\"container\"><div class=\"row top-bar\"><div class=\"col-xs-12 col-md-9 col-md-offset-3\"><div class=\"h2\"><p>&nbsp;</p></div><h1>HR-Assistant 60-80% (m/w/d)</h1></div></div></div></div><div class=\"container\"><div class=\"row content-row relative\"><div class=\"col-xs-12 col-md-9 col-md-push-3\"><p>Als führendes Technologieunternehmen begeistert Hoval seit Jahrzehnten mit wegweisenden Systemlösungen für Heiz- und Klimatechnik. Mit mehr als 80 Jahren Erfahrung und einer familiär geprägten Teamkultur sind wir ein Arbeitgeber mit Tradition, stets am Puls der Zeit. Von unseren Offices in Feldmeilen aus unterstützt unsere HR-Abteilung die insgesamt 5 Standorte in der ganzen Schweiz.<br /><br />  Als Dreh- und Angelpunkt unserer HR-Abteilung unterstützt du die HR Business Partner in allen Prozessen entlang des Employee Life Cycles. Arbeitest du gerne mit Menschen und bist auf der Suche nach einer neuen Herausforderung in einem familiär geprägten, ambitionierten Umfeld? Dann werde Teil unseres HR-Teams!<br /><br /><strong>Deine Aufgaben:</strong><br /><ul><li>Koordination des Rekrutierungsprozesses (Stelleninserate, Vorselektion, Terminkoordination, Vertragserstellung, Einholen von elektronischen Unterschriften)</li><li>Führen ausgewählter Kandidaten-Interviews</li><li>Erstellen von Arbeitszeugnissen</li><li>Terminierung und Vorbereitung von Austrittsgesprächen</li><li>Verantwortung für Umantis (Recruiting &amp; Mitarbeiter Management Tool)</li><li>Mitarbeit und Übernahme von HR-Projekten</li><li>Diverse allgemeine administrative Tätigkeiten</li></ul><br /><strong>Was wir bieten:</strong><br /><ul><li>Abwechslungsreiche und verantwortungsvolle Aufgaben in einem kollegialen Team</li><li>Drehscheibenfunktion mit Entscheidungskompetenz und Entwicklungsmöglichkeiten</li><li>Erfolgreiches Familienunternehmen mit Historie</li><li>Attraktive Anstellungsbedingungen und ein Arbeitsplatz nähe Seeufer (Feldmeilen)</li></ul><br /><strong>Dein Profil:</strong><ul><li>Kaufmännische Grundausbildung mit entsprechender Weiterbildung/Fachausbildung im Bereich Human Resources</li><li>Ausgezeichnete Kommunikationsfähigkeiten mündlich und schriftlich auf Deutsch. Jede weitere Sprache – speziell Französisch und Italienisch – von Vorteil</li><li>Strukturierte und sorgfältige Arbeitsweise</li><li>Sehr gute MS Office Kenntnisse</li></ul><br />  Fühlst du dich angesprochen? Dann freuen wir uns auf deine Online-Bewerbung!<br /><br /><strong></strong><strong></strong><strong></strong><strong></strong><strong></strong><strong></strong><strong></strong></p></div><div class=\"col-xs-12 col-md-pull-9 col-md-3 pull-left\"><div class=\"contact\"><div class=\"logo\"><img src=\"https://media.jobs.ch/media/d681475b-de50-4032-aec1-7bb76b481c59_300x300\" width=\"300\" height=\"300\" style=\"top:70%;\" alt=\"Hoval AG\"/></div><ul property=\"jobLocation\" typeof=\"Place\" style=\"padding-top:70px;\"><span class=\"contact-address\" property=\"address\" typeof=\"PostalAddress\"><li>Hoval AG<br />General-Wille-Strasse 201<br />8706 Meilen</li></span></ul><ul><li><a target=\"_blank\" href=\"https://www.hoval.ch\">https://www.hoval.ch</a></li></ul></div></div></div></div></body></html>",
  "template_profession": "HR-Assistant 60-80% (m/w/d)",
  "template_text": "<p>Als führendes Technologieunternehmen begeistert Hoval seit Jahrzehnten mit wegweisenden Systemlösungen für Heiz- und Klimatechnik. Mit mehr als 80 Jahren Erfahrung und einer familiär geprägten Teamkultur sind wir ein Arbeitgeber mit Tradition, stets am Puls der Zeit. Von unseren Offices in Feldmeilen aus unterstützt unsere HR-Abteilung die insgesamt 5 Standorte in der ganzen Schweiz.<br /> <br />Als Dreh- und Angelpunkt unserer HR-Abteilung unterstützt du die HR Business Partner in allen Prozessen entlang des Employee Life Cycles. Arbeitest du gerne mit Menschen und bist auf der Suche nach einer neuen Herausforderung in einem familiär geprägten, ambitionierten Umfeld? Dann werde Teil unseres HR-Teams!<br /> <br /> <strong>Deine Aufgaben:</strong> <br /> </p> <ul> <li>Koordination des Rekrutierungsprozesses (Stelleninserate, Vorselektion, Terminkoordination, Vertragserstellung, Einholen von elektronischen Unterschriften)</li> <li>Führen ausgewählter Kandidaten-Interviews</li> <li>Erstellen von Arbeitszeugnissen</li> <li>Terminierung und Vorbereitung von Austrittsgesprächen</li> <li>Verantwortung für Umantis (Recruiting &amp; Mitarbeiter Management Tool)</li> <li>Mitarbeit und Übernahme von HR-Projekten</li> <li>Diverse allgemeine administrative Tätigkeiten</li> </ul> <strong>Was wir bieten:</strong> <ul> <li>Abwechslungsreiche und verantwortungsvolle Aufgaben in einem kollegialen Team</li> <li>Drehscheibenfunktion mit Entscheidungskompetenz und Entwicklungsmöglichkeiten</li> <li>Erfolgreiches Familienunternehmen mit Historie</li> <li>Attraktive Anstellungsbedingungen und ein Arbeitsplatz nähe Seeufer (Feldmeilen)</li> </ul> <strong>Dein Profil:</strong> <ul> <li>Kaufmännische Grundausbildung mit entsprechender Weiterbildung/Fachausbildung im Bereich Human Resources</li> <li>Ausgezeichnete Kommunikationsfähigkeiten mündlich und schriftlich auf Deutsch. Jede weitere Sprache – speziell Französisch und Italienisch – von Vorteil</li> <li>Strukturierte und sorgfältige Arbeitsweise</li> <li>Sehr gute MS Office Kenntnisse</li> </ul>Fühlst du dich angesprochen? Dann freuen wir uns auf deine Online-Bewerbung!<br /> <br /> <strong> </strong> <strong> </strong> <strong> </strong> <strong> </strong> <strong> </strong> <strong> </strong> <strong> </strong>",
  "template_lead_text": "",
  "template_contact_address": "",
  "offer_id": 49,
  "is_active": true,
  "metadata": [],
  "is_responsive": true,
  "is_paid": true,
  "headhunter_application_allowed": true,
  "skills": [],
  "contact_person": {
    "first_name": "Nicole",
    "last_name": "Hensel",
    "address": []
  },
  "contacts": [
    {
      "first_name": "Nicole",
      "last_name": "Hensel"
    }
  ],
  "images": [
    {
      "context": "background",
      "url": "https://media.jobs.ch/media/0458efae-9290-4a53-a0fb-21256f458c4f",
      "updated": "2025-12-22T17:12:04+01:00"
    },
    {
      "context": "logo",
      "url": "https://media.jobs.ch/media/d681475b-de50-4032-aec1-7bb76b481c59",
      "updated": "2025-12-22T17:12:04+01:00"
    }
  ],
  "tracking_links": null,
  "benefits": [],
  "layout_type": "STANDARD",
  "locations": [
    {
      "street": "General-Wille-Strasse 201",
      "postal_code": "8706",
      "city": "Meilen",
      "canton_code": "ZH",
      "country_code": "CH",
      "latitude": 47.27674,
      "longitude": 8.62075
    }
  ],
  "listing_tags": [],
  "email_canalization": null,
  "videos": [],
  "salary": {},
  "company": {
    "redirect_to_company_slug": null,
    "portrait_descriptions_search": {
      "de": "Unternehmenswerte sind bekanntlich wichtig. Wie wichtig, merkt man erst, wenn sie fehlen. Bei Hoval haben unternehmerische und menschliche Werte Tradition - damals wie heute. Das ermöglicht ein harmonisches und effizientes Arbeiten und bietet einen Leitfaden für alle Aspekte des Arbeitsalltags.\n\nUnsere 4 Unternehmenswerte:\n\n- Familiär\nAls familiengeführtes Unternehmen pflegen wir sowohl mit unseren Mitarbeitern als auch mit unseren Kunden und Lieferanten einen herzlichen und ehrlichen Umgang.\n\n- Verantwortungsbewusst\nEnergieeffizienz und alternative Energien stehen im Zentrum unserer Unternehmensentwicklung. Das hilft Ihnen, Geld und Rohstoffe zu sparen.\n\n- Lösungsorientiert\nWir bieten individuell auf Ihre Wünsche abgestimmte Lösungen. Einfach in Betrieb zu nehmende und leicht bedienbare Systeme gehören selbstverständlich dazu.\n\n- Technologiebegeistert\nWir sind offen für aussergewöhnliche Innovationen und Ideen. Diese kommen wiederum Ihrem Projekt zugute. ",
      "fr": "",
      "en": ""
    },
    "social_urls": [],
    "slug": "4e879e07-6602-4637-9af5-6ac8c41b3ec5-hoval-ag",
    "child_ids": [],
    "is_visible": true,
    "sort_reviews_by": "relevance",
    "_highlight": null,
    "id": "4e879e07-6602-4637-9af5-6ac8c41b3ec5",
    "datapool_id": "4e879e07-6602-4637-9af5-6ac8c41b3ec5",
    "name": "Hoval AG",
    "last_modified": "2025-12-12T12:30:43+01:00",
    "segmentation": "gu",
    "toplogo_file": "https://media.jobs.ch/media/d681475b-de50-4032-aec1-7bb76b481c59",
    "industry": 0,
    "founding_year": null,
    "redirect_to_company": null,
    "hiring_teasers": null,
    "hiring_teaser": null,
    "url": "https://www.hoval.ch",
    "addresses": [
      {
        "object_type": "contact",
        "street1": "Via S. Mamete 88",
        "street2": "",
        "department": "",
        "city": "Mezzovico-Vira",
        "city_translations": {
          "de": "Mezzovico",
          "en": "Mezzovico",
          "fr": "Mezzovico"
        },
        "zip_code": "6805",
        "country_code": "CH",
        "telephone1": "",
        "telephone2": "",
        "fax": "",
        "firstname": "",
        "lastname": "",
        "email": null,
        "coordinates": {
          "lat": 46.0948,
          "lon": 8.9239
        },
        "addition": null,
        "coordinates_exact": true,
        "id": null
      }
    ],
    "portrait": {
      "xing_profile_url": null,
      "xing_poster_url": null,
      "employees": 500,
      "turnover": "",
      "kununu_id": 0,
      "kununu_url": "",
      "kununu_rating": 0,
      "kununu_top": false,
      "kununu_open": false,
      "isin": null,
      "home_office_friendly": false,
      "great_place_to_work": false,
      "friendly_work_space": false,
      "trainee_friendly_company": false,
      "id": null
    },
    "portrait_urls": [],
    "portrait_descriptions": [
      {
        "description": "Unternehmenswerte sind bekanntlich wichtig. Wie wichtig, merkt man erst, wenn sie fehlen. Bei Hoval haben unternehmerische und menschliche Werte Tradition - damals wie heute. Das ermöglicht ein harmonisches und effizientes Arbeiten und bietet einen Leitfaden für alle Aspekte des Arbeitsalltags.\n\nUnsere 4 Unternehmenswerte:\n\n- Familiär\nAls familiengeführtes Unternehmen pflegen wir sowohl mit unseren Mitarbeitern als auch mit unseren Kunden und Lieferanten einen herzlichen und ehrlichen Umgang.\n\n- Verantwortungsbewusst\nEnergieeffizienz und alternative Energien stehen im Zentrum unserer Unternehmensentwicklung. Das hilft Ihnen, Geld und Rohstoffe zu sparen.\n\n- Lösungsorientiert\nWir bieten individuell auf Ihre Wünsche abgestimmte Lösungen. Einfach in Betrieb zu nehmende und leicht bedienbare Systeme gehören selbstverständlich dazu.\n\n- Technologiebegeistert\nWir sind offen für aussergewöhnliche Innovationen und Ideen. Diese kommen wiederum Ihrem Projekt zugute. ",
        "id": null,
        "locale": "de"
      }
    ],
    "images": [
      {
        "context": "logo",
        "file_name": null,
        "width": null,
        "height": null,
        "type": null,
        "updated": "2025-12-12T12:30:43+01:00",
        "url": "https://media.jobs.ch/media/d681475b-de50-4032-aec1-7bb76b481c59",
        "id": null
      },
      {
        "context": "background",
        "file_name": null,
        "width": null,
        "height": null,
        "type": null,
        "updated": "2025-12-12T12:30:43+01:00",
        "url": "https://media.jobs.ch/media/5cfb2c60-cffc-4981-ace2-bb5ec7d14a79",
        "id": null
      }
    ],
    "videos": [],
    "job_count": 12,
    "contact_address": {
      "object_type": "contact",
      "street1": "Via S. Mamete 88",
      "street2": "",
      "department": "",
      "city": "Mezzovico-Vira",
      "city_translations": {
        "de": "Mezzovico",
        "en": "Mezzovico",
        "fr": "Mezzovico"
      },
      "zip_code": "6805",
      "country_code": "CH",
      "telephone1": "",
      "telephone2": "",
      "fax": "",
      "firstname": "",
      "lastname": "",
      "email": null,
      "coordinates": {
        "lat": 46.0948,
        "lon": 8.9239
      },
      "addition": null,
      "coordinates_exact": true,
      "id": null
    },
    "metadata": [],
    "phone": null,
    "portrait_description": "Unternehmenswerte sind bekanntlich wichtig. Wie wichtig, merkt man erst, wenn sie fehlen. Bei Hoval haben unternehmerische und menschliche Werte Tradition - damals wie heute. Das ermöglicht ein harmonisches und effizientes Arbeiten und bietet einen Leitfaden für alle Aspekte des Arbeitsalltags.\n\nUnsere 4 Unternehmenswerte:\n\n- Familiär\nAls familiengeführtes Unternehmen pflegen wir sowohl mit unseren Mitarbeitern als auch mit unseren Kunden und Lieferanten einen herzlichen und ehrlichen Umgang.\n\n- Verantwortungsbewusst\nEnergieeffizienz und alternative Energien stehen im Zentrum unserer Unternehmensentwicklung. Das hilft Ihnen, Geld und Rohstoffe zu sparen.\n\n- Lösungsorientiert\nWir bieten individuell auf Ihre Wünsche abgestimmte Lösungen. Einfach in Betrieb zu nehmende und leicht bedienbare Systeme gehören selbstverständlich dazu.\n\n- Technologiebegeistert\nWir sind offen für aussergewöhnliche Innovationen und Ideen. Diese kommen wiederum Ihrem Projekt zugute. ",
    "badges": [],
    "benefits": [],
    "ratings": {
      "total": 5,
      "average": 4
    },
    "deleted_at": null
  },
  "from_url": "https://www.jobs.ch/en/vacancies/?location=au&page=2&term="
}
]
```

### Step-by-Step Implementation Guide

**1. Define Target Data:** Identify needed jobs by industry, location, keywords, or employment type. Test searches on Jobs.ch to ensure relevant results.

**2. Build Search URLs:** Copy URLs from test searches. For comprehensive data, create multiple URLs with different filters (location=zurich, location=geneva, etc.). Include pagination for deep extraction.

**3. Configure Input:** Set `is_include_company: true` for employer intelligence, `false` for speed. Adjust `max_items_per_url` based on needs. Enable `ignore_url_failures` for robust batch processing.

**4. Execute Run:** Launch via Apify console. Monitor progress. Typical run processing 5-10 search pages completes in 2-4 minutes.

**5. Review Quality:** Check critical fields (title, company, location, language\_skills) are populated. Verify data accuracy with spot checks.

**6. Export Data:** Export as JSON for databases, CSV for spreadsheets, or Excel for business reporting.

**Error Handling:** Verify URLs are search pages, not job detail pages. Check filters are valid. Activity log provides detailed error information for troubleshooting.

### Strategic Applications for Swiss Job Market Intelligence

**Multilingual Recruitment:** Language skills data enables precise matching for Switzerland's German/French/Italian markets. Filter jobs by language requirements to target appropriate candidates.

**Canton-Level Analysis:** Regional data reveals hiring concentrations across Swiss cantons. Identify high-demand areas, salary premiums by region, and underserved markets.

**Salary Benchmarking:** CHF salary ranges provide compensation intelligence rare in job data. Compare across cities, industries, and seniority levels.

**Agency vs. Direct Hire Tracking:** Job source type distinguishes direct employers from recruitment agencies. Analyze which companies use agencies vs. internal recruitment.

**Language Market Segmentation:** Analyze language requirement trends across industries and regions. Identify growth in English-only positions signaling internationalization.

**Education Requirement Analysis:** Track education ID patterns to understand qualification inflation or shifts in hiring standards across industries.

**Time-to-Fill Optimization:** Calculate duration between publication and end dates across job types and industries. Identify hard-to-fill positions requiring adjusted strategies.

**Benefit Trends:** Analyze benefit IDs to understand evolving Swiss employment value propositions beyond salary.

### Maximizing Data Value and Best Practices

**Schedule Regular Scraping:** Swiss job market changes rapidly. Weekly scraping captures new postings and tracks dynamics over time.

**Segment by Language Region:** Create separate URLs for German-speaking (Zurich, Bern), French-speaking (Geneva, Lausanne), and Italian-speaking (Ticino) regions for cleaner analysis.

**Enrich with External Data:** Combine Jobs.ch data with Swiss salary surveys, cost-of-living indices by canton, and company financial data for comprehensive intelligence.

**Track Premium Listings:** Monitor `is_paid` and related flags to understand which employers invest heavily in recruitment marketing.

**Quality Assurance:** Flag missing critical fields (language\_skills empty in multilingual Switzerland is suspicious). Validate zipcodes match stated cities.

**Historical Tracking:** Store data with timestamps. Track when jobs appear/disappear to calculate fill rates and market competitiveness.

**Respect Rate Limits:** Space out large scraping runs. Sustainable practices ensure continued platform access.

### Conclusion

The Jobs.ch Jobs Search Scraper transforms Switzerland's leading job platform into actionable intelligence. Whether building recruitment pipelines for multilingual markets, conducting salary research across cantons, or analyzing Swiss employment trends, this tool delivers comprehensive data for the Swiss job market. Start extracting Swiss career insights today.

# 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.

## `is_include_company` (type: `boolean`):

If true, the scraper will include the company profile in the item.

## `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.jobs.ch/en/vacancies/?location=au&page=2&term="
  ],
  "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.jobs.ch/en/vacancies/?location=au&page=2&term="
    ],
    "is_include_company": false,
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/jobs-ch-jobs-search-scraper-ppe").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.jobs.ch/en/vacancies/?location=au&page=2&term="],
    "is_include_company": False,
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/jobs-ch-jobs-search-scraper-ppe").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.jobs.ch/en/vacancies/?location=au&page=2&term="
  ],
  "is_include_company": false,
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/jobs-ch-jobs-search-scraper-ppe --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Jobs.ch Jobs Search Scraper",
        "description": "Efficiently scrape job listings from Jobs.ch, Switzerland's leading employment platform. Extract comprehensive data including job titles, companies, salaries, locations, requirements, and application details. Perfect for recruitment agencies, market research, and career intelligence in the Swiss.",
        "version": "0.0",
        "x-build-id": "yKQTIiFY7bymD8NtB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~jobs-ch-jobs-search-scraper-ppe/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-jobs-ch-jobs-search-scraper-ppe",
                "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/stealth_mode~jobs-ch-jobs-search-scraper-ppe/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-jobs-ch-jobs-search-scraper-ppe",
                "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/stealth_mode~jobs-ch-jobs-search-scraper-ppe/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-jobs-ch-jobs-search-scraper-ppe",
                "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": {
                    "urls": {
                        "title": "URLs of the Jobs list urls to scrape",
                        "type": "array",
                        "description": "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.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "is_include_company": {
                        "title": "Include company profile",
                        "type": "boolean",
                        "description": "If true, the scraper will include the company profile in the item."
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
