Gửi một lượt tìm kiếm LinkedIn hoặc Indeed, trang việc làm hay trang tuyển dụng. Web Unlocker trả về như người dùng thấy: 60 việc làm LinkedIn hoặc 50 trên Indeed, tính như một trang. Không cần đăng nhập hay API tuyển dụng. Trang lỗi không tốn phí.
1.000 yêu cầu miễn phí · Chỉ tính phí khi thành công · 195+ quốc gia · Sẵn sàng cho Claude
Các nền tảng tuyển dụng mất 3 đến 30 giây để tải. Hệ thống vẫn đang xử lý, bạn không cần nhấp lại.
Sẵn sàng cho các lượt tìm kiếm của riêng bạn? Nhận API key hoặc đặt lịch demo.
Hãy cho chúng tôi biết đôi nét về đội ngũ của bạn để nhận:
Một trang tìm việc trên LinkedIn chứa 60 thẻ việc làm kèm chức danh, công ty, địa điểm và ngày đăng, và Web Unlocker tính phí nó như một trang. Các scraper việc làm LinkedIn trên Apify và Bright Data tính phí mỗi việc làm như một bản ghi riêng, còn ScraperAPI tính 30 credit cho một trang LinkedIn.
Một trang, 60 việc làm.
167 trang, 10.000 việc làm.
Cần mô tả đầy đủ? Trang riêng của mỗi việc làm là thêm một yêu cầu, nên 1.000 mô tả có giá $0.98. Một trang tìm kiếm Indeed chứa 50 việc làm với cùng mức giá, và trang tuyển dụng của một công ty cũng vậy.
Chi phí cho 10.000 việc làm LinkedIn từ các trang tìm kiếm
167 trang tìm kiếm, mỗi trang 60 việc làm, theo giá công bố
Sẵn sàng chạy nó trên các lượt tìm kiếm của riêng bạn? Nhận API key và các yêu cầu miễn phí.
Một trăm trang việc làm được yêu cầu liên tiếp, không thử lại: tìm kiếm LinkedIn ở 25 thành phố, các trang tiếp theo của một lượt tìm kiếm, trang việc làm kèm mô tả đầy đủ, tìm kiếm và trang việc làm trên Indeed, và trang tuyển dụng của các công ty trên Lever, Ashby, Greenhouse và Workday.
Trang không trả về thì tốn $0.
Bạn trả tiền cho trang, không phải cho số lần thử.
Giới hạn lượt tìm kiếm LinkedIn trong 24 giờ qua và mọi việc làm trên trang đều mới đăng trong vòng một ngày, được đánh dấu Be an early applicant khi còn mới. Script của bạn yêu cầu đúng trang đó bao nhiêu lần tùy bạn: kiểm tra mỗi giờ là 24 trang mỗi ngày, $0.71 mỗi tháng.
Bộ dữ liệu việc làm cập nhật theo tuần hoặc theo tháng.
Trang của bạn là của giờ này.
Thu thập dữ liệu từ nền tảng tuyển dụng mà không cần tự vận hành một dàn trình duyệt: Web Unlocker trả về trang, và các thẻ việc làm là HTML thuần mà bạn đọc được bằng vài dòng code. Cùng một yêu cầu hoạt động trên LinkedIn, Indeed và trang tuyển dụng.
Điền biểu mẫu ở trên. Key sẽ được gửi qua email trong vòng một ngày làm việc.
Một lượt tìm kiếm LinkedIn hoặc Indeed, các trang tiếp theo của lượt tìm kiếm, trang riêng của một việc làm để lấy mô tả, hoặc trang tuyển dụng của một công ty.
Cắt các thẻ việc làm ra khỏi trang và giữ các trường bạn cần: chức danh, công ty, địa điểm, ngày và liên kết.
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}`);Sẵn sàng chạy nó trên các lượt tìm kiếm của riêng bạn? Nhận API key và các yêu cầu miễn phí.
LinkedIn không có API tìm việc cho ứng dụng của bạn, các scraper việc làm làm sẵn tính phí từng việc làm, còn một thư viện job scraper miễn phí để phần proxy cho bạn lo. Đây là những gì mỗi hướng đòi hỏi cho cùng số việc làm.
| Bạn cần gì | JobSpy | Apify | Bright Data | |
|---|---|---|---|---|
| Bạn trả tiền cho | Một trang | Proxy của bạn | Mỗi việc làm | Mỗi bản ghi |
| 10.000 việc làm LinkedIn từ tìm kiếm | $0.16 | Miễn phí + proxy | $10 | $15 |
| Việc làm mỗi đơn vị tính phí | 60 | Không có | 1 | 1 |
| Toàn bộ trang ở dạng HTML hoặc Markdown | Có | Không | Không | Không |
| Chạy không cần proxy riêng | Có | Không | Có | Có |
| Miễn phí để bắt đầu | 1.000 trang | Miễn phí | $5 mỗi tháng | 5.000 bản ghi |
Thu thập sâu một nền tảng tuyển dụng? Xem scraper Indeed, hoặc mọi trang web khác với Web Unlocker ở cùng mức giá.
Một tài khoản, một mạng proxy, một hệ sinh thái. Chọn sản phẩm phù hợp với công việc.
Thu thập cả các trang web khác? Xem các scraper Indeed, Google Maps và Reddit, hoặc mọi công cụ thu thập dữ liệu web.
Một chương trình tải các trang của nền tảng tuyển dụng và lấy các tin ra thành dữ liệu: chức danh, công ty, địa điểm, mức lương, ngày đăng, mô tả và liên kết. Với Web Unlocker, phần tải trang là một lệnh gọi API cho mỗi trang, trên LinkedIn, Indeed và trang tuyển dụng của công ty như nhau, và bạn giữ các trường bạn cần.
Script của bạn yêu cầu trang tìm kiếm của một nền tảng tuyển dụng, đọc các thẻ việc làm trên đó, và theo từng thẻ tới trang riêng của việc làm khi cần mô tả đầy đủ. Web Unlocker tải mọi trang trong một trình duyệt thật từ quốc gia bạn chọn và trả về HTML, nên code của bạn chỉ cần phân tích.
Thu thập tin tuyển dụng từ web bắt đầu bằng lượt tìm kiếm mà một người dùng sẽ chạy, gồm chức danh và địa điểm. Gửi địa chỉ của nó tới Web Unlocker. Một trang tìm kiếm LinkedIn trả về 60 việc làm và một trang Indeed trả về 50, mỗi việc làm có chức danh, công ty, địa điểm và ngày. Đoạn code ở trên làm đúng như vậy bằng Python và Node.js.
Các nền tảng và trang tổng hợp việc làm gom tin tuyển dụng từ nhiều trang vào một lần tìm kiếm. Công ty tuyển dụng và đội ngũ bán hàng để mắt xem ai đang tuyển và tuyển vị trí gì. Nhà phân tích theo dõi lương và nhu cầu theo vị trí và thành phố, còn AI agent tìm việc kết nối mọi người với tin tuyển dụng mới. Tất cả đều cần cùng một thứ: các trang việc làm của hôm nay.
Có. Thu thập việc làm trên LinkedIn hoạt động với các trang công khai: trang tìm việc và trang việc làm mở được mà không cần đăng nhập, trang tìm kiếm đầu tiên liệt kê 60 việc làm, các trang tiếp theo mỗi trang 10, và trang của một việc làm chứa mô tả đầy đủ, cấp bậc, loại hình công việc và số người ứng tuyển. Web Unlocker trả về chúng đúng như người dùng nhìn thấy.
Không có LinkedIn API việc làm hay LinkedIn API tìm việc nào để đọc kết quả tìm việc. Job Posting API của LinkedIn dành cho các đối tác đăng việc làm lên LinkedIn, và hiện không nhận đối tác mới. Để đọc tin tuyển dụng công khai, một job scraper tải chính các trang mà người dùng mở.
Để thu thập việc làm từ LinkedIn, hãy gửi địa chỉ tìm kiếm tới API job scraper bằng thư viện requests, tách trang thành các thẻ việc làm và đọc chức danh, công ty, địa điểm và ngày từ mỗi thẻ. Tab Python ở trên là một LinkedIn scraper việc làm hoàn chỉnh bằng Python, đã được kiểm thử trên API thật: 60 việc làm trong một yêu cầu.
LinkedIn trả lỗi khi nhận nhiều yêu cầu dồn dập từ một địa chỉ, thường sau khoảng mười trang, nên một script chạy trên một máy chủ sẽ dừng ở đó. Web Unlocker tải mỗi trang trong một trình duyệt thật, trên IP dân cư ở quốc gia bạn chọn. Tab Node.js đã đi hết một lượt tìm kiếm: 67 trang, 660 việc làm.
Các trang tìm kiếm của LinkedIn, Indeed, Dice, Wellfound, Built In và SimplyHired đều trả về trong các bài kiểm tra của chúng tôi, và các trang tuyển dụng trên Lever, Ashby, Greenhouse và Workday cũng vậy. Glassdoor và ZipRecruiter không trả về ổn định từ một địa chỉ Mỹ, nên chúng tôi không liệt kê chúng.
Mở trang riêng của việc làm qua Web Unlocker: linkedin.com/jobs/view/ kèm mã việc làm, hoặc trang việc làm của Indeed. Nó trả về mô tả cùng chức danh, công ty, địa điểm và ngày đăng. Một trang cho mỗi việc làm, 1.000 mô tả có giá $0.98.
Có. Yêu cầu Markdown và Web Unlocker trả về trang việc làm dưới dạng văn bản, sẵn sàng cho một agent hoặc Claude. Gologin scraping skill cho phép Claude gọi nó thay bạn, và MCP & AI Skills biến một yêu cầu bình thường thành một job scraper chạy được.
Tin tuyển dụng được đăng để người ta đọc, và một job scraper đọc các trang công khai mà người dùng nhìn thấy, không cần đăng nhập. Quy định khác nhau theo quốc gia và theo cách bạn dùng dữ liệu, nên hãy đối chiếu cách dùng của bạn với chúng. Web Unlocker trả về trang; bạn thu thập gì là quyết định của bạn.
Dưới $1 cho 1.000 trang trên API job scraper, và cùng một mức giá trên mọi nền tảng tuyển dụng. Một trang tìm kiếm LinkedIn chứa 60 việc làm, nên 10.000 việc làm từ các trang tìm kiếm có giá 16 cent. Trang tải không được thì không tốn phí. Các gói bắt đầu từ $49 mỗi tháng cho 50.000 yêu cầu.
Có, để bắt đầu: Web Unlocker đi kèm 1.000 yêu cầu miễn phí, đủ cho 60.000 việc làm LinkedIn từ các trang tìm kiếm hoặc 1.000 mô tả công việc đầy đủ. Các thư viện job scraper mã nguồn mở cũng miễn phí, và bạn tự mang proxy và giữ chúng hoạt động.
Tùy vào nhu cầu của bạn. Các dịch vụ thu thập dữ liệu việc làm và API dữ liệu việc làm như Apify và Bright Data bán các dòng dữ liệu làm sẵn và tính phí mỗi việc làm như một bản ghi; phần mềm job scraper miễn phí cần proxy của riêng bạn. Web Unlocker là một API job scraper trả về toàn bộ trang với một mức giá, trên bất kỳ nền tảng nào, nên bạn tự quyết định giữ những trường nào.
JobSpy là thư viện Python mã nguồn mở miễn phí cho LinkedIn, Indeed, Glassdoor và ZipRecruiter. Thư viện chạy trên máy của bạn, nên bạn phải tự tìm và duy trì proxy, và chính tài liệu của nó cho biết LinkedIn trả lỗi khi nhận nhiều yêu cầu dồn dập. Web Unlocker mang theo hạ tầng mạng và trả về trang, bạn chỉ trả tiền cho những trang trả về được.
Các scraper việc làm LinkedIn trên Apify trả về dòng dữ liệu làm sẵn và tính phí từng việc làm, từ $1 cho 1.000 việc làm. Web Unlocker tính phí theo trang: một trang tìm kiếm LinkedIn chứa 60 việc làm, nên 10.000 việc làm có giá 16 cent, và vài dòng code, như các tab ở trên, sẽ cắt ra các trường.
Hãy cho chúng tôi biết đôi nét về đội ngũ của bạn để nhận: