Senden Sie LinkedIn- oder Indeed-Suchen, Job- oder Karriereseiten. Web Unlocker liefert sie, wie ein Besucher sie sieht: 60 LinkedIn-Jobs oder 50 bei Indeed, als eine Seite berechnet. Kein Login, keine Jobbörsen-API. Fehlschläge kosten nichts.
1.000 kostenlose Anfragen · Nur bei Erfolg zahlen · 195+ Länder · Claude-tauglich
Jobbörsen brauchen 3 bis 30 Sekunden. Es läuft noch, Sie müssen nicht erneut klicken.
Bereit für Ihre eigenen Suchen? API-Key anfordern oder Demo buchen.
Erzählen Sie uns kurz von Ihrem Team und erhalten Sie:
Eine LinkedIn-Jobsuchseite enthält 60 Job-Karten mit Titel, Unternehmen, Ort und Veröffentlichungsdatum, und Web Unlocker berechnet sie als eine Seite. LinkedIn-Job-Scraper auf Apify und Bright Data berechnen jeden Job als eigenen Datensatz, und ScraperAPI verlangt 30 Credits für eine LinkedIn-Seite.
Eine Seite, 60 Jobs.
167 Seiten, 10.000 Jobs.
Brauchen Sie die vollständige Beschreibung? Die eigene Seite eines Jobs ist eine weitere Anfrage, daher kosten 1.000 Beschreibungen $0.98. Eine Indeed-Suchseite enthält 50 Jobs zum selben Preis, ebenso die Karriereseite eines Unternehmens.
Was 10.000 LinkedIn-Jobs aus Suchseiten kosten
167 Suchseiten mit je 60 Jobs, zu veröffentlichten Preisen
Bereit, es mit Ihren eigenen Suchen auszuführen? API-Key und kostenlose Anfragen erhalten.
Einhundert Jobseiten, nacheinander angefordert, ohne Wiederholungen: LinkedIn-Suchen in 25 Städten, die Folgeseiten einer Suche, Jobseiten mit vollständiger Beschreibung, Indeed-Suchen und -Jobseiten sowie Karriereseiten von Unternehmen auf Lever, Ashby, Greenhouse und Workday.
Eine Seite, die nicht zurückkommt, kostet $0.
Sie zahlen für Seiten, nicht für Versuche.
Beschränken Sie eine LinkedIn-Suche auf die letzten 24 Stunden, und jeder Job auf der Seite ist höchstens einen Tag alt, markiert mit Be an early applicant, solange er frisch ist. Ihr Skript fragt diese Seite so oft Sie möchten ab: Eine Prüfung pro Stunde sind 24 Seiten am Tag, $0.71 im Monat.
Job-Datensätze werden wöchentlich oder monatlich aktualisiert.
Ihre Seite ist von dieser Stunde.
Scraping von Jobbörsen ohne eigene Browserflotte: Web Unlocker gibt die Seite zurück, und die Job-Karten sind einfaches HTML, das Sie mit ein paar Zeilen Code lesen. Dieselbe Anfrage funktioniert bei LinkedIn, Indeed und auf Karriereseiten.
Füllen Sie das Formular oben aus. Der Key kommt innerhalb eines Werktags per E-Mail.
Eine LinkedIn- oder Indeed-Suche, die Folgeseiten einer Suche, die eigene Seite eines Jobs für seine Beschreibung oder die Karriereseite eines Unternehmens.
Schneiden Sie die Job-Karten aus der Seite und behalten Sie die Felder, die Sie brauchen: Titel, Unternehmen, Ort, Datum und Link.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python linkedin_jobs.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport html
import json
import os
import re
import time
from urllib.parse import urlencode
import requests
query = "data analyst"
where = "Chicago, IL"
def scrape(url):
for attempt in range(3):
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
params={"url": url, "geo": "us", "format": "json"},
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
timeout=90,
)
page = response.json().get("data", {}).get("html", "") if response.ok else ""
if "urn:li:jobPosting:" in page:
return page
time.sleep(5)
raise RuntimeError("No jobs came back, try again later")
def text(pattern, card):
found = re.search(pattern, card, re.S)
return " ".join(html.unescape(re.sub(r"<[^>]+>", " ", found.group(1))).split()) if found else None
search = "https://www.linkedin.com/jobs/search?" + urlencode({"keywords": query, "location": where})
page = scrape(search)
jobs = []
for card in page.split("<li")[1:]:
job_id = re.search(r"urn:li:jobPosting:(\d+)", card)
if not job_id:
continue
jobs.append({
"title": text(r'base-search-card__title[^>]*>(.*?)</h3>', card),
"company": text(r'base-search-card__subtitle[^>]*>(.*?)</h4>', card),
"location": text(r'job-search-card__location[^>]*>(.*?)</span>', card),
"posted": text(r"<time[^>]*>(.*?)</time>", card),
"date": text(r'datetime="([^"]+)"', card),
"url": "https://www.linkedin.com/jobs/view/" + job_id.group(1),
})
print(json.dumps({"query": query, "where": where, "jobs_on_page": len(jobs), "jobs": jobs}, indent=2, ensure_ascii=False))GOLOGIN_SCRAPING_API_KEY=your_key node linkedin-every-page.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { writeFileSync } from 'node:fs';
const query = 'registered nurse';
const where = 'Texas, United States';
async function scrape(url) {
for (let attempt = 1; attempt <= 3; attempt++) {
const params = new URLSearchParams({ url, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const body = response.ok ? await response.json() : null;
if (body?.success) return body.data?.html ?? '';
await new Promise((resolve) => setTimeout(resolve, 5000));
}
throw new Error(`Nothing came back for ${url}, try again later`);
}
const text = (card, pattern) =>
(card.match(pattern)?.[1] ?? '').replace(/<[^>]+>/g, ' ').replace(/&/g, '&').replace(/'/g, "'").replace(/\s+/g, ' ').trim();
const cell = (value) => `"${value.replace(/"/g, '""')}"`;
const jobs = new Map();
let pages = 0;
for (let start = 0; start < 1000; start += 10) {
const params = new URLSearchParams({ keywords: query, location: where, start });
const page = await scrape(`https://www.linkedin.com/jobs-guest/jobs/api/seeMoreJobPostings/search?${params}`);
pages += 1;
const cards = page.split('<li').slice(1).filter((card) => card.includes('urn:li:jobPosting:'));
if (cards.length === 0) break;
for (const card of cards) {
const id = card.match(/urn:li:jobPosting:(\d+)/)[1];
jobs.set(id, [
text(card, /base-search-card__title[^>]*>([\s\S]*?)<\/h3>/),
text(card, /base-search-card__subtitle[^>]*>([\s\S]*?)<\/h4>/),
text(card, /job-search-card__location[^>]*>([\s\S]*?)<\/span>/),
card.match(/datetime="([^"]+)"/)?.[1] ?? '',
`https://www.linkedin.com/jobs/view/${id}`,
]);
}
}
const rows = [['title', 'company', 'location', 'date', 'url'], ...jobs.values()];
writeFileSync('linkedin-jobs.csv', rows.map((row) => row.map(cell).join(',')).join('\n'));
console.log(`${jobs.size} jobs from ${pages} pages saved to linkedin-jobs.csv`);
console.log(rows.slice(1, 4).map((row) => row.slice(0, 3).join(' | ')).join('\n'));GOLOGIN_SCRAPING_API_KEY=your_key node two-boards.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst query = 'software engineer';
const city = 'Austin, TX';
async function scrape(url, marker) {
for (let attempt = 1; attempt <= 3; attempt++) {
const params = new URLSearchParams({ url, geo: 'us', format: 'json' });
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
const page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes(marker)) return page;
await new Promise((resolve) => setTimeout(resolve, 5000));
}
throw new Error(`Nothing came back for ${url}, try again later`);
}
const text = (markup = '') => markup.replace(/<[^>]+>/g, ' ').replace(/&/g, '&').replace(/'/g, "'").replace(/\s+/g, ' ').trim();
const key = (job) => `${job.company} ${job.title}`.toLowerCase().replace(/[^a-z0-9]+/g, ' ').trim();
const linkedin = await scrape(`https://www.linkedin.com/jobs/search?${new URLSearchParams({ keywords: query, location: city })}`, 'urn:li:jobPosting:');
const fromLinkedin = linkedin
.split('<li')
.filter((card) => card.includes('urn:li:jobPosting:'))
.map((card) => ({
board: 'LinkedIn',
title: text(card.match(/base-search-card__title[^>]*>([\s\S]*?)<\/h3>/)?.[1]),
company: text(card.match(/base-search-card__subtitle[^>]*>([\s\S]*?)<\/h4>/)?.[1]),
location: text(card.match(/job-search-card__location[^>]*>([\s\S]*?)<\/span>/)?.[1]),
url: `https://www.linkedin.com/jobs/view/${card.match(/urn:li:jobPosting:(\d+)/)[1]}`,
}));
const indeed = await scrape(`https://www.indeed.com/jobs?${new URLSearchParams({ q: query, l: city, limit: 50 })}`, 'mosaic-provider-jobcards"]=');
const start = indeed.indexOf('=', indeed.indexOf('mosaic-provider-jobcards"]=')) + 1;
const cards = JSON.parse(indeed.slice(start, indeed.indexOf(';\n', start)));
const results = cards.metaData.mosaicProviderJobCardsModel.results;
const fromIndeed = results.filter((job, i) => results.findIndex((other) => other.jobkey === job.jobkey) === i).map((job) => ({
board: 'Indeed',
title: job.title,
company: job.company,
location: job.formattedLocation,
url: `https://www.indeed.com/viewjob?jk=${job.jobkey}`,
}));
const jobs = new Map();
for (const job of [...fromLinkedin, ...fromIndeed]) {
const seen = jobs.get(key(job));
if (seen) seen.boards.add(job.board);
else jobs.set(key(job), { ...job, boards: new Set([job.board]) });
}
const onBoth = [...jobs.values()].filter((job) => job.boards.size === 2);
console.log(`LinkedIn ${fromLinkedin.length} + Indeed ${fromIndeed.length} = ${jobs.size} different jobs, ${onBoth.length} on both boards, 2 pages billed`);
for (const job of onBoth.slice(0, 5)) console.log(`${job.title} | ${job.company} | ${job.location}`);Bereit, es mit Ihren eigenen Suchen auszuführen? API-Key und kostenlose Anfragen erhalten.
LinkedIn hat keine Jobsuche-API für Ihre App, fertige Job-Scraper berechnen jeden Job, und eine kostenlose Job-Scraper-Bibliothek überlässt Ihnen die Proxys. So viel braucht jede Route für dieselben Jobs.
| Was es braucht | JobSpy | Apify | Bright Data | |
|---|---|---|---|---|
| Sie zahlen für | Eine Seite | Ihre Proxys | Jeden Job | Jeden Datensatz |
| 10.000 LinkedIn-Jobs aus Suchen | $0.16 | Kostenlos + Proxys | $10 | $15 |
| Jobs pro berechneter Einheit | 60 | Keine | 1 | 1 |
| Die ganze Seite als HTML oder Markdown | Ja | Nein | Nein | Nein |
| Läuft ohne eigene Proxys | Ja | Nein | Ja | Ja |
| Kostenlos zum Start | 1.000 Seiten | Kostenlos | $5 im Monat | 5.000 Datensätze |
Sie scrapen eine einzelne Jobbörse gründlich? Sehen Sie sich den Indeed Scraper an oder scrapen Sie jede andere Website mit Web Unlocker zum selben Preis.
Ein Konto, ein Proxy-Netzwerk, ein Ökosystem. Wählen Sie das Produkt, das der Job braucht.
Sie scrapen auch andere Websites? Sehen Sie sich die Scraper für Indeed, Google Maps und Reddit an oder alle Web-Scraping-Tools.
Ein Programm, das Seiten von Jobbörsen lädt und die Anzeigen als Daten herauszieht: Titel, Unternehmen, Ort, Gehalt, Veröffentlichungsdatum, Beschreibung und Link. Mit Web Unlocker ist das Laden ein API-Aufruf pro Seite, bei LinkedIn, Indeed und auf Karriereseiten von Unternehmen gleichermaßen, und Sie behalten die Felder, die Sie brauchen.
Ihr Skript fordert die Suchseite einer Jobbörse an, liest die Job-Karten darauf und folgt jeder Karte zur eigenen Seite des Jobs, wenn es die vollständige Beschreibung braucht. Web Unlocker lädt jede Seite in einem echten Browser aus dem Land, das Sie wählen, und gibt das HTML zurück, sodass Ihr Code nur noch parst.
Web-Scraping von Stellenanzeigen beginnt mit der Suche, die ein Besucher ausführen würde, einem Jobtitel und einem Ort. Senden Sie ihre Adresse an Web Unlocker. Eine LinkedIn-Suchseite liefert 60 Jobs und eine Indeed-Seite 50, jeweils mit Titel, Unternehmen, Ort und Datum. Der Code oben macht genau das in Python und Node.js.
Jobbörsen und Aggregatoren sammeln Stellenanzeigen vieler Seiten in einer Suche. Recruiting-Agenturen und Vertriebsteams beobachten, wer gerade für welche Stellen einstellt. Analysten verfolgen Gehälter und Nachfrage nach Rolle und Stadt, und KI-Agenten für die Jobsuche bringen Menschen mit neuen Stellen zusammen. Alle brauchen dasselbe: die Stellenseiten von heute.
Ja. LinkedIn-Job-Scraping funktioniert mit öffentlichen Seiten: Die Jobsuche und die Jobseiten öffnen sich ohne Login, die erste Suchseite listet 60 Jobs, die Folgeseiten je 10, und die Seite eines Jobs enthält die vollständige Beschreibung, das Karrierelevel, die Beschäftigungsart und die Zahl der Bewerber. Web Unlocker gibt sie so zurück, wie ein Besucher sie sieht.
Es gibt weder eine LinkedIn Jobs API noch eine Jobsuche-API von LinkedIn, die Ergebnisse der Jobsuche liefert. Die Job Posting API von LinkedIn ist für Partner gedacht, die Jobs auf LinkedIn veröffentlichen, und nimmt keine neuen Partner auf. Um öffentliche Stellenanzeigen zu lesen, lädt ein Job Scraper dieselben Seiten, die ein Besucher öffnet.
Um Jobs von LinkedIn zu scrapen, senden Sie die Adresse der Suche mit der Bibliothek requests an die Job-Scraper-API, teilen die Seite in Job-Karten auf und lesen aus jeder Titel, Unternehmen, Ort und Datum. Der Python-Tab oben ist ein vollständiger LinkedIn-Job-Scraper in Python, getestet an der Live-API: 60 Jobs in einer Anfrage.
LinkedIn beantwortet viele Anfragen in kurzer Zeit von einer Adresse mit Fehlern, oft nach etwa zehn Seiten, daher bleibt ein Skript auf einem einzelnen Server dort stehen. Web Unlocker lädt jede Seite in einem echten Browser über eine Residential-IP im Land Ihrer Wahl. Der Node.js-Tab hat eine Suche bis zum Ende durchlaufen: 67 Seiten, 660 Jobs.
Die Suchseiten von LinkedIn, Indeed, Dice, Wellfound, Built In und SimplyHired kamen in unseren Tests zurück, ebenso Karriereseiten auf Lever, Ashby, Greenhouse und Workday. Glassdoor und ZipRecruiter kamen von einer US-Adresse nicht zuverlässig zurück, daher führen wir sie nicht auf.
Öffnen Sie die eigene Seite des Jobs über Web Unlocker: linkedin.com/jobs/view/ gefolgt von der Job-ID oder die Jobseite von Indeed. Der Dienst gibt die Beschreibung mit Titel, Unternehmen, Ort und Veröffentlichungsdatum zurück. Eine Seite pro Job, 1.000 Beschreibungen für $0.98.
Ja. Fordern Sie Markdown an, und Web Unlocker gibt die Jobseite als Text zurück, bereit für einen Agenten oder Claude. Mit dem Gologin Scraping Skill ruft Claude Web Unlocker für Sie auf, und MCP & AI Skills macht aus einer einfachen Anfrage einen funktionierenden Job Scraper.
Stellenanzeigen werden veröffentlicht, um gelesen zu werden, und ein Job Scraper liest die öffentlichen Seiten, die ein Besucher sieht, ohne Login. Die Regeln unterscheiden sich je nach Land und danach, was Sie mit den Daten tun, prüfen Sie Ihre eigene Nutzung daher anhand dieser Regeln. Web Unlocker gibt die Seite zurück; was Sie erfassen, entscheiden Sie.
Unter $1 pro 1.000 Seiten bei der Job-Scraper-API, und auf jeder Jobbörse derselbe Preis. Eine LinkedIn-Suchseite enthält 60 Jobs, daher kosten 10.000 Jobs aus Suchseiten 16 Cent. Eine Seite, die nicht lädt, kostet nichts. Die Tarife beginnen bei $49 im Monat für 50.000 Anfragen.
Ja, zum Start: Web Unlocker enthält 1.000 kostenlose Anfragen, genug für 60.000 LinkedIn-Jobs aus Suchseiten oder 1.000 vollständige Stellenbeschreibungen. Open-Source-Bibliotheken für Job-Scraping sind ebenfalls kostenlos, dafür bringen Sie die Proxys selbst mit und halten sie am Laufen.
Das hängt davon ab, was Sie brauchen. Job-Scraping-Dienste und Jobdaten-APIs wie Apify und Bright Data verkaufen fertige Zeilen und berechnen jeden Job als Datensatz; kostenlose Job-Scraping-Software braucht eigene Proxys. Web Unlocker ist eine Job-Scraping-API, die die ganze Seite zu einem Preis zurückgibt, auf jeder Jobbörse, sodass Sie entscheiden, welche Felder Sie behalten.
JobSpy ist eine kostenlose Open-Source-Python-Bibliothek für LinkedIn, Indeed, Glassdoor und ZipRecruiter. Sie läuft auf Ihrem eigenen Rechner, die Proxys besorgen und pflegen Sie also selbst, und laut ihrer eigenen Beschreibung antwortet LinkedIn auf viele Anfragen in kurzer Zeit mit Fehlern. Web Unlocker bringt das Netzwerk mit und liefert die Seite, und Sie zahlen nur für Seiten, die zurückkommen.
Die LinkedIn-Job-Scraper auf Apify liefern fertige Zeilen und berechnen jeden Job, ab $1 pro 1.000 Jobs. Web Unlocker berechnet die Seite: Eine LinkedIn-Suchseite enthält 60 Jobs, daher kosten 10.000 Jobs 16 Cent, und ein paar Zeilen Code wie in den Tabs oben schneiden die Felder heraus.
Erzählen Sie uns kurz von Ihrem Team und erhalten Sie: