Tony Wang6 分で読めますIndeedのスクレイピング方法 2026年版(API & Python)
IndeedのPublisher APIは廃止され、利用規約もボットを制限しています。2026年時点で実際にアクセスできる範囲、法的な実情、そして構造化APIという代替手段を解説します。
Indeedは2026年時点で一般公開の開発者APIを提供していません。旧Publisher APIとXMLフィードはすでに廃止されており、残っているのは採用企業やATSベンダー向けのパートナー限定プログラムであり、誰でも申し込める公開サインアップではありません。このガイドでは、Indeedの公開求人検索から現実的に収集できる範囲、自前で行う場合の法的・技術的な実情、そして求人検索・求人詳細・勤務地データをJSONで返す構造化APIを解説します。
なぜIndeedの求人データをスクレイピングするのか
- 採用需要リサーチ — 最大級の総合求人ボードで、どの職種・企業・勤務地が積極的に募集しているかを追跡。
- 求人ボードのアグリゲーション — Indeed自身のフロントエンドを維持することなく、メタ検索やニッチな求人ボードに掲載を取り込む。
- 給与ベンチマーク — 職種・勤務地・シニアリティ別に掲載給与レンジを集計。
- AI/LLMパイプライン — 生のHTMLをスクレイピングする代わりに、構造化された求人情報をレジュメマッチングやキャリアアドバイスツールに投入する。
- リクルーティングツール — 他のソーシングシグナルと並べて、複数企業の募集職種を1つの検索可能なフィードに表示。
Indeedのスクレイピングは合法か
方法1:Pythonで自前実装する(そして、なぜ壊れるか)
最小構成のスクレイパーは、ごく普通の検索・パース処理に見えます。
import requests
from bs4 import BeautifulSoup
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}
params = {"q": "software engineer", "l": "Austin, TX", "start": 0}
resp = requests.get("https://www.indeed.com/jobs", headers=headers, params=params)
soup = BeautifulSoup(resp.text, "html.parser")
for card in soup.select("div.job_seen_beacon"):
title = card.select_one("h2.jobTitle span")
company = card.select_one("span.companyName")
print(title.get_text(strip=True) if title else None, company.get_text(strip=True) if company else None)
これは一度は動きます。その後、お決まりの問題が一通り現れます。
- ボット検知。 Indeedは、実際のブラウザセッションのように見えないリクエストに対してインターステイシャルやブロックを返します。クッキーもJS実行もレジデンシャルIPもない素の
requests呼び出しはすぐに検知され、「単純な」一覧ページのためだけにヘッドレスブラウザ+プロキシ構成へ逆戻りすることになります。 - 個々の求人ページこそ、robots.txtが禁止している部分です。 検索結果自体はインデックス可能ですが、詳細説明・給与・応募リンクがある
/viewjobは一般ボットに対して明示的に除外されています。 - ページネーションには上限があります。 Indeedの
startパラメータは1クエリあたり限られた件数の範囲しか辿れません。市場全体をカバーするには、末尾までページングするのではなく、勤務地やキーワードで同じ検索を細かく分割する必要があります。 - マークアップの変化。
job_seen_beaconやjobTitleといったクラス名は予告なく変わり、先四半期まで動いていたセレクタが今四半期には何も返さなくなる、ということが起こります。
方法2:ノーコード/既製ツール
ビジュアルスクレイピングツールは、Pythonスクリプトと同じようにIndeedの検索結果にセレクタをポイント&クリックで当てられますが、根本のアクセス方法が変わらない以上、まったく同じ問題を抱えます — リクエスト層でのボット検知、禁止されている求人詳細ページ、壊れやすいセレクタです。パーサーを自分で書く手間は省けても、その下にあるアンチボット/利用規約の問題は解決されません。
方法3:構造化されたIndeed API
CrawloraのIndeed API は、求人検索・求人詳細・勤務地オートコンプリートを、1つのキーで正規化されたJSONとして返します — HTMLパースもセッション管理も不要です。詳細はIndeed APIを参照してください。
curl "https://api.crawlora.net/api/v1/indeed/search?q=software+engineer&l=Austin,+TX" \
-H "x-api-key: $CRAWLORA_API_KEY"
同じ流れをPythonで — 検索してから、job_key を使って1件の求人の全詳細を取得します。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/indeed"
search = requests.get(f"{base}/search", headers=h, params={
"q": "software engineer", "l": "Austin, TX", "page": 1, "fromage": 7,
}).json()["data"]
job_key = search["jobs"][0]["job_key"]
job = requests.get(f"{base}/job", headers=h, params={"jk": job_key}).json()["data"]
/indeed/search は必須の q、勤務地を指定する l、page(1始まり)、sort(relevance または date)、マイル単位の radius、N日以内の投稿に絞り込む fromage を受け付けます。レスポンス形式(抜粋)は次の通りです。
{
"code": 200,
"msg": "OK",
"data": {
"query": "software engineer",
"location": "Austin, TX",
"page": 1,
"total": 3040,
"jobs": [
{
"job_key": "5e52165ce276aa5a",
"title": "Staff HPC Applications Engineer",
"company": "NextSilicon",
"location": "Austin, TX",
"city": "Austin",
"state": "TX",
"posted_at": "2026-08-03T05:00:00Z",
"url": "https://www.indeed.com/viewjob?jk=5e52165ce276aa5a"
}
]
}
}
/indeed/job は検索結果から得た jk(job key)を受け取り、その求人の詳細情報(説明文、給与、Indeedが公開している範囲での福利厚生を含む)を返します。また /indeed/search の l には有効なIndeed勤務地文字列が必要なので、/indeed/locations/suggest を使えば部分的なクエリからそれを生成できます。
locations = requests.get(f"{base}/locations/suggest", headers=h, params={
"q": "Austin", "limit": 5,
}).json()["data"]
# {"query": "Austin", "suggestions": [{"name": "Austin, TX (Travis County)", "source": "PRECISELY"}, ...]}
取得できるデータ
- 検索から —
job_key、職種名、企業名、勤務地(市区町村/州/郵便番号)、掲載されている場合の給与レンジと通貨、雇用形態、リモート可否フラグ、スポンサード/急募フラグ、結果スニペット、posted_at。 - 求人詳細から — 完全な
description_text/description_html、給与の最小値/最大値/期間、福利厚生一覧、雇用形態、リモート可否フラグ、direct_apply、企業の評価と口コミ件数、valid_through。 - 勤務地サジェストから —
lパラメータに再利用できる、正規化された勤務地文字列(PRECISELYなどのソース情報付き)。
制約
q/l/radius/fromage/sort以外の全文検索や任意フィルタはありません。 1回の広範なクロールではなく、キーワード×勤務地の組み合わせで複数の絞り込み検索を実行してカバレッジを構築してください。- 求人詳細のフィールドは、企業が実際に投稿した内容に依存します。 Indeed自身がそのデータを持っていない場合、給与・福利厚生・リモート可否フラグはしばしば空欄になります。
- クローズ済みの求人はリアルタイムでフラグ立てされません。
/indeed/jobに対してjob_keyが404や古いデータを返す場合、通常はその求人がクローズされたことを意味します。まだ募集中だと決めつけず、定期的に再確認してください。 - カバーするのは公開の検索・詳細データのみです。 ログインが必要な採用企業ダッシュボード、応募者データ、Indeed Applyのフローは対象外です。
主な用途
- 採用需要・市場リサーチ — 職種・企業・都市圏別に掲載件数と給与トレンドを追跡。
- メタ求人検索・ニッチ求人ボードプロダクト — 他のソースと並べてIndeedの求人を1つのフィードに集約。
- 報酬ベンチマークツール — 比較可能な職種・勤務地間で掲載給与レンジを集計。
- Indeedがカバーしていない、ATS由来の求人についてはJob Postingsデータセットと求人情報スクレイピングガイドも参照してください。
出典
収集を始める
まずは無料で試す: Free Web Scraperで任意の公開URLを実行するか、Anti-Bot Checkerでサイトがボットをブロックしているか確認できます — サインアップ不要です。
Playgroundで検索・求人詳細・勤務地サジェストの各エンドポイントを試し、APIドキュメントでスキーマを確認し、料金プランもあわせてご覧ください。Indeedは分断された採用市場の中の1つのソースにすぎません。求人情報スクレイピングガイドでは、企業が直接求人を掲載する14種類のATSプラットフォームを、LinkedInスクレイピングガイドでは採用企業側の公開企業ページを解説しています。エンジニアリングチームのシグナルに特化するなら、GitHubスクレイピングガイドも参考になります。スクレイピング全般の法的な線引きについてはWebスクレイピングは合法かを参照してください。
よくある質問
Indeedは2026年時点で一般公開の開発者APIを持っていますか?
いいえ。Indeedの旧Publisher APIとXML求人フィードは廃止済みで、2023〜2024年以降新規の開発者キーは発行されていません。残っているのは、採用企業やATS(応募者管理システム)ベンダー向けの営業限定のIndeed Apply/ATS統合プログラムであり、Indeedの公開求人検索インデックスを読み取るための一般公開サインアップではありません。
Indeedの求人情報をスクレイピングするのは合法ですか?
これは法的助言ではありませんが、Indeedの利用規約は許可なくボットやスクレイパーでサイトにアクセスすることを禁止しており、robots.txtも一般ボットに対して個々の求人詳細ページ(/viewjob)や複数の検索・API系パスへのクロールを禁じ、AIクローラーに対してはさらに広範な禁止事項を設けています。公開の検索結果ページ自体はログイン不要ですが、利用規約とrobots.txtの両方が自動アクセスを制限しているため、スクレイピング前にどちらも確認し、レート制限を尊重してください。
IndeedのXML求人フィードはどうなりましたか?
Indeedは2023〜2024年頃からPublisher APIとXMLフィードプログラムを段階的に廃止し、2026年3月にはATS統合を経由しない単一ソースのXMLフィード経由で配信される求人への無料検索露出付与を停止しました。これにより採用企業やインテグレーターは、直接のATS連携へと押し出される形になっています。
なぜ自前でのIndeedスクレイピングはこれほど頻繁に壊れるのですか?
法的リスクに加え、素の requests + BeautifulSoup スクレイパーはリクエスト層でのボット検知、1クエリあたりの取得件数を制限するページネーションの上限、そして予告なく変わるIndeedの検索・求人ページのCSSクラス名という問題にぶつかります。しかもこれらは、一般クローラーに対してrobots.txtが禁止している個々の求人詳細ページに触れる前の話です。
構造化されたIndeed APIはどのようなフィールドを返しますか?
検索結果には求人キー、職種名、企業名、勤務地、掲載されている場合の給与レンジ、雇用形態、リモート可否フラグ、掲載日が含まれます。求人詳細にはさらに完全な説明文、給与の最小値/最大値/期間、福利厚生、雇用形態、企業評価が加わります。勤務地サジェストエンドポイントは、部分的な都市名を検索クエリで使える有効な勤務地文字列に変換します。
Indeedから大量に給与データを取得できますか?
はい、Indeed自身がその求人に給与データを紐づけている場合に限りますが可能です。検索・求人詳細どちらのレスポンスにも、採用企業またはIndeed自身の見積もりによって値が入力されている場合、salary_min、salary_max、salary_period、salary_currencyの各フィールドが含まれます。カバレッジは一律ではなく、給与フィールドを持たない求人も多くあります。
IndeedのスクレイピングはGreenhouseやWorkdayのようなATSホスト型求人ボードのスクレイピングとどう違いますか?
Indeedは1つの検索インデックスを持つ単一のアグリゲーターですが、個々の求人に対する利用規約とrobots.txtの制約が厳しいという特徴があります。GreenhouseやLever、Workdayのようなプラットフォームはその逆の問題を抱えていて、統一スキーマのない、認証不要な公開JSONバックエンドが10種類以上存在します。IndeedとATS系求人ボードは互いに代替するものではなく、補完し合うデータソースです。