# Ictjobs Jobs Search Scraper (`alexist/ictjobs-jobs-search-scraper`) Actor

Scrape job search results from ICTJobs.ch with precision. This scraper captures titles, descriptions, hiring organizations, employment types, locations, salaries, and key dates — perfect for IT recruiters, job market analysts, and tech talent researchers.

- **URL**: https://apify.com/alexist/ictjobs-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

## ICTJobs.ch Search Results Scraper: Extract IT Job Listings from Switzerland

***

### What Is ICTJobs.ch?

ICTJobs.ch is Switzerland's premier job portal dedicated to information and communications technology (ICT) careers. It aggregates thousands of tech positions from Swiss and international companies, covering roles in software development, cybersecurity, data science, infrastructure, and IT management. Extracting job data manually from search results is inefficient — the **ICTJobs Search Results Scraper** automates collection, delivering structured datasets from any search page.

***

### Overview

The **ICTJobs Search Results Scraper** extracts job listings from ICTJobs.ch search pages, transforming HTML results into clean, queryable data. It is ideal for:

- **IT recruiters** tracking tech talent supply and competitive job postings
- **Career analysts** studying Swiss ICT labor market trends
- **Data researchers** building datasets for technology employment studies
- **Job aggregators** feeding IT listings into multi-source job boards

Key features include flexible URL input for any search page, configurable item limits, and optional error tolerance for large-scale scrapes.

***

### Input Format

The scraper accepts a JSON configuration with three main parameters:

```json
{
  "urls": [
    "https://ictjobs.ch/page/2/",
    "https://ictjobs.ch/page/3/"
  ],
  "max_items_per_url": 200,
  "ignore_url_failures": true
}
```

| Field | Type | Description |
|---|---|---|
| `urls` | Array | Search page URLs from ICTJobs.ch to scrape. Supports pagination URLs or filtered search results pages. |
| `max_items_per_url` | Integer | Maximum number of job listings to extract per URL (default: 100, max: 200+). |
| `ignore_url_failures` | Boolean | If `true`, the scraper continues if a URL fails; if `false`, stops on first error. Default: `true` for batch operations. |

#### Input Guidelines

- **URL format:** Use full ICTJobs.ch URLs (e.g., `https://ictjobs.ch/page/2/` or filtered search pages)
- **Bulk input:** Paste multiple URLs in the Bulk edit section, one per line
- **Pagination:** Add multiple page URLs to scrape across results (e.g., `/page/1/`, `/page/2/`, `/page/3/`)
- **Max items:** Set to 200 for comprehensive results, or lower (50–100) for focused sampling

> **Tip:** Use filtered search URLs (e.g., by job title, location, or experience level) to target specific datasets.

***

### Output Format

**Sample output**

```json
{
  "title": "Support Applications (H/F)",
  "description": "IntroductionPour notre département Qualité & Durabilité, nous recherchons un Support Applications (H/F) dont la mission principale sera sera d’assurer le lien entre les métiers de la Production et les métiers de l’Informatique MES/LES.\nResponsabilités\n\nAnalyser le besoin et contribuer à la réalisation des cahiers des charges\nTester les nouvelles fonctionnalités sur un pilote et former les utilisateurs sur le MES (Apriso)\nDéployer les fonctionnalités MES dans les ateliers de production et les stabiliser \nCentraliser et déclarer des éventuels incidents et/ou évolutions de Apriso\nÊtre le support des utilisateurs ainsi que le relais dans l’atelier\nFormer les nouveaux collaborateurs\nPiloter un backlog\nAccompagner le changement\nAnimer un groupe de travail/réseau de Key Users\n\nProfil\n\nDiplôme d’ingénieur ou de technicien ES issue d’une filière technique\nMaitrise des processus de production\nA l’aise avec les outils et les données du système d’information (PLM, ERP, MES, LES)\nCompétences en gestion de projets et connaissance de la méthode Scrum\nAptitudes pour le travail en équipe et de service\nAndragogue, capacité d’écoute ainsi que de conviction, réactif et proactif\n\nConclusionNous vous offrons un environnement stimulant, d’excellentes conditions de travail, des solutions de flexibilisation du temps de travail et des prestations sociales de premier ordre.\nNous vous remercions d’adresser un dossier de candidature complet (CV, lettre de motivation, certificats et diplômes).",
  "identifier": {
    "@type": "PropertyValue",
    "name": "Support Applications (H/F)",
    "value": "195911"
  },
  "date_posted": "2026-07-15",
  "valid_through": "2026-07-29",
  "employment_type": "Voll-/Teilzeitstelle",
  "hiring_organization": {
    "@type": "Organization",
    "name": "Rolex SA",
    "same_as": "https://ictjobs.ch/",
    "logo": "https://ictjobs.ch/content/uploads/2026/07/Rolex-2-320x180.png"
  },
  "job_location": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "street_address": "Rue David-Moning 9",
      "address_locality": "Biel/Bienne",
      "address_region": "Biel/Bienne",
      "postal_code": "2504",
      "address_country": "CH"
    }
  },
  "base_salary": {
    "@type": "MonetaryAmount",
    "currency": "CHF",
    "value": {
      "@type": "QuantitativeValue",
      "value": "00.00",
      "unit_text": "HOUR"
    }
  },
  "from_url": "https://ictjobs.ch/page/2/"
}
```

Each scraped job record returns nine key fields structured in JSON:

#### Job Identity & Details

| Field | Description | Example |
|---|---|---|
| `Title` | Job title as listed on ICTJobs.ch | "Senior Python Developer" |
| `Description` | Full job description including responsibilities and qualifications | "We seek an experienced Python developer..." |
| `Identifier` | Unique job listing ID | "12345-ictjobs" |

#### Employer Information

| Field | Description | Example |
|---|---|---|
| `Hiring Organization` | Name of the company posting the job | "TechCorp AG" |
| `Job Location` | Geographic location(s) for the position | "Zurich, Switzerland" or "Remote" |

#### Employment Details

| Field | Description | Example |
|---|---|---|
| `Employment Type` | Contract type (e.g., permanent, fixed-term, freelance) | "Full-time" or "Permanent" |
| `Base Salary` | Salary range or base compensation (where disclosed) | "CHF 120,000–160,000 per annum" or "Negotiable" |

#### Temporal Information

| Field | Description | Example |
|---|---|---|
| `Date Posted` | When the job listing was published | "2024-01-15" |
| `Valid Through` | Listing expiry date or deadline | "2024-03-15" |

***

### How to Use

1. **Prepare URLs** — Navigate to ICTJobs.ch and go to the search results or filter page you want to scrape. Copy the page URL (including `/page/X/` for pagination).

2. **Configure input** — Enter URLs in the `urls` array. You can add single pages or multiple pages for comprehensive collection.

3. **Set item limits** — Adjust `max_items_per_url` based on your needs:
   - **200:** Capture all listings on a page (default maximum)
   - **50–100:** Sample focused subsets for analysis
   - **10–20:** Quick test runs

4. **Enable error tolerance** — Set `ignore_url_failures: true` for batch scrapes to avoid interruptions from temporary failures.

5. **Run and export** — Start the scraper, monitor progress in the run log, and download results as JSON, CSV, or Excel.

#### Best Practices

- Start with a single URL to test and validate output format
- Use filtered search pages (by role, location, or salary) for targeted datasets
- For large-scale scrapes (10+ pages), enable `ignore_url_failures`
- Export to CSV for spreadsheet analysis or JSON for database integration

***

### Use Cases & Business Value

- **Talent intelligence:** Track IT job availability, salary trends, and hiring volume in Switzerland
- **Market research:** Analyze competitive posting strategies and in-demand tech skills
- **Career planning:** Understand job market saturation for different ICT specializations
- **Aggregation:** Feed Swiss tech jobs into multi-country job boards or internal systems
- **Academic research:** Study employment patterns in the Swiss ICT sector over time

The ICTJobs Search Results Scraper eliminates manual copy-paste work, delivering consistent, machine-readable data that enables rapid market analysis and decision-making.

***

### Limitations & Considerations

- Output contains only nine fields per job; detailed job descriptions are captured in the `Description` field
- Salary information is provided only where employers disclose it; many listings may show "Negotiable"
- Scraping is limited to publicly visible search results; private or archived listings are not accessible
- Respect ICTJobs.ch's Terms of Service and robots.txt when running large-scale scrapes

***

### Conclusion

The **ICTJobs.ch Search Results Scraper** is an efficient tool for anyone needing structured IT job data from Switzerland's largest tech job market. Whether you're a recruiter tracking talent supply, a researcher studying labor trends, or an aggregator building a multi-source platform, this scraper delivers clean, actionable job records in seconds. Start scraping today and unlock insights from Swiss ICT job postings.

# 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://ictjobs.ch/page/2/"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}
```

# 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://ictjobs.ch/page/2/"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/ictjobs-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://ictjobs.ch/page/2/"],
    "ignore_url_failures": True,
    "max_items_per_url": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/ictjobs-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://ictjobs.ch/page/2/"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}' |
apify call alexist/ictjobs-jobs-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/EAcGpMdN1ymcs8dav/builds/rncMCbberHXzvxqxo/openapi.json
