salary-market-scanner について
salary-market-scanner は、職種と勤務地に応じて求人サイトや給与データベースから報酬情報を集める調査スキルです。事前に TinyFish の環境を確認し、地域に合った複数の情報源をまとめます。
主な機能
- 01求人サイトと給与データベースの収集
- 02職種と勤務地別の給与調査
- 03複数情報源のデータ統合
- 04職種や勤務地の表記ゆれへの対応
- 05通貨間の給与換算
活用シーン
- 01地域ごとの職種別給与の比較
- 02リモート職の給与範囲の確認
- 03特定企業の報酬調査
- 04現在の給与水準の競争力確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tinyfish-io/ tinyfish-cookbook --skill salary-market-scannerインストール後、Claude Code で/salary-market-scannerを入力して読み込まれたか確認します。
詳細
給与市場スキャナー
求人サイトや給与データベースをリアルタイムでスクレイピングし、あらゆる職種・勤務地の実際の報酬データを見つけます。古い調査データではなく、企業が現在実際に掲載し、支払っている金額を調べます。
実行前の確認(必須)
TinyFish を呼び出す前に、必ず両方の確認を実行してください。
1. CLI がインストールされていますか?
which tinyfish && tinyfish --version || echo "TINYFISH_CLI_NOT_INSTALLED"
インストールされていない場合は、停止して次のようにユーザーに伝えてください。
TinyFish CLI をインストールしてください:
npm install -g @tiny-fish/cli
2. 認証済みですか?
tinyfish auth status
認証されていない場合は、停止して次のようにユーザーに伝えてください。
TinyFish API キーが必要です。こちらから取得してください:https://agent.tinyfish.ai/api-keys
次に、認証してください。
tinyfish auth login
両方の確認に合格するまで、先に進まないでください。
ステップ 1 — 入力情報を収集する
次の情報が必要です。
- 職種・役割 — 例:
Senior Software Engineer、ML Engineer、Product Designer、DevOps Engineer - 勤務地 — 例:
London、Singapore、San Francisco、Remote - 経験年数(任意)— 例:
3-5 years、senior、entry level - 特定の企業(任意)— ユーザーが特定の企業の給与を知りたい場合
勤務地が指定されていない場合は、先に進む前に確認してください。給与データは市場によって大きく異なります。
ステップ 2 — 給与を並行してスキャンする
すべてのエージェントを同時に実行します。情報源は勤務地によって異なるため、最も関連性の高いものを含めてください。
# Agent 1 — Levels.fyi (best for tech roles, especially US/global big tech)
tinyfish agent run \
--url "https://www.levels.fyi/t/{ROLE_SLUG}/?country={COUNTRY}" \
"You are on Levels.fyi showing compensation data for {ROLE} in {LOCATION}.
Extract:
- Median total compensation
- Base salary range (p25 to p75)
- Bonus range
- Stock/equity range (if shown)
- Sample size (number of data points)
- Top companies listed and their compensation ranges
- Any breakdown by years of experience if visible
STRICT RULES:
- Do NOT click any company or individual entry
- Read only the aggregate data visible on the page
- If no data for this location, return {found: false, reason: 'no data for location'}
Return JSON: {found: bool, median_total, base_p25, base_p75, bonus_range, equity_range, sample_size, top_companies: [{company, base, total}], yoe_breakdown: []}" \
--sync > /tmp/sal_levels.json &
# Agent 2 — Glassdoor salaries
tinyfish agent run \
--url "https://www.google.com/search?q=glassdoor+{ROLE_ENCODED}+salary+{LOCATION_ENCODED}+site:glassdoor.com/Salaries" \
"You are on Google search results. Find the most relevant Glassdoor salary page for {ROLE} in {LOCATION} and click it.
On the Glassdoor salary page extract:
- Median base salary
- Salary range (low to high)
- Number of salary reports
- Additional pay (bonus, profit sharing) range if shown
- Top companies paying for this role if listed
STRICT RULES:
- Click only the first Glassdoor salary result
- Do NOT click any other links after landing on Glassdoor
- Read only the aggregate salary data visible on the page
- If the page asks you to sign in, extract whatever is visible before the gate
Return JSON: {median_base, salary_low, salary_high, report_count, additional_pay_range, top_companies: [{company, salary}]}" \
--sync > /tmp/sal_glassdoor.json &
# Agent 3 — LinkedIn Jobs (extract posted salary ranges from active listings)
tinyfish agent run \
--url "https://www.linkedin.com/jobs/search/?keywords={ROLE_ENCODED}&location={LOCATION_ENCODED}&f_SB2=1&sortBy=DD" \
"You are on LinkedIn job search results for {ROLE} in {LOCATION}, filtered to show salary information, sorted by date.
For each job listing card visible on the page:
- Click into the listing to open the job detail panel on the right
- Look for the salary range in the detail panel (often shown near the top under the job title)
- Extract: job title, company name, salary range, employment type
- Go back to the listing and repeat for the next one
STRICT RULES:
- Only extract listings that show an explicit salary — skip those without
- Maximum 10 listings then stop
- Do NOT navigate away from the search results page
Return JSON array: [{title, company, salary_range, employment_type}]" \
--sync > /tmp/sal_linkedin.json &
# Agent 4 — Indeed salaries
tinyfish agent run \
--url "https://www.indeed.com/career/{ROLE_INDEED}/salaries?from=top_sb&l={LOCATION_ENCODED}" \
"You are on Indeed's salary page for {ROLE} in {LOCATION}.
Extract:
- Average base salary
- Salary range (low to high)
- Number of salary reports
- Salary by experience level (if shown: entry, mid, senior)
- Top paying companies for this role (if listed)
STRICT RULES:
- Do NOT click any links
- Read only the aggregate data on this page
Return JSON: {average_salary, salary_low, salary_high, report_count, by_experience: [{level, salary}], top_companies: [{company, salary}]}" \
--sync > /tmp/sal_indeed.json &
wait
echo "=== LEVELS ===" && cat /tmp/sal_levels.json
echo "=== GLASSDOOR ===" && cat /tmp/sal_glassdoor.json
echo "=== LINKEDIN ===" && cat /tmp/sal_linkedin.json
echo "=== INDEED ===" && cat /tmp/sal_indeed.json
実行する前に、以下を置き換えてください。
{ROLE}— 人が読みやすい職種名。例:Senior Software Engineer{ROLE_ENCODED}— URL エンコードした職種名。例:Senior%20Software%20Engineer{ROLE_SLUG}— Levels.fyi のスラッグ。例:software-engineer{ROLE_INDEED}— Indeed 形式の職種名。例:software-engineer{LOCATION}— 例:London、Singapore{LOCATION_ENCODED}— URL エンコードした勤務地。例:London%2C%20England{COUNTRY}— Levels.fyi 用の国コード。例:GB、SG、US
ステップ 3 — 市場の全体像をまとめる
すべての情報源のデータを統合し、全体の給与レンジを算出します。
## Salary Market Report — {ROLE} · {LOCATION}
*Live data scraped from Levels.fyi, Glassdoor, LinkedIn, and Indeed*
*{date} · Based on {N} total data points*
---
### 💰 Compensation Summary
| | Low | Median | High |
|---|---|---|---|
| **Base Salary** | {low} | {median} | {high} |
| **Total Comp** (incl. bonus/equity) | {low} | {median} | {high} |
> All figures in {CURRENCY}. "Total comp" includes base + annual bonus + annualized equity where data is available.
---
### 📊 By Experience Level
| Level | Typical Base |
|---|---|
| Entry (0-2 yrs) | {range} |
| Mid (3-5 yrs) | {range} |
| Senior (6+ yrs) | {range} |
| Staff / Principal | {range} |
*(Skip levels where no data was found)*
---
### 🏢 What Companies Are Posting
From active LinkedIn job listings with disclosed salaries:
| Company | Role | Posted Range |
|---|---|---|
| {company} | {title} | {range} |
---
### 🏆 Top Paying Companies
*(From Levels.fyi and Glassdoor)*
| Company | Median Base | Median Total |
|---|---|---|
| {company} | {base} | {total} |
---
### 📈 Market Signals
{2-3 sentences on what the data says about this market — is it competitive, is there a wide spread, are companies being transparent about pay?}
---
### 🔍 Data Sources
- Levels.fyi: {sample_size} data points / not found
- Glassdoor: {report_count} salary reports / not found
- LinkedIn: {N} active listings with disclosed salaries
- Indeed: {report_count} salary reports / not found
例外ケース
- Levels.fyi にこの勤務地のデータがない — Glassdoor と Indeed を中心にし、Levels.fyi は米国の大手テック企業に偏っていることを注記します
- 職種名が一般的でない — よく使われる別の表現を試します(例:「ML Engineer」→「Machine Learning Engineer」、「AI Engineer」)
- 勤務地が小都市 — 国全体または最寄りの主要都市に対象を広げ、変更したことを注記します
- リモート職 — ユーザーの国と米国市場の両方をスクレイピングし、両方を提示します(リモート求人では米国の給与レンジが使われることがよくあります)
- テック以外の職種 — テック職のみを対象とする Levels.fyi は除外し、Glassdoor と Indeed を利用します
- 給与が異なる通貨で表示されている — 現地通貨に換算し、使用した換算レートを注記します
- 自分の給与が競争力のある水準かユーザーが尋ねている — データを提示した後、現在の給与を尋ね、率直に評価します