arbeit.swiss Scraper: Stellenanzeigen als CSV exportieren

Du suchst Stellen aus dem Job-Room des SECO (arbeit.swiss) und willst sie in Excel oder in eine eigene Auswertung bekommen? Der Arbeit.Swiss Scraper holt die Stellen zu deinen Stichwörtern und Kantonen und liefert sie als Tabelle: Titel, Arbeitgeber, Ort, Kanton, Pensum, Datum und Link zur Anzeige. Ohne Code, in wenigen Minuten.

Niveau: Einsteiger
Dauer: 5 Minuten
Kosten: 30 Stellen mit Text: ca. 0,09 $
Werkzeuge: Apify Console (ohne Code)
Actor auf Apify öffnen → Kosten ansehen Claude-Prompt kopieren

In diesem Tutorial

  1. Das bekommst du
  2. Alle Felder
  3. Beispiel: Logistik im Kanton Bern
  4. Beispiel: Elektroinstallateure im Kanton Bern
  5. Schritt 1: Apify-Konto anlegen
  6. Schritt 2: Stichwort und Kanton eintragen
  7. Schritt 3: Actor starten
  8. Schritt 4: Daten exportieren
  9. Prompt für Claude
  10. Welche Filter es gibt
  11. API und Zeitplan
  12. Kosten
  13. Anwendungen
  14. FAQ

Das bekommst du

Das Job-Room des SECO bietet keinen Export für Stellen. Dort melden Arbeitgeber und RAV offene Stellen, auch solche, die auf privaten Jobbörsen fehlen können. Dieselben Daten laufen unter vier Adressen: arbeit.swiss (Deutsch), travail.swiss (Französisch), lavoro.swiss (Italienisch) und work.swiss (Englisch). Der Actor holt sie in einem Lauf und legt sie als Tabelle ab, die du als CSV, Excel oder JSON herunterladen kannst.

Der Actor liest nur öffentlich sichtbare Anzeigen. Du brauchst kein Konto bei Job-Room und keinen API-Schlüssel.

Alle Felder im Überblick

So sind die Felder laut Ausgabe-Schema des Actors aufgebaut. Ohne includeJobDetails fehlt der volle Anzeigentext, du bekommst dann nur den kurzen Auszug.

FeldTypInhalt
idTextEindeutige ID der Stelle bei Job-Room (UUID)
titleTextTitel der Stelle
companyTextArbeitgeber, bei Personalvermittlern der Name des Vermittlers
location / city / postal_codeTextArbeitsort als „Ort, Kanton“, Ort und Postleitzahl des Arbeitsorts (nicht des Firmensitzes)
canton / countryTextKanton als Kürzel (zum Beispiel BE) und Land (CH)
job_statusTextonline, offline, expired oder unknown
employment_typeTextBeschäftigungsart, im Beispiel full-time oder part-time
workload_min / workload_maxZahlPensum in Prozent
contract_typeTextpermanent (unbefristet) oder temporary (befristet)
start_date / starts_immediately / end_dateDatum / BooleanEintrittsdatum, „ab sofort“ und Ende bei befristeten Stellen
work_formsListeBesondere Arbeitsformen wie Schicht-, Nacht- oder Sonntagsarbeit
description_snippetTextKurzer Auszug aus der Beschreibung
description_full / description_mdTextVoller Anzeigentext als Klartext und als Markdown (mit Details)
posted_at / expires_atDatumVeröffentlichung und Ablauf der Anzeige (auf den Tag genau)
source_url / source_platformTextLink zur Stelle auf job-room.ch und Plattform (arbeit.swiss)
apply_url / apply_emailTextBewerbungslink und, falls angegeben, Bewerbungs-E-Mail
company_urlTextWebsite oder Profil des Arbeitgebers, falls vorhanden
contact_salutation, contact_firstname, contact_lastname, contact_email, contact_phoneTextAnsprechperson, falls die Anzeige eine nennt
salary_min / salary_max / salary_currency / salary_periodZahl / TextLohn, soweit angegeben. Job-Room veröffentlicht in der Regel keine Löhne
remote_option / requirementsText / ListeIm Schema vorhanden, bei Job-Room aber nicht strukturiert geführt. Im Beispiellauf leer
search_query / scraped_atTextDas Stichwort, das die Stelle gefunden hat, und Zeitpunkt des Abrufs

Beispiel: Logistik im Kanton Bern

Wir haben den Actor einmal lokal laufen lassen (21.10.2026): Stichwort „Logistik“, Kanton Bern, neueste zuerst, höchstens 30 Stellen, mit vollem Anzeigentext. Das war der Input:

{
  "searchQueries": ["Logistik"],
  "cantonCodes": ["BE"],
  "sortBy": "newest",
  "maxResults": 30,
  "includeJobDetails": true
}

Der Lauf lieferte 30 Stellen und war nach wenigen Sekunden fertig (lokal gemessen, Zeiten auf Apify können abweichen). Job-Room meldete für diese Suche 345 Treffer in den letzten 60 Tagen. Der Lauf endete also an unserem Limit maxResults und nicht, weil es keine weiteren Stellen gab. Drei Ergebnisse, gekürzt und ohne Ansprechpersonen:

[
  {
    "id": "409c48a9-7faa-48d1-b61c-7cb66591158c",
    "title": "Betriebsangestellte:r",
    "company": "Jungfraubahnen Management AG",
    "location": "Eigergletscher, BE",
    "postal_code": "3823",
    "canton": "BE",
    "job_status": "online",
    "employment_type": "full-time",
    "workload_min": 100,
    "workload_max": 100,
    "contract_type": "permanent",
    "starts_immediately": false,
    "posted_at": "2026-10-21T00:00:00.000Z",
    "expires_at": "2026-11-20T00:00:00.000Z",
    "source_url": "https://www.job-room.ch/job-search/409c48a9-7faa-48d1-b61c-7cb66591158c",
    "source_platform": "arbeit.swiss",
    "search_query": "Logistik"
  },
  {
    "id": "38dcda54-688f-4336-aaf9-3f78ed9731c9",
    "title": "Teamleitung SAP Services / Business Analyst Order-to-Cash (OTC) 80-100% (m/w/d)",
    "company": "Sanitas Troesch AG",
    "location": "Bern, BE",
    "postal_code": "3018",
    "canton": "BE",
    "employment_type": "full-time",
    "workload_min": 100,
    "contract_type": "permanent",
    "posted_at": "2026-10-21T00:00:00.000Z",
    "search_query": "Logistik"
  },
  {
    "id": "7d3a3ce7-2a00-4f90-ac8d-17445bf115d9",
    "title": "Fachspezialist/-in Administration",
    "company": "Institut für Virologie und Immunologie IVI",
    "location": "Mittelhäusern, BE",
    "canton": "BE",
    "employment_type": "full-time",
    "workload_min": 100,
    "contract_type": "permanent",
    "posted_at": "2026-10-21T00:00:00.000Z",
    "search_query": "Logistik"
  }
]

So viele der 30 Stellen hatten ein Feld gefüllt:

Prüfe die Treffer. Das Stichwort sucht auch im Anzeigentext. Im Beispiel kam „Logistik“ in allen 30 Stellen irgendwo vor, aber nur 5 hatten es im Titel. Die anderen waren zum Beispiel Betriebsangestellte oder SAP-Teamleitung. Nutze genaue Stichwörter oder den Filter titleFilter (siehe unten).
Datum auf den Tag genau. posted_at enthält nur das Datum, die Uhrzeit ist immer 00:00. Auch die Stellen der Auswahl oben stammen alle vom 20. oder 21. Oktober.

Beispiel: Elektroinstallateure im Kanton Bern

Dieses Beispiel steckt hinter unserem Short zu Elektro-Stellen im Kanton Bern. Lokaler Lauf am 21.10.2026: Stichwort „Elektroinstallateur“, Kanton Bern, Stellen der letzten 30 Tage, neueste zuerst, mit vollem Anzeigentext:

{
  "keywords": [
    "Elektroinstallateur"
  ],
  "cantonCodes": [
    "BE"
  ],
  "sortBy": "newest",
  "onlineSinceDays": 30,
  "maxResultsPerQuery": 300,
  "includeJobDetails": true
}
Prüfe die Arbeitgeber. Eine Namensliste erkennt nicht jeden kleinen Personalvermittler. Schau dir die Firmen an, bevor du sie ansprichst.

Mit Claude: Verbinde den Apify MCP Server als eigenen Konnektor mit dieser URL (siehe Apifys MCP-Dokumentation). Sie beschränkt Claude auf diesen einen Actor:

https://mcp.apify.com?tools=santamaria-automations/arbeit-swiss-scraper

Dann fügst du diesen Prompt ein. Claude nennt dir zuerst die Kosten und wartet auf dein OK:

Nutze den Apify MCP Server. Starte den Actor santamaria-automations/arbeit-swiss-scraper mit
keywords ["Elektroinstallateur"], cantonCodes ["BE"], sortBy "newest", onlineSinceDays 30, maxResultsPerQuery 300, includeJobDetails true.
Sag mir vor dem Start, was der Lauf kostet, und warte auf mein OK.
Behalte danach nur Titel mit Elektr, Automatik, Monteur oder Install, ohne Lehrstellen, und markiere Arbeitgeber, die nach Personalvermittlung aussehen.
Gib mir eine Tabelle mit Arbeitgeber, Anzahl Stellen, Ort und Pensum (workload_min bis workload_max), sortiert nach Anzahl absteigend.
Kosten dieses Laufs: Auf dem Free-Plan 0,00005 $ + 253 x 0,003 $ = 0,759 $, also etwa 0,76 $. Der volle Anzeigentext kostet nichts extra. Der Lauf lief lokal über einen eigenen Proxy und wurde nicht auf Apify abgerechnet.
SCHRITT 1

Apify-Konto anlegen

  1. Öffne die Seite des arbeit.swiss-Scrapers auf Apify.
  2. Klicke auf Try for free und registriere dich mit Google oder E-Mail.
  3. Du landest in der Apify Console im Tab Input des Actors. Für kleine Läufe reicht das monatliche Gratis-Guthaben des Free-Plans.
SCHRITT 2

Stichwort und Kanton eintragen

Im Feld searchQueries trägst du ein oder mehrere Stichwörter ein. Jedes Stichwort läuft als eigene Suche, doppelte Stellen werden über alle Stichwörter hinweg entfernt. Den Kanton gibst du bei cantonCodes als Kürzel an, zum Beispiel ["BE"] oder ["ZH", "SG"]. Leer heisst ganze Schweiz.

Starte klein. Setze beim ersten Lauf maxResults auf 10 bis 30. So siehst du schnell, ob die Treffer zu deinem Stichwort passen, und zahlst nur wenige Rappen.
Standard: nur die letzten 60 Tage. Ohne weitere Angabe liefert Job-Room Stellen, die in den letzten 60 Tagen online gingen. Mit postedWithinDays wählst du einen kürzeren Zeitraum.
SCHRITT 3

Actor starten und Ergebnis ansehen

Klicke unten auf Save and Run. Auf der Lauf-Seite siehst du im Tab Log den Fortschritt, im Tab Dataset die Ergebnisse als Tabelle. Mehrere Stichwörter und Kantone in einem Lauf sehen so aus:

{
  "searchQueries": ["Pflege", "Lagerist", "Buchhaltung"],
  "cantonCodes": ["ZH", "BE"],
  "maxResultsPerQuery": 50,
  "includeJobDetails": false
}
SCHRITT 4

Daten exportieren

  1. Öffne im Lauf den Tab Dataset.
  2. Klicke auf Export.
  3. Wähle das Format: CSV, Excel, JSON und weitere stehen zur Auswahl. Mit der Feld-Auswahl exportierst du nur die Spalten, die du brauchst, zum Beispiel title, company, location, workload_min, posted_at und source_url.

Prompt für Claude zum Kopieren

Füge in Claude den Apify MCP Server als eigenen Konnektor mit dieser URL hinzu (siehe Apifys MCP-Dokumentation). Die URL beschränkt Claude auf diesen einen Actor:

https://mcp.apify.com?tools=santamaria-automations/arbeit-swiss-scraper

Dann fügst du diesen Prompt ein und ersetzt Stichwort und Kanton durch deine. Claude nennt dir zuerst die Kosten und wartet auf dein OK, bevor der Lauf startet:

Nutze den Apify MCP Server. Starte den Actor santamaria-automations/arbeit-swiss-scraper mit dem Stichwort
"Logistik", dem Kanton BE, sortBy newest und höchstens 30 Ergebnissen.
Sag mir vor dem Start, was der Lauf kostet, und warte auf mein OK.
Wenn er fertig ist, gib mir eine Tabelle mit Titel, Arbeitgeber, Ort, Pensum und Datum, die neuesten zuerst.

Getestet haben wir den Actor und die Eingaben, nicht die Prompts über MCP; Claude formuliert die Kostenangabe eventuell anders.

Welche Filter es gibt

Der Actor filtert bei der Suche nach diesen Angaben:

Einen Filter für Branche, Lohn oder Vertragsart gibt es nicht. Das erledigst du danach in der Tabelle, etwa mit contract_type und employment_type.

Per API und automatisch abrufen

Du kannst den Actor auch aus eigenen Skripten, n8n oder Make aufrufen. Dieser Aufruf startet einen Lauf und gibt die Ergebnisse direkt zurück (Apify-Endpunkt run-sync-get-dataset-items):

curl -X POST "https://api.apify.com/v2/acts/santamaria-automations~arbeit-swiss-scraper/run-sync-get-dataset-items?token=DEIN_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["Logistik"], "cantonCodes": ["BE"], "sortBy": "newest", "maxResults": 50}'

Deinen API-Token findest du in der Apify Console unter Settings → API & Integrations. Für Abrufe, die regelmässig laufen sollen, legst du in der Console unter Schedules einen Zeitplan an. Setze postedWithinDays auf 1 für tägliche Läufe und vergleiche die Ergebnisse mit dem letzten Abruf (Feld id), damit du nur neue Stellen weiterverarbeitest.

Was das kostet

Der Actor rechnet pro Ergebnis ab (Preise laut Apify-Store, Free-Plan, Stand 21.10.2026):

Jede Stelle wird nur einmal berechnet, nämlich beim Speichern im Ergebnis. Der volle Anzeigentext (includeJobDetails) kostet nichts extra. Rechenbeispiel: 30 Stellen = 0,00005 $ + 30 x 0,003 $ = 0,09005 $, also etwa 0,09 $. Alle 345 Treffer des Beispiels (Logistik, Kanton Bern, 60 Tage) würden etwa 1,04 $ kosten. Die aktuellen Preise findest du immer auf der Apify-Seite des Actors.

Wofür Leute die Daten nutzen

Stellenmarkt nach Kanton beobachten

Lass regelmässig die neuesten Stellen für einen Beruf und einen Kanton laufen und zähle, wie viele pro Woche dazukommen oder welche Arbeitgeber am häufigsten suchen.

Eigene Jobliste oder Stellenportal füttern

Über source_url verlinkst du auf die Originalanzeige. Mit expires_at und job_status entfernst du abgelaufene Anzeigen aus deiner Liste.

Arbeitgeber finden

Die Spalte company zeigt, wer in deiner Region gerade einstellt. Beachte, dass dort auch Personalvermittler stehen können.

Pensum und befristete Stellen auswerten

Mit workload_min, workload_max und contract_type siehst du, wie viele Stellen Teilzeit oder befristet sind.

Häufige Fragen

Brauche ich Programmierkenntnisse für den arbeit.swiss-Scraper?

Nein. In der Apify Console füllst du ein Formular aus, klickst auf Save and Run und lädst die Tabelle herunter. Code brauchst du nur, wenn du den Actor per API in ein eigenes System einbauen willst.

Ist arbeit.swiss dasselbe wie das Job-Room des SECO?

Ja. arbeit.swiss, travail.swiss, lavoro.swiss und work.swiss sind die vier Sprachversionen des Job-Room des SECO (job-room.ch). Der Actor liest die gemeinsame Datenbasis. Du bekommst die Stellen also unabhängig von der Sprache der Seite.

Bekomme ich Gehaltsangaben?

In der Regel nicht. Die Felder salary_min, salary_max, salary_currency und salary_period sind im Schema vorhanden, aber Job-Room veröffentlicht keine Löhne. Im Beispiellauf war keines der 30 Gehaltsfelder gefüllt.

Wie viele Stellen bekomme ich pro Suche?

Standardmässig höchstens 100 pro Suchbegriff (maxResultsPerQuery). Setze den Wert auf 0 und maxResults auf 0, wenn du alle Treffer willst. Die Suche holt dann Seite für Seite je 100 Stellen. Zum Vergleich: Im Beispiel meldete Job-Room 345 Treffer für Logistik im Kanton Bern.

Wie bekomme ich nur neue Stellen?

Setze postedWithinDays auf 1 für die letzten 24 Stunden oder auf 7 für die letzte Woche. Der Filter läuft auf Seiten von Job-Room. Ohne ihn gilt der Standard von 60 Tagen. Bei regelmässigen Läufen vergleichst du zusätzlich das Feld id mit deinem letzten Abruf.

Was kostet der arbeit.swiss-Scraper?

0,003 $ pro Stelle, dazu 0,00005 $ für den Start. Die Detailseite ist im Preis enthalten. 30 Stellen mit vollem Text kosten damit etwa 0,09 $.

Darf ich die Daten verwenden?

Das hängt von deinem Anwendungsfall ab, besonders bei Kontaktangaben von Personen. Einzelne Anzeigen nennen eine Ansprechperson mit E-Mail oder Telefon. Prüfe die Regeln des Datenschutzes (in der Schweiz das DSG, bei EU-Bezug die DSGVO), bevor du solche Daten speicherst oder weiterverwendest.

Weiterführende Links

Actor auf Apify öffnen → Alle Tutorials