Japan Tech Jobs Market Checker — Bilingual IT Salary Stats avatar

Japan Tech Jobs Market Checker — Bilingual IT Salary Stats

Pricing

from $20.00 / 1,000 market analyzeds

Go to Apify Store
Japan Tech Jobs Market Checker — Bilingual IT Salary Stats

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职位薪资区间统计。

Pricing

from $20.00 / 1,000 market analyzeds

Rating

0.0

(0)

Developer

h ichi

h ichi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Categories

Share

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 year
  • salaryRangeWidthMillionsJpy — the distribution of max - min. The width of the advertised band is the negotiation range
  • salaryDisclosureRate — how many of the matched roles published a band at all
  • salaryByJapaneseLevel — the money question: does requiring Japanese pay more? Count, median low and median high per required Japanese level
  • japaneseRequirement — none / conversational / business / fluent / unknown
  • residency — Japan residents only vs. can apply from abroad vs. unknown
  • remote, categoryTop, companyCount
  • Optionally every matching role as its own record
SourceURLWhat one request returnsReported as
TokyoDevhttps://www.tokyodev.com/jobsevery listed position, server-rendered, no paginationbasis: "population"
JapanDevhttps://japan-dev.com/jobs60 of the listed jobs; the board exposes no pagination endpointbasis: "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:

basisMeaning
populationevery listed job on that board is in the statistics
filtered_populationthe 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
samplethe 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

FieldExampleNotes
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
includeIndividualItemsfalseEnable 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

EventPriceWhen
Market summary (market-analyzed, primary event)$0.02Once per run
Individual job record (job-scraped)$0.002Only 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 its totalListed is reported next to — never added into — sampled
  • A filtered run is never labelled a population. Set a keyword or a japaneseLevel and every statistic describes the matching roles only, so TokyoDev's basis comes down to filtered_population and basisFilter records 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 / none and every such record carries japaneseLevelBasis: "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 unknown rather than being guessed
  • location is only published by JapanDev; category is only published by TokyoDev. Both stay null on the other board rather than being invented
  • TokyoDev's job URLs are not reliably extractable from the listing page, so url is 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(全件は取得できたが keywordjapaneseLevel で絞り込んだため、統計はその部分集合の説明。絞り込み条件はサマリーの 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(虽已取得全部职位,但 keywordjapaneseLevel 只保留了其中一部分,因此统计描述的是该子集;产生它的筛选条件记录在汇总的 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(避免把版面改动误判为「市场为空」)。所列金额为招聘方公示区间,不含奖金、股权与各类津贴。不采集任何个人信息(仅公司名称)。