Japan Tech Jobs Market Checker — Bilingual IT Salary Stats
Pricing
from $20.00 / 1,000 market analyzeds
Japan Tech Jobs Market Checker — Bilingual IT Salary Stats
Salary stats for English-speaking / bilingual IT jobs in Japan (TokyoDev + JapanDev) in one call: advertised ¥M bands, how many roles disclose pay at all, band width, Japanese level, remote and residency mix. From $0.02. 日本のバイリンガルIT求人の給与レンジ統計を1コールで。一次调用获取日本双语IT职位薪资区间统计。
What does an English-speaking tech job in Japan actually pay — and how many employers will even tell you? One call answers both, across the two English-language Japanese job boards that publish salary bands.
Most Japanese job boards hide pay entirely. That is why the headline number here is not just the median: it is salaryDisclosureRate — how many of the live roles publish a band at all — next to salaryRangeWidthMillionsJpy, how wide that published ¥8M ~ ¥16M band is. A wide band is negotiation headroom; a missing band is a market signal of its own.
Overview
The Actor reads two job boards in one run and returns one compact market record:
salaryMinMillionsJpy/salaryMaxMillionsJpy/salaryMidMillionsJpy— min / p25 / median / p75 / max / average of the advertised bands, in ¥ millions per yearsalaryRangeWidthMillionsJpy— the distribution ofmax - min. The width of the advertised band is the negotiation rangesalaryDisclosureRate— how many of the matched roles published a band at allsalaryByJapaneseLevel— the money question: does requiring Japanese pay more? Count, median low and median high per required Japanese leveljapaneseRequirement— none / conversational / business / fluent / unknownresidency— Japan residents only vs. can apply from abroad vs. unknownremote,categoryTop,companyCount- Optionally every matching role as its own record
| Source | URL | What one request returns | Reported as |
|---|---|---|---|
| TokyoDev | https://www.tokyodev.com/jobs | every listed position, server-rendered, no pagination | basis: "population" |
| JapanDev | https://japan-dev.com/jobs | 60 of the listed jobs; the board exposes no pagination endpoint | basis: "sample" |
Both counts are always reported separately, per source, as totalListed and sampled. JapanDev's listed total is never counted as sampled — the summary's sampledJobs only ever adds up what was actually read.
Each source's basis says what the returned statistics actually describe:
basis | Meaning |
|---|---|
population | every listed job on that board is in the statistics |
filtered_population | the board served every listed job, but a keyword / japaneseLevel filter kept only part of them, so the statistics describe that subset — the summary's basisFilter carries the filter that produced it |
sample | the board served only part of its listed jobs, so the statistics are a sample. A filtered sample stays a sample |
No login, no API key, no browser, nothing stored between runs. A run is 2 HTTP requests and takes a few seconds.
Input
| Field | Example | Notes |
|---|---|---|
sources | ["tokyodev", "japandev"] | Which boards to aggregate. Default: both. Adding a board costs nothing extra |
keyword | "backend" | Optional, case-insensitive, matched against job title + company. Empty = the whole English-speaker tech market |
japaneseLevel | "any" | any / none / conversational / business / fluent. Filters the roles the statistics describe |
includeIndividualItems | false | Enable to also get one record per matching role (+$0.002 each) |
Output
One type: "job_market_summary" record per run:
{"type": "job_market_summary","keyword": null,"japaneseLevelFilter": "any","sources": ["tokyodev", "japandev"],"perSource": [{"source": "tokyodev", "totalListed": 155, "sampled": 155, "basis": "population"},{"source": "japandev", "totalListed": 288, "sampled": 60, "basis": "sample"}],"basisFilter": null,"totalListed": 443,"sampledJobs": 215,"matchedJobs": 215,"salaryDisclosedJobs": 149,"salaryDisclosureRate": 0.693,"salaryMinMillionsJpy": {"min": 4.0, "p25": 7.0, "median": 8.5, "p75": 10.0, "max": 20.0, "average": 8.8},"salaryMaxMillionsJpy": {"min": 6.0, "p25": 12.0, "median": 14.0, "p75": 17.0, "max": 30.0, "average": 14.6},"salaryMidMillionsJpy": {"min": 5.0, "p25": 9.5, "median": 11.5, "p75": 13.5, "max": 25.0, "average": 11.7},"salaryRangeWidthMillionsJpy": {"min": 0.0, "p25": 4.0, "median": 5.5, "p75": 8.0, "max": 18.0, "average": 5.8},"japaneseRequirement": {"none": 114, "conversational": 21, "business": 71, "fluent": 9, "unknown": 0},"residency": {"japanResidentsOnly": 66, "canApplyFromAbroad": 129, "unknown": 20},"remote": {"Fully remote": 82, "Partial remote": 30, "unspecified": 103},"categoryTop": [{"category": "Software Engineering", "jobs": 61}],"companyCount": 132,"salaryByJapaneseLevel": [{"japaneseLevel": "none", "jobs": 114, "withSalary": 82,"medianMinMillionsJpy": 8.0, "medianMaxMillionsJpy": 14.0}],"currency": "JPY","salaryUnit": "millions_jpy_per_year","checkedAt": "2026-07-27T09:00:00+00:00","sourceUrls": ["https://www.tokyodev.com/jobs", "https://japan-dev.com/jobs"]}
The perSource, totalListed, sampledJobs and disclosure counts are measured; the salary figures above show the record's shape — the actual distribution is whatever the boards publish on the day you run it.
With includeIndividualItems: true you additionally get one record per matching role:
{"type": "job","source": "tokyodev","title": "Engineering Manager","company": "SPIKE STUDIO","salaryMinMillionsJpy": 8.0,"salaryMaxMillionsJpy": 16.0,"japaneseLevel": "business","japaneseLevelBasis": "exact","residency": "japan_residents_only","remote": "Fully remote","location": null,"category": "Engineering Management","url": "https://www.tokyodev.com/companies/spike-studio"}
Pricing — from $0.02 per call, no subscription
| Event | Price | When |
|---|---|---|
Market summary (market-analyzed, primary event) | $0.02 | Once per run |
Individual job record (job-scraped) | $0.002 | Only if you enable Include individual job records |
A default run (both boards, summary only) costs $0.02. Individual records are off by default. A run that returns no jobs — or whose filters match none — is never charged.
Notes & limits
- Wantedly is deliberately not a source. It is the largest English-friendly board in Japan, but it does not publish salaries, and folding a salary-less board into a salary distribution would silently deflate every statistic here
- JapanDev is a sample, and says so. Its page server-renders 60 of its listed jobs and the board offers no pagination endpoint, so
basis: "sample"and itstotalListedis reported next to — never added into —sampled - A filtered run is never labelled a population. Set a
keywordor ajapaneseLeveland every statistic describes the matching roles only, so TokyoDev'sbasiscomes down tofiltered_populationandbasisFilterrecords the filter that produced it. Sample-vs-population labelling is treated as correctness here, not decoration - JapanDev's Japanese signal is coarser than TokyoDev's. It publishes only "Japanese Required" vs. nothing, so its roles map onto
business/noneand every such record carriesjapaneseLevelBasis: "coarse". TokyoDev's four-level labels are"exact" - Residency is asymmetric on purpose. On TokyoDev, roles without the "Japan residents only" label were measured to be open to applications from abroad, so absence is a value. On JapanDev only the positive "Apply from Abroad" tag exists, so its absence stays
unknownrather than being guessed locationis only published by JapanDev;categoryis only published by TokyoDev. Both staynullon the other board rather than being invented- TokyoDev's job URLs are not reliably extractable from the listing page, so
urlis nullable - These are advertised bands, not offers or paid salaries, and they exclude bonuses, stock and allowances. Roles that publish no band are counted, never imputed
- If a board's page states a job count but no job can be parsed, the run fails that source instead of reporting zero — a layout change must not look like an empty market. If every source fails, the run fails
- Read-only, HTTP only (no browser), throttled at 1 request / 1.5 s, 256 MB, ~2 requests per run
- No personal data. Job posts carry employer names only; recruiter and applicant names are neither parsed nor emitted
日本語ガイド
日本の英語話者・バイリンガル向け IT 求人の「給与レンジ相場」を、1コール1レコードで返す Actor です。
- 概要: 給与を公開している英語圏向け求人ボード2つ(TokyoDev / JapanDev)を1回の実行で集計し、募集中求人の 年収レンジ(¥百万円単位)の分布(最小・p25・中央値・p75・最大・平均)を返します。売りは2つ —
salaryDisclosureRate(そもそも給与を公開している求人の割合) とsalaryRangeWidthMillionsJpy(¥8M ~ ¥16Mというレンジの幅=交渉余地)。日本の求人媒体は給与非公開が主流なので、「N件中何件が金額を出しているか」自体が価値のある指標です。 - 主な出力: 求める日本語レベル別の内訳と
salaryByJapaneseLevel(日本語要件が上がると給与も上がるのか=中央値の下限・上限)、在住要件(日本在住者限定/海外から応募可/不明)、リモート区分、職種カテゴリ上位、企業数。 - 母集団とサンプルの区別: TokyoDev は1リクエストで掲載中の全件が返るため
basis: "population"。JapanDev は掲載件数のうち 60件のみが HTML に含まれ、ページング API が存在しないためbasis: "sample"とし、totalListed(掲載総数)とsampled(実際に読めた件数)を必ず分けて報告します。JapanDev の掲載総数をsampledJobsに足すことはありません。 basisの値:population(そのボードの掲載全件が統計に入っている)/filtered_population(全件は取得できたがkeyword・japaneseLevelで絞り込んだため、統計はその部分集合の説明。絞り込み条件はサマリーのbasisFilterに入ります)/sample(ボードが掲載の一部しか返さないためサンプル。絞り込んでもsampleのまま)。- 使い方:
sourcesで対象ボードを選び(既定は両方)、keywordで職種名・社名の部分一致フィルタ(任意)、japaneseLevelで日本語要件による絞り込み(any/none/conversational/business/fluent)。個別求人の明細が必要なときだけincludeIndividualItemsを ON にします。 - 料金: サマリー1件(イベント
market-analyzed)$0.02、個別求人レコード(イベントjob-scraped)は $0.002/件(既定 OFF なので既定実行は $0.02 固定)。0件・フィルタ不一致の実行には課金されません。 サブスクリプション不要です。 - 注意: Wantedly は給与が公開されていないため意図的に対象外です(給与統計が壊れるため)。JapanDev の日本語要件は「Japanese Required の有無」しかないため
business/noneに丸め、該当レコードにはjapaneseLevelBasis: "coarse"を付けます。掲載件数が取れているのに求人が1件も解析できない場合は、0件として返さずそのソースを失敗させます(レイアウト変更を空の結果と誤認しないため)。掲載されている金額は「提示レンジ」であり、賞与・株式・各種手当は含みません。個人情報は取得しません(企業名のみ)。
中文说明
一次调用即可获取日本「英语/双语 IT 职位」的薪资区间行情。
- 概览: 本 Actor 同时读取两个公开薪资的英文日本招聘网站(TokyoDev / JapanDev),返回在招职位的年薪区间分布(单位:百万日元)——最小值 / p25 / 中位数 / p75 / 最大值 / 平均值。核心卖点有两个:
salaryDisclosureRate(究竟有多少职位公开了薪资) 与salaryRangeWidthMillionsJpy(¥8M ~ ¥16M这一区间的宽度,即议薪空间)。日本多数招聘网站根本不公开薪资,因此「N 个职位中有几个给出了金额」本身就是有价值的指标。 - 主要输出: 按所需日语水平拆分的分布与
salaryByJapaneseLevel(要求日语是否更高薪:各水平的下限中位数与上限中位数)、居住要求(仅限日本居住者/可从海外申请/未知)、远程办公构成、职位类别 Top 10、公司数量。 - 总体与样本严格区分: TokyoDev 单次请求即可返回全部在招职位,故标记为
basis: "population";JapanDev 页面仅服务端渲染其中 60 条且不提供任何分页接口,故标记为basis: "sample",并将totalListed(挂牌总数)与sampled(实际读取数)分开报告。JapanDev 的挂牌总数绝不会被计入sampledJobs。 basis取值:population(该站点在招职位全部纳入统计)/filtered_population(虽已取得全部职位,但keyword/japaneseLevel只保留了其中一部分,因此统计描述的是该子集;产生它的筛选条件记录在汇总的basisFilter中)/sample(站点本身只返回部分职位,故为样本;加了筛选仍然是sample)。- 用法: 用
sources选择数据源(默认两个都用);keyword为可选的职位名/公司名不区分大小写筛选;japaneseLevel按日语要求筛选(any/none/conversational/business/fluent);只有在需要逐条职位明细时才打开includeIndividualItems。 - 价格: 每次调用的汇总记录(事件
market-analyzed)$0.02,逐条职位记录(事件job-scraped)$0.002/条(默认关闭,因此默认运行固定为 $0.02)。没有结果、或筛选后无匹配的运行不会计费。 无需订阅。 - 注意: Wantedly 不公开薪资,故有意不作为数据源(混入会破坏薪资统计)。JapanDev 只有「Japanese Required」有无之分,因此归并为
business/none,并在相应记录上标注japaneseLevelBasis: "coarse"。若页面给出了职位总数却一条都解析不出,本 Actor 会让该数据源失败而非返回 0(避免把版面改动误判为「市场为空」)。所列金额为招聘方公示区间,不含奖金、股权与各类津贴。不采集任何个人信息(仅公司名称)。