Indeedに求人検索APIはなく、通常のリクエストには求人ではなくセキュリティチェックが返ります。Web Unlockerは本物のブラウザで検索を開き、給与と評価を含む求人カード50件が載ったページを返します。課金は1ページ分で、求人1,000件が2セントです。
無料リクエスト1,000件 · 課金は成功時のみ · 195以上の国 · Claude対応
チームについて簡単にご記入いただくと、次の内容をお届けします。
Indeedの検索ページには、給与、企業の評価、掲載日付きの求人カードが50件載っており、Web Unlockerは1ページとして課金します。ApifyやBright DataのIndeedスクレイパーは、求人を1件ずつ別のレコードとして課金します。
1ページで求人50件。
20ページで求人1,000件。
説明の全文が必要ですか?求人ごとのページはリクエスト1回分なので、説明付きの求人1,000件で$1.00です。日付、半径、給与、リモート勤務で市場を絞り込むと、絞り込みごとに50件のページが1つ増えます。
説明付きのIndeed求人1,000件の料金
検索ページ20件と求人ページ1,000件、公開価格で
Bright Data、Apify公式のIndeed Scraper、ApifyのIndeed Job Scraperは、求人をレコードとして課金します。従量課金とFreeプランの価格で、1,000レコードです。
Indeedのページを100件、再試行なしで続けて取得しました。40都市の求人検索、求人ページ、企業ページ、レビューページ、4か国のサイトです。返ってきた結果と、その速さは次のとおりです。
返ってこなかったページは$0。
課金されるのはページで、試行回数ではありません。
検索を日付順に並べるか、直近24時間に絞ると、最新の求人が先頭に並びます。スクリプトからそのページを好きな頻度で取得でき、1時間ごとのチェックなら1日24ページ、月$0.71です。
求人データセットの更新は月1回。
あなたのページは今日のものです。
HTMLの解析は不要です。IndeedのJSONが検索ページごとに入っており、求人50件にタイトル、会社、給与、評価、掲載日が付いています。求人ページも同じ形で、説明の全文を持っています。
上のフォームにご記入ください。キーは1営業日以内にメールで届きます。
求人50件ならlimit=50を付けた検索、説明ならその求人のページ、企業の求人なら企業の求人タブを、ページごとに順に読み取ります。
ページから結果の配列を切り出せば、給与から掲載日まで、Indeedが表示するすべての項目が手に入ります。
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));ご自身の検索で実行しますか?APIキーと無料リクエストを入手しましょう。
Indeedにはアプリ向けの求人検索APIがなく、既製のIndeed求人スクレイパーはどれも求人ごとに課金します。同じ求人1,000件を取得する場合に、各方法で必要になるものは次のとおりです。
| 必要なもの | Indeed API | Apify | Bright Data | |
|---|---|---|---|---|
| アプリ向けの求人検索データ | あり | なし | あり | あり |
| 課金の対象 | 1ページ | APIなし | 求人ごと | レコードごと |
| 説明付き求人1,000件 | $1.00 | なし | $0.10〜$6 | $1.50 |
| 1リクエストあたりの求人数 | 50 | なし | 最大1,000件/回 | 1レコード |
| 2ページ目以降 | ご自身のアカウントから | なし | あり | あり |
| 企業の口コミと給与 | あり | なし | なし | あり |
| ページ全体をHTMLまたはMarkdownで | あり | なし | なし | なし |
| ビジネス利用でも無料で開始 | あり | なし | あり | あり |
Indeed以外もスクレイピングしますか?Web Unlockerなら、どのページも同じ方法、同じ料金で返します。
Web Unlockerは1リクエストで1ページを返します。Indeedは訪問者に求人を1ページ分だけ見せたあと、サインインを求めます。残りはCloud Browserで:Indeedのアカウントに一度ログインしてそのセッションを保つため、2ページ目も20ページ目も50ページ目も、1ページ目と同じように、同じデバイス、同じレジデンシャルIPで開きます。
セッションは、復元したファイルではなく、動き続けているブラウザです。今夜スクリプトを閉じて明日開いても、Indeedからはサインイン済みの同じ訪問者に見えます。
プロファイルはCookieとレジデンシャルIPを実行のたびに引き継ぐため、Indeedからは、ページごとの新しい訪問者ではなく、1台のノートPCを使う1人に見えます。
Playwright、Puppeteer、Claudeから操作できます。検索を開き、次へをクリックし、カードを読み取り、繰り返します。レジデンシャルIP込み。
Playwright、PuppeteerまたはClaudeから実行できます。Cloud Browserを見る。
1つのアカウント、1つのプロキシネットワーク、1つのエコシステム。用途に合った製品をお選びください。
ほかのサイトもスクレイピングしますか?Google Maps、Reddit、YouTubeのスクレイパー、またはすべてのWebスクレイピングツールをご覧ください。
limit=50を付けたIndeedの検索アドレスをWeb Unlockerに送ります。米国のアドレスから本物のブラウザでページを開き、Indeed自身のJSONを含めて返します。求人50件に、タイトル、会社、場所、給与、企業の評価、掲載日、リンクが付いています。上のコードがまさにその処理です。
求人検索用のものはありません。求人一覧を返していた旧Publisher APIは終了しており、現在のIndeedのAPIは、応募者管理システムなど、Indeedに求人を送る提携先向けです。第三者に検索結果を返すものは1つもないため、スクレイパーは公開ページを読み取ります。
求人情報を読み取るために、有料でも無料でも入手できるIndeed APIはありません。Web Unlockerは無料で1,000リクエストから始められ、求人50件の検索ページ1,000ページ分に相当します。
Indeedの利用規約は仕事を探す人向けに書かれており、求人検索ページは公開されていて、ログインなしで読み込めます。Web Unlockerは訪問者のブラウザと同じようにページを読み込んで返します。何を収集し、どう使うかはお客様の判断ですので、プロジェクトに適用されるルールに照らして確認してください。
求人情報は読まれるために公開されており、スクレイパーは訪問者が見る公開ページを読み取ります。ルールは国やデータの使い方によって異なるため、ご自身の利用に照らして確認してください。Web Unlockerが返すのはページまでで、その先はお客様の判断です。
求人サイトのページを読み込み、求人をデータとして取り出すプログラムです。タイトル、会社、場所、給与、日付、説明、リンクが対象です。Indeedでは、Web Unlockerがページの読み込みを担当し、各項目はIndeedが各ページに埋め込んでいるJSONから取り出します。
requestsライブラリで検索のアドレスをIndeedスクレイパーAPIに送り、ページから結果の配列を見つけて、jsonモジュールで読み込みます。上のPythonタブは完全なスクリプトで、実際のAPIでテスト済みです。1回のリクエストで求人50件を取得できます。
求人ごとのページに載っています。indeed.com/m/viewjob?jk=に求人キーを続けたアドレスをWeb Unlockerで開くと、タイトル、会社、場所、雇用形態とともに、説明がテキストとHTMLで返ります。求人1件につき1ページで、説明1,000件が$0.98です。
Indeedは訪問者に検索の1ページ分だけを見せ、次のページではアカウントを求めます。対処法は2つあります。日付、半径、給与、リモート勤務で検索を絞り込めば、絞り込みごとに求人50件の新しいページになります。または、Cloud BrowserでIndeedを開き、ご自身のアカウントに一度ログインして、そのセッションからページをたどります。
Indeed自体と同じ新しさです。検索を日付順に並べるか、直近24時間に絞ると、掲載直後と表示された求人がページに並びます。レコード単位で売られる求人データセットは週1回か月1回の更新ですが、ページは今日のページです。
はい。企業ページからは評価、口コミの件数、募集中の求人が取得できます。口コミページは、メリットとデメリット付きの口コミを1ページ20件ずつ、ページごとに返し、給与ページは職種ごとの報酬を一覧にします。職種と都市ごとの給与ページも対応しており、平均と幅が取得できます。
はい。英国、カナダ、ドイツ、フランスのIndeedサイトも、接続元の国を合わせて設定すれば、同じように検索ページを返しました。各国サイトのアドレスを送り、リクエストで地域を指定してください。
Web Unlockerが返すのは表ではなくページなので、取得前に何も削られません。求人のCSVへの変換は数行のコードか、1回のプロンプトで済みます。Gologin scraping skillを使ってページをClaudeに渡し、CSVを依頼してください。
IndeedスクレイパーAPIは1,000ページあたり$1未満で、どのページも同じ料金です。検索ページには求人50件が載るため、検索ページから求人1,000件を取得して2セント、説明の全文付きの求人1,000件で約$1です。読み込みに失敗したページは無料です。プランは50,000リクエストで月$49からです。
はい、まずは無料で試せます。Web Unlockerには1,000件の無料リクエストが付き、検索ページから求人50,000件、または説明の全文付きの求人1,000件に相当します。
目的によります。ApifyのIndeedスクレイパーとBright Dataは整形済みのデータを提供し、求人ごとにレコードとして課金しますが、利用者からは、Indeedの表示より少ない求人しか返らない実行があるという声も出ています。Web Unlockerは、ページ全体を1つの料金で返すIndeedのWebスクレイパーで、Indeed自身のJSONが入っているため、残す項目はご自身で決められます。
チームについて簡単にご記入いただくと、次の内容をお届けします。