Indeed nie ma API do wyszukiwania ofert pracy, a zwykłe żądanie trafia na kontrolę bezpieczeństwa zamiast na oferty. Web Unlocker otwiera wyszukiwanie w prawdziwej przeglądarce i zwraca stronę z 50 kartami ofert, z wynagrodzeniem i oceną, rozliczoną jak jedna strona: 1000 ofert za 2 centy.
1000 darmowych żądań · Płatność tylko za sukces · 195+ krajów · Gotowe dla Claude
Strony Indeed ładują się od 10 do 30 sekund. Nadal pracuję, nie musisz klikać ponownie.
Gotowy na własne wyszukiwania? Pobierz klucz API albo umów demo.
Opowiedz nam trochę o swoim zespole i otrzymasz:
Strona wyszukiwania Indeed zawiera 50 kart ofert z wynagrodzeniem, oceną firmy i datą dodania, a Web Unlocker rozlicza ją jako jedną stronę. Scrapery Indeed na Apify i Bright Data rozliczają każdą ofertę jako osobny rekord.
Jedna strona, 50 ofert.
Dwadzieścia stron, 1000 ofert.
Potrzebujesz pełnego opisu? Strona każdej oferty to jedno dodatkowe żądanie, więc 1000 ofert z opisami kosztuje $1.00. Podziel rynek według daty, promienia, wynagrodzenia lub pracy zdalnej, a każdy wycinek to kolejna strona z 50 ofertami.
Ile kosztuje 1000 ofert z Indeed z pełnymi opisami
20 stron wyszukiwania i 1000 stron ofert, według opublikowanych cen
Bright Data, własny Indeed Scraper od Apify i Indeed Job Scraper na Apify rozliczają każdą ofertę jako rekord: 1000 rekordów w cenach pay-as-you-go i planu Free.
Sto stron Indeed pobranych jedna po drugiej, bez ponowień: wyszukiwania ofert w 40 miastach, strony ofert, strony firm, strony opinii i cztery witryny krajowe. Oto, co wraca i jak szybko.
Strona, która nie wróci, kosztuje $0.
Płacisz za strony, nie za próby.
Posortuj wyszukiwanie według daty albo zawęź je do ostatnich 24 godzin, a najnowsze oferty trafią na górę. Twój skrypt prosi o tę jedną stronę tak często, jak chcesz: sprawdzenie co godzinę to 24 strony dziennie, $0.71 miesięcznie.
Zbiory ofert odświeżają się co miesiąc.
Twoja strona jest dzisiejsza.
Scrapowanie Indeed bez parsowania HTML: własny JSON Indeed siedzi w każdej stronie wyszukiwania, 50 ofert z tytułem, firmą, wynagrodzeniem, oceną i datą dodania. Strona oferty zawiera jej pełny opis w ten sam sposób.
Wypełnij formularz powyżej. Klucz przychodzi e-mailem w ciągu jednego dnia roboczego.
Wyszukiwanie z limit=50 dla 50 ofert, strona oferty dla jej opisu albo zakładka ofert firmy, strona po stronie.
Wytnij ze strony tablicę results, a masz każde pole, które pokazuje Indeed, od wynagrodzenia po datę dodania.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python indeed_jobs.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport json
import os
import time
from urllib.parse import urlencode
import requests
query = "marketing manager"
where = "Austin, TX"
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 '"results":[{' in page:
return page
time.sleep(5)
raise RuntimeError("No jobs came back, try again later")
def embedded(page, marker):
start = page.index(marker) + len(marker) - 1
value, _ = json.JSONDecoder().raw_decode(page[start:])
return value
search = "https://www.indeed.com/jobs?" + urlencode({"q": query, "l": where, "limit": 50})
page = scrape(search)
jobs = [
{
"title": job["title"],
"company": job["company"],
"location": job["formattedLocation"],
"salary": (job.get("salarySnippet") or {}).get("text"),
"rating": job.get("companyRating") or None,
"posted": job.get("formattedRelativeTime"),
"sponsored": job.get("sponsored", False),
"url": "https://www.indeed.com/viewjob?jk=" + job["jobkey"],
}
for job in embedded(page, '"results":[')
]
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 indeed-descriptions.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst search = 'https://www.indeed.com/jobs?q=registered+nurse&l=Remote&limit=50';
const wanted = 5;
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 field = (page, name) => JSON.parse(page.match(new RegExp(`"${name}":("(?:[^"\\\\]|\\\\.)*")`))?.[1] ?? '""');
const text = (markup) => markup.replace(/<[^>]+>/g, ' ').replace(/&/g, '&').replace(/ /g, ' ').replace(/\s+/g, ' ').trim();
const listing = await scrape(search, '"results":[{');
const keys = [...new Set([...listing.matchAll(/"jobkey":"([0-9a-f]{16})"/g)].map((match) => match[1]))];
console.log(`${keys.length} jobs on the search page, reading the first ${wanted} in full`);
for (const key of keys.slice(0, wanted)) {
const job = await scrape(`https://www.indeed.com/m/viewjob?jk=${key}`, '"sanitizedJobDescription"');
const description = text(field(job, 'sanitizedJobDescription'));
console.log(`\n${field(job, 'jobTitle')} at ${field(job, 'companyName')}, ${field(job, 'formattedLocation')} (${description.length} characters)`);
console.log(`${description.slice(0, 280)}...`);
}GOLOGIN_SCRAPING_API_KEY=your_key node indeed-company.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst company = 'Amazon.com';
const pages = 5;
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 page = response.ok ? (await response.json()).data?.html : '';
if (page?.includes('"results":[{')) return page;
await new Promise((resolve) => setTimeout(resolve, 5000));
}
throw new Error(`No jobs came back for ${url}, try again later`);
}
function embedded(page, marker) {
const start = page.indexOf(marker) + marker.length - 1;
const token = /"(?:[^"\\]|\\.)*"|[[\]{}]/g;
token.lastIndex = start;
let depth = 0;
for (let match = token.exec(page); match; match = token.exec(page)) {
depth += '[{'.includes(match[0]) ? 1 : ']}'.includes(match[0]) ? -1 : 0;
if (depth === 0) return JSON.parse(page.slice(start, match.index + 1));
}
return [];
}
const jobs = new Map();
for (let start = 0; start < pages * 20; start += 20) {
const page = await scrape(`https://www.indeed.com/cmp/${company}/jobs?start=${start}`);
const fresh = embedded(page, '"results":[').filter((job) => !jobs.has(job.jobkey));
if (fresh.length === 0) break;
for (const job of fresh) {
jobs.set(job.jobkey, { title: job.title, location: job.formattedLocation, salary: job.salarySnippet?.text ?? null, posted: job.formattedRelativeTime });
}
console.log(`page ${start / 20 + 1}: ${fresh.length} new jobs, ${jobs.size} so far`);
}
console.table([...jobs.values()].slice(0, 10));Chcesz uruchomić to na własnych wyszukiwaniach? Odbierz klucz API i darmowe żądania.
Indeed nie ma API do wyszukiwania ofert dla Twojej aplikacji, a każdy gotowy scraper ofert z Indeed rozlicza każdą ofertę. Oto, czego wymaga każda droga do danych o ofertach z Indeed dla tych samych 1000 ofert.
| Czego to wymaga | Indeed API | Apify | Bright Data | |
|---|---|---|---|---|
| Dane z wyszukiwania ofert dla Twojej aplikacji | Tak | Nie | Tak | Tak |
| Płacisz za | Stronę | Brak API | Każdą ofertę | Każdy rekord |
| 1000 ofert z opisami | $1.00 | Brak | $0.10 do $6 | $1.50 |
| Ofert w jednym żądaniu | 50 | Brak | Do 1000 na uruchomienie | Jeden rekord |
| Strona 2 i dalej | Z Twojego konta | Brak | Tak | Tak |
| Opinie o firmach i wynagrodzenia | Tak | Nie | Nie | Tak |
| Cała strona w HTML lub Markdown | Tak | Nie | Nie | Nie |
| Darmowy start dla firm | Tak | Nie | Tak | Tak |
Scrapujesz nie tylko Indeed? Web Unlocker zwraca każdą stronę w ten sam sposób, w tej samej cenie.
Web Unlocker zwraca jedną stronę na żądanie, a Indeed pokazuje użytkownikowi jedną stronę ofert, zanim poprosi o zalogowanie. Dodaj Cloud Browser na resztę: loguje się na Twoje konto Indeed raz i utrzymuje tę sesję, więc strona 2, strona 20 i strona 50 otwierają się tak jak strona 1, na tym samym urządzeniu i z tym samym adresem rezydencyjnym.
Twoja sesja to przeglądarka, która wciąż działa, a nie przywrócony plik. Zamknij skrypt dziś wieczorem, otwórz go jutro, a Indeed zobaczy tego samego zalogowanego użytkownika.
Profil zachowuje pliki cookie i adres rezydencyjny z uruchomienia na uruchomienie, więc Indeed widzi jedną osobę na jednym laptopie, a nie nowego użytkownika na każdej stronie.
Steruj z Playwright, Puppeteer albo Claude: otwórz wyszukiwanie, kliknij dalej, odczytaj karty, powtórz. Adresy rezydencyjne w cenie.
Uruchom z Playwright, Puppeteer lub Claude. Zobacz Cloud Browser.
Jedno konto, jedna sieć proxy, jeden ekosystem. Wybierz produkt, którego wymaga zadanie.
Scrapujesz też inne witryny? Zobacz scrapery Google Maps, Reddit i YouTube albo wszystkie narzędzia do web scrapingu.
Wyślij adres wyszukiwania Indeed do Web Unlocker z limit=50 w środku. Otworzy stronę w prawdziwej przeglądarce z adresu w USA i zwróci ją z własnym JSON Indeed w środku: 50 ofert z tytułem, firmą, lokalizacją, wynagrodzeniem, oceną firmy, datą dodania i linkiem. Kod powyżej robi dokładnie to.
Nie do wyszukiwania ofert. Dawne API Publisher, które zwracało listy ofert, jest zamknięte, a obecne API Indeed są dla partnerów, którzy przesyłają oferty do Indeed, takich jak systemy rekrutacyjne. Żadne z nich nie zwraca wyników wyszukiwania stronie trzeciej, więc scraper odczytuje publiczne strony.
Nie ma API Indeed, za które można zapłacić albo które można dostać za darmo, by czytać oferty pracy. Web Unlocker zaczyna się od 1000 darmowych żądań, czyli wystarczająco na 1000 stron wyszukiwania po 50 ofert.
Regulamin Indeed jest napisany dla osób szukających pracy, a jego strony wyszukiwania ofert są publiczne i ładują się bez logowania. Web Unlocker ładuje je tak, jak robi to przeglądarka użytkownika, i zwraca stronę. To, co zbierasz i jak tego używasz, zależy od Ciebie, więc sprawdź to z zasadami obowiązującymi w Twoim projekcie.
Oferty pracy są publikowane po to, by je czytać, a scrapery odczytują publiczne strony, które widzi użytkownik. Zasady różnią się w zależności od kraju i tego, co robisz z danymi, więc sprawdź swoje użycie z tymi zasadami. Web Unlocker zwraca stronę, resztę robisz Ty.
Program, który ładuje strony portalu z ofertami pracy i wyciąga z nich oferty jako dane: tytuł, firmę, lokalizację, wynagrodzenie, datę, opis i link. Na Indeed ładowaniem zajmuje się Web Unlocker, a pola pochodzą z JSON, który Indeed osadza w każdej stronie.
Wyślij adres wyszukiwania do API scrapera Indeed biblioteką requests, znajdź tablicę wyników na stronie i wczytaj ją modułem json. Zakładka Python powyżej to kompletny skrypt, przetestowany na działającym API: 50 ofert w jednym żądaniu.
Zawiera go strona każdej oferty. Otwórz indeed.com/m/viewjob?jk= z kluczem oferty przez Web Unlocker: zwraca opis jako tekst i HTML, z tytułem, firmą, lokalizacją i rodzajem pracy. Jedna strona na ofertę, 1000 opisów za $0.98.
Indeed pokazuje użytkownikowi jedną stronę wyszukiwania, a na kolejnej prosi o konto. Są dwa rozwiązania: podziel wyszukiwanie według daty, promienia, wynagrodzenia lub pracy zdalnej, a każdy wycinek to nowa strona z 50 ofertami; albo otwórz Indeed w Cloud Browser, zaloguj się raz na własne konto i przechodź po stronach z tej sesji.
Tak świeże jak sam Indeed. Posortuj wyszukiwanie według daty albo zawęź je do ostatnich 24 godzin, a strona pokaże oferty oznaczone Just posted. Zbiory ofert sprzedawane na rekordy odświeżają się co tydzień lub co miesiąc, a strona jest dzisiejsza.
Tak. Strona firmy zwraca jej ocenę, liczbę opinii i otwarte oferty, strony z opiniami zwracają po 20 opinii z zaletami i wadami, strona po stronie, a strona wynagrodzeń wymienia płace według stanowiska. Działają też strony wynagrodzeń według stanowiska i miasta, ze średnią i przedziałem.
Tak. Witryny Indeed w Wielkiej Brytanii, Kanadzie, Niemczech i Francji zwróciły strony wyszukiwania w ten sam sposób, z ustawionym pasującym krajem adresu IP. Wyślij adres witryny kraju i wybierz geolokalizację w żądaniu.
Web Unlocker zwraca stronę, a nie tabelę, więc nic nie jest obcinane, zanim to zobaczysz. Zamiana ofert na CSV to kilka linii kodu albo jedno polecenie: przekaż stronę Claude z Gologin scraping skill i poproś o CSV.
Poniżej $1 za 1000 stron w API scrapera Indeed i ta sama cena za każdą stronę. Strona wyszukiwania zawiera 50 ofert, więc 1000 ofert ze stron wyszukiwania kosztuje 2 centy, a 1000 ofert z pełnymi opisami około $1. Strona, która się nie załaduje, nic nie kosztuje. Plany zaczynają się od $49 miesięcznie za 50 000 żądań.
Tak, na start: Web Unlocker zawiera 1000 darmowych żądań, czyli wystarczająco na 50 000 ofert ze stron wyszukiwania albo 1000 pełnych opisów ofert.
To zależy od potrzeb. Scrapery Indeed na Apify i Bright Data sprzedają gotowe wiersze i rozliczają każdą ofertę jako rekord, a ich użytkownicy zgłaszają uruchomienia, które wracają z mniejszą liczbą ofert, niż pokazuje Indeed. Web Unlocker zwraca całą stronę w jednej cenie, z własnym JSON Indeed w środku, więc to Ty decydujesz, które pola zostawiasz.
Opowiedz nam trochę o swoim zespole i otrzymasz: