关于 salary-market-scanner
salary-market-scanner 是面向薪酬调研的技能,通过实时抓取招聘网站和薪资数据库,汇总特定职位与地点的薪酬信息。它要求先检查 TinyFish CLI 与认证状态,并按地区选择数据来源。
主要功能
- 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。数据来源因地点而异——请纳入最相关的来源。
# 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 使用的 slug,例如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
- 薪资以不同货币显示 — 统一换算为当地货币,并注明所用汇率
- 用户询问自己的薪资是否有竞争力 — 呈现数据后,询问用户目前的收入并给出直接评价
评论
支持 Markdown