Stellenanzeigen von Karriereseiten extrahieren — Website Job Extractor

Der Website Job Extractor liest offene Stellen direkt von Firmenwebsites und Karriereseiten aus und liefert sie als strukturierte Daten. Sie übergeben nur die Website eines Unternehmens: Der Actor findet die Karriereseite, erkennt das eingesetzte Bewerbermanagementsystem (ATS), blättert durch die Joblisten und gibt saubere Datensätze zurück. So sehen Sie Einstellungssignale, noch bevor eine Stelle auf großen Jobbörsen erscheint.

Auf Apify öffnen → Jetzt testen
Eigener LLM-Key
$4 pro 1.000 Jobs
Managed LLM
$12 pro 1.000 Jobs
Pro Unternehmen
$0,01
Actor-Start
$0,00005
Ausführung
HTTP-only, 256 MB
Abdeckung
Weltweit, 7 Sprachen

Was Sie extrahieren können

Typische Anwendungsfälle

Preise

EreignisPreisWann es anfällt
Job extrahiert (eigener LLM-Key)$0,004 ($4 pro 1.000 Jobs)pro extrahiertem Job
Job extrahiert (Managed LLM)$0,012 ($12 pro 1.000 Jobs)pro Job, wenn Sie keinen eigenen API-Key angeben
Unternehmen verarbeitet$0,01pro Unternehmen, dessen Karriereseiten durchsucht werden
Actor-Start$0,00005einmal pro Lauf

Beispielrechnung mit eigenem LLM-Key: 20 Unternehmen mit zusammen 400 Jobs kosten 400 × $0,004 + 20 × $0,01 = $1,80 plus $0,00005 Startgebühr. Im Managed-LLM-Modus gilt für die Jobs der Preis von $0,012 pro Job. Mit der Option managedLlmBudgetUsd begrenzen Sie die LLM-Ausgaben pro Lauf. Es gibt kein Monatsabo, Sie zahlen nur für das, was Sie extrahieren.

Ausgabefelder

Die Tabelle zeigt die wichtigsten Felder des Datensatzes. Ein Teil der Detailfelder ist nur mit includeJobDetails gefüllt und bleibt sonst null. Zusätzlich liefert der Actor pro Unternehmen eine Diagnosezeile (_type: job_extraction_done), die zeigt, wie viele Jobs gefunden wurden oder warum keine.

FeldTypBeschreibung
company_idstringIhre eigene Firmenkennung aus dem Input
company_namestringFirmenname aus dem Input
company_name_detectedstring | nullMarkenname, den die Seiten oder das Job-System des Unternehmens melden
company_name_sourcestring | nullHerkunft des erkannten Namens: json_ld_organization, ats_board, og_site_name oder title
titlestring | nullJobtitel
descriptionstring | nullStellenbeschreibung
description_mdstring | nullAnzeigentext als Markdown von der Detailseite (nur mit includeJobDetails)
posting_formatstring | nullQuelle von description_md: html oder pdf
full_text_urlstring | nullSeite oder PDF, aus der die Detaildaten gelesen wurden
locationstring | nullStandort der Stelle
city / region / countrystring | nullStadt, Region und Land (bei ATS-API-Zeilen)
postal_code / street_addressstring | nullPLZ und Straße (aus JSON-LD, falls vorhanden)
remoteboolean | nulltrue bei Remote-Stellen (ATS-API-Zeilen)
remote_optionstring | nullremote oder hybrid, wenn die Anzeige es nennt
workplace_typestring | nullRemote, Hybrid oder vor Ort
employment_typestring | nullBeschäftigungsart (z. B. Vollzeit, Teilzeit)
experience_levelstring | nullGeforderte Erfahrungsstufe
departmentstring | nullAbteilung oder Team
requirementsarray | nullAnforderungen
benefitsarray | nullBenefits
skillsarray | nullKurze Skill-Liste aus JSON-LD
languagesarray | nullGeforderte Sprachen (englische Namen)
workload_min / workload_maxnumber | nullPensum in Prozent (80-100 % ergibt 80 und 100)
working_hoursstring | nullArbeitszeit als Text
salary_text / salary_rangestring | nullGehalt wie angegeben
salary_min / salary_maxnumber | nullGehaltsgrenzen als Zahl
salary_currency / salary_periodstring | nullWährung (ISO 4217) und Zeitraum: annual, monthly oder hourly
posted_atstring | nullVeröffentlichungsdatum
expires_at / application_deadlinestring | nullAblauf- bzw. Bewerbungsfrist (ISO-Datum)
contact_name / contact_email / contact_phonestring | nullAnsprechperson, E-Mail und Telefon, sofern in der Anzeige genannt
hiring_organizationstring | nullEinstellende Organisation laut JSON-LD
reference_numberstring | nullEigene Referenznummer des Arbeitgebers
source_urlstringKarriereseite, auf der der Job gefunden wurde
job_urlstring | nullURL der Job-Detailseite
job_idstring | nullStabile Job-Kennung aus URL oder ATS-Daten
application_url / apply_urlstring | nullDirekte Bewerbungs-URL
is_easy_applyboolean | nullJSON-LD-Flag directApply
career_page_urlstring | nullKarriereseite, bei der die Suche begann (Input oder automatisch gefunden)
ats_systemstring | nullErkanntes Job-System (z. B. onlyfy, pi-asp)
ats_urlstring | nullAdresse der Jobliste des ATS
ats_supported_by_csjbooleantrue, wenn der career-site-jobs-Actor das System direkt lesen kann
application_ats / ats_tenantstring | nullATS hinter der Bewerbungs-URL bzw. Mandant der Quelle
extraction_methodstring | nullWie die Zeile entstand, z. B. ats_api, sitemap_jsonld oder llm
confidencenumber | nullExtraktions-Konfidenz (0-1)
relevancestring | nullRelevanz zu den Keywords (high, medium, low)
extracted_atstringZeitstempel der Extraktion (ISO)
_typestring | nullDiagnosezeile: job_extraction_done (eine pro Unternehmen) oder js_rendering_suspected
job_count / jobs_seen / jobs_after_filters / jobs_pushedinteger | nullZähler der Diagnosezeile pro Unternehmen
reason / reason_messagestring | nullUrsache, wenn für ein Unternehmen 0 Jobs gefunden wurden

Input-Beispiel

{
  "companies": [
    {
      "company_id": "merian",
      "company_name": "Merian Iselin",
      "website_url": "https://merianiselin.ch"
    }
  ],
  "includeJobDetails": true,
  "maxResultsPerCompany": 50
}

Output-Beispiel — echter Datensatz

Ein echter Datensatz aus einem Lauf vom 15.10.2026 (Beschreibung gekürzt):

{
  "company_id": "merian",
  "company_name": "Merian Iselin",
  "company_name_detected": "Merian Iselin Klinik",
  "company_name_source": "json_ld_organization",
  "title": "Dipl. Fachfrau / Fachmann Operationstechnik HF",
  "description": "<div class=\"loga3-pointed-mark\"> <p>Zur Verstärkung unseres Teams suchen wir nach Vereinbarung eine / einen</p> </div> <h1>Dipl. Fachfrau / Fachmann Operationstechnik HF</h1> <div class=\"loga3-lead\"> <p>Die Merian Iselin Klinik ist eine hochmoderne …",
  "location": "Basel, BS, CH",
  "city": null,
  "region": null,
  "country": null,
  "remote": null,
  "employment_type": "CONTRACTOR",
  "experience_level": null,
  "salary_range": null,
  "department": null,
  "requirements": null,
  "benefits": null,
  "source_url": "https://merianiselin.ch/jobs/3a875c27-3516-45c1-b7d4-07a26db0f188",
  "job_url": "https://merianiselin.ch/jobs/3a875c27-3516-45c1-b7d4-07a26db0f188",
  "job_id": "3a875c27-3516-45c1-b7d4-07a26db0f188",
  "application_url": "https://merianiselin.ch/jobs/3a875c27-3516-45c1-b7d4-07a26db0f188",
  "posted_at": "2026-10-02",
  "workplace_type": null,
  "extracted_at": "2026-10-15T05:09:37.400Z",
  "confidence": null,
  "relevance": null,
  "ats_system": "pi-asp",
  "ats_supported_by_csj": false,
  "application_ats": null,
  "ats_tenant": null,
  "ats_url": "https://merian.pi-asp.de/bewerber-web/?xsrf=D76877BB24D51193A66ED4BD80BFD345&company=100-FIRMA-ID&tenant=&lang=DS&canShare=true&Uid=",
  "career_page_url": "https://merianiselin.ch/klinik/jobs/offene-stellen",
  "extraction_method": "sitemap_jsonld",
  "description_md": null,
  "posting_format": null,
  "full_text_url": null,
  "expires_at": null,
  "application_deadline": null,
  "salary_text": null,
  "salary_min": null,
  "salary_max": null,
  "salary_currency": null,
  "salary_period": null,
  "workload_min": null,
  "workload_max": null,
  "contact_name": null,
  "contact_email": null,
  "contact_phone": null,
  "remote_option": null,
  "languages": null,
  "hiring_organization": null,
  "reference_number": null,
  "apply_url": null,
  "is_easy_apply": null,
  "skills": null,
  "postal_code": null,
  "street_address": null,
  "working_hours": null,
  "job_url_is_synthetic": false
}

Integrationen

Direkt auf Apify ausführen (kein Code)

Klicken Sie oben auf Auf Apify öffnen, um website-job-extractor im Browser auszuführen, ohne Code und ohne Installation. In der Apify-Konsole erhalten Sie:

Ihren Apify API-Token erhalten

Um diesen Actor aus Ihrem eigenen Code auszuführen, benötigen Sie einen Apify API-Token. In etwa einer Minute erledigt:

  1. Kostenlos bei Apify registrieren (Google, GitHub oder E-Mail).
  2. Gehen Sie zu Einstellungen → Integrationen → API-Tokens.
  3. Klicken Sie auf Neuen API-Token erstellen. Kopieren und geheim halten.

Gratiskontingent: Apify schreibt Ihrem Konto 5$ Plattformnutzung pro Monat gut, keine Kreditkarte erforderlich. Das reicht für erste Tests: Bei $0,004 pro Job entspricht das rechnerisch mehr als 1.000 Jobs (ohne Unternehmens- und Startgebühr).

Aus Code aufrufen

Führen Sie diesen Actor aus jeder Sprache über die Apify-REST-API aus. Ersetzen Sie YOUR_TOKEN durch Ihren API-Token und passen Sie das JSON-Input an.

curl -X POST "https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies": [{"company_id": "merian", "company_name": "Merian Iselin", "website_url": "https://merianiselin.ch"}], "includeJobDetails": true, "maxResultsPerCompany": 50}'
// npm install apify-client
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('santamaria-automations/website-job-extractor').call({
  companies: [{ company_id: 'merian', company_name: 'Merian Iselin', website_url: 'https://merianiselin.ch' }],
  includeJobDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
# pip install apify-client
from apify_client import ApifyClient

client = ApifyClient('YOUR_TOKEN')
run = client.actor('santamaria-automations/website-job-extractor').call(run_input={
    'companies': [{'company_id': 'merian', 'company_name': 'Merian Iselin', 'website_url': 'https://merianiselin.ch'}],
    'includeJobDetails': True,
})
items = list(client.dataset(run['defaultDatasetId']).iterate_items())
print(items)
// dotnet add package Apify.Client
using Apify.Client;

var client = new ApifyClient("YOUR_TOKEN");
var run = await client.Actor("santamaria-automations/website-job-extractor").CallAsync(new {
    companies = new[] { new { company_id = "merian", company_name = "Merian Iselin", website_url = "https://merianiselin.ch" } },
    includeJobDetails = true
});
var items = await client.Dataset(run.DefaultDatasetId).ListItemsAsync();
// Maven: com.apify:apify-client
import com.apify.client.ApifyClient;

ApifyClient client = new ApifyClient("YOUR_TOKEN");
Map<String,Object> input = Map.of(
    "companies", List.of(Map.of("company_id", "merian", "company_name", "Merian Iselin", "website_url", "https://merianiselin.ch")),
    "includeJobDetails", true);
ActorRun run = client.actor("santamaria-automations/website-job-extractor").call(input);
List<Map<String,Object>> items = client.dataset(run.getDefaultDatasetId()).listItems();

Mit KI-Agenten verwenden (MCP)

Dieser Actor ist auf dem Apify MCP-Server verfügbar, sodass Sie ihn von jedem MCP-kompatiblen KI-Client aus steuern können – Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex oder einem eigenen Agent – ohne Code zu schreiben.

https://mcp.apify.com?tools=santamaria-automations/website-job-extractor

Beispiel-Prompt nach Verbindung:

"Verwende website-job-extractor, um die offenen Stellen auf der Karriereseite von merianiselin.ch zu extrahieren, und liefere mir die Ergebnisse als Tabelle."

Clients mit dynamischer Tool-Discovery (Claude.ai, VS Code) erhalten das vollständige Input-Schema automatisch via add-actor.

Mit No-Code-Plattformen verwenden

Triggern Sie diesen Actor aus Ihrem Automatisierungstool. Alle unten aufgeführten Plattformen können die Apify-API in wenigen Klicks aufrufen — kein Code erforderlich.

  1. Fügen Sie den n8n Apify-Node hinzu (auf n8n Cloud vorinstalliert; auf self-hosted @apify/n8n-nodes-apify installieren).
  2. Setzen Sie Actor auf santamaria-automations/website-job-extractor.
  3. Wählen Sie Operation Run Actor and get dataset, fügen Sie Ihr Input-JSON ein und verbinden Sie einen Downstream-Node (Google Sheets, Postgres, Webhook, …).
  1. Erstellen Sie einen neuen Zap mit beliebigem Trigger.
  2. Fügen Sie eine Webhooks by Zapier POST-Action zu https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN hinzu.
  3. Body: Ihr Input-JSON. Content-Type: application/json.
  1. Erstellen Sie ein neues Szenario.
  2. Fügen Sie ein HTTP-Modul hinzu: URL https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN, Methode POST, Body raw JSON.
  3. Parsen Sie die Antwort mit einem JSON-Modul, um Items downstream zu iterieren.
  1. Erstellen Sie einen neuen Workflow.
  2. Fügen Sie einen HTTP Request-Schritt hinzu: POST zu https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN.
  3. Greifen Sie in nachfolgenden Schritten auf steps.http.$return_value zu.
  1. Installieren Sie das API Connector-Plugin.
  2. Fügen Sie eine neue API hinzu: POST https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN, Body type JSON.
  3. Initialisieren Sie den Call mit Ihrem Input und referenzieren Sie das Response-Array in Workflow-Actions.

Häufige Fragen

Was kostet der Website Job Extractor?

Mit eigenem LLM-API-Key kostet ein extrahierter Job $0,004 (also $4 pro 1.000 Jobs). Im Managed-LLM-Modus ohne eigenen Key sind es $0,012 pro Job ($12 pro 1.000 Jobs). Hinzu kommen $0,01 pro verarbeitetem Unternehmen und $0,00005 pro Actor-Start. Abgerechnet wird nutzungsbasiert über Apify, ein Monatsabo gibt es nicht.

Brauche ich einen eigenen LLM-API-Key?

Nein. Lassen Sie die Key-Felder leer, dann nutzt der Actor ein verwaltetes OpenRouter-Modell (Managed-LLM-Modus). Wenn Sie lieber einen eigenen Key von Gemini, Groq oder OpenRouter verwenden, zahlen Sie nur den günstigeren Preis pro Job.

Welche Daten liefert der Actor?

Pro Job unter anderem Titel, Beschreibung, Standort, Beschäftigungsart, Abteilung, Veröffentlichungsdatum, Job- und Bewerbungs-URL sowie das erkannte ATS-System. Mit der Option includeJobDetails kommen Gehalt, Pensum, Ansprechperson, Bewerbungsfrist, Sprachen und weitere Detailfelder hinzu, soweit sie in der Anzeige stehen.

Wie finde ich die Karriereseite eines Unternehmens?

Sie müssen sie nicht kennen. Übergeben Sie nur die Firmenwebsite (website_url). Der Actor sucht die Karriereseite über die Navigation der Startseite und gängige Subdomains wie jobs.domain.ch oder karriere.domain.ch. Kennen Sie die Karriere-URL bereits, übergeben Sie sie direkt als career_urls.

Ist das Scrapen von Karriereseiten erlaubt?

Öffentlich zugängliche Stellenanzeigen dürfen in den meisten Rechtsordnungen ausgelesen werden. Enthält eine Anzeige personenbezogene Daten (etwa eine Ansprechperson), gilt die DSGVO. Prüfen Sie die Rechtslage für Ihren Einsatzzweck und lassen Sie sich bei kommerzieller Nutzung rechtlich beraten.

Wie aktuell sind die Daten?

Jeder Lauf liest die Karriereseiten live zum Zeitpunkt der Ausführung. Mit einem Zeitplan in der Apify-Konsole (täglich, stündlich oder per Cron) halten Sie Ihren Datensatz automatisch aktuell.

Verwandte Actors

Weiterführende Anleitungen (Englisch)

Anleitung

Auf Apify öffnen → Jetzt testen — kostenloser Einstieg