Career Site Job Feed について
Career Site Job Feedは、企業の採用管理システムから求人情報を取得するスクリプト集です。求人を集約・追跡する開発者向けに、データ項目の統一やCSV出力、差分確認、給与処理の例を提供します。
主な機能
- 0112の採用管理システムに対応
- 02求人データ項目の統一
- 03新規・終了求人の追跡
- 04給与範囲の抽出と年換算
- 05新着求人のCSV追記
活用シーン
- 01企業ごとの求人開始・終了を追跡
- 02前回実行後の求人を出力
- 03求人情報の給与範囲を集約
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.apify.com/?tools=starbright_overlap/ats-job-feedclaude mcp add --transport http hwangbyeongseon-career-site-job-feed https://mcp.apify.com/?tools=starbright_overlap/ats-job-feed{"mcpServers":{"hwangbyeongseon-career-site-job-feed":{"type":"http","url":"https://mcp.apify.com/?tools=starbright_overlap/ats-job-feed"}}}Cursor で開く{"servers":{"hwangbyeongseon-career-site-job-feed":{"type":"http","url":"https://mcp.apify.com/?tools=starbright_overlap/ats-job-feed"}}}VS Code で開く{"mcpServers":{"hwangbyeongseon-career-site-job-feed":{"type":"http","url":"https://mcp.apify.com/?tools=starbright_overlap/ats-job-feed"}}}{"mcpServers":{"hwangbyeongseon-career-site-job-feed":{"serverUrl":"https://mcp.apify.com/?tools=starbright_overlap/ats-job-feed"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.apify.com/?tools=starbright_overlap/ats-job-feed認証が必要ツール
詳細
ATS 求人フィードのレシピ
企業の応募者追跡システムから求人情報を直接取得する実動コードです。 Greenhouse、Lever、Workday、Ashby、Workable、SmartRecruiters、Breezy、Personio、Recruitee、 BambooHR、Pinpoint、Rippling に対応しており、取得した情報を有効活用できます。
各 ATS API で取得できる情報 — 12 のプラットフォーム全体にわたる給与、掲載日、リモート勤務フラグを、1,549,353 件の掲載中の求人で調査しています。これらの数値を公開しているのはここだけです。どのプラットフォームを基盤にするか選ぶ際は、まずこちらをご覧ください。
ここにあるすべてのスクリプトは、そのまま実行できます。APIFY_TOKEN を設定すれば準備完了です。
export APIFY_TOKEN=... # https://console.apify.com/settings/integrations
python python/new_jobs_to_csv.py
このプロジェクトの目的
これらのプラットフォームはそれぞれ、企業の採用ページが読み込む JSON エンドポイントを公開しています。キーもログインも不要で、レンダリング済みの HTML をスクレイピングする必要もありません。厄介なのは、それ以外のすべてです。
- プラットフォームごとにデータの形式が異なります。 Greenhouse はオフィスと部門を入れ子にしており、Workday は POST リクエストを送り、掲載期間を
"Posted 30+ Days Ago"という文字列で返します。SmartRecruiters はlimitに何を指定してもレスポンスが 100 行に制限されます。Breezy は存在しないボードに対して404ではなく403を返します。 - どの企業がどのプラットフォームを使っているかを調べるのが、本当の作業です。 Greenhouse や Personio のボードをまとめた公開ディレクトリはありません。採用ページの URL を見つけられれば、そのどこかにスラッグがあります。
- 日付はあてになりません。 10 のプラットフォームのうち 3 つは掲載日を一切公開していません。そのため、「過去 N 日以内に掲載された求人」というフィルターでは、掲載期間が不明な求人をどう扱うか決める必要があります。
以下のスクリプトでは、こうした問題にすでに対処しており、すべてのプラットフォームで統一された形式の行を返す Apify Actors を使用します。生のエンドポイントを直接指定することもできます。ページ下部のメモに一覧があります。
レシピ
| ファイル | 内容 |
|---|---|
javascript/watch-companies.mjs | 実行ごとに企業の候補リストを比較し、新しく掲載された求人と掲載終了した求人を確認します |
javascript/salary-data.mjs | 給与範囲を公開している求人を取得し、年収に換算します |
python/one_company.py | 採用ページの URL から、ある企業の募集中の求人をすべて取得します |
python/new_jobs_to_csv.py | 前回の実行後に掲載された求人だけを取得し、CSV に追記します |
これらの Actor は、取得した行数に応じて課金されます。すべてのスクリプトには数百行程度の上限が設定されており、より多く取得したい場合は MAX_ROWS を読み込みます。そのため、サンプルを実行しても予期せず大量に取得されることはありません。
行の形式
どのプラットフォームの求人でも、すべてのレシピで同じフィールドを取得できます。
{
"provider": "greenhouse",
"company": "Databricks",
"companySlug": "databricks",
"jobId": "7845321",
"title": "Staff Software Engineer",
"location": "San Francisco, CA",
"department": "Engineering",
"employmentType": "Full-time",
"remote": false,
"postedAt": "2026-08-14T09:12:00.000Z",
"applyUrl": "https://boards.greenhouse.io/databricks/jobs/7845321",
"salary": null,
"descriptionText": "...",
"scrapedAt": "2026-08-19T11:02:41.883Z"
}
companySlug:jobId は求人の掲載中は変わらないため、差分を確認するレシピで使用できます。
各プラットフォームが実際に公開している情報
ベンダーのドキュメントではなく、稼働中の求人ボードを測定した結果です。いずれかのプラットフォームを基盤に構築する前に役立ちます。
各列の背景にある考え方を含む同じ表を、リファレンスページ全文で確認できます。
| プラットフォーム | 掲載日 | 説明 | 給与 | リモートの明記 |
|---|---|---|---|---|
| Workday | 78.2% | いいえ | いいえ | いいえ |
| SmartRecruiters | はい | いいえ | いいえ | 7.7% |
| Greenhouse | はい | はい | いいえ | いいえ |
| Workable | はい | はい | いいえ | 36.3% |
| BambooHR | いいえ | いいえ | いいえ | いいえ |
| Lever | はい | 94.7% | いいえ | 4.8% |
| Breezy HR | はい | いいえ | 45.7% | 15.7% |
| Personio | いいえ | いいえ | いいえ | 8.8% |
| Ashby | はい | はい | 38.9% | 54.2% |
| Recruitee | はい | はい | 26.9% | 9.9% |
| Rippling | いいえ | いいえ | いいえ | 17.4% |
| Pinpoint | いいえ | はい | 42.5% | 8.8% |
title、company、location、applyUrlは、すべてのプラットフォームの全行で返されます。
これは機能一覧ではなく、測定値です。 各行は、このプロジェクトが追跡しているそのプラットフォームの稼働中の求人ボードすべてを対象としており、プラットフォームごとに17,000~179,000件の求人を2026-08-20に測定しました。はいは99.5%以上、いいえはエンドポイントに該当するフィールドがまったくないことを意味します。
この表から分かることは3つあります。
- 給与を公開しているプラットフォームは4つですが、どのプラットフォームも大半の求人には入力していません。 BreezyとPinpointが最も高く、それぞれ45.7%と42.5%です。BreezyとAshbyでは文章形式(「$28 – $100 / hour」、「$211.4K – $290.6K • Offers Equity」)で示されますが、PinpointとRecruiteeでは最低額、最高額、通貨、期間が個別に示されます。ベンチマークを行う場合は、後者の2つを使ってください。
- 半数のプラットフォームには掲載日がありません。 Personio、Rippling、Pinpoint、BambooHRは掲載日を公開しておらず、Workdayもタイムスタンプではなく「Posted 30+ Days Ago」のような文章を出力するため、掲載日がある行は78.2%にとどまります。鮮度フィルターでは、掲載日がない行を除外するか残すかを決める必要があります。誠実なデフォルトは残すことです。
- 「リモート」は5つのプラットフォームでは実際のフィールドで、それ以外では推測にすぎません。 Ashbyでは求人の54.2%にリモートの印が付いていますが、これは求人市場よりもAshbyを使っている企業について多くを物語っています。プラットフォームに該当フィールドがない場合、所在地の文字列を照合するしかありませんが、「Anywhere」を見逃し、「Remote Support Engineer, London office」のような求人を誤判定します。
生のエンドポイント
プラットフォームを直接呼び出す場合は、以下が公開エンドポイントです。いずれもキーなしで応答します。{company} をボードのスラッグに置き換えてください。
| プラットフォーム | エンドポイント |
|---|---|
| Greenhouse | https://boards-api.greenhouse.io/v1/boards/{company}/jobs?content=true |
| Lever | https://api.lever.co/v0/postings/{company}?mode=json |
| Ashby | https://api.ashbyhq.com/posting-api/job-board/{company}?includeCompensation=true |
| SmartRecruiters | https://api.smartrecruiters.com/v1/companies/{company}/postings?limit=100&offset=0 |
| Workable | https://apply.workable.com/api/v1/widget/accounts/{company}?details=true |
| Breezy | https://{company}.breezy.hr/json |
| Personio | https://{company}.jobs.personio.de/search.json |
| Pinpoint | https://{company}.pinpointhq.com/postings.json |
| Recruitee | https://{company}.recruitee.com/api/offers/ |
| BambooHR | https://{company}.bamboohr.com/careers/list |
| Rippling | https://api.rippling.com/platform/api/ats/v1/board/{company}/jobs |
| Workday | POST https://{tenant}.{cluster}.myworkdayjobs.com/wday/cxs/{tenant}/{site}/jobs |
独自のクライアントを作成する場合、次の4点に注意してください。
- SmartRecruiters は、
limitに関係なく、1回の応答で最大100件の求人情報を返します。offsetを使ってページングし、行数を数えるのではなく、実際の合計件数をtotalFoundから取得してください。 - Recruitee は、雇用主が給与欄を省略しても、給与オブジェクトをゼロのまま保持します。そのため、単純な読み取り処理では、給与範囲として
"0 USD hour"を返してしまいます。min <= 0 && max <= 0の場合は、値がないものとして扱ってください。 - BambooHR の採用 API は2つに分かれています。
/careers/listには掲載日、説明、報酬がなく、これらは求人ごとに1回リクエストする/careers/{id}/detailにあります。また、isRemoteフィールドは存在しますが、一度も値が設定されていません。調査した50,616件の求人のうち、設定されていたものは1件もありませんでした。 - Breezy は、ボードのないサブドメインに対して
404ではなく403を返します。これをレート制限として扱って待機すると、30分のジョブが14時間かかることになります。
ライセンス
MITです。このスクリプトが呼び出す Actors は商用で、行数に応じた料金がかかります。このコード自体は無料です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。