doda 求人・年収データ Scraper | doda.jp Jobs & Salary Scraper avatar

doda 求人・年収データ Scraper | doda.jp Jobs & Salary Scraper

Pricing

from $0.35 / 1,000 求人概要 / job summaries

Go to Apify Store
doda 求人・年収データ Scraper | doda.jp Jobs & Salary Scraper

doda 求人・年収データ Scraper | doda.jp Jobs & Salary Scraper

doda.jp の求人を3レベル(求人概要・求人詳細・年収分析)で取得。職種・都道府県・業種の平均年収と比較、CSV/Excel出力。Scrape doda.jp jobs with salary benchmarks.

Pricing

from $0.35 / 1,000 求人概要 / job summaries

Rating

0.0

(0)

Developer

Berkay Çınar

Berkay Çınar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

doda 求人・年収データ スクレイピング(CSV・Excel)| doda Jobs & Salary Scraper

🗓️ 最終更新: 2026年10月18日 · Last updated: 18 October 2026

doda 求人・年収データ

🇯🇵 日本語 · 🇬🇧 English below

転職サイト doda(doda.jp) の求人を、整理された表データとして取得します。必要に応じて、各求人に doda 平均年収ランキング の年収データ(職種・都道府県・業種の平均年収、男女別・年代別、中央値、生涯賃金)を付け、想定年収が職種平均より何%高い/低いか を自動で計算します。結果は JSON・CSV・Excel・API でダウンロードでき、Console の表は日本語の列名で表示されます(JSON のフィールド名は英語、金額は円の整数)。

こんな方におすすめ

  • 人事・採用担当者:競合が出している求人の条件(給与、想定年収、休日、福利厚生、残業時間)と、職種・地域の平均年収を並べて、提示すべき年収レンジを決める。
  • 人材紹介会社・採用コンサルタント:職種 × 都道府県 × 業種の求人と年収相場を一覧で把握。
  • 営業・マーケティング(リード獲得):採用中の企業、従業員数、資本金、企業ホームページを一括取得。
  • リサーチャー・メディア:日本の転職市場と年収トレンドの分析(2017〜2025年の推移付き)。

取得できるデータ:3つのデータレベル、3つのページ

選択した データレベル に応じて、結果は最大3つの表(Output タブのページ)に保存されます。各レベルは前のレベルを含み、ページ同士は jobId(求人番号)でつながります。

データレベルページ内容料金(1,000件あたり、レベル合計)
求人概要(list)求人概要(17列)企業名、求人タイトル、企業グループ、雇用形態、勤務地(都道府県)、最寄り駅、新着・締切間近、対象となる方、給与(原文+金額を読み取った行+下限・上限・単位)、年収例、仕事内容(概要)、求人URL$0.50
求人詳細(details、デフォルト)+ 求人詳細(74列)求人ページに表示される全情報:職種(小分類・大分類)、業種、市区町村・住所、doda 検索対象の都道府県、転勤、掲載開始日・終了予定日、選考フロー、オンライン面接、応募条件、入社時の想定年収(下限・上限)、賞与、昇給、勤務時間、平均残業時間、年間休日、休日・休暇、福利厚生、転勤なし、仕事内容(詳細)、チーム構成、男女比、年齢構成、定着率、開発環境、取材レポート、企業情報(上場、事業内容、本社所在地、設立、代表者、従業員数、資本金、売上高、平均年齢、企業ホームページ)$1
年収分析(full)+ 年収分析(39列)doda 平均年収データとの比較(下記で詳しく説明)$3

料金は Pay per event(イベント課金)です。run ごとの開始料金 $0.00005(メモリ 1 GB あたり。デフォルトは 1 GB)に加えて、保存した求人1件ごとに、求人概要 $0.0005、求人詳細 +$0.0005(details/full)、年収分析 +$0.002(full)がかかります。上記の表はレベルごとの合計金額(1,000件あたり)です。ℹ️/⚠️ の案内行(下記 FAQ)は課金されません。 Apify の Bronze / Silver / Gold プランでは、求人ごとの料金が 10% / 20% / 30% 割引になります。

求人詳細ページの補足

  • 想定年収(下限・上限):求人ページの「入社時の想定年収」欄から取得します。この欄がなく、給与が年収で書かれている求人(例:エージェント型の求人の「<予定年収> 370万円~550万円」)では、その年収を想定年収として使います。どちらもない場合に限り、求人ページの構造化データ(JSON-LD)にある年収(doda の検索用の年収帯)を使います。
  • 給与(金額を読み取った行)(salaryLine):給与欄(「給与(原文)」)の中で、給与 下限・上限・単位の金額を読み取った1行です(求人概要・求人詳細の両方のページにあります)。読み取りのルール:
    1. 「月給」「月額」「年収」「年俸」「基本給」「日給」「日額」「日当」「時給」「時間額」で始まる行(①②③・(1)・(A)・地域名「東京:」などの前置きは無視)と、【月給】【固定報酬時間額】などの見出しの下の金額行を候補にします。
    2. 「例」「モデル」「収入例」「月収例」「年収例」「給与例」「イメージ」を含む見出し(「◆契約1年目のモデル月収例」のように数字を含む見出しも)から始まる 例のブロック の中の行は使いません。ブロックは例ではない次の見出しか区切り線で終わり、空行や「年収…」「月給…」で始まる行では終わりません。ただし、ブロック内でも年齢・社歴の記載(「32歳」「入社3年目」「30代」「先輩」など)がなく「月給」などで始まる行は候補にします。年齢・社歴の記載がある行は、ブロックの外でも候補にしません。「→」で始まる行も使いません。
    3. ★・☆で始まる行、「保証」「保障」を含む行(入社後◯カ月の保証給など)、「月収」で始まる行は、ほかに候補がない場合だけ使います。
    4. 候補のうち 読む順で最初の行 を使います(①②③やA/Bなど複数の選択肢がある場合は最初の選択肢)。最初の候補が地域別の行(「関東:」「■東京都(23区):」「■千葉県」の下の金額など)の場合は、空行で区切られていても続く地域別の行すべてから、分析対象の都道府県(勤務地を指定し、その都道府県が勤務地に含まれる場合はその都道府県、それ以外は最初の勤務地)またはその地方に合う行を使い、合う行がなければ「以外」「その他」の行(「※京阪神地区以外の勤務地の場合は…」のような注記を含む)を使います。
    5. 想定年収との照合:求人に想定年収(または<予定年収>)がある場合、候補を順に照合し、合わない候補は飛ばします(年収の候補は想定年収の下限の0.6〜1.6倍、月給の候補は想定年収の下限が「月給×12」の0.6〜3.0倍であること)。結果は「給与と想定年収の整合」列(salaryCheck)に出ます:ok(照合済み)、mismatch(どの候補も合わず、最初の候補を表示)、unchecked(想定年収がない、または時給・日給)。給与が読み取れない求人では空です。求人概要ページでは照合しません。 【月給】のような見出しの下の行から読み取った場合は、見出しも付けて表示します。基準となる金額の行がない求人(完全歩合制など)では空(null)です。
  • 金額が1つだけの場合:給与・想定年収とも、上限のない書き方(「以上」「~」)でなければ上限=下限です(例:「月給28万円」→ 28万円/28万円、「年収534万円」→ 534万円/534万円)。「月給25万円以上」「400万円~」は上限が空です。
  • 年間休日:「年間休日」欄の日数を使い、欄がない場合は休日・休暇の本文(例:「年間休日120日」)から読み取ります。
  • doda 検索対象の都道府県(searchPrefectures):doda がこの求人を検索結果に表示する都道府県です。実際の勤務地(「勤務地(都道府県)」)と異なることがあります(全国募集の求人など)。
  • 転勤(relocation)・オンライン面接(isOnlineInterview):求人ページの<転勤><オンライン面接>欄の内容です。主にエージェント型の求人に記載があり、記載がない求人では空欄になります。
  • 転勤なし:「転勤なし」のタグがある、または<転勤>が「無」「当面なし」なら ✓、<転勤>が「有」や「転勤の可能性あり」の記載なら ✗、どちらとも判断できない場合は空欄(null)です。
  • 上場企業・職種未経験歓迎:doda のタグがあれば ✓、なければ空欄(null)です。✗(false)にはなりません。タグがないことは「非上場」「未経験不可」を意味しないためです。

💰 年収分析

データの出典:doda が公開している 「平均年収ランキング(2025年)」(https://doda.jp/guide/heikin/ )の5ページ(総合・職種別・業種別・都道府県別・年収中央値)。各ページの「調査概要」に記載されている内容は以下のとおりです。

  • 対象者:2024年9月〜2025年8月末までの間に、doda サービスに登録した 20〜65歳の男女
  • 雇用形態:正社員
  • 有効回答数:約60万件
  • 平均年収:手取りではなく支給額(額面)
  • 生涯賃金:20代(22歳〜)、30代、40代、50代以上(〜65歳)の平均年収を年数分掛けて合計した金額(退職金は含まない)。4つの年代のどこかでデータが不足する場合は算出されません。

つまり、企業が支払った給与の統計ではなく、doda に登録した正社員の回答 に基づく年収相場です。doda は職種別・都道府県別の回答数を公開していないため、サンプル数は調査全体の「約60万件」のみです。ガイドページは run ごとに1回だけ読み込み、30日間キャッシュします。

求人とのマッチング方法

  1. 求人ページに含まれる doda の 職種コード(例:小分類 031406)を、平均年収ランキングの各職種行のリンクに含まれるコード(j_oc__031406S)と照合します(小分類)。
  2. 小分類が見つからない場合、平均年収ランキングにその 中分類 自体の行がある場合に限り、中分類の平均を使います(同じ中分類の別の職種の値は使いません)。それもなければ 大分類 の平均(ランキングに大分類自体の行があればその値、なければ職種分類(例:技術系(IT/通信))の平均)を使います。同じ職種コードが平均年収ランキングの複数の行にある場合は、求人の職種分類にある行、次にリンクに含まれるコードが少ない(より限定的な)行を使います(例:Webマーケティング 020118 →「Webマーケティング」、「マーケティング」ではない)。営業職 は平均年収ランキングで業種別の行(例:「営業ーIT/通信」「営業ー医薬品メーカー」)になっているため、大分類で照合する場合は求人の業種コードに該当する行を使い(一致レベル「大分類×業種」)、該当する行がなければ「営業系」の平均を使います。どのレベルで一致したかは「職種の一致レベル」列に表示されます。
  3. 業種 も同じ方法で業種コード(j_ind__…)から照合します。一致したレベルは「業種の一致レベル」列(industryMatchLevel)に表示されます。
  4. 都道府県:入力の「勤務地(都道府県)」または開始URLの都道府県(j_pr__14 など)が、求人の 実際の勤務地(求人ページの構造化データと勤務地住所の一覧)に含まれる場合はその都道府県、含まれない場合は求人の勤務地の最初の都道府県を「分析対象の都道府県」として使います。doda の検索対象(「doda 検索対象の都道府県」列)にだけ含まれる都道府県は比較に使いません。

実測(run mOiehJlzJl3dKySeY、入力 {"occupation":"01L","prefecture":"27","detailLevel":"full","maxItems":50} = 営業職 × 大阪府、50件):職種の一致レベルは 小分類 4件・大分類×業種 42件・大分類 4件、業種の一致レベルは 小分類 34件・大分類 16件。分析対象の都道府県は 大阪府 49件・東京都 1件(大阪府の勤務地がない求人)でした。

年収分析ページの列

列意味
企業名 · 求人タイトル · 職種(小分類)· 業種求人の基本情報
分析対象の都道府県 · エリア比較に使った都道府県と、そのエリア(例:関東)
給与単位 · 給与 下限/上限(円)求人の給与欄(月給・年収・日給・時給)を数値化したもの(金額を読み取った行は、求人概要・求人詳細ページの「給与(金額を読み取った行)」列。JSON では年収分析の行にも salaryLine として含まれます)
想定年収 下限/上限(円)求人ページの「入社時の想定年収」(ない場合は年収表記の給与、例:<予定年収>)
doda 平均年収の職種 · 職種の一致レベル照合した doda の職種名と、一致レベル(小分類/中分類/大分類)
職種 平均年収(円)その職種の平均年収(全体)
想定年収と職種平均の差(%)offerVsOccupationAvgPct(下記)
職種 平均年収・男性/女性(円)男女別の平均年収
職種 平均年収・20代/30代/40代/50代〜(円)年代別の平均年収
職種 生涯賃金(円)doda 算出の生涯賃金
職種分類 · 職種分類 平均年収(円)大分類(例:技術系(IT/通信))の平均
エリア内の職種分類 平均年収(円)同じエリア(例:関東)における職種分類の平均
都道府県 平均年収(円)· 男性/女性分析対象の都道府県の平均年収
都道府県 年収中央値(円)分析対象の都道府県の年収中央値
doda 平均年収の業種 · 業種の一致レベル · 業種 平均年収(円)· 男性/女性照合した業種と一致レベル(小分類/中分類/大分類)、その平均年収
全国 平均年収(円)· 全国 年収中央値(円)全国の平均・中央値
調査年平均年収ランキングの年(現在 2025)
doda 平均年収ページ · 求人URL出典ページと求人ページ

offerVsOccupationAvgPct(想定年収と職種平均の差) 求人の想定年収の中央値(下限と上限の平均。上限がなければ下限。想定年収がなく給与が年収表記の場合は給与欄の値)を職種平均と比べ、round((想定年収 ÷ 職種平均 − 1) × 100) で計算します。プラスなら職種平均より高い提示、マイナスなら低い提示です。「〜1,000万円」のように上限が大きい求人では中央値が高めに出る点に注意してください。

JSON のみの追加データ(表には表示されず、All fields と JSON/API 出力に含まれます)

  • nationalAvgByAge:全国の年代別平均(20代・30代・40代・50代、各 avg・male・female)
  • salaryTrend:全国平均年収の推移 2017〜2025年(各年 avg・male・female)
  • guideUrls:使用した5つのガイドページの URL
"salaryTrend": [
{ "year": 2025, "avg": 4290000, "male": 4870000, "female": 3700000 },
{ "year": 2024, "avg": 4260000, "male": 4810000, "female": 3660000 },
{ "year": 2017, "avg": 4180000, "male": 4570000, "female": 3510000 }
]

(実際の出力には 2017〜2025 の9年分が含まれます。上は抜粋。)

実例(年収分析レベル、2026年10月18日の run mOiehJlzJl3dKySeY(現行ビルド)、入力 {"occupation":"01L","prefecture":"27","detailLevel":"full","maxItems":50} の求人 3016024459) IT法人営業(直販)、勤務地 東京都・大阪府・宮城県・愛知県・福岡県(比較は大阪府)、月給30万円以上、想定年収 400万〜600万円

この求人の給与欄は「\\圧倒的に稼げる仕組み//」「★<平均年収766万円/3人に1人が年収1000万円超>」などの宣伝文から始まります。これらの行は使わず、<未経験者の場合>の下にある「月給30万円以上+インセンティブ+各種手当」から金額を読み取ります。

値
給与(金額を読み取った行)月給30万円以上+インセンティブ+各種手当
給与単位 · 給与 下限 · 上限month · 300,000円 · 空(null、「以上」のため)
求人の想定年収400万〜600万円(中央値 500万円)
doda 職種平均(営業ーIT/通信、大分類×業種で一致)461万円
想定年収と職種平均の差+8%
職種平均 男性/女性493万円/415万円
職種平均 20代/30代/40代/50代〜393万円/530万円/703万円/674万円
職種 生涯賃金2億6,251万円
職種分類(営業系)平均 · 関西内476万円 · 464万円
大阪府 平均年収 · 中央値411万円 · 365万円
業種(システムインテグレータ、小分類で一致)平均481万円
全国 平均年収 · 中央値429万円 · 384万円

職種・業種・都道府県・全国の値は、doda 平均年収ランキング(2025年版)の職種別・業種別・都道府県別・年収中央値ページの表と一致しています。平均年収ランキングの営業職は業種別の行になっているため、この求人(業種:IT・通信、システムインテグレータ)は「営業ーIT/通信」の平均と比べています。

活用例

  • 自社が出す求人の 提示年収 を、職種・都道府県・年代の相場と比べて決める
  • 競合求人の想定年収が 相場より何%高いか を一覧で比較する
  • 同じ職種の 地域差(東京都・大阪府・愛知県…)を確認する
  • 全国平均年収の 9年間の推移 を、自社の昇給率と比較する

求人詳細と年収分析のどちらを選ぶ? 求人詳細($1)でも、求人ページに記載された 想定年収・給与・賞与・昇給 はすべて取得できます。相場との比較(職種・都道府県・業種の平均、年代別、中央値、差%)が必要な場合は年収分析($3)を選んでください。

制限事項

  • 給与 上限(salaryMax)は空になることが多い:給与欄が「月給25万円以上」「月給35万円〜」のように上限なしで書かれているためです(実測の充足率:60〜75%)。想定年収の上限(annualSalaryMax)の充足率は 80〜96% です(職種によって異なります)。
  • 求人概要レベルの「勤務地(都道府県)」は一覧ページの勤務地テキストから抽出 するため、誤る場合があります(求人詳細との照合10件中1件で不一致:テキストでは東京都、実際は北海道)。求人詳細・年収分析では求人ページの構造化された勤務地データを使います。勤務地を指定しても、求人概要の「勤務地(都道府県)」に指定した都道府県が含まれるとは限りません(doda は検索対象の都道府県でも求人を返すため。実測:大阪府 49/50件、北海道 33/40件、沖縄県 21/40件、鳥取県 10/27件)。
  • 複数の都道府県で募集している求人 は、勤務地を指定しない場合、最初に記載された都道府県で比較します(例:勤務地が東京都・大阪府・福岡県の求人 → 東京都)。特定の都道府県で比較したい場合は「勤務地(都道府県)」を指定してください(その都道府県が求人の実際の勤務地に含まれていれば、その都道府県で比較します)。
  • 中分類・大分類での一致は、その職種単独の平均ではなく 分類全体の平均 です(「職種の一致レベル」列で確認できます)。
  • doda にデータが不足している職種では、40代・50代の平均年収や生涯賃金が空(null)になります。
  • 公務員・教員・農林水産関連職(職種コード 10L) は doda の平均年収ランキングに職種の行も職種分類もないため、職種の平均年収・一致レベル・職種平均との差は空になります。都道府県・業種・全国の平均は入るため、年収分析の料金はかかります(平均年収データがまったく入らない行には年収分析の料金はかかりません)。
  • 給与の金額 は給与欄の1行だけから読み取ります(どの行かは「給与(金額を読み取った行)」列で確認できます。上記「求人詳細ページの補足」を参照)。完全歩合制など基準となる金額がない求人では空になります。
  • 人材紹介会社(エージェント)形式の求人ページでは、「仕事内容(概要)」が求人タイトルと同じ場合、本文冒頭の【…】の要約を使います。要約がなければ空になります。
  • 「給与単位」は JSON・表ともに英語コード(year/month/day/hour)です。

使い方

  1. 職種(doda の大分類、例:技術職(SE・インフラエンジニア・Webエンジニア))を選びます。空欄なら全職種が対象です。職種・勤務地・キーワードをすべて空欄にすると、15の職種カテゴリを順に検索します(重複は除外)。
  2. 必要に応じて 勤務地(都道府県) と キーワード(doda のフリーワード検索、例:Java、経理)を指定します。3つは組み合わせ可能です。C#、C++ のような記号を含むキーワードも使えます(% は doda 側で無視されるため、100% は 100 と同じ結果になります)。「/」と「\」は空白に置き換えます。doda の robots.txt で禁止された URL になるキーワード(例:- だけ)は無視され、ログに警告が出ます。
  3. データレベル を選びます:求人概要/求人詳細(デフォルト)/年収分析。
  4. 最大件数(デフォルト 100)を入力して Start を押します。

doda で絞り込んだ検索結果ページや求人ページの URL を 開始URL に貼り付けることもできます(path 形式の URL、例:https://doda.jp/DodaFront/View/JobSearchList/j_pr__13/-oc__03L/)。

入力例

{ "occupation": "03L", "prefecture": "13", "keyword": "Java", "detailLevel": "full", "maxItems": 100 }

(東京都 × 技術職(SE・インフラエンジニア・Webエンジニア)×「Java」。2026年10月18日の確認時点で doda 上の該当求人は 5,812件。)

よくある質問

  • どのくらい時間がかかりますか? 実測(Apify プラットフォーム、2026年10月18日、現行ビルド):求人詳細 300件 175秒(1件あたり約0.58秒、run LqQcGONbqdHdbNb9N。以前のビルドでは 205秒、run XpzT8X3veBG7sUvHI)。この速度なら 1,000件で約10〜11分が目安です。年収分析 50件 54秒(run mOiehJlzJl3dKySeY)、30件 35秒(run rykJTpAFyfyLshF5m)。求人概要 100件は 11秒〜23秒(run VlGyJPvmkwnV6FJ87・tEegvcOMb07mPw3VC。以前のビルドでは 37秒・60秒の測定もあり)。求人概要 1,000件は 73秒(以前のビルドでの測定、run h31tGdgaaoUZlFny8)。doda の一覧ページ(1ページ約1.5MB)の応答に数秒〜50秒以上かかることがあり、件数が少ない run ほど所要時間がばらつきます。

  • タイムアウトはどうなりますか? デフォルトの実行時間の上限は 3600秒(1時間)で、求人詳細なら約5,000件が目安です。上限が近づくと、終了の約60秒前に自動で停止し、それまでに取得した求人はすべて保存されます(求人詳細/年収分析ページに ⚠️ の行が入り、run のステータスにもメッセージが表示されます)。もっと多く取得したい場合は、Run のオプションでタイムアウトを延ばしてください。

  • 何件まで取得できますか? 2026年10月18日の確認時点で、フィルタなしの doda 検索結果は 286,967件です。1回の run で取得できる件数は実行時間の上限で決まります(上記)。それより多く取得したい場合は、タイムアウトを延ばすか、職種・都道府県ごとに分けて実行してください。

  • 無料プランでも使えますか? はい、件数の制限はありません。Apify が毎月付与する $5 のクレジットで、例えば求人概要 約10,000件、求人詳細 約5,000件、または年収分析 約1,666件を取得できます。

  • 予算の上限を設定できますか? はい。Run のオプションで最大課金額(Max cost per run)を設定すると、上限に達した時点で Actor が停止し、上限を超える求人は保存されません(求人詳細/年収分析ページに ⚠️ の行が入ります)。

  • 他のページ(求人詳細・年収分析)はどうやってダウンロードしますか? Output タブの 求人詳細/年収分析 ページ、または Storage タブから。Export ボタンは最初のページ(求人概要)だけ をダウンロードします。

  • 求人詳細/年収分析のページに ℹ️ や ⚠️ の行があります。 案内用の行で、課金されません。次の3種類があります。

    • ℹ️「このページは選択したデータレベルでは作成されません」:選択したデータレベルではそのページを作成しないため、どのデータレベルを選べばよいかを示します。
    • ℹ️「条件に一致する求人が見つかりませんでした」:検索結果が0件だった場合です。
    • ⚠️「途中で停止しました」:タイムアウトが近づいた、または上限金額に達したため早めに停止した場合で、保存済みの件数も表示されます。

    これらの行は求人詳細・年収分析のページにだけ書き込まれ、求人概要のページには入りません(求人概要は1行ごとに課金されるため、代わりに run のステータスメッセージでお知らせします)。API では _info: true の行を除外してください。

  • 年収データはどのくらい新しいですか? doda 平均年収ランキングの最新版(2025年、調査期間 2024年9月〜2025年8月)です。doda が新しい版を公開すると、キャッシュ(30日)の更新後に反映されます。

法的な注意事項

  • 本 Actor は ログイン不要の公開ページ(求人一覧、求人詳細、平均年収ランキング)のみを読み込みます。ログインが必要な情報や、求職者の個人情報は取得しません。
  • doda の利用規約 第14条(禁止事項)第3号 は、「本サービスを通じて入手した情報を、複製、販売、出版その他方法の如何を問わず、私的利用の範囲を超えて利用し、または第三者に開示、提供する行為」を禁止しています。また第13条は、サイト上の著作物等の許諾のない複製・転載を制限しています。ご自身の利用目的がこれらに抵触しないか、必ずご確認ください。
  • 平均年収データを引用・転載する場合、doda は出所(転職サービス「doda」)の明記を求めています。
  • 取得したデータの利用(個人情報保護法、著作権法を含む)は、利用者ご自身の責任となります。本 Actor は doda とは無関係の非公式ツールです。

🇬🇧 English

Scrape job listings from doda (doda.jp), one of Japan's largest job-change sites, into a clean dataset, and optionally enrich every job with doda's salary-guide benchmarks: average salary by occupation, prefecture and industry, by gender and age group, medians, lifetime wage, and the % difference between the job's expected annual salary and the occupation average. Export as JSON, CSV, Excel or via API. Console tables use Japanese column labels; JSON field names are English and amounts are integers in JPY.

Who is it for?

  • HR and recruiting teams: compare competitors' offers (salary, expected annual pay, holidays, benefits, overtime) with the market average for the occupation and region.
  • Recruitment agencies and consultants: jobs and salary levels by occupation × prefecture × industry.
  • Sales / lead generation: hiring companies with employee count, capital and website.
  • Researchers and media: Japan's job market and salary trends (2017–2025 series included).

Data levels, output pages & pricing (pay per event)

Each level includes the previous one. Results come in up to 3 linked datasets (pages in the Output tab, joined by jobId):

LevelPagesWhat you getPrice per 1,000 jobs (level total)
list (求人概要 / Job summary)Job summary (17 columns)Company, title, company group, employment type, prefecture, nearest stations, new / closing soon, target candidates, salary (raw text + the line the amount was read from + min / max / period), salary examples, job summary, job URL$0.50
details (求人詳細 / Job details, default)+ Job details (74 columns)Everything on the job page: occupation (sub / main category), industry, city & address, doda search prefectures, relocation, posted / closing date, selection flow, online interview, requirements, expected annual salary (min / max), bonus, raises, working hours, average overtime, annual holidays, benefits, no relocation, full description, team, gender ratio, age mix, retention, dev environment, interview report, company profile (listed, business, HQ address, founded, CEO, employees, capital, sales, average age, website)$1
full (年収分析 / Salary insights)+ Salary insights (39 columns)Benchmarks from doda's salary guide (see below)$3

Pricing is pay per event: a start fee of $0.00005 per run (per 1 GB of memory; default 1 GB), plus, for each saved job, $0.0005 for the job summary, +$0.0005 for job details (details / full) and +$0.002 for salary insights (full). The table shows the total per level per 1,000 jobs. The ℹ️ / ⚠️ notice rows (see FAQ) are not charged. Apify Bronze / Silver / Gold subscribers get 10% / 20% / 30% off all per-job fees.

Job details notes

  • Expected annual salary (annualSalaryMin / annualSalaryMax): taken from the job page's 入社時の想定年収 section. If there is none and the salary is stated per year (e.g. agent-template jobs with "<予定年収> 370万円~550万円"), that yearly salary is used. Only if neither exists is the yearly range in the page's structured data (JSON-LD, doda's search band) used.
  • Salary line (salaryLine, 給与(金額を読み取った行)): the single line of the salary text (salaryText) that salaryMin / salaryMax / salaryPeriod were read from, on both the Job summary and Job details pages. Rules:
    1. Candidates are lines starting with 月給 / 月額 / 年収 / 年俸 / 基本給 / 日給 / 日額 / 日当 / 時給 / 時間額 (lines with age / tenure markers such as 32歳, 入社3年目, 30代, 先輩 are never candidates) (prefixes such as ①②③, (1), (A) or a region label like 「東京:」 are ignored), plus amount lines under a heading such as 【月給】 or 【固定報酬時間額】.
    2. Example blocks: a heading containing 例 / モデル / 収入例 / 月収例 / 年収例 / 給与例 / イメージ (also with digits, e.g. 「◆契約1年目のモデル月収例」) starts a block that lasts until the next non-example heading or a separator line; blank lines and lines starting with 年収 / 月給 do not end it. Inside the block only lines that start with 月給 etc. and carry no age / tenure / example marker are candidates. Lines starting with 「→」 are never used.
    3. Lines starting with ★ / ☆, lines containing 保証 / 保障 (e.g. a guaranteed salary for the first months) and lines starting with 月収 are used only when there is no other candidate.
    4. The first candidate in reading order wins (with ①②③ or A/B options, the first option). If that first candidate is a regional line (関東: / ■東京都(23区): / an amount under ■千葉県 …), all following regional lines are searched, even across blank lines, for the comparison prefecture (the input prefecture if the job works there, otherwise its first work prefecture) or its region, else the 「以外」 / 「その他」 line (including notes such as 「※京阪神地区以外の勤務地の場合は…」).
    5. Cross-check with the expected annual salary: when the job has 想定年収 (or <予定年収>), candidates are checked in order and a candidate that does not fit is skipped (a yearly candidate must be 0.6–1.6× the annual minimum; for a monthly candidate the annual minimum must be 0.6–3.0× of month × 12). The result is in salaryCheck: ok (checked), mismatch (no candidate fits; the first one is shown), unchecked (no 想定年収, or hourly / daily pay); empty when no salary was read. The Job summary page is not cross-checked. When the amount sits under a heading such as 【月給】, the heading is included. Empty (null) when there is no base amount (e.g. commission-only).
  • Single amount: for both salary and expected annual salary, a single amount that is not open-ended has max = min (「月給28万円」 → 280,000 / 280,000; 「年収534万円」 → 5,340,000 / 5,340,000). Open-ended amounts (以上, ~) have an empty max.
  • Annual holidays (annualHolidays): the 年間休日 field, or else read from the holiday text (e.g. "年間休日120日").
  • doda search prefectures (searchPrefectures): the prefectures in which doda shows the job in search results; can differ from the actual work prefectures (prefectures), e.g. for nationwide hiring.
  • Relocation (relocation) and online interview (isOnlineInterview): from the job page's <転勤> / <オンライン面接> sections, which mostly appear on agent-template jobs; empty when not stated.
  • No relocation (isNoRelocation): true with the 転勤なし tag or <転勤> 無 / 当面なし; false when <転勤> says 有 or relocation is possible; otherwise empty (null).
  • Listed company (isListedCompany) and inexperienced welcome (isInexperiencedWelcome): true when doda shows the tag, otherwise empty (null), never false (a missing tag does not mean "not listed" or "experience required").

💰 Salary insights

Source: doda's Average Annual Salary Ranking (2025) (平均年収ランキング, https://doda.jp/guide/heikin/), 5 pages: overview, by occupation, by industry, by prefecture, medians. According to the survey notes (調査概要) on those pages:

  • Respondents: men and women aged 20–65 who registered with doda between September 2024 and the end of August 2025
  • Employment type: full-time regular employees (正社員)
  • Valid responses: about 600,000
  • Average salary: gross pay (額面), not take-home
  • Lifetime wage: sum of the average salary of the 20s (from 22), 30s, 40s and 50s+ (to 65) times the years in each band, excluding retirement pay; not calculated when any band lacks data.

These are market levels based on answers from doda's full-time registrants, not employer payroll statistics. doda does not publish per-occupation or per-prefecture sample sizes, so the only sample size is the survey-wide ~600,000. The guide pages are fetched once per run and cached for 30 days.

Matching

  1. The job page carries doda's occupation code (e.g. sub-category 031406), matched against the code in each salary-guide row link (j_oc__031406S) → 小分類 (sub-category).
  2. Otherwise the 中分類 (mid-category) average is used only if the salary guide has a row for that mid-category itself (a sibling occupation is never used); else the 大分類 (main category) average (the main category's own row if the guide has one, otherwise the category average, e.g. 技術系(IT/通信)). When an occupation code appears in several guide rows, the row in the job's own occupation category wins, then the most specific row (fewest linked codes), e.g. Web marketing 020118 → 「Webマーケティング」 rather than 「マーケティング」. Sales rows in the guide are per industry (e.g. 営業ーIT/通信, 営業ー医薬品メーカー), so at the main-category level a sales job uses the row for its own industry code (guideMatchLevel = 大分類×業種), or the 営業系 average if none matches. guideMatchLevel shows which level matched.
  3. Industry is matched the same way via industry codes (j_ind__…); industryMatchLevel shows the level.
  4. Prefecture: the input prefecture (or the j_pr__… prefecture of a start URL) if the job actually works there (structured location and work-address list), otherwise the job's first work prefecture. A prefecture that appears only in doda's search prefectures (searchPrefectures) is not used for the comparison.

Measured (run mOiehJlzJl3dKySeY, input {"occupation":"01L","prefecture":"27","detailLevel":"full","maxItems":50} = sales × Osaka, 50 jobs): guideMatchLevel 小分類 4 / 大分類×業種 42 / 大分類 4; industryMatchLevel 小分類 34 / 大分類 16; mainPrefecture 大阪府 49, 東京都 1 (a job with no Osaka work location).

ColumnMeaning
mainPrefecture, regionPrefecture used for comparison and its region (e.g. 関東)
salaryPeriod, salaryMin, salaryMaxSalary field parsed into numbers (year / month / day / hour); the line they were read from is the salaryLine column on the Job summary / Job details pages (also in the JSON of this page)
annualSalaryMin, annualSalaryMaxExpected annual salary from the job page (想定年収; else a yearly salary such as <予定年収>)
guideOccupation, guideMatchLevelMatched doda occupation and match level
occupationAvgSalaryOccupation average salary
offerVsOccupationAvgPctOffer vs. occupation average, % (see below)
occupationAvgSalaryMale / Female, …20s / 30s / 40s / 50sBy gender and age group
occupationLifetimeWagedoda's lifetime wage
guideCategory, categoryAvgSalary, regionCategoryAvgSalaryMain-category average, nationwide and within the region
prefectureAvgSalary (+ male / female), prefectureMedianSalaryPrefecture average and median
guideIndustry, industryMatchLevel, industryAvgSalary (+ male / female)Matched industry, match level and average
nationalAvgSalary, nationalMedianSalary, guideYearJapan-wide average, median, guide year (currently 2025)
guideUrl, urlSource guide page and job page

offerVsOccupationAvgPct = round((offer ÷ occupation average − 1) × 100), where offer is the midpoint of the expected annual salary (the minimum if there is no maximum; the salary field if it is annual and no expected annual salary is given). Positive = above the occupation average. Wide open ranges (e.g. "up to ¥10M") push the midpoint up.

Extra JSON-only data (in All fields and JSON/API, not in the table): nationalAvgByAge (20s–50s, avg / male / female), salaryTrend (Japan-wide average 2017–2025, avg / male / female), guideUrls (the 5 guide pages).

Real example (run mOiehJlzJl3dKySeY, current build, 18 Oct 2026, input {"occupation":"01L","prefecture":"27","detailLevel":"full","maxItems":50}, job 3016024459): IT corporate sales (direct), work locations Tokyo / Osaka / Miyagi / Aichi / Fukuoka (compared in Osaka), monthly ¥300,000 or more, expected annual salary ¥4.0M–¥6.0M. The salary text opens with promo lines (\\圧倒的に稼げる仕組み//, ★<平均年収766万円/3人に1人が年収1000万円超> …). These are skipped, and the amount is read from 月給30万円以上+インセンティブ+各種手当 (salaryLine) → salaryPeriod month, salaryMin 300000, salaryMax null (以上 = "or more"). Occupation average (営業ーIT/通信, guideMatchLevel 大分類×業種) ¥4.61M → offer midpoint ¥5.0M is +8%. Male / female ¥4.93M / ¥4.15M; 20s / 30s / 40s / 50s+ ¥3.93M / ¥5.30M / ¥7.03M / ¥6.74M; lifetime wage ¥262.51M. Category (営業系) ¥4.76M, within Kansai ¥4.64M. Osaka average ¥4.11M, median ¥3.65M; industry (システムインテグレータ, sub-category match) ¥4.81M; Japan average ¥4.29M, median ¥3.84M. The occupation, industry, prefecture and national values match the tables on doda's 2025 salary-guide pages. Sales rows in the guide are per industry, so this IT / system-integrator job is compared with 営業ーIT/通信.

Limits

  • salaryMax is often empty because salary texts are open-ended (以上 / 〜): measured fill 60–75%; annualSalaryMax is 80–96% filled (varies by occupation).
  • At the list level, prefectures is extracted from the listing's location text and can be wrong (1 of 10 checked jobs: text said Tokyo, actual Hokkaido). details and full use the job page's structured location. With a prefecture filter, the list-level prefectures does not always include the filtered prefecture, because doda also returns jobs whose search prefectures include it (measured: Osaka 49/50, Hokkaido 33/40, Okinawa 21/40, Tottori 10/27).
  • Multi-prefecture jobs are compared using the first listed prefecture unless you set a prefecture filter that is one of the job's actual work prefectures (e.g. a job located in 東京都・大阪府・福岡県 → 東京都).
  • Mid / main-category matches use the category average, not the single occupation's average.
  • The 40s / 50s averages and lifetime wage are null when doda lacks data for that occupation.
  • Public servants, teachers, agriculture (occupation 10L) have no occupation row or category in doda's salary guide, so the occupation benchmark, match level and offer-vs-occupation % are empty. Prefecture, industry and national averages are still filled, so the salary-insights event is charged; a row with no guide data at all is not charged for salary insights.
  • Salary amounts are read from one line of the salary text, shown in salaryLine (see Job details notes). Commission-only jobs without a base amount stay empty.
  • On agent-style job pages, when the job summary equals the title, the 【…】 lead of the description is used; if there is none, summary is empty.

Input

FieldDescription
occupationdoda main occupation code, e.g. 03L (IT engineers). Empty = all occupations; with no filter at all, all 15 occupation categories are searched in turn (duplicates removed)
prefecturePrefecture code 1–47, e.g. 13 = Tokyo
keyworddoda free-word search, e.g. Java, 経理. Symbols such as C#, C++ work (% is ignored by doda, so 100% gives the same results as 100); / and \ become spaces; a keyword that would give a robots.txt-disallowed URL (e.g. just -) is ignored with a warning
keywordInTitleOnlyKeep only jobs whose title / occupation name contains the keyword
detailLevellist · details (default) · full
maxItemsMax jobs per run (default 100)
startUrlsOptional doda.jp path-style search or job URLs (override the filters)
{ "occupation": "03L", "prefecture": "13", "keyword": "Java", "detailLevel": "full", "maxItems": 100 }

FAQ

  • Speed? Measured on the Apify platform (18 Oct 2026, current build): details 300 jobs in 175 s (≈0.58 s/job, run LqQcGONbqdHdbNb9N; 205 s on an earlier build, run XpzT8X3veBG7sUvHI), so about 10–11 min per 1,000 jobs; full 50 jobs in 54 s (run mOiehJlzJl3dKySeY), 30 jobs in 35 s (run rykJTpAFyfyLshF5m); list 100 jobs took 11–23 s (runs VlGyJPvmkwnV6FJ87, tEegvcOMb07mPw3VC; an earlier build also measured 37 s and 60 s); list 1,000 jobs took 73 s (earlier build, run h31tGdgaaoUZlFny8). A doda listing page (~1.5 MB) can take from a few seconds to over 50 s to respond, so small runs vary most.
  • Timeout? The default run timeout is 3,600 s (1 hour), roughly 5,000 jobs at the details level. When the timeout gets close, the Actor stops cleanly about 60 s early and keeps every job collected so far (a ⚠️ row on the Job details / Salary insights pages and a run status message). Increase the timeout in the run options to get more.
  • How many jobs? An unfiltered doda search returned 286,967 jobs on 18 Oct 2026. How many one run gets is limited by the run timeout (see above); for more, raise the timeout or split by occupation / prefecture.
  • Free plan? No item cap. Apify's $5 monthly credit covers e.g. about 10,000 list, 5,000 details or 1,666 full jobs.
  • Budget cap? Set Max cost per run in the run options; the Actor stops at the limit and does not save jobs beyond it (a ⚠️ row is added to the Job details / Salary insights pages).
  • How do I download the other pages? From the Job details / Salary insights pages in the Output tab, or the Storage tab. The Export button only exports the first page (Job summary).
  • The Job details / Salary insights page has ℹ️ or ⚠️ rows. These are notice rows and are not charged: ℹ️ "not filled at this data level" (the row tells you which level to choose), ℹ️ "no jobs matched the search", or ⚠️ "stopped early" because the timeout was near or the budget limit was reached (with the number of jobs saved). They appear only on the Job details and Salary insights pages, never on Job summary (every row there is charged, so the run status message is used instead). Filter them out in the API with _info: true.
  • Only public pages that need no login are read (job listings, job pages, salary guide). No logged-in data and no candidate personal data are collected.
  • doda's terms of use, Article 14 (Prohibited acts), item 3, prohibit using information obtained through the service beyond private use, or disclosing / providing it to third parties, by copying, selling, publishing or any other means; Article 13 restricts copying site content without permission. Check that your own use case complies.
  • When quoting the salary-guide data, doda asks that the source (転職サービス「doda」) be credited.
  • You are responsible for how you use the data (including Japan's APPI and copyright law). This is an unofficial tool, not affiliated with doda.