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.
website_url); der Actor findet Karriereseiten über die Navigation und Subdomains wie jobs.domain.ch oder karriere.domain.chincludeJobDetails zusätzlich Anzeigentext als Markdown, Gehalt, Pensum, Ansprechperson, Bewerbungsfrist, Sprachen und Referenznummerkeywords im Titel, location und postedWithinDays; Filter greifen vor dem Limit und vor der AbrechnungoutputLanguage mit en, de, fr, it, es, pt, nl oder auto (Sprache der Website)skipAtsExtraction übergeben Sie bekannte ATS-Portale an den Career Site Jobs Scraper| Ereignis | Preis | Wann 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,01 | pro Unternehmen, dessen Karriereseiten durchsucht werden |
| Actor-Start | $0,00005 | einmal 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.
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.
| Feld | Typ | Beschreibung |
|---|---|---|
company_id | string | Ihre eigene Firmenkennung aus dem Input |
company_name | string | Firmenname aus dem Input |
company_name_detected | string | null | Markenname, den die Seiten oder das Job-System des Unternehmens melden |
company_name_source | string | null | Herkunft des erkannten Namens: json_ld_organization, ats_board, og_site_name oder title |
title | string | null | Jobtitel |
description | string | null | Stellenbeschreibung |
description_md | string | null | Anzeigentext als Markdown von der Detailseite (nur mit includeJobDetails) |
posting_format | string | null | Quelle von description_md: html oder pdf |
full_text_url | string | null | Seite oder PDF, aus der die Detaildaten gelesen wurden |
location | string | null | Standort der Stelle |
city / region / country | string | null | Stadt, Region und Land (bei ATS-API-Zeilen) |
postal_code / street_address | string | null | PLZ und Straße (aus JSON-LD, falls vorhanden) |
remote | boolean | null | true bei Remote-Stellen (ATS-API-Zeilen) |
remote_option | string | null | remote oder hybrid, wenn die Anzeige es nennt |
workplace_type | string | null | Remote, Hybrid oder vor Ort |
employment_type | string | null | Beschäftigungsart (z. B. Vollzeit, Teilzeit) |
experience_level | string | null | Geforderte Erfahrungsstufe |
department | string | null | Abteilung oder Team |
requirements | array | null | Anforderungen |
benefits | array | null | Benefits |
skills | array | null | Kurze Skill-Liste aus JSON-LD |
languages | array | null | Geforderte Sprachen (englische Namen) |
workload_min / workload_max | number | null | Pensum in Prozent (80-100 % ergibt 80 und 100) |
working_hours | string | null | Arbeitszeit als Text |
salary_text / salary_range | string | null | Gehalt wie angegeben |
salary_min / salary_max | number | null | Gehaltsgrenzen als Zahl |
salary_currency / salary_period | string | null | Währung (ISO 4217) und Zeitraum: annual, monthly oder hourly |
posted_at | string | null | Veröffentlichungsdatum |
expires_at / application_deadline | string | null | Ablauf- bzw. Bewerbungsfrist (ISO-Datum) |
contact_name / contact_email / contact_phone | string | null | Ansprechperson, E-Mail und Telefon, sofern in der Anzeige genannt |
hiring_organization | string | null | Einstellende Organisation laut JSON-LD |
reference_number | string | null | Eigene Referenznummer des Arbeitgebers |
source_url | string | Karriereseite, auf der der Job gefunden wurde |
job_url | string | null | URL der Job-Detailseite |
job_id | string | null | Stabile Job-Kennung aus URL oder ATS-Daten |
application_url / apply_url | string | null | Direkte Bewerbungs-URL |
is_easy_apply | boolean | null | JSON-LD-Flag directApply |
career_page_url | string | null | Karriereseite, bei der die Suche begann (Input oder automatisch gefunden) |
ats_system | string | null | Erkanntes Job-System (z. B. onlyfy, pi-asp) |
ats_url | string | null | Adresse der Jobliste des ATS |
ats_supported_by_csj | boolean | true, wenn der career-site-jobs-Actor das System direkt lesen kann |
application_ats / ats_tenant | string | null | ATS hinter der Bewerbungs-URL bzw. Mandant der Quelle |
extraction_method | string | null | Wie die Zeile entstand, z. B. ats_api, sitemap_jsonld oder llm |
confidence | number | null | Extraktions-Konfidenz (0-1) |
relevance | string | null | Relevanz zu den Keywords (high, medium, low) |
extracted_at | string | Zeitstempel der Extraktion (ISO) |
_type | string | null | Diagnosezeile: job_extraction_done (eine pro Unternehmen) oder js_rendering_suspected |
job_count / jobs_seen / jobs_after_filters / jobs_pushed | integer | null | Zähler der Diagnosezeile pro Unternehmen |
reason / reason_message | string | null | Ursache, wenn für ein Unternehmen 0 Jobs gefunden wurden |
{
"companies": [
{
"company_id": "merian",
"company_name": "Merian Iselin",
"website_url": "https://merianiselin.ch"
}
],
"includeJobDetails": true,
"maxResultsPerCompany": 50
}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
}webhookUrl werden die Ergebnisse nach Abschluss an Ihren Endpunkt gesendetKlicken 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:
Um diesen Actor aus Ihrem eigenen Code auszuführen, benötigen Sie einen Apify API-Token. In etwa einer Minute erledigt:
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).
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();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-extractorBeispiel-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.
Triggern Sie diesen Actor aus Ihrem Automatisierungstool. Alle unten aufgeführten Plattformen können die Apify-API in wenigen Klicks aufrufen — kein Code erforderlich.
@apify/n8n-nodes-apify installieren).santamaria-automations/website-job-extractor.https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN hinzu.application/json.https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN, Methode POST, Body raw JSON.https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN.steps.http.$return_value zu.https://api.apify.com/v2/acts/santamaria-automations~website-job-extractor/run-sync-get-dataset-items?token=YOUR_TOKEN, Body type JSON.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.
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.
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.
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.
Ö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.
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.